IN 可以在 WHERE 子句中过滤某个字段的多个值
#where子句使用in语法
SELECT column_name FROM table_name WHERE column_name IN(value1, value2, …)
如果运算符 in 后面的值是来源于某个查询结果,并非是指定的几个值,这时就需要用到子查询。子查询又称为内部查询或嵌套查询,即在 SQL 查询的 WHERE 子句中嵌入查询语句
#子查询in语法
SELECT column_name FROM table_name WHERE column_name IN( SELECT column_name FROM table_name [WHERE] );
EXISTS是子查询中用于测试内部查询是否返回任何行的布尔运算符。将主查询的数据放到子查询中 做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否保留
#where子句使用exists语法
SELECT column_name1 FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE condition);
WHERE语句查询
- 查找score(B)表中有的student(A)表中的数据(所有选修了课程的学生)
SELECT A.*
FROM student A
WHERE A.stu_no IN(SELECT B.stu_no FROM score B);
- 查找A表中离散数学有成绩的人
SELECT A.*
FROM student A
WHERE A.stu_no IN(SELECT B.stu_no FROM score B WHERE B.course='离散数学');
EXISTS语句查询
- 查找所有选修了课程的学生
SELECT A.*
FROM student A
WHERE EXISTS(SELECT * FROM score B WHERE A.stu_no=B.stu_no);
- EXISTS也可以查没有选修课程的学生
SELECT A.*
FROM student A
WHERE NOT EXISTS(SELECT * FROM score B WHERE A.stu_no=B.stu_no);