一、等值连接
原理:将多张单表组成一张逻辑大表
语法:
select * from 表A,表B where 表A.主键=表B.外键 and 查询条件
select * from 表A,表B where 表A.主键=表B.外键 and C.主键=B.外键 and 查询条件
二、内连接
先判断,再连接
内连接的结果和等值连接的结果一样
语法: 两张表
select *
from 表A inner join 表B
on 表A.主键=表B.主键
where 查询条件
语法: 三张表
select *
from 表A inner join 表B
on 表A.主键=表B.主键
inner join 表C
on 表C.主键=表B.主键
where 查询条件
例子:
1) 内连接
select a.*,b.* from a inner join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
select a.*,b.* from a inner join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
三、嵌套查询(子查询)
原理:将多个单表查询的SQL语句拼接在一起
单表查询结果
单个值:=、!=、>、>=、<、<=
多个值:用集合 in、not in
select *
from 表名
where 字段 in (select * from 表名
where 字段 = '**' ) and 字段2 = (
select * from 表名 where 字段 = '**' )
例子:
-------------------------------------------------
a表 id name b表 id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在关系
-------------------------------------------------
a表 id name b表 id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在关系
四、左外连接
LEFT JOIN 或 LEFT OUTER JOIN
select a.*,b.* from a left join b on a.id=b.parent_id
结果是1 张3 1 23 12 李四 2 34 23 王武 null
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
五、右外连接
RIGHT JOIN 或 RIGHT OUTER JOIN
select a.*,b.* from a right join b on a.id=b.parent_id
结果是1 张3 1 23 12 李四 2 34 2null 3 34 4
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。。
六、完全连接
FULL JOIN 或 FULL OUTER JOIN
select a.*,b.* from a full join b on a.id=b.parent_id
结果是1 张3 1 23 12 李四 2 34 2null 3 34 43 王武 null
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。