博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 高级查询2 子查询
阅读量:5034 次
发布时间:2019-06-12

本文共 1519 字,大约阅读时间需要 5 分钟。

子查询:

定义,就是指查询中嵌套查询。

子查询可以出现在很多位置,比如: 当列、当表、当条件等

语法:

SELECT (子查询)
FROM (子查询)
WHERE (子查询)
GROUP BY 子句
HAVING (子查询)
ORDER BY 子句

注:子查询要用括号括起来。

如:

-- 找出与Ben同一个部门的员工
--第一步:先找出Ben所在的部门
select dept_id from s_emp where first_name = 'Ben';
--第二步:找出该部门的所有员工
select first_name from s_emp where dept_id = 数值
--第三步:
select first_name from s_emp where dept_id =(select dept_id from s_emp where first_name = 'Ben') and first_name != 'Ben';

 

子查询分类

1. 无关子查询
是指子查询中没有使用外部查询所定义的变量/别名。

2. 相关子查询

是指子查询中要使用外部查询所定义的变量/别名。

 

rownum

它总是从1开始,依次递增,绝不会产生GAP【间隔】

如:

select d.*,rownum from s_dept d where rownum = 1;
select d.*,rownum from s_dept d where rownum = 5;
select d.*,rownum from s_dept d where rownum > 5;
select d.*,rownum from s_dept d where rownum < 5;

-- rownum 的作用

 

2. 分页查询问题

-- 查询出员工表中第2页[第7行至第12行]数据。
//错误
select * from s_emp where rownum between 7 and 12;
select * from s_emp where rownum >=7 and rownum<= 12;
//正确:方法一
select * from (
--中间层,负责把上限行给取出来
select v1_.*,rownum rw_ from (
-- 业务的核心语句
select id,first_name,salary from s_emp
) v1_
where rownum <= 12
) v2_
where v2_.rw_ >= 7;

方法二:

select * from
(select * from s_emp where rownum <=12)
where id not in (select id from s_emp where rownum <7);

 

有关 exists 与 not exists 运算符

exists用来判断子查询是否有结果,如果有,则返回TRUE,否则,返回FALSE

 

关于子查询的集合操作

UNION 返回两个子查询的并集,不含重复记录
UNION ALL 返回两个子查询的并集,包含复复记录

如:

select id,first_name from s_emp where salary > 1200
union
select id,first_name from s_emp where salary between 850 and 1400;

INTERSECT 返回交集

MINUS 两个子查询相减

 

转载于:https://www.cnblogs.com/ty-v/p/7880583.html

你可能感兴趣的文章
常用前端笔记-css
查看>>
价值匹配策略SEO
查看>>
Hibernate原生SQL查询数据转换为HQL查询数据方法
查看>>
D3.js系列——初步使用、选择元素与绑定数据
查看>>
Go笔记(1):Go环境的安装
查看>>
菜鸟学IT之python3关于列表,元组,字典,集合浅认识!
查看>>
gulp + gulp-better-rollup + rollup 构建 ES6 开发环境
查看>>
关于position
查看>>
android之bitmap存入数据库发生内存溢出
查看>>
Hadoop HDFS Explorer连接Windows上的HDFS
查看>>
C语言转义字符基础总结
查看>>
第四阶段 08_Linux DHCP自动获取IP
查看>>
vue
查看>>
[转]分布式计算框架综述
查看>>
WorldWind源码剖析系列:窗口定制控件类WorldWindow
查看>>
配置Oracle透明网关用以连接 SQLServer经验总结
查看>>
MySQL导入数据遇到Error Number: 1467 Failed to read auto-increment value from storage engine错误...
查看>>
常见样式兼容性问题整理
查看>>
关于Mybatis-Plus的一些话题
查看>>
常用模块——os模块/sys模块/os.path模块/random模块/shutil模块
查看>>