当前位置: 传客网 > 多表操作 -- 子查询

多表操作 -- 子查询

2017-01-11 作者:ZYG小仙儿

为什么使用子查询:

在使用上面的内连接外连接查询时,例如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

  • PostgreSQL源码修正 ——查询优化(一)

    目录目录...1图表目录...4第一章引言...61.1项目修正目标...61.1.1问题描写...61.1.2波及局部...61.2本报告组织形式...61.3已做的代码阅读工作概述...6第二章问题分析——查询优化厉行流程...82.1

  • 如何提高SQL 查询技能

    RobertVollman今天发表了一篇由其个人经历总结出来的如何写好OracleSQL查询的Blog,本文是对其主要观点的摘录,这也是Oracle初学者在写SQL是经常遇到的困难.ImprovingyourSQLQueriesByRobe

  • 在windows下安装 雪豹苹果操作系统 的详细图文教程(收藏并学习)

    在windows下安装雪豹苹果操作系统的详细图文教程(Win7mac苹果双系统安装)09年8月底,苹果正式发布了新一代MacOSXSnowLeopard操作系统。苹果操作系统一直在用户友好度和安全稳定性方面广受好评。苹果操作系统只允许在苹果

  • 央行周五再发100亿逆回购 公开市场操作“日常化”

      中新网2月19日电(金融频道于恋洋)央行周五以利率招标方式开展了100亿元逆回购操作,期限为7天,中标利率2.25%。央行昨日发布公告称,为完善公开市场操作机制,提高公开市场操作的针对性和有效性,央行决定延续前期增加公开市场操作频率的有

  • 河南省舞阳县人民医院 半岁儿童来治病 医护人员操作不当反丧命(转载)

    河南省舞阳县人民医院半岁儿童来治病医护人员操作不当反丧命(转载)河南省舞阳县人民医院半岁儿童来治病医护人员操作不当反丧命(转载)天涯论坛作者:wuyang001舞阳人民医院半岁儿童来治医护人员操作不当反(转载)  楼主:wuyang001时

  • Windows Server 2008年代的操作系统部署利器——WDS简介

      各年代Windows操作系统部署方式回顾  首先需要澄清的两个概念,安装和部署,虽然从字面上看都有装操作系统的含义,但是在范围还是有区别的,安装多是指针对一台或者少量机器,部署则是在企业网络中,针对批量机器的操作系统安装过程,而且不仅仅

  • mongodb php 把mongodb数据操作语言转化为php数据操作语言

    <?phpclassAta_Db_Mongo{protectedstatic$conn;protected$_db;protected$_data=array();protected$c_options=array('fsync'=&

  • php-fpm 查询、重启

    查找php.ini所在目录:find/-namephp.ini/usr/local/php/etc/php.ini查看php运行目录命令:whichphp/usr/bin/php查看php-fpm进程数:psaux|grep-cphp-fp