Mysql7種join連接

Join圖:



Sql如下:
1)左外連接,以左邊的表爲主,左連接即左邊的表獨有+左邊表和右邊表共有數據 
SELECT * FROM dept t
LEFT JOIN emp t2 
ON t.`id_dept` = t2.`id_dept`;


2)右外連接,以右表的表爲主,右連接即右邊表獨有+右邊和左邊共有數據

SELECT * FROM dept t

RIGHT JOIN emp t2 

ON t.`id_dept` = t2.`id_dept`;


3)內連接,也叫自然連接同時也叫全等連接,即左邊表和右邊表共有數據的查詢

SELECT * FROM dept t

INNER JOIN emp t2

ON t.`id_dept` = t2.`id_dept`;


4)左連接,即查詢左邊表的獨有數據
SELECT * FROM dept t
LEFT JOIN emp t2 
ON t.`id_dept` = t2.`id_dept` 
WHERE t2.`id_dept` IS NULL;


5)右連接,即查詢右邊表獨有數據
SELECT * FROM dept t
RIGHT JOIN emp t2 
ON t.`id_dept` = t2.`id_dept` 
WHERE t.`id_dept` IS NULL;


6)全連接,即左邊表數據+右邊表數據+左邊表和右邊表共有數據查詢

SELECT * FROM dept t

LEFT JOIN emp t2

ON t.`id_dept` = t2.`id_dept`

UNION

SELECT * FROM dept t

RIGHT JOIN emp t2

ON t.`id_dept` = t2.`id_dept`;

UNION 用於合併兩個或多個 SELECT 語句的結果集,並消去表中任何重複行。

UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有相似的數據類型。

同時,每條 SELECT 語句中的列的順序必須相同.


7)全外連接,即左右表的共有數據之外的數據查詢

SELECT * FROM dept t

FULL OUTER emp t2

ON t.`id_dept` = t2.`id_dept`

WHERE t.`id_dept` IS NULL

OR t2.`id_dept` IS NULL;  --mysql不支持這種連接的語法

SELECT * FROM dept t

LEFT JOIN emp t2

ON t.`id_dept` = t2.`id_dept`

WHERE t2.`id_dept` IS NULL

UNION

SELECT * FROM dept t

RIGHT JOIN emp t2

ON t.`id_dept` = t2.`id_dept`

WHERE t.`id_dept` IS NULL;


oracle 的sql如下:

------------------自然連接  把一張表當兩張表用
select  e1.ename ,e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno ) ; 


select ename,dname from emp join dept on (emp.deptno=dept.deptno);
---等值連接的簡潔寫法:
select ename ,dname from emp join dept using (deptno);

---外連接:
--左外連接
select  e1.ename ,e2.ename from emp e1 left  join emp e2 on (e1.mgr = 

e2.empno ) ;
select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno(+);

--右外連接:
select  e1.ename ,e2.ename from emp e1 right  join emp e2 on (e1.mgr = 


e2.empno ) ;
select  e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr(+) = e2.empno;





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