SQL學習(三)

創建計算字段

計算字段並不實際存在於數據庫表中,是運行時在SELECT語句內創建的。從客戶機的角度看,計算字段的數據是與其他列的數據相同的方式返回的。

拼接字段

舉個例子,我們想要學生ID和學生姓名,可以使用Concat()函數來拼接兩個列。

SELECT Concat(student_ID, '(', student_name, ')')
FROM student
ORDER BY student_ID;

Out:

1001 (Beryl)
1002 (Tom)
1003 (Shally)
1004 (Daniel)

這裏連接了4個元素:
student_ID中的內容,左圓括號,student_name中的內容,右圓括號

新計算列沒有名字哎,我們可以使用AS賦予別名:

SELECT Concat(student_ID, '(', student_name, ')') AS ID_name
FROM student
ORDER BY student_ID;

Out中會顯示ID_student

執行算術計算

計算字段的另一常見用途是對檢索出的數據進行算術計算。

SELECT quantity,
               item_price,
               quantity*item_price AS price
FROM items              

price列是quantity和item_price的積。
下面介紹幾個算術操作符

操作符 說明
+
-
*
/

使用數據處理函數

文本處理函數

函數 說明
Left() 返回串左邊的字符
Length() 返回串的長度
Locate() 找出串的一個字串
Lower() 將串轉爲小寫
LTrim() 去掉串左邊的空格
Right() 返回串右邊的字符
RTrim() 去掉串右邊的字符
Soundex() 返回串的SOUNDEX值
SubString() 返回字串的字符
Upper() 將串轉換爲大寫
SELECT Concat(student_ID, '(', Upper(student_name), ')')
FROM student
ORDER BY student_ID;

Out:

1001 (BERYL)
1002 (TOM)
1003 (SHALLY)
1004 (DANIEL)

日期和時間處理函數

函數 說明
AddDate() 增加一個日期
AddTime() 增加一個時間
CurDate() 返回當前日期
CurTime() 返回當前時間
Date() 返回日期時間的日期部分
DateDiff() 計算兩個日期之差
Date_Add() 高度靈活的日期運算函數
Date_Format() 返回一個格式化的日期或時間串
Day() 返回一個日期的天數部分
DayOfWeek() 對於一個日期,返回對應的星期幾
Hour() 返回一個時間的小時部分
Minute() 返回一個時間的分鐘部分
Year() 返回一個日期的年份部分
Month() 返回一個日期的月份部分
Now() 返回當前日期和時間
Second() 返回一個時間的秒部分
Time() 返回一個日期時間的時間部分
SELECT cust_id, oder_num
FROM orders
WHERE Date(order_date) BETWEEN "2019-09-01" AND "2019-09-30";

可以選出oder_date爲2019年9月份的cust_id和order_num。

數值處理函數

函數 說明
Abs() 返回一個數的絕對值
Cos() 返回一個角度的餘弦
Exp() 返回一個數的指數值
Mod() 返回除操作的餘數
Pi() 返回圓周率
Rand() 返回一個隨機數
Sin() 返回一個角度的正弦
Sqrt() 返回一個數的平方根
Tan() 返回一個角度的正切

彙總數據

聚集函數

聚集函數運行在行組上,計算和返回單個值的函數。

函數 說明
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值的和
SELECT AVG(price) AS avg_price
FROM products;
SELECT COUNT(*) AS num_cust
FROM customers;

聚集不同值

當使用DISTINCT參數時,只考慮不同的值

SELECT AVG(DISTINCT price) AS avg_price
FROM products;

返回的結果會與不加DISTINCT參數不同,這是因爲現在只考慮各個不同的價格。

組合聚集函數

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;            

參考書籍:
《MySQL必知必會》 Ben Forta著

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章