多表操作 -- 子查询

mysql 子查询

为什么使用子查询:

在使用上面的内连接外连接查询时,例如SELECT * from table1 t1,table2 t2 WHERE t1.field1=t2.filed2, 在SQL语句执行过程中,首先会对两个表进行笛卡尔积操作,然后再选取符合条件的数据记录。当两张表的数据记录比较大时,进行笛卡尔积操作时可能会造成死机。对于有经验的用户,会先通过统计函数查询关联表笛卡尔积后的数据记录

SELECT COUNT(*) FROM department ,employee; -- 查询笛卡尔积后的数据记录

如果查询到的数据记录数MySQL可以接受,然后才进行多表连接查询,否则考虑其他方法。

 

:在一个SELECT查询语句(主查询)的WHERE或FROM子句中包含另一个SELECT查询语句(子查询或嵌套查询)。理论上子查询语句可以出现在查询语句的任何地方,但实际上,子查询语句经常出现在WHERE或FROM子句中。

 

该子查询语句一般会出现在朱查询语句的WHERE子句里,通常会包含比较运算符号(>, <, =, != 等)

 

> * employee

WHERE (

SELECT );

-------+---------+----------+--------+

| em_name | |

-------+---------+----------+--------+

| NULL |

| | 101 |

-------+---------+----------+--------+

2 in 0.00 )

 

返回结果为单行多列的子查询语句

> * employee

WHERE )= (

SELECT superior );

Empty 0.00 )

 

,子查询语句一般出现在WHERE子句中

1)带关键字IN的子查询

> * IN FROM );

-------+---------+----------+--------+

| em_name | |

-------+---------+----------+--------+

| NULL |

| | 101 |

| | 102 |

-------+---------+----------+--------+

3 in 0.04 )

 

> * NOT FROM department

);

-------+---------+----------+--------+

| em_name | |

-------+---------+----------+--------+

| NULL |

-------+---------+----------+--------+

1 in 0.03 )

2)带关键字ANY的子查询

关键字ANY用来主查询的条件为满足子查询返回查询结果中任意一条数据记录,该关键字有三种匹配方式,分别为:

=(!=)ANY:其功能与关键字IN一样

>ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录

> * sal dep_

);

-------+---------+----------+--------+------+

| em_name | sal |

-------+---------+----------+--------+------+

| NULL | 3500 |

| NULL | 3375 |

-------+---------+----------+--------+------+

2 in 0.00 2 in 0.00 )

 

<=ANY):比子查询中返回数据记录中最大的还要小宇(小于等于)数据记录

> * <<span >sal dep_

);

-------+---------+----------+--------+------+

| em_name | sal |

-------+---------+----------+--------+------+

| | 101 |

| | 102 |

| NULL | 3375 |

-------+---------+----------+--------+------+

3 in 0.00 )

 

3)带有关键字ALL的子查询

关键字ALL用来主查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有三种匹配方式,分别为:

<=ALL): 比子查询中返回数据记录中最小的还要小于(小于等于)数据记录

> * <<span >sal dep_

);

-------+---------+----------+--------+------+

| em_name | sal |

-------+---------+----------+--------+------+

| | 102 |

-------+---------+----------+--------+------+

1 in 0.00 )

 

>ALL(>=ALL): 比子查询中返回数据记录中最大的还要大于(大于等于)数据记录

> * sal dep_

);

Empty 0.00 )

 

4)带有关键字EXISTS的子查询

带EXISTS关键字的子查询

MySQL EXISTS 和 NOT EXISTS 子查询语法如下:

SELECT FROM WHERE )

使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,就返回true,否则返回false

当返回的值为true时,外层查询语句将进行查询,否则不进行查询

 

> * EXISTS sal dep_i

);

Empty 0.00 )

此处内层循环并没有查询到满足条件的结果,因此返回false,外层查询不执行

 

EXISTS关键字可以与其他的查询条件一起使用

 

条件表达式与EXISTS关键字之间用AND或者OR来连接

> * 3200 FROM employee

);

-------+---------+----------+--------+------+

| em_name | sal |

