Oracle常用sql语句(三)之子查询
子查询
子查询要解决的问题,不能一步求解
分为:
- 单行子查询
- 多行子查询
语法:
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语句(三)之子查询的更多相关文章
- oracle常用SQL语句(汇总版)
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...
- oracle 常用sql语句
oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...
- Oracle常用SQL语句大全
常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...
- SQL复习三(子查询)
子查询 子查询就是嵌套查询,即select中包含这select,如果一条语句中存在着两个,或者两个以上的select,那么就是子查询语句了. 子查询出现的位置 where后,作为条件的一部分: fro ...
- Oracle常用sql语句(一)
# Sql的分类 # DDL (Data Definition Language):数据定义语言,用来定义数据库对象:库.表.列等: CREATE. ALTER.DROP DML(Data Manip ...
- MySQL常用sql语句-----数据表的查询操作
常用的sql语句如下,应对工作足以 1.查询指定字段 select c_id,c_age,c_name from t_student; select c_id as 编号,c_name as 姓名,c ...
- Oracle 常用Sql 语句
Oracle数据库常常被用作项目开发的数据库之一:有时隔段时间没使用就会忘记一些常用的sql语法,所以我们有必要记录下常用的sql 语句,当我们需要时可以快速找到并运用. 1 创建表空间.创建用户及授 ...
- Oracle常用sql语句。
最近工作中遇到了一些与oracle相关的问题,稍微整理一些工作中用到的SQL语句 时间相关 --查询距当前时间十分钟内的数据 select sysdate -interval '10' minute ...
- 分享一篇:sql语句中使用子查询,可能会引起查询的性能问题,查询时间会变长
前段时间,做自动化适配的时候,查找需要的数据的时候,使用到了dblink,跨数据库实例进行访问,整段sql拼接再加上dblink,在plsql查询的时候,性能还不是很长时间,最多2分钟可以查到,前期调 ...
随机推荐
- URAL1519 Formula 1 【插头dp】
题目链接 URAL1519 题解 看题型显然插头\(dp\) 考虑如何设计状态 有这样一个方案 当我们决策到某个位置 轮廓线长这样 你会发现插头一定是相互匹配的 所以我们实际上可以把状态用括号序列表示 ...
- 洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】
题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的,区间右边的人往区间最右的那些空位跑,区间左边的人往区间最左的那些空位跑 找到这些空 ...
- 后渗透提权辅助工具BeRoot详解
0x00 工具介绍 前言 BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,以方便找到提高我们提权的方法.其二进制编译地址为: https://github.com/Alessa ...
- 《剑指offer》— JavaScript(7)斐波那契数列
斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 实现代码 function Fibonacci(n) { var arr = ...
- 洛谷P1588 丢失的牛
P1588 丢失的牛 158通过 654提交 题目提供者JOHNKRAM 标签USACO 难度普及/提高- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 答案下载下来是对的,但 ...
- C++实现人员信息管理系统模拟
利用C++语言实现基本的学生信息管理系统: 要求: 1-设置管理员密码 2-人员数据有:姓名,性别等基本的信息 3-可以添加,删除,保存,统计 #include<iostream> #in ...
- Uiautomator 快速调试
UiAutomatorHelper使用 1.介绍: 他是一种可以快速调试的方法:其本身也是java问津相当于自动化脚本,查看该文件,其主要实现的功能如下 1.创建bu ...
- [Java多线程]-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 《转》sklearn参数优化方法
sklearn参数优化方法 http://www.cnblogs.com/nolonely/p/7007961.html 学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参 ...
- horizon源码分析(一)
源码版本:H版 一.写在前面 本来应该搭建horizon的development环境的,这样方便debug,但是由于各种报错,本人没有搭建成功,这也导致有很多源码疑问没有解决,后续可以继续补充这一部分 ...