单表数据查询

插入数据

插入多条记录

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正则大同小异

原文地址:https://www.cnblogs.com/yaya625202/p/9063947.html