1.1 什麼是join
查詢?
join
查詢,即連接查詢,當我們需要查詢兩張或兩張以上表的關聯數據的時候就需要使用連接查詢,數據庫中的連接查詢分爲:內連接查詢(INNER JOIN
)、左外連接查詢(LEFT OUTER JOIN
或 LEFT JOIN
)、右連接查詢(RIGHT OUTER JOIN
或RIGHT JOIN
)以及全連接查詢(FULL OUTER JOIN
)。
1.2 內連接、外連接、全連接查詢之間的區別是什麼?
類型 | 描述 | 圖示 |
---|---|---|
INNER JOIN | 內連接查詢,會把關聯表中,有關聯關係的所有記錄查詢出來 | |
LEFT JOIN | 左連接查詢,它會以左表爲主表,並且會將左表中的所有記錄查詢出來,如果右表沒有與之對應關聯數據,則用NULL 填充指定字段 |
|
RIGHT JOIN | 右連接查詢,它會以右表爲主表,並且會將右表中的所有記錄都查詢出來,如果左表中沒有與之對應的關聯數據,則用NULL 填充左表中的指定字段 |
|
FULL OUTER JOIN | 全連接查詢,會將關聯表中的所有數據都查詢出來 |
1.3 常見的七種join
查詢
1.3.1 使用mysql實現以上七種join
查詢
部門表
SELECT * FROM tbl_dept;
查詢結果:
員工表
SELECT * FROM tbl_emp;
查詢結果:
1.3.1.1 內連接查詢
#內連接查詢 查詢兩張表都有的記錄
SELECT * FROM tbl_dept dept
INNER JOIN tbl_emp emp
ON dept.id=emp.id;
查詢結果:
1.3.1.2 左連接查詢
#左連接查詢 只查詢左表中有的記錄
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId;
查詢結果:
1.3.1.3 右連接查詢
#右連接查詢
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId;
查詢結果:
1.3.1.4 只查詢左表中獨有的數據
#查詢dept表中獨有的記錄
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE emp.deptId IS NULL;
查詢結果:
1.3.1.5 只查詢右表中獨有的數據
#查詢emp表中獨有的記錄
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE dept.id IS NULL;
查詢結果:
1.3.1.6 全連接查詢
注意:
因爲mysql不支持full outer join所以通過union實現全連接查詢
#把兩張表中的記錄都查詢出來 並進行去重 因爲mysql不支持full outer join所以通過union實現全連接查詢
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
UNION
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId;
查詢結果:
1.3.1.7 查詢兩張表中各自獨有的數據
#查詢兩張表中所有沒有關聯關係的記錄
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE emp.deptId IS NULL
UNION
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE dept.id IS NULL;
查詢結果: