MySQL必知必會 學習筆記 第十四章 使用子查詢

吃著火鍋x唱著歌發表於2020-12-12

MySQL 4.1引入了子查詢。

任何SQL語句都是查詢,但此術語一般指SELECT語句。

有兩張表,一張是語言表,一張是電影表:
在這裡插入圖片描述
選出語言是英語的電影:

SELECT title
FROM film
WHERE language_id IN (SELECT language_id
                      FROM language
                      WHERE name = 'English');

能巢狀的子查詢沒有數量限制,但由於效能限制,不能巢狀太多子查詢。

上例中的IN也可換成等於號。

子查詢並不總是執行這種型別的資料檢索的最有效的方法,效能會差。

子查詢的執行總是從內到外。

子查詢也可作為計算欄位,下例計算出每種語言的電影數:

SELECT language_id,
       name,
       (SELECT COUNT(*)
        FROM film
        WHERE film.language_id = language.language_id) AS num
FROM language;

執行它:
在這裡插入圖片描述
上例顯示film表中僅有英文電影。上例中的子查詢被執行了六次,因為有六種語言。

如果子查詢中不使用完全限定的表名:
在這裡插入圖片描述
此時MySQL假定是對film表中language_id的自身比較,子查詢總是返回全部值。

在除錯巢狀的子查詢SQL語句時,可先執行子查詢,看是否符合預期,符合後再拼接子查詢,可節約找出為什麼查詢不正常的時間。

相關文章