8、用正則表達式進行搜索 git
正則表達式的做用:用來匹配文本的特殊的串(字符集合)。正則表達式
關鍵詞:REGEXP數據庫
一、 基本字符匹配函數
SELECT prod_namespa
FROM productsorm
WHERE prod_name REGEXP ‘1000’it
ORDER BY prod_name;email
檢索列prod_name包含文本1000的全部行隨機數
.是正則表達式語言中一個特殊的字符。它表示匹配任意一個字符date
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘.000’
ORDER BY prod_name;
MySQL中的正則表達式匹配不區分大小寫,爲區分大小寫,可以使用BINARY關鍵字 如:WHERE prod_name REGEXP BINARY ‘JetPack .000’
二、 進行OR匹配
爲搜索兩串之一,使用 | ,以下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;
也能夠給出兩個以上OR條件:’1000|2000|3000’
三、 匹配幾個字符之一
匹配任何單個字符。可經過指定一組用[ 和 ]括起來的字符來完成。
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name
[123] 定義一組字符,它的意思是匹配1或2或3,所以,1 ton 和2 ton都匹配
四、 匹配範圍
集合可用來定義要匹配的一個或多個字符。例如[0-9]將匹配數字0到九、[a-z]將匹配任何字母字符
五、 匹配特殊字符
爲了匹配特殊字符,必須用//爲前導。//- 表示查找-,//. 表示查找. 。
SELECT vend_name
FROM vendors
WHERE vend_name REGEXP ‘//.’
ORDER BY vend_name;
這種處理就是所謂的轉義
六、 匹配字符類
預約義的字符集,稱爲字符類。
[:alnum:] 任意字母和數字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和製表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意數字 (同[0-9])
[:graph:] 與[:print:]相同,但不包含空格
[:lower:] 任意小寫字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在內的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大寫字母(同[A-Z])
[:xdigit:] 任意十六進制數字(同[a-fA-F0-9])
9、建立計算字段
一、 計算字段
計算字段並不實際存在於數據庫表中計算字段是運行時在SELECT語句內建立的
二、 拼接字段
在MySQL的SELECT語句中,可以使用Concat()函數來拼接兩個列
SELECT Concat(vend_name, ‘ (’ , vend_country, ‘)’)
FROM vendors
ORDER BY vend_name;
Concat()拼接串,即把多個串鏈接起來造成一個較長的串。
Concat()須要一個或多個指定的串,各個串之間用逗號分隔
使用別名:別名是一個字段或值的替換名。別名用AS關鍵字賦予
10、使用數據處理函數
一、 使用函數
大多數SQL實現支持如下類型的函數
(1)、文本處理函數
SELECT vebd_name, Upper(vend_name) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
Upper()將文本轉換爲大寫
一些經常使用的文本處理函數:
Left() 返回串左邊的字符
Length() 返回串的長度
Locate() 找出串的一個子串
Lower() 將串轉換爲小寫
LTrim() 去掉串左邊的空格
Right() 返回串右邊的字符
RTrim() 去掉串右邊的空格
Soundex() 返回串的DOUNDEX值
SubString() 返回子串的字符
Upper() 將串轉換爲大寫
(2)、日期和時間處理函數
經常使用日期和時間處理函數
AddDate() 增長一個日期(天、周等)
AddTime() 增長一個時間(時、分等)
CurDate() 返回當前日期
CurTime() 返回當前時間
Date() 返回日期時間的時間部分
DateDiff() 計算兩個日期之差
Date_Add() 高度靈活的日期運算函數
Date_Format() 返回一個格式化的日期或時間串
Day() 返回一個日期的天數部分
DayOfWeek() 對於一個日期,返回對應的星期幾
Hour() 返回一個日期的小時部分
Minute() 返回一個日期的分鐘部分
Month() 返回一個日期的月份部分
Now() 返回當前日期和時間
Second() 返回一個時間的秒部分
Time() 返回一個日期的時間部分
Year() 返回一個日期的年份部分
MySQL的日期格式爲:yyyy-mm-dd
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) = ‘2005-09-01’
注意:若是要的是日期,儘可能使用Date()
要檢索出2005年9月下的全部訂單,有如下兩種方法
WHERE Date(order_date) BETWEEN ‘2005-09-01’ AND ‘2005-09-30’
WHERE Year(order_date) = 2005 AND Month(order_date) = 9
(3)、數值處理函數
經常使用數值處理函數
Abs() 返回一個數的絕對值
Cos() 返回一個數的餘弦
Exp() 返回一個數的指數值
Mod() 返回除操做的餘數
Pi() 返回圓周率
Rand() 返回一個隨機數
Sin() 返回一個角度的正弦
Sqrt() 返回一個數的平方值
Tan() 返回一個角度的正切
11、彙總函數
一、 彙集函數
彙集函數:運行在行組上,計算和返回單個值的函數
五個SQL彙集函數
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
(1)、AVG()函數
AVG()經過對錶中行數計數並計算特定列值之和,求得該列的平均值。AVG()能夠返回全部列的平均值,也能夠用來返回特定列或行的平均值
SELECT AVG(prod_price) AS avg_price
FROM products;
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
(2)、COUNT()函數
COUNT()函數進行計數,可利用COUNT()肯定表中行的數目或符合特定條件的行的數目。
COUNT()函數有兩種使用方式:
使用COUNT(*) 對錶中行的數目進行計數,無論表列中包含的是空值(NULL)仍是非空值
使用COUNT(colum)對特定列中具備值的行進行計數,忽略NULL值
下面的例子返回customers表中客戶的總數:
SELECT COUNT(*) AS num_cust
FROM customers;
下面例子只對具備電子郵件地址的客戶計數:
SELECT COUNT(cust_email) AS num_cust
FROM customers;
(3)、MAX()函數
MAX()返回指定列中的最大值。MAX()要求指定列名。
SELECT MAX(prod_price) AS max_price
FROM products;
(4)、MIN()函數
MIN()的功能與MAX()正好相反。
(5)、SUM()函數
SUM()用來返回指定列值的和(合計)
SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num = 20005;
12、分組數據
一、 建立分組
分組是在SELECT語句的GROUP BY子句中創建的。
在具體使用GROUP BY子句以前,須要知道一些重要的規定
二、過濾分組
HAVING支持全部的WHERE操做符,惟一的差異是WHERE過濾行,HAVING過濾分組。WHERE在數據分組前過濾,HAVING在數據分組後過濾。
SELECT cust_id, COUNT(*) AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;