SQL子查詢執行個體

來源:互聯網
上載者:User

   SQL子查詢執行個體介紹:

  子查詢是在一個查詢內的查詢。子查詢的結果被DBMS使用來決定包含這個子查詢的進階查詢的結果。在子查詢的最簡單的形式中,子查詢呈現在另一條SQL語句的WHERE或HAVING子局內。

  列出其銷售目標超過各個銷售人員定額綜合的銷售點。

  SELECT CITY

  FROM OFFICES

  WHERE TARGET > (SELECT SUM(QUOTA)

  FROM SALESREPS

  WHERE REP_OFFICES = OFFICE)

  SQL子查詢一般作為WHERE子句或HAVING子句的一部分出現。在WHERE子句中,它們協助選擇在查詢結果中呈現的各個記錄。在HAVING子句中,它們版主選擇在查詢結果中呈現的記錄組。

  子查詢和實際的SELECT語句之間的區別:

  在常見的用法中,子查詢必鬚生成一個資料欄位作為它的查詢結果。這意味著一個子查詢在它的SELECT子句中幾乎總是有一個選擇項。

  ORDER BY子句不能在子查詢中指定,子查詢結果被中查詢在內部使用,對使用者來說永遠是不可見的,所以對它們進行排序沒有一點意義。

  呈現在子查詢中的欄位名可能引用主查詢中表的欄位。

  在大多數實現中,字查詢不能是幾個不同的SELECT語句的UNION,它只允許一個SELECT。

  WHERE中的子查詢

  子查詢最常用在SQL語句的WHERE子句中。

  列出其定額小於全公司銷售目標的10%的銷售人員。

  SELECT NAME

  FROM SALESREPS

  WHERE QUOTA < (.1 * (SELECT SUM(TARGET)) FROM OFFICES)

  (子查詢產生用來測試搜尋條件的值。)

  列出其公司的銷售目標超過各個銷售人員定額總和的銷售點。

  SELECT CITY

  FROM OFFICES

  WHERE TARGET > (SELECT SUM(QUOTA)

  FROM SALESREPS

  WHERE REP_OFFICE = OFFICE )

  (執行描述:主查詢從OFFICES表中取得資料,WHERE子句選擇在查詢結果中包括哪個銷售點。SQL用WHERE子句中的測試條件逐個記錄的掃描OFFICES表中的記錄,WHERE子句把目前記錄中TARGET欄位的值和子查詢產生的值進行比較。要測試TAEGET值,SQL執行子查詢,找到當前銷售點中銷售人員的定額的總和。子查詢產生一個數,WHERE子句把這個數和TARGET值進行比較,基於比較選定或排除當前的銷售點。)

  (當DBMS檢查子查詢中的搜尋條件時,外部參考中的欄位值從主查詢檢測的目前記錄中提取 。)

  子查詢搜尋條件

  *子查詢比較測試 = <> < <= > >=(在這個類型的測試中,子查詢必須產生一個合適資料類型的值,即,它必須產生一個查詢結果記錄,這個查詢結果記錄只包含一個欄位。如果查詢產生了多個記錄或多個欄位,比較久沒有意義了,SQL將報告一個錯誤。如果子查詢不產生記錄或產生一個NULL值,比較測試將返回NULL)。

  *子查詢群組成員測試(IN)

  *存在測試(EXISTS)

  *限定性比較測試 ANY ALL

  子查詢和連結

  子查詢編寫的許多查詢也可以寫成多表查詢或串連。

  列出在西部地區銷售點工作的銷售人員(表1)的名字(表2)。

  SELECT NAME,AGE

  FROM SALESREPS

  WHERE REP_OFFICE IN (SELECT OFFICE

  FROM OFFICES

  WHERE REGION = ‘Western’)

  SELECT NAME,AGE

  FROM SALESREPS,OFFICES

  WHERE REP_OFFICE = OFFICE

  AND REGION = ’Western’

  下一篇 資料庫更新

  列出銷售量超過平均定額的銷售人員的名字和年齡。

  SELECT NAME,AGE

  FROM SALESREPS

  WHERE QUOTA > (SELECT AGE(QUOTA)

  FROM SALESREPS)

  (在這個例子中,內部查詢是一個匯總查詢,外部查詢不是,所以不能把兩個查詢組合成一個串連。) HAVING查詢中的子查詢

  當一個子查詢呈現在HAVING子句中時,它是作為由HAVING子句執行的記錄組選擇的一部分工作的。

  列出對ACI生產的產品,其取得的平均訂單大小超過了總的平均訂單大小的銷售人員。

  SELECT NAME,AVG(AMOUNT)

  FROM SALESREPS,ORDERS

  WHERE EMPL_NUM = REP

  AND MFR = ‘ACI’

  GROUP BY NAME

  HAVING AVG(AMOUNT) > (SELECT AVG(AMOUNT)

  FROM ORDERS)

  列出對ACI生產的產品,其取得的平均訂單大小至少與總平均訂單大小一樣大的銷售人員。

  SELECT NAME,AVG(AMOUNT)

  FROM SALESREPS,ORDERS

  WHERE EMPL_NUM = REP

  AND MFR = ’ACI’

  GROUP BY NAME,EMPL_NUM

  HAVING AVG(AMOUNT) >= (SELECT AVG(AMOUNT)

  FROM ORDERS

  WHERE REP = EMPL_NUM)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.