資料庫:系統資料庫
子查詢的用法
子查詢是一個 SELECT 查詢,它巢狀在 SELECT、INSERT、UPDATE、DELETE 語句或其它子查詢中。任何允許使用表示式的地方都可以使用子查詢。子查詢可以使我們的程式設計靈活多樣,可以用來實現一些特殊的功能。但是在效能上,往往一個不合適的子查詢用法會形成一個效能瓶頸。
如果子查詢的條件中使用了其外層的表的欄位,這種子查詢就叫作相關子查詢。相關子查詢可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 關於相關子查詢,應該注意:
(1)NOT IN的相關子查詢可以改用LEFT JOIN代替寫法。比如:
SELECT PUB_NAME FROM PUBLISHERS
WHERE PUB_ID NOT IN (SELECT PUB_ID
FROM TITLES
WHERE TYPE = 'BUSINESS')
我們用左外連線語句對上面的語句進行替換,先看下面的語句,PUBLISHERS 表與TITLES表進行左外連線
SELECT A.PUB_NAME,B.pub_id FROM PUBLISHERS A LEFT JOIN TITLES B
ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_ID
根據要求,我們只要查詢出上面pub_id為空的就行,對語句進行如下改進:
(2)NOT EXISTS的相關子查詢可以改用LEFT JOIN代替寫法。比如: