单表数据查询
插入数据
插入多条记录
INSERT INTO 表名 VALUES (值1,值2...值n), (值1,值2...值n), (值1,值2...值n);
插入查询结果,结果需一一对应
INSERT INTO 表名(字段1,字段2,字段3...字段n) SELECT (字段1,字段2,字段3...字段n) FROM 表2 WHERE 条件;
更新数据
UPDATE 表明 SET 字段1=值1, 字段2=值2, WHERE 条件;
删除数据
DELETE FROM 表名 WHERE 条件;
查询数据 ,执行顺序FROM,WHERE,GROUP BY,DISTINCT,HAVING,SELECT,ORDER_BY,LIMIT
distinct:查询结果去重
SELECT DISTINCT post FROM employee;
对查询结果做计算:如查年薪
SELECT name,salary*12 FROM employee;
AS关键字起别名,也可以不用AS关键字,直接跟后面,默认就是别名
SELECT name,salary*12 AS annual_salary FROM employee;
CONCAT定义显示格式
SELECT CONCAT('姓名:',name,'性别:',sex) FROM employee;
CONCAT定义显示格式后,表头格式为concat('姓名:',name,'性别:',sex),用AS定义表头别名
SELECT CONCAT('姓名:',name,'性别:',sex) AS info FROM employee;
多字段查询并格式化+计算
SELECT CONCAT('姓名:',name,'性别:',sex) AS info, CONCAT('年薪:',name,'性别:',salary*12) AS annual_salary, FROM employee;
CONCAT_AS拼接数据
SELECT CONCAT_WS(':',name,age) FROM employee;
WHERE条件过滤
where后面不能用聚合函数
- 比较运算符:>,<,>=,<=,<>,!=
- 结果限制范围:between 80 and 100,即大于等于80并小于等于100
- in(80,90,100),值是80,90或100
- is Null,is not Null。注,空不是空字符串
- like 'ya%',%表示任意多字符,_表示一个字符
- 逻辑运算,多个条件可直接用and,or或not进行拼接
GROUP BY,对查询的结果数据进行分组,如按性别进行分组
SELECT * FROM employee GROUP BY post
目的:对数据进行分类处理。
注:分组以后只能取组依据字段
设置分组为严格模式,设置后分组后就只能查看到分组依据字段
SET GLOBAL sql_mode="ONLY_FULL_GROUP_BY"
聚合函数,对分组后进行统计
- max:最大值
- min:最小值
- avg:平均值
- sum:求和
- count:统计
如:
#统计每组个数 SELECT COUNT(id) FROM employee GROUP BY post #查找每组最大值 SELECT MAX(salary) FROM employee GROUP BY post #查找每组最小值 SELECT MIN(salary) FROM employee GROUP BY post #查看每组平均值 SELECT AVG(salary) FROM employee GROUP BY post
注:
- 不能用unique字段进行分组,因为制定了unique熟悉的字段都唯一
- 不分组则整体为一组,也可用聚合函数
GROUP_CONCAT,查询分组后每组详细信息
SELECT post,group_concat(name) FROM employee GROUP BY post;
HAVING过滤
group by在分组之前过滤
having在分组之后过滤
#查询各岗位内包含的员工个数小于2的岗位名、岗位内员工姓名、个数 SELECT post,GROUP_CONCAR(name),COUNT(id) FROM employee GROUP BY post HAVING COUNT(id) < 2;
ORDER BY排序,默认按id升序排列
升序:ASC
降序:DESC
SELECT * FROM employee ORDER BY age ASC
先按age升序排,若age相同,则按id降序排
SELECT * FROM employee ORDER BY age ASC,id DESC;
LIMIT n,限制返回数
#返回3条数据 SELECT * FROM employee LIMIT 3;
使用limit简单做分页功能
从0开始,取5条记录
SELECT * FROM employee LIMIT 0,5;
单表查询总结:查询即SELECT
语法顺序:
SELECT DISTINCT
FROM WHERE GROUP BY HAVING ORDER BY LIMIT n
执行顺序:
FROM WHERE GROUP BY HAVING DISTINCT ORDER BY LIMIT
REGEXP正则查询
- ^匹配开头
- $匹配结尾
#查询name字段jin开头的数据 SELECT * FROM employee WHERE name REGEXP '^jin'; #查询name字段jin开头,g或n结尾的数据 SELECT * FROM employee WHERE name REGEXP '^jin.*(g|n)$';
mysql正则和 re正则大同小异