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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值