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