SQL进阶:not exists谓词

目录

1、查询所有科目成绩都在50分以上的学生学号

[2、查询数学分数在80分及以上的,语文分数在50分及以上的 学生ID](#2、查询数学分数在80分及以上的,语文分数在50分及以上的 学生ID)


not exists:习惯"肯定<==>双重否定"之间的转换

1、查询所有科目成绩都在50分以上的学生学号

sql 复制代码
CREATE TABLE `test_scores` (
	`student_id` INT(10) NULL DEFAULT NULL COMMENT '学生ID',
	`subject` VARCHAR(50) NULL DEFAULT NULL COMMENT '课程' COLLATE 'utf8mb4_0900_ai_ci',
	`score` INT(10) NULL DEFAULT NULL COMMENT '成绩'
)
COMMENT='学生考试成绩表(肯定与双重否定之间的转换)'
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;

录入数据:

所有成绩都是50分以上,双重否定就是:没有一科成绩是在50分以下的:

sql 复制代码
SELECT DISTINCT student_id FROM test_scores a
WHERE 
NOT EXISTS (SELECT 1 
            FROM test_scores b 
            WHERE a.student_id = b.student_id 
            AND b.score < 50)

执行结果:

2、查询数学分数在80分及以上的,语文分数在50分及以上的 学生ID

双重否定就是:不存在数学分数在80分以下的或语文分数在50分以下的。

sql 复制代码
SELECT DISTINCT student_id FROM test_scores a 
WHERE SUBJECT IN ('数学','语文')
AND  NOT EXISTS 
(SELECT 1 FROM test_scores b WHERE a.student_id = b.student_id 
AND 1 = case when SUBJECT = '数学' AND score < 80 then 1
			 when SUBJECT = '语文' AND score < 50 then 1 ELSE 0 END 
)
相关推荐
我不会插花弄玉4 小时前
13. 用户管理【由浅入深-MySQL】
1024程序员节
努力努力再努力wz5 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
NoteStream6 小时前
【C语言入门10】指针(1)
1024程序员节
晚风吹北巷6 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
艾络迅Acceleronix6 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
唯鹿6 小时前
AI生成UI代码实践(二)—— Figba 更新月记
ui·ai·figma·1024程序员节·蓝湖
yqj2346 小时前
FunASR安装
1024程序员节
by209996 小时前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节
2601_962885726 小时前
Tushare 前复权回测对不上/不可复现?前复权陷阱与正确做法
1024程序员节
无足鸟ICT7 小时前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节