Saturday, March 16, 2024

8/5 MY SQL note

子查詢(Subquery)


小小秘訣:使用子查詢時,可先做一次子查詢的條件無誤之後再做整筆查詢。較不會出錯!!
可與以下 SELECT、INSERT...INTO ..SELECT、INSERT...INTO、DELETE、UPDATE 陳述式搭配使用。

範例1.和供應商”桶一”相同城市的供應商!
select 供應商 , 城市
from supplier
where 城市 =
(select 城市
from supplier
where 供應商="桶一")and 供應商< >桶一" # 供應商不等於桶一

範例2.與客戶"琴攝影"同一個城市的客戶
select 公司名稱,城市
from customer
where 城市 =
(select 城市
from customer
where 公司名稱 = "琴攝影")and 公司名稱 < > "琴攝影"客戶不等於琴攝影
範例3.和烤肉醬同一個供應商的商品有?
select 產品,供應商編號
from product
where 供應商編號 =
(
select 供應商編號
from product
where 產品="烤肉醬") and 產品< >"烤肉醬"



述詞的使用:子查詢可搭配述詞,在where子句中判斷使用。搜尋子查詢結果集的運算式,搭配[ANY | ALL | SOME]....等述詞使用。
在子查詢的結果值不只一個時會用IN述詞。
使用 ANY 或 SOME 述詞,這兩者為同義字,能擷取滿足比較子查詢擷取記錄的主查詢記錄。

範例1.比所有起司類商品還貴的商品

select 產品 , 單價
from product

where 單價 > all
(select 單價  from product
where 產品 like'%起司%'
order by 單價 desc
)

範例2.比任何一種起司類商品還貴的商品
select 產品 , 單價

from product
where 單價 > any
(select 單價 from product
where 產品 like'%起司%'
order by 單價 desc
)
and 產品 not like '%起司%'

範例3.查詢所有訂單日期在任一個業務人員雇用日期之後的記錄
select 訂單號碼 ,訂單日期

from ord
where 訂單日期 > any
(select 雇用日期
from emp
where 職稱 = '業務'
)

select 產品 , 單價 , 庫存量


from product

where 產品編號 in

(select 產品編號

from detail

where 單價>25

)

No comments:

Post a Comment