1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); # 后面的值必须与字段一一对应 语法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); # 后面的值必须与指定的字段一一匹配 3. 插入多条记录 语法: INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n); 4. 插入查询结果 语法: INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;
语法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; # where 有则根据条件修改,若是没有,则叫表中的对应字段的值全部修改 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
删除数据时,如果设置过主键自动增长:
修改添加数据时的自动增长的起始位置: alter table 表名 auto_increment = 位置(整型数字)
语法:
DELETE FROM 表名
WHERE CONITION;
示例:
DELETE FROM mysql.user
WHERE password=’’;
1、单表查询
(1)单表查询的语法
SELECT 字段1,字段2... FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
(2)关键字的优先级(重点)
重点中的重点:关键字的执行优先级 from # 1.找到表 where # 2.根据where指定的约束条件,去表中取出一条条记录 group by # 3.将取出的一条条记录分组,若没分组,则视为一个整体 having # 4.将分组后的结果进行过滤 select # 5.执行select distinct # 6.去重 order by # 7.排序,默认是升序 limit # 8.限制结果的显示条数
(2.1)关键字定义顺序
SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number>
(2.2)关键字的执行顺序
(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having_condition> (9) ORDER BY <order_by_condition> (10) LIMIT <limit_number>
(2.3)执行顺序详解
SQL语句的执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果
where_condition=MIN(col)
这类对分组统计的过滤;WHERE
子句得到的虚拟表进行分组操作,默认只显示组内第一条具体过程可参考博客:http://www.cnblogs.com/linhaifeng/articles/7372774.html
注意点:
# where 1.where是从硬盘众读取数据到内存 2.比较运算符:> < >= <= <> != 2.between 80 and 100 # 值在10到20之间 3.in(80,90,100) # 值是10或20或30 4.like ‘e%‘ # 模糊查询 5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not 强调: where是一条一条读取数据到内存,根据后面的条件判断是符合,因此不能同聚合函数来对数据进行处理
# group by 1.在MySQL中,如果没有设置sql_mode为 ONLY_FULL_GROUP_BY ,那么结果就会只显示每一组的一条,别的被隐藏 2.可以利用聚合函数,按照统计结果进行分组 3.分组是在where之后得到的记录进行的 4.大前提:可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数 5. 注意 ONLY_FULL_GROUP_BY 小窍门:‘每’这个字后面的字段,就是我们分组的依据 6.ONLY_FULL_GROUP_BY作用: 没有设置ONLY_FULL_GROUP_BY,于是也可以有结果,默认都是组内的第一条记录,但其实这是没有意义的,因此设置sql_mode为ONLY_FULL_GROUP_BY 设置命令:set global sql_mode = ‘ONLY_FULL_GROUP_BY‘
# having 1.对分组之后的数据进行筛选,必须是分组了以后,才能进行having 筛选。 2.并且是在从硬盘中读取完数据以后,才能进行分组,再开始筛选。 3.筛选可以利用聚合函数,根据统计结果进行筛选 4.Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
#order by 对记录进行排序 select * fron t order by salary desc; # desc 降序排序 select * from t order by salary asc ; # asc 升序排序 如果不写明 desc / asc ,默认为asc升序排序
# limit 1.限制显示的条数 select * from emp limit 3; # 显示前三条数据 select * from emp limit 2,3; # 显示从第3条开始的3条数据 2.常用于数据的分页显示 例如: select *from emp limit 0,10; # 第一页 # 页数 减1 乘以条数 得到起始位置 select *from emp limit 10,10; # 第2页 select *from emp limit 20,10; # 第3页
(3)聚合函数
聚合函数聚合的是 组 的内容,若是没有分组,则默认一组
sum() #求和 avg() #求平均数 max()/min() #求最大值 / 最小值 count() # 统计个数 示例: SELECT COUNT(sex=‘男‘) 男,COUNT(sex=‘女‘) 女 FROM employee; SELECT COUNT(*) FROM employee WHERE depart_id=1; SELECT MAX(salary) FROM employee; SELECT MIN(salary) FROM employee; SELECT AVG(salary) FROM employee; SELECT SUM(salary) FROM employee; SELECT SUM(salary) FROM employee WHERE depart_id=3;
(4)使用正则表达式查询
SELECT * FROM employee WHERE name REGEXP ‘^ale‘; SELECT * FROM employee WHERE name REGEXP ‘on$‘; SELECT * FROM employee WHERE name REGEXP ‘m{2}‘; 小结:对字符串匹配的方式 WHERE name = ‘Tom‘; WHERE name LIKE ‘yua%‘; WHERE name REGEXP ‘on$‘;
MySQL数据库(四)—— 记录相关操作之插入、更新、删除、查询(单表、多表)
原文:https://www.cnblogs.com/zhangbingsheng/p/10571246.html