SQL必知必會-筆記(七)查詢
阿新 • • 發佈:2019-02-01
聯結 nta mys 語句 地方 沒有 表結構 問題 我們
目錄
- 子查詢
- 聯結表
子查詢
即嵌套在其他查詢中的查詢
- 表結構說明:每個訂單包含訂單編號,客戶ID,訂單日期,在Orders表中。各訂單的物品存儲在相關的OrderItems表中,Orders表中不存儲客戶信息,只存儲客戶ID。客戶實際信息存儲在Customers表中。
問題1:檢索出訂購物品RGAN01的所有顧客
- 解:
- 步驟一:檢索出包含物品RGAN01的訂單
可以得到,select order_num from OrderItems where prod_id = ‘RGAN01‘;
- 步驟二:檢索出和訂單號20007,20008相關的顧客
可以得到,select cust_id from Orders where order_num in (20007,20008);
- 步驟三:檢索出這些客戶ID的顧客信息
可以得到,select cust_name,cust_contact from Customers where cust_id in (‘1000000004‘,‘1000000005‘);
總結:
select cust_name,cust_contact from Customers where cust_id in (select cust_id from Orders where order_num in (select order_num from OrderItems where prod_id = ‘RGAN01‘));
需要註意的地方:1. 作為子查詢的
SELECT
語句只能查詢單個列,企圖檢索多個列將返回錯誤;2. 對於能嵌套的子查詢的數目沒有限制,不過在實際使用的時候由於性能的限制,不能嵌套太多的子查詢。問題2:顯示Custormers表中每個顧客的訂單總數
- 解:
- 步驟一:檢索出Custormers表中的顧客列表
select cust_name,cust_state,cust_id from Customers order by cust_name;
- 步驟二:對於檢索出的顧客,檢索其在Orders表中的訂單數目
select count(*) from Orders where cust_id = ‘1000000003‘;
- 總結:
select cust_name, cust_state , (select count(*) from Orders where Orders.cust_id = Customers.cust_id) from Customers order by cust_name;
其中,where Orders.cust_id = Customers.cust_id
表示比較從Orders表中的cust_id和當前正從Customers表中檢索出的cust_id。
另外,雖然樣例可以完成需求,但並不是解決這種數據檢索的最有效方法,後面講到JOIN
方法時我們會重新做這道題。
聯結表
SQL必知必會-筆記(七)查詢