前言:
项目中很多的sql都会涉及到多表的关联查询,如果我们对表关联不熟悉,就很难写出准确的sql语句。首先看一张经典的表关联图
通过这张图,我们能初步的对表关联有个了解。下面本文会通过实际案例来介绍各个表关联方式的使用。
数据准备:
部门表 用户表
一、内连接
内连接是比较常用的连接方式,它取的是两个表的交集;关键字:INNER JOIN 可简写成 JOIN
SELECT * FROM tb_user A JOIN tb_dept B ON A.dept_id = B.id;
二、左连接
左连接是我们最常用的一种连接;关键字:LEFT OUTER JOIN 可简写成 LEFT JOIN
它是以A为主表,B为副表关联查询,查询结果以A表数据为基准;
SELECT * FROM tb_user A LEFT JOIN tb_dept B ON A.dept_id = B.id;
* 如果想要筛选 A表中的数据但又不存在B表的关联数据,可以这样写(常用于查询脏数据):
SELECT * FROM tb_user A LEFT JOIN tb_dept B ON A.dept_id = B.id where B.id IS NULL;
三、右连接
右连接我们不太常用,因为它可以被左连接取代,只需要把左连接的两个关联表替换一下位置即可实现右连接的效果;
它是以B为主表,A为副表关联查询,查询结果以B表数据为基准;关键字:RIGHT OUTER JOIN 可简写成 RIGHT JOIN
SELECT * FROM tb_user A RIGHT JOIN tb_dept B ON A.dept_id = B.id;
四、其他
还有一种连接方式也很常用 【逗号分隔表】,关联条件需写在WHERE中。
有关联条件时,其查询结果与内连接相同 ;无关联条件时,其结果集为两表的笛卡尔积。
SELECT * FROM tb_user A, tb_dept B WHERE A.dept_id = B.id;
拓展
表关联中的 WHERE 和 ON的区别:
ON:针对关联表进行条件筛选,不会影响结果集的数量和主表数据。
WHERE:针对结果集进行条件筛选,会影响结果集的数量。
看例子很好理解:
1)条件放在ON条件中
2)条件放在WHERE 条件中
看完本文是不是对表关联更加理解了呢,如果本文有不对的地方,欢迎指正。