1、准备数据表和数据
CREATE TABLE `exam` (
`examid` int(11) NOT NULL AUTO_INCREMENT,
`studentId` varchar(20) NOT NULL,
`subjectId` varchar(20) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`examid`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
-- 因为主键是自增的所以不需要我们进行维护
INSERT INTO exam VALUES (NULL,'123456',1,60),(NULL,'126556',1,75),(NULL,'12156',2,93),(NULL,'654054',1,86),(NULL,'652314',2,80),(NULL,'645874',2,95),(NULL,'654321',2,93)
2、ALL 用在子查询前,通过比较运算符将一个表达式或列的值与子查询返回的一列值中的每一行进行比较,只要有一次比较的结果为 FALSE,则 ALL 测试返回 FALSE。
案例一:查询成绩比科目编号为“1”的这门课程的所有成绩都大的学生考试信息
SELECT * FROM exam WHERE score> ALL(SELECT score FROM exam WHERE subjectId=1)
说明:>ALL 表示大于每一个值。换句话说,它表示大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。
3、ANY 与子查询在一起使用时,按照比较运算符、表达式或字段对子查询的结果的每一行进行一次计算和比较。只要有一次满足条件,那么 ANY 的结果就是真。
案例二:查询成绩比科目编号为“1”的任意一个成绩都大的考试信息
SELECT * FROM exam WHERE score> ANY(SELECT score FROM exam WHERE subjectId=1)
注意:"=ANY"运算符与"IN"等效。"< >ANY"运算符则不同于"NOT IN"。"< >ANY(A,B,C)" 表示不等于 A,或者不等于 B,或者不等于 C。"NOT IN(A,B,C)“表示不等于 A、不等于 B 并且不等于 C。”< >ALL"与"NOT IN"表示的意思相同
4、some和any的用法一样,这里就不过多介绍了。