子查询

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

分为:

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

语法:

	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. XML 增加属性

    var resultDoc = new XmlDocument(); resultDoc.LoadXml("<root></root>"); resultD ...

  2. [CQOI2013]新Nim游戏 线性基

    题面 题面 题解 首先我们知道nim游戏先手必败当且仅当所有石堆异或和为0,因此我们的目标就是要使对手拿石堆的时候,无论如何都不能使剩下的石堆异或和为0. 对于一个局面,如果我们可以选取一些可以凑出0 ...

  3. 【BZOJ1065】【NOI2008】奥运物流(动态规划)

    [BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...

  4. 【BZOJ1491】【NOI2007】社交网络(最短路,动态规划)

    [BZOJ1491][NOI2007]社交网络(最短路,动态规划) 题面 BZOJ 洛谷 图片是假的,只能到OJ上看 Description 在社交网络(socialnetwork)的研究中,我们常常 ...

  5. PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

    一.如何选择PHP5.3的VC9版本和VC6版本 VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本.      VC9版本是使用 ...

  6. 【bzoj3811】【清华集训2014】玛里苟斯

    3811: 玛里苟斯 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 500  Solved: 196[Submit][Status][Discuss] ...

  7. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) D 构造烟花

    D. High Load time limit per test 2 seconds memory limit per test 512 megabytes input standard input ...

  8. mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法

    我的电脑是win10,所用的是mysql5.7.14 近期在学习mysql数据库的时候,遇到了这个错误,我的密码错误了.突如其来的问题,很是蒙蔽,因为我没对数据库设置过密码.通过网上查询,可以通过进入 ...

  9. linux sort中文失效问题的解决

    http://note.youdao.com/noteshare?id=745488efb61a69fb56475e291863c94e

  10. 为VSCODE添加右键菜单

    参考:https://blog.csdn.net/GreekMrzzJ/article/details/82194913 1.创建一个名为vscode.reg的空文本文件,填入下列内容 Windows ...