子查询

子查询要解决的问题,不能一步求解

分为:

  • 单行子查询
  • 多行子查询

语法:

	SELECT select_list
FROM table
WHERE expr operator (SELECT select_list
FROM table);
  • 子查询(内查询)在住查询之前一次执行完成
  • 子查询的记过被主查询使用(外查询)

注意:

1.括号

2.合理的书写风格

3.可以在住查询的 WHERE SELECT HAVING FROM 后面使用子查询

4.不可以在GROUP BY 后面使用

5.强调FROM后面的子查询

6.主查询和子查询可以不是同一张表;只用子查询返回的结果,主查询可以使用即可

7.一般不在子查询中排序;但在top-n分析问题中

8.一般先执行子查询,在执行主查询;但相关子查询例外

9.单行子查询只能使用单行操作符;多行子查询只能使用多行子查询

10.子查询中的null:单行的子查询,多行子查询

解释:

--5、强调from后面的子查询

查询员工信息:员工号 姓名 月薪

SELECT
*
FROM
( SELECT empno, ename, sal FROM emp );

查询员工信息:员工号 姓名 月薪 年薪

SELECT
*
FROM
(
SELECT
empno,
ename,
sal,
sal * 12 annsal
FROM
emp)

--6、主查询和子查询可以不是同一张表;只有子查询返回的结果 主查询可以使用 即可

查询部门名称是SALES的员工

SELECT
*
FROM
emp
WHERE
deptno = ( SELECT deptno FROM dept WHERE dname = 'SALES' );

--7.一般不在子查询中排序;但在top-n分析问题中

-- 找到员工表中工资最高的三名员工

SELECT
empno,
ename,
sal
FROM
( SELECT * FROM emp ORDER BY sal DESC )
WHERE
ROWNUM < 4

8.一般先执行子查询,在执行主查询;但相关子查询例外

相关子查询:

-- 找到员工表中薪水大于本部门平均薪水的员工

-- 一般方法
SELECT
e.ename,
e.sal,
e.deptno,
d.avgsal
FROM
emp e,
( SELECT deptno, AVG( sal ) avgsal FROM emp GROUP BY deptno ) d
WHERE
e.deptno = d.deptno
AND e.sal > d.avgsal -- 相关子查询
SELECT
empno,
ename,
sal,
( SELECT avg( sal ) FROM emp WHERE deptno = e.deptno ) avgsal
FROM
emp e
WHERE
sal > (SELECT avg( sal )
FROM emp
WHERE deptno = e.deptno)

10.子查询中的null

in关键字中可以有null

not in 中有null就会查不到数据原因如下

  • not in 等同于 <>ALL

集合运算

INTERSECT(交集),返回两个查询共有的记录。

UNION ALL(并集),返回各个查询的所有记录,包括重复记录。

UNION(并集),返回各个查询的所有记录,不包括重复记录。

MINUS(补集),返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。

注意的问题:

1、参与运算的各个集合必须列数相同 且类型一致(列数不够可以用,to_number(null)、to_char(null)等去填充

2、采用第一个集合作为最后的表头

3、order by永远在最后

4、括号,改变执行顺序

Oracle常用sql语句(三)之子查询的更多相关文章

  1. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  2. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  3. Oracle常用SQL语句大全

    常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...

  4. SQL复习三(子查询)

    子查询 子查询就是嵌套查询,即select中包含这select,如果一条语句中存在着两个,或者两个以上的select,那么就是子查询语句了. 子查询出现的位置 where后,作为条件的一部分: fro ...

  5. Oracle常用sql语句(一)

    # Sql的分类 # DDL (Data Definition Language):数据定义语言,用来定义数据库对象:库.表.列等: CREATE. ALTER.DROP DML(Data Manip ...

  6. MySQL常用sql语句-----数据表的查询操作

    常用的sql语句如下,应对工作足以 1.查询指定字段 select c_id,c_age,c_name from t_student; select c_id as 编号,c_name as 姓名,c ...

  7. Oracle 常用Sql 语句

    Oracle数据库常常被用作项目开发的数据库之一:有时隔段时间没使用就会忘记一些常用的sql语法,所以我们有必要记录下常用的sql 语句,当我们需要时可以快速找到并运用. 1 创建表空间.创建用户及授 ...

  8. Oracle常用sql语句。

    最近工作中遇到了一些与oracle相关的问题,稍微整理一些工作中用到的SQL语句 时间相关 --查询距当前时间十分钟内的数据 select sysdate -interval '10' minute ...

  9. 分享一篇:sql语句中使用子查询,可能会引起查询的性能问题,查询时间会变长

    前段时间,做自动化适配的时候,查找需要的数据的时候,使用到了dblink,跨数据库实例进行访问,整段sql拼接再加上dblink,在plsql查询的时候,性能还不是很长时间,最多2分钟可以查到,前期调 ...

随机推荐

  1. 抽屉点赞及jQuery CSS操作

    1.需要用到的知识点: CSS处理 $('t1').css('color','red') 点赞: -$('t1').append() -$('t1').remove() -setInterval -o ...

  2. BZOJ4197 [Noi2015]寿司晚宴 【状压dp】

    题目链接 BZOJ4197 题解 两个人选的数都互质,意味着两个人选择了没有交集的质因子集合 容易想到将两个人所选的质因子集合作为状态\(dp\) \(n\)以内质数很多,但容易发现\(\sqrt{n ...

  3. 【bzoj4484】【jsoi2015】最小表示

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 432  Solved: 223[Submit][Status][Discuss] Descriptio ...

  4. Codeforces 543.B Destroying Roads

    B. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. Java中String的替换函数:replace与replaceAll的区别

    例如有如下x的字符串  String x = "[kllkklk\\kk\\kllkk]"; 要将里面的"kk"替换为++,可以使用两种方法得到相同的结果  r ...

  6. Python入门记录

    最近看到Python3.7版本已经发布了,安装了Aconda最新的版本.安装完成后测试: 在Python程序里有两种办法查看Python版本信息: import sys # 查看版本 print(sy ...

  7. PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件

    PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件 简介: 在应用系统软件开发过程中,如果软件由很多对象组成,它的结构仅仅凭借分析很难理清,同时为了有利于软件的开发及重用, ...

  8. javascript 实现 A-star 寻路算法

    在游戏开发中,又一个很常见的需求,就是让一角色从A点走到B点,而我们期望所走的路是最短的,最容易想到的就是两点之间直线最短,我们可以通过勾股定理来求出两点之间的距离,但这个情况只能用于两点之间没有障碍 ...

  9. HTML标签marquee 来制作页面滚动

    页面的自动滚动效果,可由javascript来实现,但是今天无意中发现了一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用m ...

  10. 分块+二分,统计对数 CDOJ

    http://acm.uestc.edu.cn/#/problem/show/1157 数列(seq) Time Limit: 3000/1000MS (Java/Others)     Memory ...