前言:
一、连接:分成内连接和外连接,内连接相当于取交集,外连接相当于取并集
二、嵌套子查询:分成相关子查询和非相关子查询
关键词:
内连接:join,inner join
外连接:left join,left outer join,right join,right outer join,union
详解:
内连接:
内连接,就是合二为一,或将更多张表合在一起查
select
*
from
table_1,table_2 where ...
--上述代码与下面的等价
select
*
from
tab_a
inner join
tab_b
外连接:
左连接:
select
column_1, column_2
from
table_1 as a
left join
table_2 as b
on
a.id = b.id
这是获取了表a,也就是table_1的所有数据,
与满足条件a.id=b.id的b表,也就是table_2的部分数据
有时会加上where条件
右连接
select
a.column_1, b.column_2
from
table_1 as a
right join
table_2 as b
on
a.id = b.id
与左连接相反,得到的时b表,也就是table_2的所有数据,
加上满足条件的table_1的数据
要点:
重点是是用什么连接,需要考虑好哪个是主表,哪个是从表。假如还是使用左连接,结果会随表顺序的变化而变化。
-- 隐式内连接,相当于查询交集部分
select 字段 from table1,table2 where ...;
-- 显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
-- 左外连接:查询左表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
-- 右外连接:查询右表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
-- 自连接,自连接必须使用表别名
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;