使用子查询检索数据

简介: 一、相关子查询 相关子查询对于外部查询的每一个值都会有一个结果与其对应,其计算的过程是这样的: 1、扫描外查询的第一条记录 2、扫描子查询,并将第一条记录的对应值传给子查询,由此计算出子查询的结果 3、根据子查询的结果,返回外查询的结果。

一、相关子查询

相关子查询对于外部查询的每一个值都会有一个结果与其对应,其计算的过程是这样的:
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 < 15

WITH TT AS(--模拟生一个20行的数据
           SELECT LEVEL AS lv
             FROM DUAL
          CONNECT BY LEVEL < 20) 
SELECT lv
  FROM TT
 WHERE lv > 10 AND lv < 15
WITH 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
目录
相关文章
queryDsl多表联合查询,任意查询联合字段
这是我的通用方法 package com.spark.bitrade.service.Base; import com.querydsl.core.Tuple; import com.
4164 0
|
3月前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
关系型数据库 MySQL Python
MySql查询出两张表中不同的数据
MySql查询出两张表中不同的数据
124 0
|
存储 缓存 NoSQL
TairSearch:加速多列索引查询
互联网及传统行业应用服务的关键数据一般存储在MySQL这类的关系型数据库中。如需缓解数据库访问压力,可引入Redis等缓存系统承担热数据的查询,以此提升查询效能。然而业务场景如果是在数据库上做随意多列组合索引查询或者like模糊匹配查询,使用普通的KV缓存系统并不能完全承载住,往往需要引入lua或者外部计算等额外的联合查询匹配过滤机制。TairSearch是一个实时全内存检索服务,其核心的倒排索引
296 1
TairSearch:加速多列索引查询
|
关系型数据库 MySQL 数据库
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询
114 0
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询
|
关系型数据库 MySQL 数据库
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询2
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询2
|
存储 SQL 关系型数据库
什么是索引覆盖?什么是索引下推?
什么是索引覆盖?什么是索引下推?
358 0
什么是索引覆盖?什么是索引下推?
|
SQL 关系型数据库 MySQL
SQL查询模型和子查询再学习
SQL查询模型和子查询再学习
SQL查询模型和子查询再学习
|
SQL 关系型数据库 MySQL
检索单个列
mysql检索单个列
94 0
|
SQL 数据库
数据库查询——组合表查询
数据库查询——组合表查询
141 0