程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 前端學數據庫之子查詢,學數據庫之子

前端學數據庫之子查詢,學數據庫之子

編輯:MySQL綜合教程

前端學數據庫之子查詢,學數據庫之子


×
目錄
[1]定義 [2]比較運算符 [3]修飾關鍵字[4][NOT]IN[5]存儲查詢結果

前面的話

  查詢數據庫,當查詢條件比較復雜時,常常需要用到子查詢。子查詢(Subquery)是指出現在其他SQL語句內的SELECT子句。本文將詳細介紹子查詢

 

定義

  子查詢(Subquery)是指出現在其他SQL語句內的SELECT子句

SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);

  其中,SELECT * FROM t1,稱為外層查詢(Outer Query/Outer Statement),SELECT col2 FROM t2,稱為子查詢(SubQuery)

  在使用子查詢時,需要注意的是

  1、子查詢指嵌套在查詢內部,且必須始終出現在圓括號內

  2、子查詢語句中可以包含多個關鍵字或條件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函數等

  3、子查詢的外層查詢可以是:SELECT、INSERT、UPDATE、SET或DO

  4、子查詢可以返回值:標量、一行、一列或者子查詢

 

比較運算符

  使用比較符是其中一類子查詢

operand comparison_operator subquery

  比較運算符包括=、!=、<>、<=> 、>、<、>=、<=

數據准備

  下載數據文件,建立數據庫,數據表,並存入相應記錄

  求所有電腦產品的平均價格,並且保留兩位小數,AVG、MAX、MIN、COUNT、SUM為聚合函數

  [注意]AVG()是一個用來求平均值的函數

  查詢所有價格大於平均價格的商品

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5391.30;

  通過子查詢來實現相同的需求

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

  查詢類型為“超記本”的商品價格

  查詢價格大於或等於"超級本"價格的商品

  系統提示錯誤,子查詢返回的多於一行,因為子查詢有3條結果,SELECT無法知道要大於子查詢中3條結果中的哪一個。所以,這時就需要用到接下來要介紹的修飾關鍵字

 

修飾關鍵字

  修飾關鍵字包括ANY、some、all三個,如果子查詢返回多個值時,可以使用它們

operand comparison_operator  ANY(子查詢)
operand comparison_operator  SOME(子查詢)
operand comparison_operator  ALL(子查詢)

情況處理

  1、運算符為>或>=,使用ANY關鍵字時,表示大於子查詢結果中的最小值

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >  ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超級本');

  由結果可知,返回的都大於4299的值,即最小值

  2、運算符為>或>=,使用ALL關鍵字時,表示大於子查詢結果中的最大值

  3、運算符為<或<=,使用ANY或SOME關鍵字時,表示小於子查詢結果中的最大值;使用ALL關鍵字時,表示小於子查詢結果中的最小值

  4、運算符為=,使用ANY或SOME關鍵字時,表示等於子查詢結果中的任意值;使用ALL關鍵字時,則返回空

 

[NOT]IN

operand comparison_operator [NOT] IN (subquery)

  第二種子查詢是由IN 或 NOT IN引發的子查詢,與比較運算符使用的方法基本相同 

其中,= ANY 運算符與 IN 等效,!= ALL或 <> ALL運算符與 NOT IN 等效

[NOT] EXISTS

  第三種子查詢是由EXISTS 或 NOT EXISTS引發的子查詢。如果子查詢返回任何行,EXISTS將返回TRUE;否則返回FALSE

 

存儲查詢結果

  我們可以把查詢結果統一存儲到一個新的數據表中,而不需要一條一條地錄入

  下面,先創建一個“商品分類”空表

   然後,查詢tdb_goods表的所有記錄,並且按"類別"分組

  將分組結果寫入到“商品分類”數據表中

INSERT [INTO] tbl_name [(col_name),...)] SELECT...;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved