SQL語句case when和JOIN的相關解析

case when 的用法:

SELECT id,name,
(CASE WHEN classid =2  THEN 1 WHEN classid =1 THEN 2 ELSE classid END) as A  FROM py1;

遇到 每一, 一定用 GROUP BY

CREATE TABLE sores (name char(3), sub char)

SELECT name,
max( CASE WHEN  name ='基'   THEN  sore ELSE NULL END)   as  '基',
max( CASE WHEN  name ='基'   THEN  sore ELSE NULL END)   as  '基',
max( CASE WHEN  name ='基'   THEN  sore ELSE NULL END)   as  '基',

FROM  scores  GROUP  BY  name;

JOIN的連接:

兩個有聯繫的表,可以連接

單純的只有JOIN的時候,ON條件可以和WHERE條件互換

stu表:
在這裏插入圖片描述
class表:
在這裏插入圖片描述
連接是多個表組成一個表

表JOIN表 : 一個表
在這裏插入圖片描述
表合併,若有相同的列,需要加 表.列
在這裏插入圖片描述

left join 和 join 的區別:
(1)left join必須有on條件
(2)left join會檢查左邊表的數據是否都包含在新生成的表中
如果是,與join沒有區別
如果不是,用NULL與不包含的行組成新行加入新表

class left join stu on classid=class.id
stu left join class on classid=class.id

left join 不能交換左右兩邊的表

right join和left join用法完全相同

多個表連接的情況:

A join B join C join D

(A join B) join (C join D)

left join 和 join 的使用場景:

stu表:
在這裏插入圖片描述
class表:
在這裏插入圖片描述
join的使用場景: 僅僅用where不足以篩選出所要表達的內容
例題:
查詢張三同學的班主任名稱:
select manager stu join class on classid=class id where stu.name=‘張三’

left join 的使用場景:所要選取的內容有的屬性爲空

class表:
在這裏插入圖片描述
stu表不變

例題: 哪些同學沒有班級?
select name where class.id is NULL from stu left join class on classid=class.id

join的案例:

兩個值做計較,只能出現在同一行的數據裏面。
employee表:
查詢
在這裏插入圖片描述
運行
employee AS e1 JOIN employee AS e_m2 ON e1.Managerid=e_m2.id 所得到的表:
在這裏插入圖片描述

SELECT e1.Name FROM employee AS e1 JOIN employee AS e_m2 ON e1.Managerid=e_m2.id where e1.Salary>e_m2.Salary
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章