MySQL中的嵌套查詢
嵌套查詢
是指在一個(gè)完整的查詢語(yǔ)句之中,包含若干個(gè)不同功能的小查詢;從而一起完成復(fù)雜查詢的一種編寫形式。
包含的查詢放在()里 , 包含的查詢出現(xiàn)的位置:
| 位置 | 含義 |
| SELECT之后 | 把查詢結(jié)果作為表頭使用 |
| FROM之后 | 把查詢結(jié)果作為表使用 |
| WHERE之后 | 把查詢結(jié)果作為查詢條件 |
| HAVING之后 | 把查詢結(jié)果作為過(guò)濾使用 |
SELECT之后
查看客戶的總訂單數(shù)


mysql> select cust_name,
-> (select count(*) from orders
-> where orders.cust_id = customers.cust_id )
-> as orders_num from customers;
+----------------+------------+
| cust_name | orders_num |
+----------------+------------+
| Coyote Inc. | 2 |
| Mouse House | 0 |
| Wascals | 1 |
| Yosemite Place | 1 |
| E Fudd | 1 |
+----------------+------------+
5 rows in set (0.01 sec)WHERE之后
查詢下單了TNT2的客戶id


mysql> select cust_id from orders
-> where order_num in
-> ( select order_num from orderitems
-> where prod_id = 'TNT2' );
+---------+
| cust_id |
+---------+
| 10001 |
| 10004 |
+---------+
2 rows in set (0.01 sec)實(shí)驗(yàn)
1.使用子查詢,返回購(gòu)買價(jià)格為10或以上的商品的客戶列表。您需,然后使用要使用Orderltems表查找匹配的訂單號(hào)(order num)Orders表檢索每個(gè)匹配訂單的客戶ID(cust id)。
mysql> select distinct cust_id from orders
-> where order_num in
-> ( select order_num from orderitems
-> where item_price >= 10 ) ;
+---------+
| cust_id |
+---------+
| 10001 |
| 10003 |
| 10004 |
+---------+
3 rows in set (0.01 sec)2.您需要知道訂購(gòu)產(chǎn)品BR01的日期。編寫一條SQL語(yǔ)句,使用子查詢確定哪些訂單(Orderltems中)購(gòu)買了prod_id為BR01的商品,然后返回客戶ID(cust_id),和訂單日期(order_date)。按訂單日期排序結(jié)果。
mysql> select order_date from orders
-> where order_num in
-> ( select order_num from orderitems
-> where prod_id = 'ANV01');
+---------------------+
| order_date |
+---------------------+
| 2023-09-01 00:00:00 |
+---------------------+
1 row in set (0.00 sec)3.更新前面的挑戰(zhàn),為購(gòu)買了prod id為AVN01的商品的任何客戶返回客戶電子郵件(Customers表中的custemail)。這里有一個(gè)提示:這涉及到SELECT語(yǔ)句,最里面的查詢從Orderltems返回order num,中間的查詢從Customers返回custid。
mysql> select cust_email from customers
-> where cust_id in
-> ( select cust_id from orders
-> where order_num in
-> ( select order_num from orderitems
-> where prod_id = 'ANV01' ) );
+-----------------+
| cust_email |
+-----------------+
| ylee@coyote.com |
+-----------------+
1 row in set (0.00 sec)4.您需要一個(gè)包含每個(gè)客戶訂購(gòu)的總額的客戶ID列表。編寫一條SOL語(yǔ)句,返回客戶ID(0rders表中的cust id)和total ordered,并使用一個(gè)子查詢返回每個(gè)客戶的訂單總數(shù)。按花費(fèi)從大到小的順序排列結(jié)果。這里有一個(gè)提示:你已經(jīng)使用SUM()來(lái)計(jì)算訂單總計(jì)。
mysql> SELECT cust_id,
-> ( SELECT SUM(quantity * item_price ) FROM orderitems
-> WHERE order_num IN
-> ( SELECT order_num FROM orders
-> WHERE orders.cust_id = customers.cust_id ) )
-> AS total_ordered
-> FROM customers
-> ORDER BY total_ordered DESC;
+---------+---------------+
| cust_id | total_ordered |
+---------+---------------+
| 10004 | 1000.00 |
| 10001 | 188.34 |
| 10005 | 125.00 |
| 10003 | 55.00 |
| 10002 | NULL |
+---------+---------------+
5 rows in set (0.00 sec)
5.編寫一條SQL語(yǔ)句,從Products表中檢索所有產(chǎn)品名稱(prodname),以及一個(gè)名為quant_sold的計(jì)算列,該列包含此商品的銷售總數(shù)(使用Orderltems表中的子查詢和SUM(quantity)檢索)。

mysql> SELECT prod_name,
-> (SELECT Sum(quantity)
-> FROM orderitems
-> WHERE products.prod_id=orderitems.prod_id)
-> AS quant_sold
-> FROM products;
+----------------+------------+
| prod_name | quant_sold |
+----------------+------------+
| .5 ton anvil | 10 |
| 1 ton anvil | 3 |
| 2 ton anvil | 1 |
| Detonator | NULL |
| Bird seed | 2 |
| Carrots | 50 |
| Fuses | NULL |
| JetPack 1000 | NULL |
| JetPack 2000 | 1 |
| Oil can | 1 |
| Safe | NULL |
| Sling | 1 |
| TNT (1 stick) | NULL |
| TNT (5 sticks) | 105 |
+----------------+------------+
14 rows in set (0.00 sec)總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql存儲(chǔ)過(guò)程多層游標(biāo)循環(huán)嵌套的寫法分享
這篇文章主要介紹了mysql存儲(chǔ)過(guò)程多層游標(biāo)循環(huán)嵌套的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
MySQL中二進(jìn)制與重做日志文件的基本概念學(xué)習(xí)教程
這篇文章主要介紹了MySQL中二進(jìn)制日志文件與重做日志文件的基本概念學(xué)習(xí)教程,講到了一些重做日志與二進(jìn)制日志的區(qū)別,需要的朋友可以參考下2015-11-11
MySQL事務(wù)與隔離級(jí)別的使用基礎(chǔ)理論
這篇文章主要介紹了MySQL事務(wù)的隔離級(jí)別詳情,事務(wù)隔離級(jí)別越高,為避免沖突所花費(fèi)的性能也就越多,即效率低。在“可重復(fù)讀”級(jí)別,實(shí)際上可以解決部分的虛讀問(wèn)題,但是不能防止update更新產(chǎn)生的虛讀問(wèn)題,要禁止虛讀產(chǎn)生,還是需要設(shè)置串行化隔離級(jí)別2023-02-02
修改MySQL8.0 默認(rèn)的數(shù)據(jù)目錄(快捷操作無(wú)配置)
這篇文章主要介紹了修改MySQL8.0 默認(rèn)的數(shù)據(jù)目錄(快捷操作無(wú)配置),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

