一、創(chuàng)建計算字段
1、拼接
SELECT CONCAT(vend_name,' (',vend_country,')')
FROM vendors
ORDER BY vend_name;
以上的SELECT語句連接以下4個元素:
☆存儲在vend_name列中的名字
☆包含一個空格和一個左圓括號的串
☆存儲在vend_country列中的國家
☆包含一個右圓括號的串
2、使用MySQL的RTRIM()去掉串右邊的空格,LTRIM()去掉串左邊的空格,TRIM()去掉串左右兩邊的空格
SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')')
FROM vendors
ORDER BY vend_name;
3、使用別名
SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;
二、使用數(shù)據(jù)處理函數(shù)
大多數(shù)SQL實現(xiàn)支持以下類型的函數(shù):
□用于處理文本串(如刪除或填充值,轉換值為大寫或小寫)的文本函數(shù)
□用于在數(shù)值數(shù)據(jù)上進行算術操作(如返回絕對值,進行代數(shù)運算)的數(shù)值函數(shù)
□用于處理日期和時間值并從這些值中提取特定成分(例如,返回兩個日期之差,檢查日期有效性等)的日期和時間函數(shù)
□返回DBMS正使用的特殊信息(如返回用戶登錄信息,檢查版本細節(jié))的系統(tǒng)函數(shù)
1.文本處理函數(shù)

SOUNDEX是一個將任何文本串轉換為描述其語音表示的字母數(shù)字模式的算法。
例如customers表中有一個顧客Coyote Inc.,其聯(lián)系名為Y.Lee,但如果這是輸入錯誤,此聯(lián)系名實際應該是Y.Lie。
SELECT cust_name,cust_contact
FROM customers
WHERE SOUNDEX(cust_contact)=SOUNDEX('Y.Lie');
2.日期和時間處理函數(shù)

SELECT cust_id,order_num
FROM orders
WHERE Date(order_date)BETWEEN'2005-09-01'AND'2005-09-30';
=SELECT cust_id,order_num
FROM orders
WHERE Year(order_date)=2005 AND Month(order_date)=9;
3.數(shù)值處理函數(shù)

三、匯總數(shù)據(jù)
1.聚集函數(shù)
聚集函數(shù)運行在行組上,計算和返回單個值的函數(shù)。

①AVG()函數(shù)---可用來返回所有列的平均值,也可以用來返回特定列或行的平均值。
例:使用AVG()返回products表中所有產品的平均價格:
SELECT AVG(prod_price)AS avg_price
FROM products
WHERE vend_id =1003;
②COUNT()函數(shù)

③MAX()/MIN()函數(shù)
④SUM()函數(shù)
SUM()可以用來返回指定列值的和,也可以用來合計計算值。

☆除了

2.聚集不同值
用DISTINCT關鍵字聚集不同值:

3.組合聚集函數(shù)
輸入:

輸出:

四、分組數(shù)據(jù)
1.創(chuàng)建分組
使用GROUP BY子句分組

另外,使用WITH ROLLUP關鍵字,可以得到每個分組以及每個分組匯總級別(針對每個分組)的值。例如:

輸出:

2.過濾分組---HAVING子句
例如:

☆WHERE過濾行,Having過濾分組。

上面的例子,WHERE子句過濾所有prod_price至少為10的行,然后按vend_id分組數(shù)據(jù),HAVING子句過濾計數(shù)為2或2以上的分組。
3.分組和排序---group by+order by
輸入:

輸出:

4.SELECT子句順序(回顧)
