檢索數據
檢索單個列:
SELECT pname FROM product
檢索多個列:
SELECT pname,market_price,is_hot FROM product
檢索所有列:
SELECT * FROM product
過濾檢索結果中的重復數據:
SELECT DISTINCT market_price FROM product
DISTINCT關鍵字:
1、返回不同的值,使用時放在列名的前面
2、多查詢一個及以上列時,除非你查詢的所有列的數據都不同,否則所有行都將被檢索出來
限制檢索結果:
SELECT pname FROM product LIMIT 5,5
limit5,5指示mysql返回從行5開始的5行記錄
排序檢索數據
排序數據
SELECT pname FROM product ORDER BY pname
按多個列排序數據
SELECT pid,market_price,pname FROM product ORDER BY market_price,pname
按多個列排序時,排序列之間用,隔開,並且按列的順序來排序數據,先排價格,后排名稱
指定排序方向
降序排序(按照價格降序排序)
SELECT pid,market_price,pname FROM product ORDER BY market_price DESC
升序排序(mysql查詢時默認就是升序排序)
SELECT pid,market_price,pname FROM product ORDER BY market_price ASC
找出價格最貴的商品(使用order BY 和limit關鍵字)
SELECT market_price FROM product ORDER BY market_price DESC LIMIT 1
過濾數據
使用WHERE子句
價格等於19800的商品
SELECT pname,market_price FROM product WHERE market_price=19800
價格小於於19800的商品
SELECT pname,market_price FROM product WHERE market_price<19800
價格大於800的商品
SELECT pname,market_price FROM product WHERE market_price>800
價格在800到10000之間
SELECT pname,market_price FROM product WHERE market_price BETWEEN 800 AND 10000
where中的操作符有以下幾個
= 等於
<> 不等於
!= 不等於
< 小於
<= 小於等於
> 大於
>= 大於等於
BETWEEN 在指定的兩個值之間
數據過濾
組合where語句
and操作符(同時符合where后面的條件)
SELECT pname,market_price FROM product WHERE market_price>1000 AND is_hot=0
or操作符(只需要符合where后面的一個條件的結果都會顯示出來)
SELECT pname,market_price FROM product WHERE market_price>1000 OR is_hot=0
IN操作符(用來指定條件范圍)
SELECT pname,market_price FROM product WHERE market_price IN(238,19800,1120) ORDER BY pname
NOT操作符(否定它之后所跟的條件)
SELECT pname,market_price FROM product WHERE market_price NOT IN(238,19800,1120) ORDER BY pname
用通配符進行過濾
like操作符(通配符 模糊搜索)
%通配符(找出product表中所有商品名以韓版開頭的商品)
SELECT pname FROM product WHERE pname LIKE '韓版%'
找出product表中商品名稱含有“女”的商品,不管開頭結尾是什么內容
SELECT pname FROM product WHERE pname LIKE '%女%'
下划線_通配符(用途和%一樣,不過_只匹配單個字符)
SELECT pname,market_price FROM product WHERE market_price LIKE '_99'
正則表達式搜索
基本字符串匹配
SELECT pname FROM product WHERE pname REGEXP '韓版' ORDER BY pname
使用正則表達式需要用REGEXP關鍵字,並在REGEXP后面跟上正則表達式內容
SELECT pname FROM product WHERE pname REGEXP '.版' ORDER BY pname
.是正則表達式語言中一個特殊的字符。它表示匹配任意一個字符
Mysql中的正則表達式不區分大小寫,如果要區分大小寫可以使用BINARY
SELECT pname FROM product WHERE pname REGEXP BINARY 'Abc' ORDER BY pname
OR匹配
SELECT pname FROM product WHERE pname REGEXP 'a|b'
幾種常見的正則表達式
[0-9] 匹配0-9之間的數字
[123] Ton 匹配1 Ton或者2 Ton或者3 Ton
\\. 匹配特殊字符.
[: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])
匹配多個實例
* 0個或多個匹配
+ 1個或多個匹配(等於{1,})
? 0個或1個匹配(等於{0,1})
{n} 指定數目的匹配
{n,} 不少於指定數目的匹配
{n,m} 匹配數目的范圍(m不超過255)
定位符
^ 文本的開始
$ 文本的結尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
創建計算字段
連接字段(將商品名稱和商品價格連接起來)
SELECT CONCAT(pname,'(',market_price,')') FROM product ORDER BY pname
CONCAT()需要一個或多個指定的串,各個串之間用逗號分隔。
AS 給字段賦予別名
SELECT CONCAT(pname,'(',market_price,')') AS nameAndPrice FROM product ORDER BY pname
執行算術運算
SELECT pname,market_price,shop_price,market_price+shop_price AS sumprice FROM product
使用數據處理函數
文本處理函數
LEFT() 返回串左邊的字符
LENGTH() 返回串的長度
LOCATE() 找出串的一個子串
LOWER() 將串轉換為小寫
LTRIM() 去掉串左邊的空格
RIGHT() 返回串右邊的字符
RTRIM() 去掉串右邊的空格
SOUNDEX() 返回串的SOUNDEX值
SUBSTRING() 返回子串的字符
UPPER() 將串轉換為大寫
日期和時間處理函數
ADDDATE() 增加一個日期(天、周等)
ADDTIME() 增加一個時間(時、分等)
CURDATE() 返回當前日期
CURTIME() 返回當前時間
DATE() 返回日期時間的日期部分
DATEDIFF() 計算兩個日期之差
DATE_ADD() 高度靈活的日期運算函數
DATE_FORMAT() 返回一個格式化的日期或時間串
DAY() 返回一個日期的天數部分
DAYOFWEEK() 對於一個日期,返回對應的星期幾
HOUR() 返回一個時間的小時部分
MINUTE() 返回一個時間的分鍾部分
MONTH() 返回一個日期的月份部分
NOW() 返回當前日期和時間
SECOND() 返回一個時間的秒部分
TIME() 返回一個日期時間的時間部分
YEAR() 返回一個日期的年份部分
數值處理函數
ABS() 返回一個數的絕對值
COS() 返回一個角度的余弦
EXP() 返回一個數的指數值
MOD() 返回除操作的余數
PI() 返回圓周率
RAND() 返回一個隨機數
SIN() 返回一個角度的正弦
SQRT() 返回一個數的平方根
TAN() 返回一個角度的正切
匯總數據
聚集函數
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
SELECT AVG(market_price) FROM product
SELECT MAX(market_price) FROM product
SELECT SUM(market_price) FROM product
分組數據
分組函數
GROUP BY 按照名稱分組,查詢出表中相同名稱的商品各有多少件
SELECT pname,COUNT(*) FROM product GROUP BY pname
HAVING 過濾分組
SELECT pname,COUNT(*) FROM product GROUP BY pname HAVING COUNT(*)>2
HAVING和WHERE的差別 這里有另一種理解方法,WHERE在數據
分組前進行過濾,HAVING在數據分組后進行過濾。這是一個重
要的區別,WHERE排除的行不包括在分組中。這可能會改變計
算值,從而影響HAVING子句中基於這些值過濾掉的分組。
SELECT語句的執行順序
SELECT 要返回的列或表達式 是
FROM 從中檢索數據的表 僅在從表選擇數據時使用
WHERE 行級過濾 否
GROUP BY 分組說明 僅在按組計算聚集時使用
HAVING 組級過濾 否
ORDER BY 輸出排序順序 否
LIMIT 要檢索的行數 否