五种关联查询:
1. 交叉连接(CROSS JOIN)
2. 内连接(INNER JOIN)
3. 外连接(LEFT JOIN/RIGHT JOIN)
4. 联合查询(UNION 与 UNION ALL)
5. 全连接(FULL JOIN)
- 交叉连接(没有任何关联条件,查询所有表)
或者 :select * form a,b,c
select * from a cross join b cross join c
- 内连接(多表中同时符合某种条件的数据记录的集合)
或者 :select * from a,b where a.id = b.id
分析 :select * from a inner join b on a.id = b.id
内连接分为三类select * from 表1 inner join 表2 on 条件
①等值连接: on a.id = b.id ②不等值连接 : on a.id > b.id ③自连接: select * from a as a1 inner join a as a2 on a.id = a2.pid [自连接就是自己连接自己 条件id和pid]
INNER JOIN 可以缩写为 JOIN
-
外连接
左外连接:
LEFT OUTER JOIN 缩写 LEFT JOIN
右外连接:以左表为主,先查询出左表,按照ON之后关联条件匹配右表,没有匹配到的用NULL填充
RIGHT OUTER JOIN 缩写 RIGHT JOIN
以右表为主,先查询出右表,按照ON之后关联条件匹配左表,没有匹配到的用NULL填充
- 联合查询
表的数据结构一定要一样,把多个结果集集中到一起,UNION前的结果为基准
union 相同的记录行会合并
union all 不会合并重复的记录行
- 全连接( 完整外部连接返回左表和右表中的所有行)
mysql中不支持全连接,可以使用LEFT JOIN 和 UNION 和 RIGHT JOIN 联合使用
select * from A left join B on A.id = b.id union select * from a right join on a.id = b.id