mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询。

1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:


2、where后作为条件的子查询多与“=”、“!=”、“>”、“<”等比较运算符一起使用。结果虽然通常是单行单列,但是有的时候也会用单行多列,而且有的时候还会返回多行单列。如果是多行单列的情况,则多与in、any、all、exists结合使用:
in和not in:


其中in表示包含于后边子查询结果集里的任意一个,not in表示不包含于后边结果集里的任意一个。上图子查询的结果中,返回depart_id为1、2、4,因此第一个查询就会查出emp中所有depart_id是1或2或4的,第二个就会查出既不是1也不是2也不是4的。

any:


=any的用法和in的效果是一样的;>any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以;<any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里>any是只要大于1就行,而<any则只要小于4就行。

all:


>all就是说要大于子查询结果集里所有的,简单理解就是要比最大的那个还大;<all就是要小于结果集里所有的,简单理解就是要比最小的还小。因此上边的第一个查询就是要大于4,第二个就是要小于1。

exists:


exists和not exists只关心后边的子查询是否有结果,而不关心子查询的结果是什么;对于exists,如果后边的子查询有结果,那么它的值就是true,反之如果没有查到结果,则为false,而not exists正好和这个情况相反,有值为false,无值为true。当他们的值为true时,前边查询到的结果成立,会被加入到主查询的结果集,否则不会被加入主查询的结果集。
在上便的查询中,查询语句会先从emp中查询一条数据,然后拿这条数据的depart_id和company中的depart_id比较,当存在两个id相同的数据时,就会有结果返回,然后最终返回6条数据,而第二个查询一样的道理,当不存在两个id相同的数据时,主查询才有结果返回,只有一条数据。

mysql常用基础操作语法(十)~~子查询【命令行模式】的更多相关文章

  1. mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】

    1.mysql简单的查询:select 字段1,字段2...  from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...

  2. mysql常用基础操作语法(九)~~外连接查询【命令行模式】

    1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必 ...

  3. mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】

    数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...

  4. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  5. mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】

    注:文中所有的...代表多个. 1.使用count统计条数:select count(字段名...) from tablename; 2.使用avg计算字段的平均值:select avg(字段名) f ...

  6. mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】

    1.使用order by对查询的结果进行排序,asc升序,desc降序: 也可以在order by后指定多个字段名和排序方式进行多级排序: 2.使用limit限制查询结果的数量: 上图中的0,代表查询 ...

  7. mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】

    1.单条件查询:select 字段名 from tablename where 条件: 2.简单多条件查询,使用&&或者between and等: 3.is null和is not n ...

  8. mysql常用基础操作语法(十一)~~字符串函数【命令行模式】

    注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数. 1.concat连接字符串: 从上图中可以看出,直接使用sele ...

  9. mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】

    1.插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...); 从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下), ...

随机推荐

  1. WPF中获取系统本身自带的控件模板(XAML)

    每个控件都有自己默认的模板,这是MS本身就编写好的,如果我们能够得到这些模板的XAML代码,那么它将是学习模板的最好的示例,要想获得某个控件ctrl的默认模板,请调用以下方法: string GetT ...

  2. python unicode 字节串转成中文问题

    字符串:s = r"\u65b0\u6d6a\u5fae\u535a\u6ce8\u518c" 转换为中文:s = s.decode("unicode_escape&qu ...

  3. configparser模块的常见用法

    configparser模块用于生成与windows.ini文件类似格式的配置文件,可以包含一节或多节(section),每个节可以有一个或多个参数(键=值) 在学习这个模块之前,先来看一个经常见到的 ...

  4. 以Apache模块的方式编译安装php-5.4.27

    为什么要安装低版本的php? 由于apc,xcache的更新版本跟不上php版本的速度,所以,我们需要安装比较稳定的php低版本程序,再安装其它与之相匹配的扩展. 开工: 新建用户及用户组 group ...

  5. Dell服务器R320在Centos6.5系统上安装MegaCli管理主板集成磁盘阵列卡

    折腾了两天啊,我的神啊,,终于可以安装了 针对Dell服务器的R320版本主板集成的磁盘阵列卡,需要下载MegaCli 8或更新版本 下载链接: http://pan.baidu.com/s/1mgB ...

  6. HDU 6181 Two Paths

    这是一道次短路的题 但是本题有两个坑 注意边权的范围,一定要在所有与距离有关的地方开 long long 本题所求的并不是次短路,而是与最短路不同的最短的路径,如果最短路不止一条,那么就输出最短路的长 ...

  7. C# 使用反射获取界面并传参

    // 通过反射创建类库中的实例 try { // 通过反射,获取模块 Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.Bas ...

  8. SDN第二次上机作业

    作业链接 安装floodlight 生成拓扑并连接控制器floodlight,利用控制器floodlight查看图形拓扑 from mininet.topo import Topo class MyT ...

  9. python爬虫(6)——正则表达式(三)

    下面,我再写一个例子,加强对正则表达式的理解.还是回到我们下载的那个二手房网页,在实际中,我们并不需要整个网页的内容,因此我们来改进这个程序,对网页上的信息进行过滤筛选,并保存我们需要的内容.打开ch ...

  10. U盘制作centos7系统并安装

    U盘刻录步骤 1.下载centos镜像(https://mirrors.aliyun.com/centos/7.4.1708/isos/x86_64/) 2.使用UltraISO刻录U盘启动系统 安装 ...