【數據庫SQL實戰】查找所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工

題目鏈接:

https://www.nowcoder.com/practice/dbfafafb2ee2482aa390645abd4463bf?tpId=82&tqId=29757&tPage=1&rp=&ru=%2Fta%2Fsql&qru=%2Fta%2Fsql%2Fquestion-ranking 

知識點: 

  1. where查詢條件,on內外連接時候用,as作爲別名,in查詢某值是否在某條件裏
  2. INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。
  3. LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。
  4. RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊表無對應數據。

 其中還有一個模糊的知識:在牛客上看到的評論

 注意on與where有什麼區別,兩個表連接時用on,在使用left  jion時,on和where條件的區別如下:

  1.  on條件是在生成臨時表時使用的條件,它不管on中的條件是否爲真,都會返回左邊表中的記錄。
  2.  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 

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