Mysql的多表关联查询

前言:

项目中很多的sql都会涉及到多表的关联查询,如果我们对表关联不熟悉,就很难写出准确的sql语句。首先看一张经典的表关联图

 通过这张图,我们能初步的对表关联有个了解。下面本文会通过实际案例来介绍各个表关联方式的使用。

数据准备:

http://note.youdao.com/noteshare?id=a71546c2513f34d2a9fe8dc8d37848c0&sub=988AD7503AE44038948230D3F1307D08

部门表  用户表  

一、内连接

内连接是比较常用的连接方式,它取的是两个表的交集;关键字: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 条件中 

 

看完本文是不是对表关联更加理解了呢,如果本文有不对的地方,欢迎指正。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章