iT邦幫忙

0

23. SQL Server學習日記- 子查詢

  • 分享至 

  • xImage
  •  

一、介紹子查詢(Subquery)

  • 以檢視表為基礎的技術,將建立檢視表的SELECT敘述寫入FROM子句中
  • 子查詢的SELECT敘述在執行完畢後會立即被消除
  • 需要賦予子查詢一個名稱,用過即被捨棄

二、建立子查詢

延續上一篇中建立的foodsum檢視表,與子查詢來做比較

  • 建立檢視表
--建立foodsum檢視表-- 
CREATE VIEW foodsum ( food_catalg, count_food)
AS
SELECT food_catalg, count(*)
	FROM food
GROUP BY food_catalg;
--確認檢視表資料內容—
SELECT food_catalg , count_food
From foodsum;
  • 建立子查詢foodsum
SELECT food_catalg , count_food
FROM(SELECT food_catalg, count(*) AS count_food
	FROM food
	GROUP BY food_catalg) AS foodsum;
    
--AS foodsum為賦予此子查詢的名稱,也是用過即捨棄的名稱--

這兩種方法執行結果是一樣的
https://ithelp.ithome.com.tw/upload/images/20231010/20163415NOkOGbeUkn.png

  • 子查詢foodsum執行順序 : 先執行內部SELECT敘述,再執行外圍SELECT敘述

https://ithelp.ithome.com.tw/upload/images/20231010/2016341559ewof6Dp8.png

三、純量子查詢 : 只能回傳單欄位或單筆記錄

一樣使用food資料表
https://ithelp.ithome.com.tw/upload/images/20231010/20163415kHxQRCAxG3.png

Q:想知道售出單價低於全部早餐品項平均販售單價的食物

1平均早餐單價的純量子查詢

SELECT AVG(sell_price)From food
--執行結果為26--

2篩選售出單價低於全部早餐品項平均販售單價的食物

SELECT food_id , food_name , sell_price
	FROM food
	WHERE sell_price < (SELECT AVG(sell_price)From food);
                        /--------此部分會變換成26-------/ 

執行結果 : 小於26的sell_price
https://ithelp.ithome.com.tw/upload/images/20231010/20163415D9c7TpC7Bp.png

  • 執行順序 : 先執行內部子查詢,也就是「平均早餐單價的純量子查詢」,再執行外圍篩選的SELECT敘述「售出單價低於全部早餐品項平均販售單價的食物」

https://ithelp.ithome.com.tw/upload/images/20231010/20163415FhuTeNrioJ.png


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言