用两个表(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
总结:在查询的时候,以left join 这个关键字左边的表为主表,会将这个表中的数据所有查询出来,若是右表中没有这条数据,则用NULL字段表示.
右外链接:
右外链接:right outer join
select * from A right outer join B on 条件;
总结:在查询的时候,会以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;
查询结果:
总结:能够将一条查询语句做为另一个查询语句的条件和表,再次进行查询.