mysql之子查询
所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含IN,ANY,ALL和EXISTS等关键字,除此之外还可以包含比较运算符,子查询经常出现在WHERE和FROM字句中。
WHERE字句中的子查询:该位置处的子查询一般返回单行单列,多行单列,单行多列数据记录。
FROM字句中的子查询:该位置处的子查询一般返回多行多列数据记录,可以当作一张临时表。
1. 返回结果为单行单列和单行多列子查询
当子查询的返回结果为单行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含比较运算符(">","<","=","!="等)。
1.1 返回结果为单行单列子查询
SELECT * FROM e_employee WHERE sal >(SELECT sal FROM t_employee WHERE ename='SMITH')
1.2 返回结果为单行多列子查询
SELECT ename,sal,job FROM e_employee WHERE (sal,job) = (SELECT sal,job FROM t_employee WHERE ename='SMITH')
2. 返回结果为多行单列子查询
当子查询的返回结果为多行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含IN,ANY,ALL,EXISTS等关键字。
2.1 带有关键字IN的子查询
当主查询语句的条件是子查询的查询结果时,就可以通过关键字IN来进行判断,相反如果想实现主查询的条件不是子查询的查询结果时,就可以通过关键字NOT IN来进行判断。
SELECT * FROM t_employee WHERE deptno IN (SELECT deptno FROM t_dept)
2.2 带有关键字ANY的子查询
SELECT ename,sal FROM t_employee WHERE sal >ANY (SELECT sal FROM t_employee WHERE job='MANAGER')
关键字ANY用来表示主查询的条件为满足子查询返回查询结果中任意一条数据记录,该关键字有三种匹配方式,分别如下:
=ANY:其功能与关键字IN一样。
>ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录。
<ANY(<=ANY):比子查询中返回数据记录中最大的还要小于(小于等于)数据记录。
2.3 带有关键字ALL的子查询
SELECT ename,sal FROM t_employee WHERE sal >ALL (SELECT sal FROM t_employee WHERE job='MANAGER')
关键字ALL用来表示主查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有以下两种匹配方式。
>ALL(>=ALL):比子查询中返回数据记录中最大的还要大于(大于等于)数据记录。
<ALL(<=ALL):比子查询中返回数据记录中最小的还要小于(小于等于)数据记录。
2.4 带有关键字EXISTS的子查询
关键字EXISTS是一个布尔类型,当返回结果集时为TRUE,不能返回结果集时为FALSE。查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则条件为真,此时返回当前遍历到的记录;反之,如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。
SELECT * FROM t_dept c WHERE NOT EXISTS (SELECT * FROM e_employee WHERE deptno=c.deptno);
3. 返回结果为多行多列子查询
当子查询的返回结果为多行多列数据记录时,该子查询语句一般会在主查询语句的FROM子句里,被当作一张临时表的方式来处理。
mysql之子查询的更多相关文章
- mysql in 子查询 效率慢 优化(转)
mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...
- MySQL 行子查询(转)
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- MySQL FROM 子查询
FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...
- MySQL 表子查询
MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...
- MySQL 行子查询
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- Mysql in子查询中加limit报错
Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...
- MySQL(五) —— 子查询
子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...
- MySql优化子查询
用子查询语句来影响子查询中产生结果rows的数量和顺序. For example: SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM ...
- Mysql的子查询相关知识,少但是精
Mysql子查询 概念分析: 根据相关性分: (1)不相关子查询:一条Sql语句中含有多条SELECT语句,先执行子查询,再执行外查询,子查询可对立运行 关键字:(1)先子查询,再外查询 (2)可以对 ...
- 聊聊MySQL的子查询
1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...
随机推荐
- php计算两个坐标(经度,纬度)之间距离的方法
本文实例讲述了php计算两个坐标(经度,纬度)之间距离的方法.分享给大家供大家参考.具体如下: 这里使用php计算两个坐标(经度,纬度)之间的距离,返回结果为米或者千米 function distan ...
- 转:在 Ubuntu 上使用 Nginx 部署 Flask 应用
转:http://Python.jobbole.com/84286/ 原文出处: Vladik 译文出处:开源中国 我职业生涯的大部分都在使用微软的架构,最近我决定走出技术的舒适区,步入开源 ...
- EOJ 3265 七巧板
模拟. 先判断三边形和四边形的个数. 然后判断$5$个三角形是否都是等腰直角三角形. 然后判断$5$个等腰直角三角形比例是否符合要求. 然后寻找正方形.判断比例是否符合要求. 最后判断四边形是否符合要 ...
- Python类总结-反射及getattr,setattr
类反射的四个基本函数 hasattr getattr setattr delattr #反射 class BlackMedium: feature = 'Ugly' def __init__(self ...
- java面试题一
个人的一点参考总结,如有雷同,纯属巧合! 1.hashmap的实现原理以及hashtable的线程安全是怎么实现的?HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线 ...
- 【lct】bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
lct板子,此题主要有cut操作和link操作. #include<cstdio> #include<iostream> #include<cstring> #in ...
- 使用SQL语句将数据库中的两个表合并成一张表
select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数 ...
- Nginx服务器的启动控制
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: nginx服 ...
- Codeforces Round #300 A. Cutting Banner 水题
A. Cutting Banner Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...
- JAVA 垃圾收集监控
我们可以使用Java命令行和UI工具来监控应用程序的垃圾收集活动.下面的例子中,我使用Java SE Downloads 中一个演示程序. 如果你想使用同样的程序,前往 Java SE Downloa ...