共計 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 小編會繼續努力為大家帶來更多實用的文章!