共计 1288 个字符,预计需要花费 4 分钟才能阅读完成。
这篇文章主要介绍“mysql 怎么用子查询检索数据”,在日常操作中,相信很多人在 mysql 怎么用子查询检索数据问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql 怎么用子查询检索数据”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
一、相关子查询
相关子查询对于外部查询的每一个值都会有一个结果与其对应,其计算的过程是这样的:
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
–with 语句
WITH TT AS(– 模拟生一个 20 行的数据
SELECT LEVEL AS lv
FROM DUAL
CONNECT BY LEVEL 20)
SELECT lv
FROM TT
WHERE lv 10 AND lv
到此,关于“mysql 怎么用子查询检索数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!