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分钟可以查到,前期调 ...
随机推荐
- 洛谷 P3391 【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 【Socket】从零打造基于Socket在线升级模块
一.前言 前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...
- QTREE6 - Query on a tree VI 解题报告
QTREE6 - Query on a tree VI 题目描述 给你一棵\(n\)个点的树,编号\(1\)~\(n\).每个点可以是黑色,可以是白色.初始时所有点都是黑色.下面有两种操作请你操作给我 ...
- 常用Transformation算子
map 产生的键值对是tupple, split分隔出来的是数组 一.常用Transformation算子 (map .flatMap .filter .groupByKey .reduc ...
- 【bzoj3678】wangxz与OJ
Portal -- > bzoj 3678 Solution 这题==真实智力康复qwq 然而众多神犇都说是10min写完的题我..可能写了近1h吧==深深感受到自己的弱小qwq (丢上来是因为 ...
- 洛谷P2345 奶牛集会
题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚 ...
- WebSocket解释及如何兼容低版本浏览器
WebSocket类似HTTP 协议,是为了弥补HTTP 协议的缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息. WebSocket 协议在2008年诞生,2011年成为国 ...
- (转)C++常见问题: 字符串分割函数 split
http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速 ...
- Tensorflow在CIFAR-10构建CNN
使用Tensorflow在CIFAR-10二进制数据集上构建CNN 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 利用Tensorflow读取 ...
- Ubuntu+NDK编译支持HTTPS的libcurl
参考文章:1.NDK环境配置 http://blog.csdn.net/smfwuxiao/article/details/65877092.libcurl的配置修改 http://piggyq.co ...