MySQL数据库(10)----IN 和 NOT IN 子查询
2016-07-28 10:27
489 查看
当子查询要返回多个行来与外层查询进行比较运算时,可以使用运算符 IN 和 NOT IN。它们会测试某个给定的比较值是否存在于某一组值里。如果外层查询里的行与子查询返回的某一个行相匹配,那么 IN 的结果为真。如果外层查询里的行与子查询返回的所有行都不匹配,那么 NOT IN 的结果为真。
1. 下面两条语句分别使用 IN 和 NOT IN 来查找那些在 absence 表里有缺勤记录的学生和没有缺勤记录的学生:
mysql> SELECT * FROM student WHERE student_id IN (SELECT student_id FROM absence); Empty set (0.05 sec)
没有结果,说明全部学生都是满勤,可以用下面的语句来验证:
mysql> SELECT * FROM student WHERE student_id NOT IN (SELECT student_id FROM absence); +--------+-----+------------+ | name | sex | student_id | +--------+-----+------------+ | Jim | M | 1 | | Tom | M | 2 | | Travis | M | 5 | | Steve | M | 6 | | Hellen | M | 7 | | Julian | M | 8 | | Lily | F | 9 | +--------+-----+------------+
2. IN 和 NOT IN 还可以用于返回多个列的子查询。也就是说,可以把它们与表的子查询一起使用。此时,需要使用一个行构造器来指定与各列进行测试的比较值。
mysql> SELECT last_name, first_name,city,state FROM president -> WHERE (city,state) IN -> (SELECT city,state FROM president -> WHERE last_name = 'Roosevelt');
这条查询的意思是找出 president 表里与 ‘Roosevelt’ 是同乡的那些人。
相关文章推荐
- MySQL 5.7并行复制时代
- Mysql行号
- mysql 字符集(CHARACTER SET)和校对集(COLLATE)
- mysql UNIX时间戳与日期的相互转换
- mysql5.7.13二进制包安装多实例
- Hibernate+Mysql写数据库的中文乱码问题
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- MySQL快速复制数据库的方法
- Mysql的基本操作命令 (转载)
- MySQL 配置优化
- linux下C语言编程操作MySQL数据库
- MySql中表单输入数据出现中文乱码的解决方法
- mysql自动安装脚本
- mysql常用操作指令总结
- Mysql5.7初始化成空密码或随机密码的方式
- MySQL 5.7.13解压版安装记录 mysql无法启动教程
- MySQL— processlist中哪些状态要引起关注
- 通过JDBC进行简单的增删改查(以MySQL为例)
- mysql插入表中的中文显示为乱码或问号的解决方法
- mysql中的函数 存储过程和触发器