赞
踩
本篇大部分内容摘自:https://blog.csdn.net/plg17/article/details/78758593
多表查询前先根据目标厘清如下思路:
①确定表(从哪些表中查?);from 表1,表2
②确定连接条件:where/on
③确定筛选出哪些列:select 列
一、内连接
1)、隐式内连接
首先得澄清一个概念:笛卡尔积:有两个表,A和B,聚合这两个表的所有组成情况(比如A有4条数据,B有3条数据),也即构成了一个新的表(包含有4*3=12条数据)如下图所示;
隐式内连接:就是使用where条件,消除不符合条件的无用数据(消除笛卡尔积的无用数据)。
select 列 1,列2 from 表1,表2 where 条件 ;
2)、显示内连接
关键字:inner join on
语句:select * from a_table a inner join b_table bon a.a_id = b.b_id;
执行结果:
说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。
二、左连接(左外连接)
关键字:left join on / left outer join on
语句:select * from a_table a left join b_table bon a.a_id = b.b_id;
执行结果:
说明:
left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
三、右连接(右外连接)
关键字:right join on / right outer join on
语句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;
执行结果:
说明:
right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
四、全连接(全外连接)
MySQL目前不支持此种方式,可以用其他方式替代解决。
五、子查询
查询中嵌套查询,称嵌套的查询为子查询。
分三种情况:
子查询的结果是:
–单行单列:子查询作为作为一个值,可以用到外层查询语句中去;比如:“where 某字段 < 子查询 "
–多行单列:子查询结果作为一个单列集合,用到外层查询语句中,比如” where 某字段 IN(子查询) "
–多行多列:子查询结果作为一个表;可以将子查询整条语句当作一张表的表名来用(子查询用小括号()括住),,比如" select * from 表a,(子查询语句) where 条件;“
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。