1. 程式人生 > >SQL Server2008子查詢舉例

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

WHERE (SELECT SUM(quantity) FROM TOrder o2 WHEREo1.gid=o2.gid)>10)

(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

FROM TOrder as a WHERE

 (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