MySQL子查询EXISTS和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是子查询中用于测试内部查询是否返回任何行的布尔运算符。将主查询的数据放到子查询中 做条件验证,根据验证结果(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);

查询结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值