IN-子查询
为什么需要子查询?
现实中,很多情况需要进行以下条件的判断
集合成员资格
某一元素是否是某一个集合的成员
集合之间的比较
某一个集合是否包含另一个集合
集合基数的测试
测试集合是否为空
测试集合是否存在重复元素
子查询定义
出现在 Where 子句中的 Select 语句被称为子查询(subquery),子查询返回了一个集合,可以通过与这个集合的比较来确定另一个查询集合。
基本语法
表达式 [not] in (子查询)
- 语法中,表达式最简单的形式就是列名或者常数
- 语义:判断某一表达式的值是否在子查询的结果中
例1
在一张表中查询tom、david同学的信息
+----------------+
| name |
+----------------+
| tom |
| david |
| lily |
| jony |
+----------------+
如果没有子查询,我们会这么写
mysql>select * from test where name='tom' or name ='david';
+----------------+
| name |
+----------------+
| tom |
| david |
+----------------+
使用子查询,我们可以这么写.此处直接使用了某一子查询的结果集合(该集合是已知的固定的)
mysql>select * from test where name in ("tom","david");
+----------------+
| name |
+----------------+
| tom |
| david |
+----------------+
例2
欲查询即学过课程001 又学过课程002的同学
+----------------+------------------+
| name | course |
+----------------+------------------+
| tom | 001 |
| tom | 002 |
| david | 001 |
+----------------+------------------+
如果没有子查询,可能会这么写
select t1.name
from test as t1, test as t2
where t1.name = t2.name
and t1.course='001'
and t2.course='002'
+----------------+
| name |
+----------------+
| tom |
+----------------+
实际上是表对自身做了笛卡儿积
+----------------+------------------+----------------+------------------+
| name | course | name | course |
+----------------+------------------+----------------+------------------+
| tom | 001 | tom | 001 |
| tom | 002 | tom | 001 |
| david | 001 | tom | 001 |
| tom | 001 | tom | 002 |
| tom | 002 | tom | 002 |
| david | 001 | tom | 002 |
| tom | 001 | david | 001 |
| tom | 002 | david | 001 |
| david | 001 | david | 001 |
+----------------+------------------+----------------+------------------+
然后再进行了挑选。
使用子查询改写
select name
from test
where course = '001'
and name in
(
select name
from test
where course = '002'
)
查询结果
+----------------+
| name |
+----------------+
| tom |
+----------------+
这里的逻辑是:从选修了002课程的学生中再选出选修了001课程的同学,思路更加清晰。
IN-子查询的更多相关文章
- 深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- 在SQL Server中为什么不建议使用Not In子查询
在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下 下面 ...
- 读书笔记--SQL必知必会11--使用子查询
11.1 子查询 查询(query),任何SQL语句都是查询.但此术语一般指SELECT语句. SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询. 作为子查询的SELECT语句只能 ...
- 你真的会玩SQL吗?无处不在的子查询
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5* ...
- Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页
GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group ...
- [转]HQL中的子查询
原文地址:http://blog.csdn.net/xb12369/article/details/8638683 子查询: 子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一 ...
- MySQL 子查询与连接操作笔记
SQL语句之间是可以进行连接操作的,在一些复杂的数据操作中必须用到连接操作.简单的说就是一个SQL语句的结果可以作为相连接的SQL操作的一部分.SQL结构化查询语句,子查询是指的所有的SQL操作,并非 ...
随机推荐
- Linux搜索文件、文件夹数、文件个数命令
1.查看某文件夹下文件的个数:ls -l|grep "^-"|wc -l 2.查看某文件夹下文件目录的个数:ls -l|grep "^d"|wc -l 3.查看 ...
- 使用serialize时多数据传递
class CartList(APIView): #定义编辑方法 def post(self,request): username = request.POST.get('username') # p ...
- python之json模块
#!/usr/bin/python # -*- coding: UTF- -*- ''' )序列化相关 json pickle (序列化是指将) 序列化是指将一个字符串转换成基础数据类型或者基础数据类 ...
- 手把手教你发布一个Python包
本文主题如下: 编写一个包(Python 源代码),但不是本文的重点. 编译包,观察编译后的文件. 发布包,发布的包可以有多种类型. 如何在 Pypi 中查看已发布的包 注意: 本文编写的包在 Pyt ...
- BZOJ3709 Bohater 贪心
传送门 思路很妙-- 有个前提条件:血量无限,这样话肯定先打会回血的怪,再打会掉血的怪 对于会回血的怪,按照受到伤害的顺序从小往大打 对于会掉血的怪似乎并不是很好搞,考虑:将每一时刻的血量函数画出来, ...
- 软工+C(6): 最近发展区/脚手架
// 上一篇:工具和结构化 // 下一篇:野生程序员 教育心理学里面有提到"最近发展区"这个概念,这个概念是前苏联发展心理学家维果茨基(Vygotsky)提出的,英文名词是Zone ...
- Shell命令-文件及目录操作之pwd、rm
文件及目录操作 - pwd.rm 1.pwd:显示当前所在位置信息 pwd命令的功能说明 pwd命令用于显示当前工作目录的绝对路径,以便在各个目录间来回切换. pwd命令的语法格式 pwd [OPTI ...
- IE 11 flex布局兼容性问题 ---- 不支持min-height 和flex:1
由于最近项目要嵌入其它平台,所以要做IE11 的兼容,那就用IE11打开网页看一看,一看吓一跳,页脚直接到了页眉的下面,并把主要内容覆盖了,也就是stick footer 布局失效了,我写了一个简易的 ...
- git 的简单实用
一. 安装 Git(git_for_windows.xp510.com.rar) 二. 使用 a) 进入到 git bash(命令行工具) b) 初始化user.name,user.email $ g ...
- http请求contentype详解
请求头 在http请求头中有一项重要的参数就是contentype,用来告诉浏览器,我服务器传送过来的数据是什么格式,这样浏览器才知道怎么去解析服务器传过来的数据 urlencoded 通常我们for ...