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;