-------+---------+----------+--------+------+

| NULL | 3500 |

| NULL | 3375 |

-------+---------+----------+--------+------+

 

返回结果为多行多列子查询

当子查询的返回结果为多行多列数据记录时,该子查询语句语句一般会在主查询语句的FROM子句里,被当做一张临时表的方式来处理。

SELECT , em_name JOIN , sal ) ;

 

 


相关推荐

  • MDaemon日志提示“内部 AAAA 查询黑名单” 在使用MDaemon邮件系统收发邮件的过程中,无意中看到SMTP日志中显示“mail.xxx.com被添加到内部AAAA查询黑名单”,后来查找原因:AAAA是指IPv6提示该原因可能是不支持查询IPv6,因此MDae
  • 不光有iPhone5 还有新版操作系统iOS6 不光有iPhone5还有新版操作系统iOS6:据国外媒体报道,苹果投资者本周最期待的是iPhone5的发布,但不要忘记,iPhone、iPad和iPod最新版操作系统软件iOS6也将很快出现。新操作系统肯定会安装在iPhone5,最快2天后
  • 一元多项式的加法以顺序表操作 实验日期:2015/11/09一、实验题目线性表的顺序存储实现及其应用,给出一组数据要求实现一元多项式的加法运算,(9,12)(15,8)(3,2)(26,19)(-4,8)(-13,6)(82,0)​数据已排序;二、实验要求典
  • OAF 查询已超过200行 oaf查询时报这个警告可以通过以下两种方法任一一种解决:1设置配置文件FND:查看对象的最大提取大小2在代码里面添加readVO.setMaxFetchSize(-1);readVO.executeQuery();
  • 用 WSH 想ASP 一样 查询数据库 用WSH想ASP一样查询数据库WSH是Windows脚本宿主文件。用VBscript和Jscript都可以编写WSH脚本。要注意尽管IE浏览器和WSH使用同样的的语言引擎,但它们不支持同样的对象模型。例如WSH不支持用于用户输出的windo
  • 使用 objc_sync 进行原子操作 什么叫原子操作对于一个资源,在写入或读取时,只允许在一个时刻一个角色进行操作,则为原子操作。你可以简单粗暴地这么理解,我的银行帐号里面有100块钱,假如两个人同时在不同的ATM机上操作,他们的操作都是取100块钱,那ATM会不会都吐出100
  • C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于BCB
  • Alamofire - 优雅的处理 Swift 中的网络操作 网络处理,应该是我们平时开发的时候最常用到的操作。比如读取JSON数据,下载图片,这些操作都要和网络打交道,一个高效稳定的网络操作库对于提升我们日常的开发效率有着非常关键的作用。Alamofire正是这样一个库,成熟,稳定,高效。关于Ala
  • sql 查询优化的问题 1.对查询进行优化,应该尽量避免全表扫描应该在考虑在orderby和where条件用到的字段建立索引。2.尽量不要对字段进行null值判断还有!<>likeor等这样会导致引擎放弃索引而采取全表扫描。3.如果在where条件中使
  • Oracle 查询优化基本准则: 1:在进行多表关联时,多用Where语句把单个表的结果集最小化,多用聚合函数汇总结果集后再与其它表做关联,以使结果集数据量最小化2:在两张表进行关联时,应考虑可否使用右连接。以提高查询速度3:使用where而不是having,where是用
  • 1.2.1 查询界面 《搜索引擎优化宝典(第2版)》第1章搜索引擎基础,本章主要的内容有:什么是搜索引擎;搜索引擎的基本结构;搜索的特征;搜索引擎的分类;利用搜索引擎;控制搜索引擎。本节为大家介绍查询界面。AD:1.2搜索引擎的基本结构现在读者应该对搜索引擎的原
  • oracle 查询表里信息混乱,解决办法 客户反映,数据库处于打开状态,没有报错,不过开发通过sql语句查询业务表里数据时,发现数据混乱,不正确。警告日志文件中看到如下内容以下只是片段...............Corruptblockrelativedba:0x030095d8

你的评论

就没有什么想说的吗?

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X