博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用子查询
阅读量:7201 次
发布时间:2019-06-29

本文共 1350 字,大约阅读时间需要 4 分钟。

一、语法

SELECT SELECT_LIST  FROM TABLE WHERE EXPR OPERATOR (SELECT SELECT_LIST FROM TABLE);
子查询(内查询)在主查询(外查询)之前执行。
主查询使用子查询结果。

二、单行子查询

WHERE子句中使用单行子查询时,可以使用单行比较运算符(=,>,>=,<,<=,<>),将子查询的返回结果当做单一数值来使用。
需要小心的是子查询返回的结果的不确定,即返回空值或多值。具体分为三种情况:
1、返回单行:即为单行子查询。
2、未返回任何行:如果子查询未返回任何行(相当于返回NULL),则主查询将不再执行,所以主查询也不会返回任何结果。
3、返回多行:是多行子查询,此时不允许使用单行比较运算符,否则出错。

三、多行子查询

在WHERE子句中使用多行子查询时,可以使用多行比较运算符(IN,ALL,ANY),将子查询的返回结果当做数值集合来使用。其中,ALL和ANY运算符必须与单行比较运算符(=,>,>=,<,<=,<>)结合使用。例如WHERE sal>ALL(子查询)。

1、IN:等于任何一个

2、ALL:和子查询返回的所有值比较。例如:sal>ALL(1,2,3)等价于sal>3,即大于所有。
3、ANY:和子查询返回的任意一个值比较。例如:sal>ANY(1,2,3)等价于sal>1,即大于任意一个就可以。
4、EXISTS:判断子查询是否有返回结果(不关心具体行数和内容),如果返回则为TRUE,否则为FALSE。(常用于相关子查询)

四、例子

--单行子查询--1.如何查得所有比“CLARK”工资高的员工的信息--普通查询SELECT ENAME, SAL FROM EMP WHERE ENAME = 'CLARK';SELECT * FROM EMP WHERE SAL > 2450;--子查询SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'CLARK');--2.查询工资高于平均工资的雇员名字和工资SELECT ENAME, SAL FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);--多行子查询--any:查询工资低于任何一个“CLERK”的工资的雇员信息。select *from empwhere sal < any(      select sal from emp where job='CLERK');--all:查询工资比所有的“SALESMAN”都高的雇员的编号、名字和工资。select empno, ename, salfrom empwhere sal>all(      select sal      from emp      where job='SALESMAN') --in:查询部门20中职务同部门10的雇员一样的雇员信息。select * from empwhere job in(      select job       from emp      where deptno=10) and deptno=20;

转载地址:http://djcum.baihongyu.com/

你可能感兴趣的文章
hibernate的load与get的区别
查看>>
如何用几何画板构造曲线系
查看>>
NSClient++ 客户端程序说明
查看>>
【Android】Warning :uninstalling will remove the application data!
查看>>
PHP浅复制与深复制
查看>>
[四]基础数据概述之Byte详解
查看>>
C语言栈与调用惯例
查看>>
SpringMVC(二)解决静态资源无法访问的问题
查看>>
网站防止SQL注入方法
查看>>
PHP成生若干位防伪码的方法
查看>>
平常用到的前端知识点
查看>>
计算机原始语言——汇编
查看>>
正则表达式
查看>>
2008R2,2012R2修改IIS FTP 被动模式端口号
查看>>
Network manager configure
查看>>
lVM逻辑卷管理相关总结
查看>>
《人人都能看懂经济学》读书笔记
查看>>
软考中高项学员:2016年3月28日作业
查看>>
zookeeper@alibaba学习记录(二)
查看>>
dmidecode lspci lsblk 查看系统信息 cpu和内存硬盘信息
查看>>