mysql 查詢的基本語法java
select 屬性名 from 表名/視圖 [where 條件表達式] [group by 屬性名 [having 條件表達式]] [order by 屬性名 [asc|desc]] [limit offset,row count]
where子句:按照"條件表達式"指定的條件進行查詢mysql
group by子句:按照"屬性名"指定的字段進行分組正則表達式
having子句:有group by纔能有having子句,只有知足"條件表達式"中指定的條件才能輸出sql
group by子句:一般和count()、sum()等聚合函數一塊兒使用函數
order by子句:按照"屬性名"字段進行排序,默認是asc(升序排列)ui
經常使用查詢code
1.帶like的字符匹配查詢
排序
1.1通配符"%",匹配任意長度的字符,包括零字符字符串
//匹配以a開頭,以z結尾的字符串 select * from t_test tt where tt.name like 'a%z'; //匹配以a開頭的字符串 select * from t_test tt where tt.name like 'a%'; //匹配以z結尾的字符串 select * from t_test tt where tt.name like '%z';
1.2單個匹配字符"_",只能匹配一個字符
it
//字符串位數爲2,以a開頭 select * from t_test where tt.name like 'a_'; //字符串位數爲2,以z結尾 select * from t_test where tt.name like '_z';
2.having 過濾分組
having是配合group by 使用的,即只有group by存在的狀況下,纔會有having。
select * from t_test tt group by tt.id having 過濾條件
在group by 中使用with rollup
select tt.id,count(1) as total from t_test tt group by tt.id with rollup
備註:使用rollup時,不能同時使用order by 子句對結果進行排序,由於rollup與order by是互斥的。
3.合併查詢
使用union關鍵字進行合併查詢,兩個查詢對應的列數和數據類型必須相同。
union:刪除重複的記錄
union all:不刪除重複記錄也不對結果進行自動排序
select id,name from t_test1 where id > 10 union select id,name from t_test2 where name = '張三';
4.正則表達式查詢
mysql中使用REGEXP關鍵字指定正則表達式的字符匹配
4.1 查詢以特定字符或字符串開頭的記錄
字符"^"匹配以特定字符或字符串開頭的記錄
SELECT * FROM t_commodity tc WHERE tc.COMMODITY_ID REGEXP '^0'
4.2查詢以特定字符或字符串結尾的記錄
字符"$"匹配以特定字符或字符串結尾的記錄
SELECT * FROM t_commodity tc WHERE tc.COMMODITY_ID REGEXP '1$'
4.3 使用符號"."來代替字符串中任意一個字符
SELECT * FROM t_commodity tc WHERE tc.COMMODITY_ID REGEXP '0.1'
4.4 使用"*"和"+"來匹配多個字符
"*"匹配前面的字符任意屢次,包括0次,不限制該字符出現的位置。
"+"匹配前面的字符至少1次。
select * from t_fruits tf where tf.name REGEXP '^or*'
查詢的結果要求:o開頭,r匹配任意屢次(不限制r出現的位置)
結果示例以下:
orange、opprend等
4.5 匹配指定字符串
正則表達式能夠匹配指定字符串,若是須要匹配多個字符串,多個字符串之間用分隔符"|"隔開
select * from t_fruits tf where tf.name REGEXP 'lxl|panda'
結果示例
cclxl、pandaxx等。
4.6 匹配指定字符串中的任意一個
[]括號指定一個字符集合,只匹配其中的任意一個字符
select * from t_fruits where tf.name REGEXP '[xp]'
結果示例
lxl、panda