SELECT語句
SELECT 列名 FROM 表明;
單行檢索,多行檢索SELECT DATABASE();
顯示當前使用數據庫- 檢索不同的行:
SELECT DISTINCT 列名 FROM 表明
; 只返回不同的值 - 限制結果:
SELECT 列名 FROM 表明 LIMIT 限制的行數;
- 指定開始行數和行數:`SELECT 列名 FROM 表明 LIMIT 5,5;
- LIMIT 5 OFFSET 5;`
- 指定開始行數和行數:`SELECT 列名 FROM 表明 LIMIT 5,5;
- 使用完全限定的表明:
SELECT products.pro_name FROM 表明;
排序檢索數據:使用ORDER BY語句
- 排序數據:
SELECT prod_name FROM products ORDER BY prod_name;
- 按多個列排序:
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
- 注意:在多行排序中,是按照指定的行書順序進行排序的,如上,先是以價格排序,然後在價格相同的數據中再以姓名排序。如果價格都不相同則就不會以姓名排序。
- 指定排序方向(DESC關鍵字):
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
按照價格以降序的方式排序產品 - ASC是默認升序的關鍵字
- ORDER BY子句位置:要保證ORDER BY位於FROM子句之後。如果使用LIMIT,它必須位於ORDER BY之後。
過濾數據:使用WHERE語句
- 數據根據WHERE子句中指定搜索條件進行過濾,WHERE子句在表明(FROM子句)之後給出:
SELECT prod_name,prod_price FROM products WHERE prod_price=2.50;
- WHERE子句操作符:=,<>,!=,<,<=,>,>=,BETWEEN
- BETWEEN匹配範圍中所有的值,包括指定開始值和結束值
-SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
- BETWEEN匹配範圍中所有的值,包括指定開始值和結束值
- 空值檢查:
- NULL 無值(no value):
SELECT prod_name FROM products WHERE prod_price IS NULL;
- NULL 無值(no value):
- WHERE子句的位置:在同時只用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後,否則就會產生錯誤
數據過濾
組合WHERE語句
- AND操作符
- OR操作符
- 注意:當使用AND和OR的聯合查詢時,要考慮到操作符優先級問題,使用圓括號明確的分組相應操作符
- IN操作符:IN在WHERE子句中用來指定要匹配值的清單的關鍵字,功能與OR相當
- NOT操作符:一般情況下與IN,BETWEEN,EXISTS子句配合使用,相當於否定跟在它後面的條件。
SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
通配符進行過濾
- LIKE操作符:模糊查詢
- 百分號(%)通配符:搜索模式中給定位置的0個,1個或多個字符
- 注意:‘%’不能匹配用值NULL作爲產品名的行,在匹配時是默認不區分大小寫的
- 下劃線(_)通配符:只匹配單個字符
- 百分號(%)通配符:搜索模式中給定位置的0個,1個或多個字符
- 注意:不要過度的使用通配符,在確定要使用通配符的時候,除非絕對必要,否則不要將它們用在搜索模式的開始處,將通配符置於搜索模式的開始處,搜索的效率是很慢的
使用正則表達式進行搜索、
- REGEXP :regesxp
- 進行OR匹配:搜索兩個串之一,使用 ‘ | ’
-SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
- 匹配幾個字符之一:可以指定一組用[ 和 ]括起來的字符來完成。
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name
- 正則表達式[123] Ton。[123]定義一組字符,其含義是匹配1或2或3。可以理解成[1|2|3] Ton
- 字腹肌和也可以被否定,即,它們將匹配除指定字符外的任何東西。否定一個字符集只需喲在集合開始的地方放置一個 ^ 即可。就比如:[^123] 匹配出這些字符外的任何東西
- 範圍匹配:[0-9],[a-z] 匹配任意數字和字符串,定義一個範圍
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
- 匹配特殊字符:要匹配特殊字符,必須使用\轉義字符作爲前導。\- 表示查找 -,\.表示查找 .
SELECT prod_name FROM products WHERE prod_name REGEXP '\\.' ORDER BY prod_name;
- 匹配字符類
字符集
- 進行OR匹配:搜索兩個串之一,使用 ‘ | ’
類 | 說明 |
---|---|
[:alnum:] | 任意字母和數字(同[a-zA-Z0-9] ) |
[:alpha:] | 任意字母(同[a-zA-Z] ) |
[:blank:] | 空格和製表(同[\\t]) |
[:cntrl:] | ASCⅡ控制符(ASCⅡ 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] ) |
- 匹配多個實例
重複元字符
元字符 | 說明 |
---|---|
* | 0個或多個匹配 |
+ | 1個或多個匹配(等於{1,}) |
? | 0個或1個匹配(等於{0,1}) |
{n} | 指定數目匹配 |
{n,} | 不少於指定數目匹配 |
{n,m} | 匹配數目的範圍(m不超過255) |
範例
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name
- 注意:sticks? 會匹配到stick與sticks(s後的?使s可選,因爲?匹配它前面的任何字符的0次或1次出現)。
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
- [:digit:] 匹配任意數字,所以會查找到一個數字的集合。{4}表示要求它前面的字符(任意數字)出現4次,所以就會查找到存在4個數字字符的集合,如1000,8563,7354。也可以用[0-9][0-9][0-9][0-9]來替代上邊的查詢語句,其效果是一樣的。