MYSQL-子查询
一、子查询 in
运算符 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
EXISTS是子查询中用于测试内部查询是否返回任何行的布尔运算符。
将主查询的数据放到子查询中 做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否保留。
#where子句使用exists语法
SELECT column_name1 FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE condition);
三、实例
IN:
查询选修了课程的学生信息
SELECT A.*
FROM student A
WHERE A.stu_no in (
SELECT B.stu_no FROM score B
);
查询选修了离散数学的学生信息
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 B.stu_no FROM score B WHERE B.STU_NO=A.stu_no);
查询未选修课程的学生信息
SELECT A.* FROM student A WHERE not EXISTS (select B.stu_no FROM score B WHERE B.STU_NO=A.stu_no);