MySQL是一种DBMS数据库管理系统。
检索:
检索一个或者多个所有列,不同的行(去重)DISTINCT,限制LIMIT使用。
SELECT a, DISTINCT b FROM table;
SELECT * FROM table LIMIT 1,5;
排序:
ORDER BY,可以根据多个列排序,DESC反向排序。
SELECT a,b FROM table ORDER BY b DESC,c DESC;
过滤:
WHERE匹配条件,=,!=,<>,<,<=,>,>=,BETWEEN AND,IS NULL判断值是否为空。
SELECT a,b FROM table WHERE c = 1000;
SELECT a,b FROM table WHERE c IS NULL;
SELECT a,b FROM table WHERE c BETWEEN 1 AND 10;
多重过滤:
AND和OR的用法,多个操作符组合括号用法,IN (start,end)范围操作符,NOT非操作符,可以与IN、BETWEEN、EXISTS组合。
SELECT a,b FROM table WHERE c = 1000 AND d < 100;
SELECT a,b FROM table WHERE c IN (1,100);
SELECT a,b FROM table WHERE c NOT BETWEEN 1 AND 100;
通配符:
LIKE是WHERE子句,%任意个任意字符,_一个任意字符,区分大小写,NULL不会被匹配。通配符影响性能,尽量少使用,避免开头使用通配符。
SELECT a,b FROM table WHERE c LIKE 'mn%';
正则表达式:
不区分大小写,REGEXP与LIKE相似,
- . 任意1个字符
- * 0个或任意个字符
- ? 0个或1个字符
- + 1个以上字符
- [abc] abc任意一个字母
- {m,n} 可以m个,m个以上,m至n个
- ^ 锚定首部
- [^abc] 除了abc以外
- $ 锚定尾部
SELECT a,b FROM table WHERE c REGEXP 'e.s*'; 匹配e后一个任意字符并且0或任意个s
SELECT a,b FROM table WHERE c REGEXP '^[0-9.]';匹配0-9或小数点开头的字符
计算字段:
不存在于库内,库内列经过处理产生的数据列,Concat()拼接字段,AS别名。
SELECT a,b,a*b+1 AS c FROM teble;
SELECT Concat(RTrim(a),'-->',Trim(b)) AS ab FROM teble;
函数:
文本函数:
- Trim() 去空格
- Upper() 大写
- Lower() 小写
- Right() 字符串右边字符
- Left() 字符串左边字符
- Length() 字符串长度
时间函数:
- AddDate() 增加一个日期
- AddTime() 增加一个时间
- CurDate() 返回当前日期
- CurTime() 返回当前时间
- Now() 返回当前日期时间
- Date() 日期时间中的日期
- Time() 日期时间中的时间
- Year() 返回日期的年数
- Month() 返回日期的月数
- Day() 返回日期的天数
- Hour() 返回时间的小时数
- Minute() 返回时间的分钟数
- second() 返回时间的秒数
- DateOfWeek() 日期对应的星期数
- DateDiff() 计算两个日期之差
- Date_Add() 高度灵活的日期运算函数
- Date_Format() 返回一个格式化的日期或时间串
数值函数:
- Abs() 绝对值
- Pi() 圆周率
- Rand() 随机数
- Mod() 取模
- Sqrt() 平方根
- Sin() 正弦
- Cos() 余弦
- Tan() 正切
聚集函数:
AVG(column)平均值,只用于单个列,列名必须作为函数参数给出,忽略列值为NULL的行。
COUNT(*) 对表中行计数,包含NULL,COUNT(column) 对列中有值行计数,不包含NULL。
MAX(),MIN()最大最小值,也会返回文本列中的。
SUM()指定列值的和,忽略列值为NULL的行。
DISTINCT 去重函数,后面必须使用列名,不能用于计算或表达式。
SELECT AVG(DISTINCT a) AS avg_a,COUNT(*) FROM table;
SELECT MAX(num),SUM(item_price*num) AS total_price FROM table WHERE Year(date_time) = 2019 AND Month(date_time) = 1;
分组:
GROUP BY 创建分组
HAVING 过滤分组
SELECT子句顺序:
SELECT 要返回的列或表达式
FROM 从中检索数据的表
WHERE 行级过滤
GROUP BY 分组说明
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数