Mysql 多表連接查詢 inner join 和 outer join 的使用


JOIN的含義就如英文單詞“join”一樣,連接兩張表,大致分為內連接,外連接,右連接,左連接,自然連接。這里描述先甩出一張用爛了的圖,然后插入測試數據。

 

首先先列舉本篇用到的分類(內連接,外連接,交叉連接)和連接方法(如下):

A)內連接:join,inner join

B)外連接:left join,left outer join,right join,right outer join,union

C)交叉連接:cross join

案例表:

t_users:

t_department:

第一種:內連接 inner join

內連接INNER JOIN是最常用的連接操作。從數學的角度講就是求兩個表的交集,從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄。

有INNER JOIN,WHERE(等值連接),STRAIGHT_JOIN,JOIN(省略INNER)四種寫法。

select d.id, d.department, t.name from t_users t
inner join t_department d on d.id = t.department_id

結果說明;只去表A表和B表共同有的on 條件部分數據;

第二種:外連接 left join,left outer join ,right join, right outer join, union

1)左連接LEFT JOIN的含義就是求兩個表A表和B表的交集外加左表剩下的數據。依舊從笛卡爾積的角度講,就是先從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表A表中剩余的記錄(見最后三條)。

where b.id is null

 

 

select   t.name, t.department_id, d.department from t_users t
left join t_department d on d.id = t.department_id

 

2)右連接 RIGHT JOIN

同理右連接RIGHT JOIN就是求兩個表A和B表的交集外加右表B剩下的數據。再次從笛卡爾積的角度描述,右連接就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上右表中剩余的記錄(見最后一條)

 

 where a.id is null

 

select   t.id userid,t.name, t.department_id, d.department from t_users t
right join t_department d on d.id = t.department_id

 3)外連接 FULL OUTER JOIN

外連接就是求兩個表A和B集合的並集。從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表中剩余的記錄,最后加上右表中剩余的記錄。另外MySQL不支持OUTER JOIN,但是我們可以對左連接和右連接的結果做 UNION 操作來實現。

情景一:A和B的並集

 

select   t.id userid,t.name, t.department_id, d.department from t_users t
left join t_department d on d.id = t.department_id
UNION
select   t.id userid,t.name, t.department_id, d.department from t_users t
right join t_department d on d.id = t.department_id

情景二:A和B中不滿足某個條件的記錄

如:即不在A表user里面;也不在B表department里面的數據;條件 is null

select   t.id userid,t.name, t.department_id, d.department from t_users t
left join t_department d on d.id = t.department_id
where d.id is null
UNION
select   t.id userid,t.name, t.department_id, d.department from t_users t
right join t_department d on d.id = t.department_id
where t.department_id is null

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM