mysql数据库中的多表查询(内链接,外链接,子查询)

用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内链接、外链接( 左(外)链接、右(外)链接、全(外)链接)。数据库

MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)spa

数据库表:a_table、b_tablecode

主题:内链接、左链接(左外链接)、右链接(右外链接)、全链接(全外链接)blog

表为:ci

   

内链接:it

1. 交叉链接查询(基本不会使用-获得的是两个表的乘积) (这种查询时候会产生笛卡尔积)
语法: select * from A,B;
2. 内链接查询(使用的关键字 inner join -- inner能够省略)
隐式内链接: select * from A,B where 条件;
显示内链接: select * from A inner join B on 条件;io

执行语句为:select * from a_table a inner join b_table bon a.a_id = b.b_id;table

总结:当且仅当两个表中的数据都符合on后面的条件的时候,才会被select出来.class

左链接:select

外链接查询(使用的关键字 outer join -- outer能够省略)
左外链接:left outer join

语句:select * from a_table a left join b_table bon a.a_id = b.b_id;
执行结果:

总结:在查询的时候,以left join 这个关键字左边的表为主表,会将这个表中的数据所有查询出来,若是右表中没有这条数据,则用NULL字段表示.

右外链接:

右外链接:right outer join
select * from A right outer join B on 条件;

语句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;
执行结果:

总结:在查询的时候,会以right join 这个关键字右边的表为主,而后将符合条件的查询出来,左表中没有的字段,使用NULL进行补充

全链接(全外链接)

MySQL目前不支持此种方式,能够用其余方式替代解决。

子查询:

子查询:一条select语句结果做为另外一条select语法一部分(查询条件,查询结果,表等)。

语法: select ....查询字段 ... from ... 表.. where ... 查询条件

#3 子查询, 查询“化妆品”分类上架商品详情
#隐式内链接
SELECT p.*
FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = '化妆品';
#子查询
##做为查询条件
SELECT *
FROM products p
WHERE p.category_id =
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品'
);
##做为另外一张表
SELECT *
FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c
WHERE p.category_id = c.cid;

查询结果:

总结:能够将一条查询语句做为另一个查询语句的条件和表,再次进行查询.

相关文章
相关标签/搜索