《MySQL必知必會學習筆記》:子查詢
子查詢
在開始了解子查詢之前,首先做下準備工作,建立3個表,
- 一個是customers表,當中包含:客戶名字、客戶ID、客戶Tel等。
- 一個是orders表,當中包含:訂單號、客戶ID、訂單時間等。
- 一個是ordersitems表,當中包含:訂單物品、訂單號、物品數量。
準備工作
1、建表
建customers表的命令例如以下,其他的表與之相似:
create table customers(cust_name varchar(10),cust_id int(10),cust_tel varchar(10));
2、插入內容
為customers表插入內容的命令例如以下,其他的與子相似:
insert into customers values(‘wu‘,2,‘1387234‘);
最後三個表的內容截圖例如以下:
子查詢
前面我們所學的東西都是簡單的查詢,即從單個數據庫表中檢索數據的單條語句。
究竟什麽是子查詢呢?通過以下這個樣例,相信我們就更好的理解了。
上面我們建了三個表,分別為customers/orders/ordersitems.
如今,假如,我們想看下訂購了物品 apple的全部客戶信息,應該如何檢索呢?
以下列出詳細的步驟:
- 第一步:在ordersitems表中找出包含有apple的訂單號order_id.
- 第二步:依據上一步查找的結果,找出訂單號為order_id的客戶ID(cust_id).
- 最後:依據上一步查找的結果,在customers表中依據客戶ID(cust_id)找出客戶信息。
如今我們依照步驟來查詢下,觀察下結果:
從上面能夠看出,我們就是依照步驟,將第一步的結果當做第二步的條件來進行查詢。將第二步的結果直接作為第三步的條件來進行查詢,最後得到終於的結果。
如今,我們分別把第一個子查詢(返回訂單號的那一個)變為子查詢組合到第二個查詢中。
第一個查詢的代碼例如以下:
select order_id from ordersitems where content=‘apple‘;
作為子查詢組合到第二個查詢後的代碼例如以下:
select cust_id from orders where order_id in (
select order_id from ordersitems where content=‘apple‘
);
結果例如以下,從結果能夠看出。與我們單個查詢的結果是一致的:
如今。我們就把上面的查詢作為子查詢組合到第三個查詢中。代碼例如以下:
select cust_name,cust_tel from customers where cust_id in(
select cust_id from orders where order_id in(
select order_id from ordersitems where content=‘apple‘)
)
);
註意:包含子查詢的select語句難以閱讀和調試。特別是他們較為復雜時。如上所看到的把子查詢分解為多行而且適當地進行縮進,能極大地簡化子查詢的使用。
在where子句中使用子查詢能夠編寫出功能非常強而且非常靈活的SQL語句。對於能嵌套的子查詢的數目沒有限制,只是在實際使用時因為性能的限制,不能嵌套太多的子查詢。
註意:在子查詢中。列必須匹配
作為計算字段使用子查詢
上面介紹的都是作為條件使用子查詢。以下就介紹下作為計算字段使用子查詢。
還是以一個樣例來進行說明。
假如須要顯示customers表中每一個客戶的訂單總數。
為運行這個操作,過程例如以下:
- 從customers表中檢索客戶列表
- 對於檢索出的每一個客戶。統計其在orders表中的訂單數目。
比如:查詢客戶id=1的訂單數的命令例如以下:
select count(*) as order_total from orders where cust_id=1;
將上面的命令作為字段的子查詢的代碼例如以下:
select cust_name,cust_tel,(select count(*) from orders where orders.cust_id==customers.cust_id) from customers ;
小結
子查詢能夠理解為嵌套,這裏方便理解一點。可是在我們使用子查詢的過程中。要先分步驟來完畢,然後將子查詢一個一個的組合起來,直到這個子查詢增加之後得到的結果是符合要求的。然後繼續將下一個子查詢組合進行直至完畢全部的子查詢都全部正確的增加。
《MySQL必知必會學習筆記》:子查詢