六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

什么是mysql子查詢?如何使用子查詢進行過濾?

[摘要]子查詢MySQL 4.1引入了對子查詢的支持,所以要想使用本章描述的SQL,必須使用MySQL 4.1或更高級的版本。SELECT語句 是SQL的查詢。迄今為止我們所看到的所有 SELECT 語句都是簡單查詢,即從單個數據庫表中檢索數據的單條語句。查詢(query) 任何SQL語句都是查詢。但此術...
子查詢

MySQL 4.1引入了對子查詢的支持,所以要想使用本章描述的SQL,必須使用MySQL 4.1或更高級的版本。

SELECT語句 是SQL的查詢。迄今為止我們所看到的所有 SELECT 語句都是簡單查詢,即從單個數據庫表中檢索數據的單條語句。

查詢(query) 任何SQL語句都是查詢。但此術語一般指 SELECT語句。

SQL還允許創建子查詢(subquery),即嵌套在其他查詢中的查詢。為什么要這樣做呢?理解這個概念的最好方法是考察幾個例子。

利用子查詢進行過濾

本書所有章中使用的數據庫表都是關系表(關于每個表及關系的描述,請參閱附錄B)。訂單存儲在兩個表中。對于包含訂單號、客戶ID、訂單日期的每個訂單, orders 表存儲一行。各訂單的物品存儲在相關的orderitems 表中。 orders 表不存儲客戶信息。它只存儲客戶的ID。實際的客戶信息存儲在 customers 表中。現在,假如需要列出訂購物品 TNT2 的所有客戶,應該怎樣檢索?下面列出具體的步驟。

(1) 檢索包含物品 TNT2 的所有訂單的編號。

(2) 檢索具有前一步驟列出的訂單編號的所有客戶的ID。

(3) 檢索前一步驟返回的所有客戶ID的客戶信息。

上述每個步驟都可以單獨作為一個查詢來執行。可以把一條 SELECT語句返回的結果用于另一條 SELECT 語句的 WHERE 子句。

也可以使用子查詢來把3個查詢組合成一條語句。

第一條 SELECT 語句的含義很明確,對于 prod_id 為 TNT2 的所有訂單物品,它檢索其 order_num 列。輸出列出兩個包含此物品的訂單:

輸入:

select order_num from orderitems where prod_id = 'TNT2';

輸出:

QQ截圖20170510092853.png

下一步,查詢具有訂單 20005 和 20007 的客戶ID。利用 IN子句,編寫如下的 SELECT 語句:

輸入:

select cust_id from orders where order_num in (20005,20007);

輸出:

QQ截圖20170510095439.png

現在,把第一個查詢(返回訂單號的那一個)變為子查詢組合兩個查詢。請看下面的 SELECT 語句:

輸入:

select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'TNT2');

輸出:

QQ截圖20170510095439.png

分析:在 SELECT 語句中,子查詢總是從內向外處理。在處理上面的SELECT 語句時,MySQL實際上執行了兩個操作。

首先,它執行下面的查詢:

select order_num from orderitems where prod_id = 'TNT2';

此查詢返回兩個訂單號: 20005 和 20007 。然后,這兩個值以 IN 操作符要求的逗號分隔的格式傳遞給外部查詢的 WHERE 子句。外部查詢變成:

select cust_id from orders where order_num in (20005,20007);

可以看到,輸出是正確的并且與前面硬編碼 WHERE 子句所返回的值相同。

格式化SQL 包含子查詢的 SELECT 語句難以閱讀和調試,特別是它們較為復雜時更是如此。如上所示把子查詢分解為多行并且適當地進行縮進,能極大地簡化子查詢的使用。

現在得到了訂購物品 TNT2 的所有客戶的ID。下一步是檢索這些客戶ID的客戶信息。檢索兩列的SQL語句為:

輸入:

select cust_name,cust_contact from customers where cust_id in (10001,10004);

可以把其中的 WHERE 子句轉換為子查詢而不是硬編碼這些客戶ID:

輸入:

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 = 'TNT2'));

輸出:

QQ截圖20170510100155.png

分析:為了執行上述 SELECT 語句,MySQL實際上必須執行3條 SELECT語句。最里邊的子查詢返回訂單號列表,此列表用于其外面的子查詢的 WHERE 子句。外面的子查詢返回客戶ID列表,此客戶ID列表用于最外層查詢的 WHERE 子句。最外層查詢確實返回所需的數據。

可見,在 WHERE 子句中使用子查詢能夠編寫出功能很強并且很靈活的SQL語句。對于能嵌套的子查詢的數目沒有限制,不過在實際使用時由于性能的限制,不能嵌套太多的子查詢。

列必須匹配 在 WHERE 子句中使用子查詢(如這里所示),應該保證 SELECT 語句具有與 WHERE 子句中相同數目的列。通常,子查詢將返回單個列并且與單個列匹配,但如果需要也可以使用多個列。

雖然子查詢一般與 IN 操作符結合使用,但也可以用于測試等于( = )、不等于( <> )等。

子查詢和性能 這里給出的代碼有效并獲得所需的結果。但是,使用子查詢并不總是執行這種類型的數據檢索的最有效的方法。更多的論述,請參閱第15章,其中將再次給出這個例子。

【相關推薦】

  1. mysql創建計算字段使用子查詢

  2. mysql中什么是聯結和關系表?

  3. 為什么使用聯結和如何創建聯結

  4. MySQL中WHERE子句重要性和如何聯結多個表

以上就是什么是mysql子查詢?如何利用子查詢進行過濾?的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 全黄色毛片 | 日日摸夜夜添夜夜添97 | 天堂一码二码专区 | 亚洲免费网址 | 性色a v 一区 | 日本视频在线观看免费 | 天天爱夜夜操 | 青青青国产精品视频 | 伊人伊人影院 | 五月天伊人网 | 日韩在线视频线视频免费网站 | 天堂网中文在线 | 欧美性黑人极品hd网站 | 日本人的一区二区三区四区 | 色国产精品一区在线观看 | 亚洲女人国产香蕉久久精品 | 日韩一区二区精品久久高清 | 日韩生活片 | 欧美在线观看视频网站 | 青青草美女 | 亚洲精品 国产 日韩 | 日本特黄特色aaa大片免费欧 | 在线天堂中文在线资源网 | 亚洲精品第一国产综合高清 | 亚洲国产成人久久精品影视 | 亚洲永久在线 | 四房婷婷 | 日韩a级毛片| 庆余年第二部在线观看免费完整版 | 日韩成人激情 | 欧美视频三级 | 无间电视剧在线 | 最近新的免费韩国视频 | 色综合一区二区三区 | 色网站综合 | 亚洲综合色网 | 日本高清视频在线三级 | 我爱我爱色成人网 | 青春久草| 青草视频网站 | 午夜在线观看免费观看大全 |