不积跬步,无以至千里。
”
- 今天给大家分享的是SQL的EXISTS子查询和IF条件查询语句。
EXISTS
EXISTS子查询
- EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值TRUE或FALSE。
- 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 '电影'