SQL Server2008子查詢舉例
1。由訂單資訊表(TOrder)中,找出最早訂單和最晚訂單,並按早晚進行排序。(這裡預設用升序)
(PS:比較測試中的子查詢)
SELECT * FROM TOrder
WHERE orderdate=(SELECT MIN(orderdate) FROM TOrder)
OR orderdate=(SELECT MAX(orderdate) FROM TOrder)
ORDER BY orderdate
2.找出訂貨量大於10的貨品資訊。
(PS:集合成員中的子查詢)
SELECT * FROMTGoods
WHERE id IN
(SELECT gid FROMTOrder o1
(1)由訂單資訊表中得到訂貨數量大於10的貨品編碼,即:
SELECT ordernum FROM TOrder as a WHERE
(SELECT SUM(quantity) FROM TOrder as b WHERE a.ordernum=b.ordernum)>10
再按照這裡選出的貨品編碼,由貨品資訊表中選出這些貨品的資訊,有如下的SQL語句。
SELECT * FROM TOrder WHERE ordernum IN
(SELECT ordernum
(SELECT SUM(quantity) FROM TOrder as b WHERE a.ordernum=b.ordernum)>10 )
3.找出有銷售業績的銷售人員資訊。
(PS:存在性測試中的子查詢)
SELECT * FROMTEmployee AS a WHERE EXISTS
(SELECT id FROMTOrder AS b WHERE a.id=b.eid)
4.查詢每種貨品訂貨量大於最小一次訂貨量的訂單資訊。
(PS:批量比較測試中的子查詢)
(1)大於最小一次訂貨量,也就是去年該種貨品訂貨量最小一次的訂單。有如下的SQL語句。
(PS:使用ANY關鍵字的比較測試)
SELECT * FROMTOrder AS a WHERE quantity>ANY
SELECT quantity FROM TOrder AS b WHERE a.gid=b.gid)
或:
SELECT * FROM TOrder o1 WHERE quantity>ANY
(SELECT quantity FROM TOrder o2 WHERE o1.gid=o2.gid)
(2)查詢每種貨品訂貨量最大的一次訂單資訊。
選擇每種貨品訂貨量最大的訂單。有如下的SQL語句。
(PS:使用ALL關鍵字的比較測試)
SELECT * FROM TOrder AS a WHERE quantity>=ALL
(SELECT quantity FROM TOrder AS b WHERE a.gid=b.gid)
或:
SELECT * FROM TOrder o1 WHERE quantity>=ALL
(SELECT quantity FROM TOrder o2 WHERE o1.gid=o2.gid)
5.在SQL Server ManagementStudio中,往“上海客戶”表中新增客戶資訊,然後通過子查詢語句將客戶資訊一次性新增到“客戶資訊”表中。
上海客戶表是通過SELECT…INTO語句建立一個空表,它的結構與“客戶資訊”表相同,所以資料是相容的。有如下的SQL語句。
(PS:使用子查詢向表中新增多條記錄)
通過SELECT…INTO語句建立一個空表:
SELECT *
INTO TshCustomer
FROM TCustomer
WHERE address LIKE '上海%'
INSERT TCustomer SELECT * FROM TshCustomer
--檢視新增結果
SELECT * FROM TCustomer