SQL之EXISTS子查询和IF条件查询

不积跬步,无以至千里。
  • 今天给大家分享的是SQL的EXISTS子查询和IF条件查询语句。

EXISTS

EXISTS子查询

  • EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值TRUEFALSE
  • EXISTS指定一个子查询,用于检测行的存在。当子查询的行存在时,则执行主查询表达式,否则不执行。

业务分析

  • 假如我的员工现在需要发薪资了,我现在需要生成2020年5月份的薪资记录表,但是我需要知道哪些人还没发
  • 这里涉及到两张表用户表和薪资记录表。用户表中储存的是所有的员工用户信息,而薪资主表(当然有个薪资明细表,这里没有用到)中储存着用户的Id,发放年份和月份;如果说薪资主表中,年份为2020且月份为5的数据,那么这些肯定是已经发的了。
  • 这里就需要用到子查询EXISTS。

EXISTS语句

  • SQl语句如下
SELECT
 u.Id,
 u.Email 
 FROM [dbo].[User] u
 LEFT JOIN [dbo].[Salary] s ON s.UserId=u.Id
 WHERE NOT EXISTS(SELECT * FROM Salary  WHERE s.PublishYear=2020 and s.PublishMonth=5)
  • 这里用到是NOT EXISTS也就是没有的时候会执行主查询。Publish是发布,发放的意思,易与惩罚Punish混淆。

也可以使用IN查询

SELECT
 u.Id,
 u.Email 
 FROM [dbo].[User] u
 LEFT JOIN [dbo].[Salary] s ON s.UserId=u.Id
 WHERE u.Id NOT IN (SELECT UserId FROM Salary  WHERE s.PublishYear=2020 and s.PublishMonth=5)
  • IN主要用于主查询结果较大时,子查询较小,俗称“外表大内表小”;EXISTS适用于主查询结果行数比较小,而子查询结果行数比较大的情况,俗称“外表小内表大”

IF

IF条件语句

  • IF条件语句,顾名思义,如果怎么样,那就怎么样,否则怎么样。
  • 语法格式是:IF(EXP1,EXP2,EXP3);意为:如果表达式1判断结果为TRUE,则返回结果为EXP2,否则返回结果为EXP3。(可内嵌套IF语句)

IF语句示例

SELECT 
IF( Count( wareout.Count ) > 0, IF ( wareout.Count < s.Count, '部分发货', '已发货' ), '未发货' ) AS Shipment
  • IF条件语句有点CASE WHEN的味道,它其实更多的相当于我们的switch,有了更多的选择。
SELECT
CASE CategoryId
WHEN 1 THEN '美食'
WHEN 2 THEN '酒店'
WHEN 3 THEN '电影'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值