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