iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

當查詢問題過於複雜時,就需要套用一個未知的值當作比較對象到原本的查詢內
一般而言,如果查詢內有另外一個查詢,則寫在外層的稱為主查詢,內層的叫子查詢或是內層查詢
「一組連續的查詢中,把內層查詢結果當作外層查詢的檢索值」這種查詢又稱非相關查詢
子查詢語句大多都在主查詢語句的比較條件內,像是WHERE或HAVING,有時也可以放在FROM後面
SELECT 要檢索欄位
FROM 資料表
WHERE 表達式 運算符(SELECT 內層檢索項目
FROM 資料表
WHERE 比較運算符 欄位或條件值);

  • 子查詢可以放在FROM WHERE HAVING子句中
  • 運算符包括比較條件,像是> = OR IN等
  • 比較條件分為
    (1)單列運算符(> = >= <= < <>)用在只有一個返回值的單列子查詢返回值比較運算
    (2)多列運算符(IN ANY ALL)用在一個以上返回值得多列子查詢返回值比較運算
    子查詢總共可以分:
  • 單列子查詢:此子查詢執行時只會返回一列資料
  • 多列子查詢:此子查詢執行時可能返回多列資料
  • 純量子查詢:此子查詢執行時返回的資料列僅含一個欄位
  • 多欄子查詢:此子查詢執行時返回的資料含有一個以上的欄位
  • 相關子查詢:此子查詢內的WHERE子句參照的比較欄位同時也是主查詢參照的欄位
    子查詢規則
  1. 子查詢左右兩側需要有小括號
  2. 如果子查詢置於比較條件運算式內,習慣上,子查詢寫在比較符號的右側
  3. 比對單列子查詢返回值需用單列運算符,而比對多列子查詢返回值,需用多列運算符
    多列子查詢特性
    IN:等於資料列中的任一個成員
    ANY:
    (1)前面必須加上= < > <= >= <>其中一個
    (2)把一個值和資料列中的每一個值比較,如果子查詢無返回職則評估結果為FALSE
    (3)>ANY表示>最小值。<ANY表示<最大值
    ALL:
    (1)前面必須加上= < > <= >= <>其中一個
    (2)把一個值和資料列中的每一個值比較,如果子查詢無返回職則評估結果為FALSE
    (3)>ALL表示>最大值。<ALL表示<最小值
    EXISTS運算子是判斷資料列是否有返回,有的話為TRUE否則為FALSE
    NO EXISTS則是相反,有的話為FALSE否則為TRUE
    SELECT 欄位1,...欄位N
    FROM 資料表
    WHERE EXISTS(子查詢);
    WITH子句
    當SQL有多個查詢時,可以用WITH子句命名子查詢區塊,簡化SQL子句,WITH要和SELECT一起使用
    WITH
    名稱1 AS(子查詢1區塊),
    名稱2 AS(子查詢2區塊)
    SELECT 名稱1.欄位
    FROM 名稱1
    WHERE 名稱1.欄位 比較運算符 名稱2.欄位

上一篇
Day 15 分項小計
下一篇
Day 17 複合查詢
系列文
跟著生成式AI一起從零開始學習資料庫,22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言