使用子查询检索数据
来源:互联网 发布:驱动注入源码 编辑:程序博客网 时间:2024/06/05 00:27
一、相关子查询
相关子查询对于外部查询的每一个值都会有一个结果与其对应,其计算的过程是这样的:1、扫描外查询的第一条记录
2、扫描子查询,并将第一条记录的对应值传给子查询,由此计算出子查询的结果
3、根据子查询的结果,返回外查询的结果。
4、重复上述动作,开始扫描外查询的第二条记录,第三条记录,直至全部扫描完毕
例句:
--查询本部门最高工资的员工?--方法一,使用嵌套子查询(非关联子查询)select * from emp a where (a.deptno,a.sal) in (select deptno,max(sal) from emp group by deptno);--方法二,使用关联子查询select * from emp a where a.sal=(select max(sal) from emp where deptno=a.deptno);
二、EXISTS
exists是判断 exits 后面的 sql 语句是否为真,若为真则整个sql句子成立,否则没有任何记录。例句:
SELECT 1 FROM DUAL WHERE EXISTS (SELECT 1 FROM DUAL WHERE 2 = 1);
三、WITH
语法:SELECT * FROM (--模拟生一个20行的数据 SELECT LEVEL AS lv FROM DUAL CONNECT BY LEVEL < 20) tt WHERE tt.lv > 10 AND tt.lv < 15WITH TT AS(--模拟生一个20行的数据 SELECT LEVEL AS lv FROM DUAL CONNECT BY LEVEL < 20) SELECT lv FROM TT WHERE lv > 10 AND lv < 15WITH tempName AS (SELECT ....)SELECT ...说明:
可认为在真正进行查询之前预先构造了一个临时表TT,之后便可多次使用它做进一步的分析和处理
优点:
增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标。
例句:
--普通查询SELECT * FROM (--模拟生一个20行的数据 SELECT LEVEL AS lv FROM DUAL CONNECT BY LEVEL < 20) tt WHERE tt.lv > 10 AND tt.lv < 15--with语句WITH TT AS(--模拟生一个20行的数据 SELECT LEVEL AS lv FROM DUAL CONNECT BY LEVEL < 20) SELECT lv FROM TT WHERE lv > 10 AND lv < 15
阅读全文
0 0
- 使用子查询检索数据
- 数据检索-子查询(subselect)
- 使用子查询复制数据
- Hibernate数据检索 QB查询
- 使用cellset检索数据
- 使用 DataReader 检索数据
- 39.笔记 MySQL学习——使用子查询实现多表检索
- oracle中使用子查询插入数据和装载数据
- 13、SQL Server 使用子查询和CTE提供数据之简单子查询
- 14、SQL Server 使用子查询和CTE提供数据之相关子查询
- oracle使用子查询插入和修改数据
- 使用SQL查询ArcGIS子版本的数据
- oracle 学习笔记(3)--使用子查询更新数据
- 使用游标查询子部门下的数据
- 12、SQL Server 使用子查询和CTE提供数据
- 数据检索-多表查询(sybase)
- ADO.NET-查询和检索数据
- 百度poi检索 查询POI数据
- IntelliJ IDEA工具的常用设置和使用图解
- 机器学习,计算机视觉,图像处理相关文献代码
- windows下plsql 设置 里面timestamp显示的格式
- C#关闭winform后程序仍在调试
- 第四周项目三—单链表应用
- 使用子查询检索数据
- 单独给sql server的自定义函数授权
- 安装Selenium2Library步骤以及加载Selenium2Library时为红色
- C#反射(Reflection)
- Material Design Button波纹效果
- spring cloud踩坑日志(2)-日志文件的配置
- 第七周项目二建立链队算法库
- 第七周项目5-排队看病模拟
- linux软件安装指南