第十四章 使用子查詢

來源:互聯網
上載者:User

標籤:問題分析   為什麼   最可靠的   簡化   購物   還需要   select   寫入程式碼   嵌套   

學習目的:瞭解是子查詢以及如何使用它們。 子查詢:查詢(query)任何SQL語句都是查詢。但此術語一般指SELECT語句。 SQL還允許建立子查詢(subquery),即嵌套在其他查詢中的查詢。 利用子查詢進行過濾:Q:檢索出訂購物品TNT2的所有客戶。 問題分析:(3)檢索前一步驟返回的所有客戶ID的客戶資訊。SELECE cust_nameFROM customersWHERE  cust_id = (SELECT cust_id,FROM ordersWHERE  order_num =  (SELECT order_numFROM orderitemsWHERE prod_id =  ‘TNT2 ‘))(2)檢索具有前一步驟列出的訂單編號的客戶ID。SELECT cust_id,FROM ordersWHERE  order_num =  (SELECT order_numFROM orderitemsWHERE prod_id =  ‘TNT2 ‘)(1)檢索出包含物品TNT2的所有訂單編號。SELECT order_numFROM orderitemsWHERE prod_id =  ‘TNT2 ‘ #子查詢。Q檢索出訂購物品TNT2的所有客戶。 SELECT cust_name, cust_contactFROM customersWHERE  cust_id IN (SELECT cust_id                   FROM orders                   WHERE  order_num IN (SELECT order_num                                        FROM orderitems                                        WHERE prod_id =  ‘TNT2 ‘)); 格式化SQL:包含子查詢的SELECT語句難以閱讀和調試,特別它們較為複雜時更是如此。如上所示把子查詢分解為多行並且適當地進行縮排,能極大簡化子查詢的使用。 在WHERE子句中使用子查詢能夠編寫出功能性很強並且很靈活的SQL語句。對於能嵌套的子查詢的數目沒有限制,不過在實際使用時由於效能的限制,不能嵌套太多的子查詢。 列必須匹配:在WHERE子句中使用子查詢,應該保證SELECT語句具有與WHERE子句中相同數目的列。 作為計算欄位使用子查詢:【還需要研究】使用子查詢的另一種方法是建立計算欄位。Q:需要顯示customers表中每個客戶的訂單總數。訂單和相應的客戶ID儲存在orders表中。 問題分析:(1)從customers表中檢索客戶列表(2)對於檢索出的每個客戶,統計其在orders表中的訂單數目。 #作為計算欄位使用子查詢。Q檢索customers表中每個客戶的訂單總數。????SELECT COUNT(*) AS ordersFROM ordersWHERE cust_id = 10001; SELECT cust_name,       cust_state,       (SELECT COUNT(*)        FROM orders        WHERE orders.cus_id = customers.cust_id) AS ordersFROM customersORDER BY cust_name;  相互關聯的子查詢(correleted subquery)涉及外部查詢的子查詢。這種類型的子查詢稱為相互關聯的子查詢。任何時候只有列名可能有多義性,就必須使用這種文法(表名和列名由一個句點分個)。 如果不完全限定列名,MySQL將假定你是對orders表中的cust_id進行 自身比較。而SELECT COUNT(*) FROM orders WHERE cust_id = cust_id; 總是返回orders表中的訂單總數(因為MySQL查看每個訂單的cust_id 是否與本身匹配,當然,它們總是匹配的)。 逐漸增加子查詢來建立查詢:用子查詢測試和調試查詢很有技巧性,特別是在這些語句的複查性不斷增加的情況下更是如此。用子查詢建立(和測試)查詢最可靠的方式是逐漸進行,這與MySQL處理它們的方法相同。首先,建立和測試最內層的查詢。然後,用寫入程式碼資料建立和測試外層查詢,並且僅在確認它正常後才嵌入子查詢。這時,再次測試它。對於要增加的每個子查詢,重複這些步驟。這樣做僅給構造查詢增加了一點點時間,但節省了以後(找出查詢為什麼不正常)的大量時間,並且極大提高了查詢一開始就正常工作的可能性。            

第十四章 使用子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.