一、like mysql
搜索模式:由字面值,通配符或二者組合構成的搜索條件。 git
like指示MySQL,後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。 正則表達式
%表示任何字符出現任意次數: sql
select prod_id,prod_name from products where prod_name like 'jet%'; 數據庫
表示搜素prod_name以jet起頭的詞。 函數
通配符可在搜索模式中任意位置使用,而且可使用屢次: 測試
select prod_id,prod_name from products where prod_name like '%anvil%'; spa
雖然%彷佛能夠匹配任何東西,但沒法匹配NULL。即便是where prod_name like '%'也不能匹配用NULL做爲產品名的行。 日誌
通配符「_」用法「%」相同,但只匹配單個字符: orm
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton avil';
二、使用通配符的技巧
通配符搜索的處理時間通常比較長,因此有一些技巧:
三、使用正則表達式
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
REGEXP在列值內進行匹配,若是被匹配的文本在列值中出現,相應的行將被返回。
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;
五、匹配幾個字符之一
WHERE prod_name REGEXP '[123] Ton'
至關於 ‘1 Ton|2 Ton|3 Ton’
而 '1|2|3 Ton' 不等於上述表達式,它表示匹配 1,2,3 Ton。
字符集合也能夠被否認,它們將匹配除指定字符外的任何東西。爲否認一個字符集,在集合的開始處放置一個^。[^123]匹配除123以外的任何東西。
六、匹配範圍
[0123456789]能夠寫成[0-9]
七、匹配特殊字符
用\\爲前導,.、|、[]、-、^須要如此匹配。
\\也能夠用來引用元字符:
爲了匹配\自己,須要使用\\\。
多數正則表達式實現使用單個反斜槓轉義特殊字符,但MySQL要求兩個反斜槓。
八、字符類
字符類是預約義的字符集
九、重複元字符
十、定位元字符
^有兩種用法,在集合中(用[和]定義)表示否認該集合;不然,用來指串的開始處。
簡單的正則表達式測試,能夠在不適用數據庫表的狀況下用SELECT來測試正則表達式,REGEXP檢測老是返回0(沒有匹配)或1(匹配):
SELECT 'hello' REGEXP '[0-9]';返回0。
十一、拼接字段
SELECT語句中可適用Concat()函數拼接幾個列:
SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;
不一樣於MySQL,多數DBMS使用+或||實現拼接。
十二、Trim()函數去掉左右邊的空格,LTrim()和RTrim()分別去掉左右邊的空格。
1三、用AS關鍵字給列賦予別名:
SELECT Concat(vend_name, '(', vend_country, ')') AS vend_title FROM vendors ORDER BY vend_name;
1四、SELECT語句中能夠對列執行算數運算:
SELECT prod_id, quantity, quantity * item_price AS expanded_price FROM orderitems;
1五、使用SELECT Now() 利用Now()函數返回當前的日期和時間。
1六、文本處理函數
1七、日期和時間處理函數
不管何時指定一個日期,不論是插入、更新仍是用WHERE子句進行過濾,日期必須爲yyyy-mm-dd格式。若是想要的僅僅是日期,則使用Date()函數,若是想要時間則使用Time()函數。
可使用BETWEEN AND函數定義日誌範圍。
1八、數值處理函數
1九、聚類函數
AVG()計算特定列的平均值,只能用來肯定特定數值列的平均值,列名必須做爲函數參數給出,爲了獲取多個列的平均值,必須使用多個AVG()函數。會忽略列值爲NULL的行。
COUNT()函數,有兩種用法:
MAX()函數,返回指定列中的最大值。通常用來找出最大的數值或日期值,但MySQL容許將它用來返回任意列中的最大值,包括文本列中的最大值。MAX()忽略列值爲NULL的行。
MIN()函數的功能和MAX()相反。
SUM()函數返回指定列值的和,也能夠用來合計計算值。
以上5個聚類函數均可以以下使用:
20、分組數據 GROUP BY
SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;
一些規定:
使用WITH ROLLUP關鍵字 查詢的結果最後有一行統計的彙總結果,非統計列用NULL給出,如:
mysql> select name,sum(miles) as 'miles/driver'
-> from driver_log group by name with rollup;
+-------+--------------+
| name | miles/driver |
+-------+--------------+
| Ben | 362 |
| Henry | 911 |
| Suzi | 893 |
| NULL | 2166 |
+-------+--------------+
4 rows in set (0.00 sec)
最後一行就是with rollup的輸出。用HAVING語句實現分組過濾,HAVING支持全部WHERE操做符,能夠認爲HAVING和WHERE執行方式都相同,只是一個針對行另外一個針對行分組。
另外一種理解方法,WHERE在數據分組前進行過濾,HAVING在數據分組後進行過濾。
2一、SELECT子句順序(從前至後):
2二、子查詢
利用子查詢進行過濾
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
做爲計算字段使用子查詢
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;