題目鏈接:
知識點:
- where查詢條件,on內外連接時候用,as作爲別名,in查詢某值是否在某條件裏
- INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。
- LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。
- RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊表無對應數據。
其中還有一個模糊的知識:在牛客上看到的評論
注意on與where有什麼區別,兩個表連接時用on,在使用left jion時,on和where條件的區別如下:
- on條件是在生成臨時表時使用的條件,它不管on中的條件是否爲真,都會返回左邊表中的記錄。
- where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不爲真的就全部過濾掉。
看到這裏可能會對on有一點點疑惑:
可以參考我的demo代碼:https://blog.csdn.net/weixin_43900387/article/details/104460594
題目描述
查找所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
用到左連接:左連接的知識點參考上方總結
SELECT
e.last_name,e.first_name,d.dept_no
FROM
employees e
LEFT JOIN
dept_emp d
ON
e.emp_no = d.emp_no;
以上參考了牛客網的一個牛友的知識點:
https://www.nowcoder.com/questionTerminal/dbfafafb2ee2482aa390645abd4463bf?f=discussion