子查询语法详解

子查询所要解决的问题:不能一步求解的问题!
语法:select 语句的嵌套
1.单行子查询:如果子查询只返回一行记录,就是单行子查询
单行操作符: = , > , >=,<,<=,<>
2.多行子查询:如果子查询返回多行记录,就是多行子查询
多行操作符: in(set) , any , all
如:查询工资比SCOTT高的员工信息,分两步
1.查询SCOTT的工资: select sal from emp where ename=‘SCOTT‘;
2. 查询比3000高的员工: select * from emp where sal>3000;
子查询: select * from emp where sal > (select sal from emp where ename=‘SCOTT‘);
//多行子查询
1.in 在集合中
select * from emp where deptno in (select deptno from dept where dname=‘SALES‘or dname=‘ACCOUNTNG‘);
select e.* from emp e,dept d where e.deptno=d.deptnoand (d.dname=‘SALES‘ or d.dname=‘ACCOUNTING‘);
2.any: 和集合中任意一个值比较
//查询工资比30号部门任意一个员工高的员工信息
select * from emp where sal > any (select sal from emp where deptno=30);
//大于集合任意一个值,只需要大于集合最小值即可
select * from emp where sal > (select min(sal) from emp where deptno=30)
3. all:和集合中的所有值比较
//查询工资比30号部门所有员工高的员工信息
select * from emp where sal > all (select sal from emp where deptno=30);
或 select * from emp where sal > (select max(sal) from emp where deptno=30)
注意的问题:
1. 要有括号
2.合理的书写风格
3.可以在主查询的where ,select, having ,from后面都可以使用子查询
select 语句后面使用子查询,只能使用单行子查询,即只允许返回一条记录
4.不可以在group by后面使用子查询
5.强调from后面的子查询
6.主查询和子查询可以不是同一张表;只要子查询返回的结果主查询可以使用 即可
7.一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
8.一般先执行子查询 再执行主查询;但相关子查询例外
9.单行子查询只能使用单行操作符;多行子查询只能使用多行操作
主查询可以有多个子查询,即1:n关系,子查询可以嵌套用,最多855层
10.子查询中的null ,为什么集合中若有空值,不能用not in(10,20,null) 可以用in( );
举例:和上面序号对应
3. //select 语句后面使用子查询,只能使用单行子查询,即只允许返回一条记录
select empno,ename,sal,(select job from emp where empno=7839) 第四列 from emp;
//按部门分组查询最低工资,且最低工资大于10号部门的最低工资才显示
select deptno ,min(sal) from emp group by deptno having min(sal) >
(select min(sal) from emp where deptno = 10);
//查询员工号,姓名,月薪 ,年薪
select * from (select empno,ename,sal , sal*12 年薪 from emp );
6.查询部门名称是sales的员工
select * from emp where deptno = (select deptno from dept where dname=‘SALES‘);//子查询方式
select e.* from emp e,dept d where e.deptno = d.deptno and d.dname=‘SALES‘;//多表查询方式
7.Top-n分析: 找出员工工资表的前三名
8.一般先执行子查询 再执行主查询;但相关子查询例外
9.单行子查询只能使用单行操作符;多行子查询只能使用多行操作
//查询工资最低的员工的职位和薪水
select ename,job,sal from emp where sal =(select min(sal) from emp);
//下面是非法的,因为多行子查询使用单行比较符
select ename from emp where sal = (select min(sal) from emp groupby deptno);错误
10. 单行子查询空值问题 不能贸然使用 = 或 != ,因为后面返回null就永远不成立
select ename, job from emp where job=(select job from emp where ename=‘mike‘) //子查询可能返回null ,而判断是否为空,不能使用 = 或者 !=
多行子查询中的null:
集合有空值,不能用not in 可以用in
//查询不是领导的员工
select * from emp where empno not in (select mgr from emp); //错误写法
select * from emp where empno not in (select mgr from emp where mgr is not null);//正确
---------------------
作者:水河澹澹
来源:CSDN
原文:https://blog.csdn.net/qq_33497137/article/details/53791261
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/CandiceW/p/10037366.html

时间: 2024-10-22 23:59:19

子查询语法详解的相关文章

solr查询语法详解

查询语法 1.匹配所有文档:*:* 2.强制.阻止和可选查询: 1)    Mandatory:查询结果中必须包括的(forexample, only entry name containing the word make) Solr/LuceneStatement:+make,+make +up ,+make +up +kiss 2)    prohibited:(for example, all documentsexcept those with word believe) Solr/Lu

Lucene查询语法详解

Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 词语查询(Terms) 单词,例如:"test","hello" 语句,例如:"hello,world!" 字段查询(Field) title:hello 或者 title:"hello title" //搜索title为 hello title关键字的文档 title:hello title //搜索title为hello,或者

Hadoop Hive sql语法详解

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据.而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持

Oracle创建表语句(Create table)语法详解及示例

Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字符串, 不规定长度默认值为1NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数最长38位. 不够位时会四舍五入.DATE 日期和时间类型LOB 超长字符, 最大可达4GCLOB 超长文本字符串BLOB 超长

[持续交付实践] pipeline:pipeline 使用之语法详解

一.引言 jenkins pipeline语法的发展如此之快用日新月异来形容也不为过,而目前国内对jenkins pipeline关注的人还非常少,相关的文章更是稀少,唯一看到w3c有篇相关的估计是直接翻译软件翻的,读下来惨不忍睹.没办法,语法详解这章我干脆把jenkins官网上的语法说明全部翻译了一遍,并更新了陈旧的内容(可怜了我大学四级的英语水平~),英语好的朋友也可以直接到官网阅读. 二.语法简介 Pipeline最基本的部分是"step".基本上,step告诉Jenkins 要

PL/SQL程序设计基础语法详解(一)

一.什么是PL/SQL(Procedure Language/SQL) 概念:PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. PL/SQL的结构: declare 说明部分 (变量说明,光标申明,例外说明 ] begin 语句序列 (DML语句]- exception 例外处理语句 End; 简单的PL/SQL程序 如果是在命令行中需要使用 set serveroutput on先打开显示 declare

SQLSERVER存储过程语法详解

SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ] [ WITH     { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sq

hibernate(七) hibernate中查询方式详解

序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数据表查询操作详解  ,以至于看这篇文章不用那么吃力. --WH 一.hibernate中的5种检索方式 1.1.导航对象图检索方式 根据已经加载的对象导航到其他对象 例如:在前面的各种映射关系中,实体类包含对其他类对象的引用. Dept d = (Dept) session.get(Dept.cla

【Solr】索引库查询界面详解

目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_price:[10 TO 20] sort:排序条件.排序的域asc.如果有多个排序条件使用半角逗号分隔. start, rows:分页处理.Start起始记录rows每页显示的记录条数. fl:返回结果中域的列表.使用半角逗号分隔. df:默认搜索域. wt:响应结果的数据格式,可以是json.xml等.