文章目錄
-
- 一、MYSQL與SQL是什麼?
- 二、SQL語言
-
- 1.USE選擇資料庫
- 2. SHOW檢視MySQL資料庫、表和内部資訊
- 3.SELECT語句從表中檢索一個或多個資料列
-
- 3.1 檢索單個列
- 3.2 檢索多個列
- 3.3 檢索所有列
- 3.4 檢索不同的行—DISTINCT
- 3.5 限制結果—LIMIT
- 4. 使用SELECT語句的ORDER BY子句,根據需要排序檢索出的資料
-
- 4.1 排序資料
- 4.2 按多個列排序
- 4.3 指定排序方向—DESC與ASC
- 4.4 使用ORDER BY和LIMIT的組合,能夠找出一個列中最高或最低的值
- 5. 使用SELECT語句的WHERE子句過濾資料
-
- 5.1 WHERE子句操作符
- 5.2 檢查單個值
- 5.3 不比對檢查
- 5.4 範圍檢查—BETWEEN
- 6.組合WHERE子句進行資料過濾以及如何使用NOT和IN操作符
-
- 6.1 組合WHERE子句
- 6.2 IN操作符
- 6.3 NOT操作符
- 7.使用LIKE操作符進行通配搜尋
-
- 7.1 百分号(%)通配符
- 7.2 下劃線(_)通配符
- 8.WHERE子句内使用正規表達式來更好地控制資料過濾
-
- 8.1 基本字元比對—REGEXP
- 8.2 進行OR比對—|
- 8.3 比對幾個字元之一 — []
- 8.4 比對範圍— -
- 8.5 比對特殊字元
- 8.6 比對字元類
- 8.7 比對多個執行個體
- 8.8 定位符
- 9. 利用SQL的聚集函數彙總表的資料
-
- 9.1 聚集函數
- 9.2 聚集不同的值—DISTINCT 的使用
- 9.3 組合聚集函數
- 10.分組資料
-
- 10.1 建立分組—GROUP BY子句
- 10.2 過濾分組—HAVING子句
- 10.3 分組與排序—GROUP BY和ORDER BY
- 10.4 SELECT子句順序
一、MYSQL與SQL是什麼?
MySQL是一種資料庫管理系統。它有如下優點:
為什麼有那麼多的公司和開發人員使用MySQL?
- 成本—MySQL是開放源代碼的,一般可以免費使用(甚至可以免費修改)
- 性能—MySQL執行很快(非常快)。.
- 可信賴—某些非常重要和聲望很高的公司、站點使用MySQL,這些公司和站點都用MySQL來處理自己的重要資料。
- 簡單—MySQL很容易安裝和使用。
SQL是結構化查詢語言( Structured QueryLanguage)的縮寫。SQL是一種專門用來與資料庫通信的語言。設計SQL的目的是很好地完成一項任務,即提供一種從資料庫中讀寫資料的簡單有效的方法。
SQL有如下的優點。
- SQL不是某個特定資料庫供應商專有的語言。幾乎所有重要的DBMS都支援SOL,是以,學習此語言使你幾乎能與所有資料庫打交道。
- SQL簡單易學。它的語句全都是由描述性很強的英語單詞組成,而且這些單詞的數目不多。
- SQL盡管看上去很簡單,但它實際上是一種強有力的語言,靈活使用其語言元素,可以進行非常複雜和進階的資料庫操作。
下面介紹MYSQL資料庫管理系統下支援的SQL語言。
二、SQL語言
1.USE選擇資料庫
使用USE打開資料庫,才能讀取其中的資料
2. SHOW檢視MySQL資料庫、表和内部資訊
傳回可用資料庫的一個清單。
傳回目前選擇的資料庫内可用表的清單。
傳回目前選擇的表的表名,它對每個字段傳回一行,行中包含字段名、數
據類型、是否允許NULL、鍵資訊、預設值以及其他資訊(如字段cust_id的auto increment)。
SHOW COLUMNS
FROM customers;
DESCRIBE customers;
是
SHOW COLUMNS FROM customers;
的一種快捷方式。
用于顯示廣泛的伺服器狀态資訊;
分别用來顯示建立特定資料庫或表的MySQL語句;
用來顯示授予使用者(所有使用者或特定使用者)的安全權限;
用來顯示伺服器錯誤或警告消息。
3.SELECT語句從表中檢索一個或多個資料列
為了使用SELECT檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。
3.1 檢索單個列
SELECT prod_name
FROM products;
利用SELECT語句從products表中檢索一個名為prod_name的列。所需的列名在SELECT關鍵字之後給出,FROM關鍵字指出從其中檢索資料的表名。
3.2 檢索多個列
SELECT prod_id, prod_name,prod_price
FROM products;
要想從一個表中檢索多個列,使用相同的SELECT語句。唯一的不同是必須在SELECT關鍵字後給出多個列名,列名之間必須以逗号分隔。
3.3 檢索所有列
SELECT *
FROM products;
如果給定一個通配符(*),則傳回表中所有列。
檢索未知列是使用通配符有一個大優點。由于不明确指定列名((因為星号檢索每個列),是以能檢索出名字未知的列。
3.4 檢索不同的行—DISTINCT
SELECT DISTINCT vend_id
FROM products;
使用
DISTINCT
關鍵字。此關鍵字訓示MySQL隻傳回不同的值。如果使用DISTINCT關鍵字,它必須直接放在列名的前面。
3.5 限制結果—LIMIT
SELECT prod_name
FROM products LIMIT 5;
使用SELECT語句檢索單個列。
LIMIT 5
訓示MySQL傳回不多于5行。
SELECT prod_name
FROM products LIMIT 5,5;
LIMIT 5,5訓示MySQL傳回從行5開始的5行。第一個數指定檢索的開始行,第二個數指定檢索的行數。
4. 使用SELECT語句的ORDER BY子句,根據需要排序檢索出的資料
為了明确地排序用SELECT語句檢索出的資料,可使用
ORDER BY
子句。ORDER BY子句取一個或多個列的名字,據此對輸出進行排序。預設,按照升序排序(A-Z)。ORDER BY子句必須是SELECT語句中的最後一條子句。可根據需要,利用它在一個或多個列上對資料進行排序。
4.1 排序資料
SELECT prod_name
FROM products
ORDER BY prod_name;
利用SELECT語句從products表中檢索一個名為prod_name的列,并且以
ORDER BY子句
訓示MySQL對prod_name列以字母順序排序資料.
4.2 按多個列排序
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price,prod_name;
選擇三個列并按其中兩個列對結果進行排序,列名之間用逗号分開即可
先按第一個列進行排序,相同在對相同的行使用後面的列進行排序。
4.3 指定排序方向—DESC與ASC
為了進行降序排序,必須指定DESC關鍵字。ASC(升序)是預設的關鍵字。
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC;
以價格降序排序
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name;
DESC關鍵字隻應用到直接位于其前面的列名。prod_price列指定DESC,對prod_name列不指定。是以,prod_price列以降序排序,而prod_name列(在每個價格内)仍然按标準的升序排序。
4.4 使用ORDER BY和LIMIT的組合,能夠找出一個列中最高或最低的值
SELECT prod_price
FROM products
ORDER BY prod_price DESC LIMIT 1;
ORDER BY子句的位置: 在給出ORDER BY子句時,應該保證它位于FROM子句之後。如果使用LIMIT,它必須位于ORDER BY之後。使用子句的次序不對将産生錯誤消息。
5. 使用SELECT語句的WHERE子句過濾資料
在SELECT語句中,資料根據WHERE子句中指定的搜尋條件進行過濾。WHERE子句在表名(FROM子句)之後給出
WHERE子句的位置:在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位于WHERE之後,否則将會産生錯誤
5.1 WHERE子句操作符
5.2 檢查單個值
SELECT prod_name,prod_price
FROM products
WHERE prod_name = 'fuses';
SELECT prod_name,prod_price
FROM products
WHERE prod_price <10;
5.3 不比對檢查
SELECT vend_id,prod_name
FROM products
WHERE vend_id <> 1003;
5.4 範圍檢查—BETWEEN
為了檢查某個範圍的值,可使用BETWEEN操作符。它需要兩個值,即範圍的開始值與結束值。BETWEEN比對範圍中所有的值,包括指定的開始值和結束值。
SELECT prod_name,prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
6.組合WHERE子句進行資料過濾以及如何使用NOT和IN操作符
6.1 組合WHERE子句
為了進行更強的過濾控制,MySQL允許給出多個WHERE子句。這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用。
AND操作符:
為了通過不止一個列進行過濾,可使用AND操作符給WHERE子句附加條件,AND操作符訓示MySQL檢索比對所有條件的行;還可以添加多個過濾條件,每添加一條就要使用一個AND
SELECT prod_id,prod_price,prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;
OR操作符:
OR操作符訓示MySQL檢索比對任一條件的行
SELECT prod_name,prod_price
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;
組合AND和OR帶來了一個有趣的問題:SQL(像多數語言一樣)在處理0R操作符前,優先處理AND操作符。
在WHERE子句中使用圓括号,任何時候使用具有AND和0R操作符的WHERE子句,都應該使用圓括号明确地分組操作符。不要過分依賴預設計算次序,即使它确實是你想要的東西也是如此。使用圓括号沒有什麼壞處,它能消除歧義。
SELECT prod_name,prod_price
FROM products
WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
6.2 IN操作符
IN操作符用來指定條件範圍,範圍中的每個條件都可以進行比對。IN取合法值的由逗号分隔的清單,全都括在圓括号中。
# IN操作符完成與OR相同的功能
SELECT prod_name,prod_price
FROM products
WHERE vend_id IN (1002,1003)
ORDER BY prod_name;
6.3 NOT操作符
WHERE子句中的NOT操作符有且隻有一個功能,那就是否定它之後所跟的任何條件。 MySQL支援使用NOT 對IN、 BETWEEN和EXISTS子句取反。
SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN (1002,1003)
ORDER BY prod_name;
7.使用LIKE操作符進行通配搜尋
前面介紹的所有操作符都是針對已知值進行過濾的。不管是比對一個還是多個值,測試大于還是小于已知值,或者檢查某個範圍的值,共同點是過濾中使用的值都是已知的。但是,這種過濾方法并不是任何時候都好用。例如,怎樣搜尋産品名中包含文本anvil的所有産品?用簡單的比較操作符肯定不行,必須使用通配符。利用通配符可以建立比較特定資料的搜尋模式。
為在搜尋子句中使用通配符,必須使用LIKE操作符。LIKE訓示MySQL後跟的搜尋模式利用通配符比對而不是直接相等比對進行比較。
7.1 百分号(%)通配符
在搜尋串中,%表示任何字元出現任意次數
除了一個或多個字元外,%還能比對0個字元。%代表搜尋模式中給定位置的0個、1個或多個字元。
# 找出所有以詞jet起頭的産品,使用了搜尋模式'jet%'。
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE 'jet%';
此例子使用了搜尋模式
'jet%'
。在執行這條子句時,将檢索任意以jet起頭的詞。%告訴MySQL接受jet之後的任意字元,不管它有多少字元。
通配符可在搜尋模式中任意位置使用,并且可以使用多個通配符。下面使用兩個通配符,它們位于模式的兩端。
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE '%anvi1%';
搜尋模式
'%anvi1%'
表示比對任何位置包含文本anvil的值,而不論它之前或之後出現什麼字元。
7.2 下劃線(_)通配符
下劃線的用途與%一樣,但下劃線隻比對單個字元而不是多個字元。下面進行對比:
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE '_ ton anvi1';
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '% ton anvi1';
8.WHERE子句内使用正規表達式來更好地控制資料過濾
正規表達式的作用是比對文本,将一個模式(正規表達式)與一個文本串進行比較。MySQL用WHERE子句對正規表達式提供了初步的支援,允許你指定正規表達式,過濾SELECT檢索出的資料。
8.1 基本字元比對—REGEXP
# 檢索列prod_name包含文本1000的所有行
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
這裡使用了正規表達式.000。
.
是正規表達式語言中一個特殊的字元。它表示比對任意一個字元,是以,1000和2000都比對且傳回。
比對不區分大小寫
MySQL中的正規表達式比對(自版本3.23.4後)不區分大小寫(即大寫和小寫都比對)。
為區分大小寫,可使用
,如WHERE prod name REGEXP BINARY ‘JetPack .000’.
BINARY關鍵字
8.2 進行OR比對—|
|
為正規表達式的OR操作符。它表示比對其中之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;
此SQL語句中使用了正規表達式1000 | 2000。
|
為正規表達式的OR操作符。它表示比對其中之一,是以1000和2000都比對并傳回。
8.3 比對幾個字元之一 — []
比對任何單一字元。可通過指定一組用
[]
括起來的字元來完成
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
這裡,使用了正規表達式[ 123] Ton。[ 123]定義一組字元,它的意思是比對1或2或3,是以,1 ton和2 ton都比對且傳回
這裡舉例以明确需要用[]來定義OR語句查找什麼。
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1|2|3 Ton'
ORDER BY prod_name;
這個輸出不是期望中的輸出,這是因為除非把字元|括在一個集合中,否則它将應用于整個串。
字元集合也可以被否定,即它們将比對除指定字元外的任何東西。
為否定一個字元集,在集合的開始處放置一個^即可。是以,盡管[123]比對字元1、2或3,但[ ^123]卻比對除這些字元外的任何東西。
8.4 比對範圍— -
集合可用來定義要比對的一個或多個字元。
[0-9]
比對0到9内數字,
[a-z]
比對任意字母字元等
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
8.5 比對特殊字元
正規表達式語言由具有特定含義的特殊字元構成。如果你需要比對這些字元,
應該怎麼辦?為了比對特殊字元,必須用\為前導。
\\-
表示查找
-
,
\\.
表示查找
.
。這種操作就是轉義。
SELECT vend_name
FROM vendors
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;
8.6 比對字元類
存在找出你自己經常使用的數字、所有字母字元或所有數字字母字元等的比對。為更友善工作,可以使用預定義的字元集,稱為字元類
8.7 比對多個執行個體
正規表達式重複元字元
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([O-9] sticks?\\)'
ORDER BY prod_name;
正規表達式
\\([0-9] sticks?\\)
解析:
\\(
比對(,
[0-9]
比對任意數字(這個例子中為1和5),
sticks?
比對stick和sticks (s後的?使s可選,因為?比對它前面的任何字元的0次或1次出現),
\\)
比對)。沒有?,比對stick和sticks會非常困難。
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit: ]]{4}'
ORDER BY prod_name;
[[ :digit: ]]{4}
比對連在一起的任意4位數字
與下方等價
SELECT prod_name
FROM products
WHERE prod_name REGEXP ' [O-9][O-9][0-9][O-9]'
ORDER BY prod_name;
8.8 定位符
為了比對特定位置的文本,需要使用定位元字元
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[O-9\\.]'
ORDER BY prod_name;
^
比對串的開始。是以,
^[0-9\\.]
隻在.或任意數字為串中第一個字元時才比對它們。
使REGEXP起類似LIKE的作用:
LIKE 和REGEXP的不同在于,
比對整個串而
LIKE
比對子串。利用定位符,通過用
REGEXP
開始每個表達式,用
^
結束每個表達式,可以使REGEXP的作用與LIKE一樣。
$
9. 利用SQL的聚集函數彙總表的資料
9.1 聚集函數
聚集函數(aggregate function):運作在行組上,計算和傳回單個值的函數。下面列出常用的SQL聚集函數
AVG()函數
AVG ()通過對表中行數計數并計算特定列值之和,求得該列的平均值。AVG()可用來傳回所有列的平均值,也可以用來傳回特定列或行的平均值。
AVG()可用來傳回所有列的平均值
# 使用AVG()傳回products表中所有産品的平均價格
SELECT AVG(prod_price) AS avg_price
FROM products;
AVG()也可以用來确定特定列或行的平均值
SELECT AVG (prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
這條SELECT語句與前一條的不同之處在于它包含了WHERE子句。此WHERE子句僅過濾出
vend_id為1003
的産品,是以avg price中傳回的值隻是該供應商的産品的平均值。
AVG ()
函數忽略列值為NULL的行。
COUNT()函數
COUNT()函數進行計數。可利用
COUNT ()
确定表中行的數目或符合特定條件的行的數目。
COUNT()函數有兩種使用方式:
- 使用
對表中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。COUNT(*)
- 使用
對特定列中具有值的行進行計數,忽略NULL值。COUNT (column)
# 傳回customers表中客戶的總數
SELECT COUNT(*) AS num_cust
FROM customers;
# 對具有電子郵件位址的客戶計數
SELECT COUNT(cust_emai1) AS num_cust
FROM customers;
MAX()函數
MAX()
傳回指定列中的最大值。MAX()要求指定列名
SELECT MAX(prod_price) AS max_price
FROM products;
雖然MAX()一般用來找出最大的數值或日期值,但MySQL允許将它用來傳回任意列中的最大值,包括傳回文本列中的最大值。
在用于文本資料時,如果資料按相應的列排序,則MAX()傳回最後一行。
并且MAX()函數忽略列值為NULL的行
MIN()函數
與
MAX()函數
相反
SUM()函數
SUM()用來傳回指定列值的和(總計)
SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num = 20005;
函數
SUM( quantity)
傳回訂單中所有物品數量之和,
WHERE子句
保證隻統計某個物品訂單中的物品。
sUM ()也可以用來合計計算值
SELECT SUM(item_price*quantity) AS tota1_price
FROM orderitems
WHERE order_num = 20005;
函數
SUM(item price*quantity)
傳回訂單中所有物品價錢之和,
WHERE子句
同樣保證隻統計某個物品訂單中的物品。
SUM()函數
忽略列值為NULL的行
9.2 聚集不同的值—DISTINCT 的使用
以上5個聚集函數都可以如下使用:
- 對所有的行執行計算,指定ALL參數或不給參數(因為ALL是預設行為)
- 隻考慮不同的值,指定DISTINCT參數
# 它與上面的SELECT語句相同,但使用了DISTINCT參數,是以平均值隻考慮各個不同的價格:
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products WHERE vend_id = 1003;
注意,如果指定列名,則隻能用于
DISTINCT
. DISTINCT不能用于
COUNT()
,是以不允許使用 COUNT (DISTINCT),否則會産生錯誤。
COUNT(*)
9.3 組合聚集函數
SELECT語句可根據需要包含多個聚集函數
SELECT COUNT(*)AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM products;
這裡用單條SELECT語句執行了4個聚集計算,傳回4個值(products表中物品的數目,産品價格的最高、最低以及平均值)。
10.分組資料
這涉及兩個新SELECT語句子句,分别是
GROUP BY子句
和
HAVING子句
。
目前為止,所有計算都是在表的所有資料或比對特定的WHERE子句的資料上進行的。
如果要傳回每個供應商提供的産品數目怎麼辦?或者傳回隻提供單項産品的供應商所提供的産品,或傳回提供10個以上産品的供應商怎麼辦?
分組允許把資料分為多個邏輯組,以便能對每個組進行聚集計算。
10.1 建立分組—GROUP BY子句
分組是在SELECT語句的GROUP BY子句中建立的
SELECT vend_id,COUNT(*)AS num_prods
FROM products
GROUP BY vend_id;
GROUP BY子句
訓示MySQL按vend_id排序并分組資料。這導緻對每個vend_id而不是整個表計算num prods一次。
GROUP BY子句
訓示MySQL分組資料,然後對每個組而不是整個結果集進行聚集。
在具體使用
GROUP BY子句
前,需要知道一些重要的規定:
可以包含任意數目的列。這使得能對分組進行嵌套,為資料分組提供更細緻的控制。
GROUP BY子句
- 如果在
中嵌套了分組,資料将在最後規定的分組上進行彙總。換句話說,在建立分組時,指定的所有列都一起計算(是以不能從個别的列取回資料)。
GROUP BY子句
中列出的每個列都必須是檢索列或有效的表達式(但不能是聚集函數)。如果在SELECT中使用表達式,則必須在GROUP BY子句中指定相同的表達式。不能使用别名。
GROUP BY子句
- 除聚集計算語句外,SELECT語句中的每個列都必須在
中給出。
GROUP BY子句
- 如果分組列中具有NULL值,則NULL将作為一個分組傳回。如果列中有多行NULL值,它們将分為一組。
必須出現在
GROUP BY子句
,
WHERE子句之後
ORDER BY子句之前
使用
WITH ROLLUP關鍵字
,可以得到每個分組以及每個分組彙總級别(針對每個分組)的值,
SELECT vend id, COUNT(*) AS num-prods
FROM products
GROUP BY vend id WITH ROLLUP;
10.2 過濾分組—HAVING子句
WHERE子句
不能完成任務,因為WHERE過濾指定的是行而不是分組。HAVING非常類似于WHERE。事實上,目前為止所學過的所有類型的WHERE子句都可以用HAVING來替代。唯一的差别是WHERE過濾行,而HAVING過濾分組。
# 列出至少具有2個訂單的所有顧客
SELECT cust_id,COUNT(*) AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
HAVING和WHERE的差别:
WHERE在資料分組前進行過濾,HAVING在資料分組後進行過濾。這是一個重要的差別,WHERE排除的行不包括在分組中。這可能會改變計算值,進而影響HAVING子句中基于這些值過濾掉的分組。
同時使用WHERE和HAVING子句
# 傳回過去12個月内具有兩個以上訂單的顧客
SELECT vend_id,COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*)>= 2;
10.3 分組與排序—GROUP BY和ORDER BY
雖然
GROUP BY
和
ORDER BY
經常完成相同的工作,但它們是非常不同的。下面彙總了它們之間的差别
我們經常發現用GROUP BY分組的資料确實是以分組順序輸出的。但情況并不總是這樣,它并不是SQL規範所要求的。此外,使用者也可能會要求以不同于分組的順序排序。僅因為你以某種方式分組資料(獲得特定的分組聚集值),并不表示你需要以相同的方式排序輸出。應該提供明确的ORDER BY子句,即使其效果等同于GROUP BY子句也是如此。
SELECT order_num,SUM(quantity*item_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item price) >= 50;
為按總計訂單價格排序輸出,需要添加ORDER BY子句
# 按總計訂單價格排序輸出,需要添加ORDER BY子句
SELECT order_num,SUM(quantity*item_price) AS ordertota1
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item _price) >= 50
ORDER BY ordertotal;
GROUP BY子句
用來按訂單号(order_num列)分組資料,以便
SUM(quantity*item _price)
函數能夠傳回總計訂單價格。
HAVING子句
過濾資料,使得隻傳回總計訂單價格大于等于50的訂單。最後,用
ORDER BY子句
排序輸出。
10.4 SELECT子句順序
下面展示
SELECT子句
中使用時必須遵循的次序,列出迄今為止所學過的子句。
如果對您有幫助,麻煩點贊關注,這真的對我很重要!!!如果需要互關,請評論或者私信!