八、操作数据表中的记录
1、插入记录
①、INSERT
INSERT [INTO] 表名[(col_name,...)] {VALUES|VALUE}({expr|DEFAULT},...),(...)...
插入记录时,有个特殊的需要考虑,就是含有自增属性的字段。
如果想要默认的结果,可以将id列可以写为NULL或DEFAULT,默认从1开始。
VALUES(值或表达式、函数)
一次性插入多条记录:INSERT INTO TABLE(字段列表) VALUES(值列表1),VALUES(值列表2);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eITHwThy-1577615093821)(https://img-blog.youkuaiyun.com/20170825124925539?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSEJsb2Nr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
②、INSERT SET -----此方法可以使用子查询
INSERT [INSERT] tbl_name SET col_name{expr|DEFAULT},...
区别:一次只能插入一条记录
③、INSERT SELECT 见 9小节。
2、单表更新记录 UPDATE … SET …WHERE
单表更新:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr|DEFAULT}[,col_name2=expr|DEFAULT]...[WHERE where_condition]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fO9EqrJ0-1577615093823)(https://img-blog.youkuaiyun.com/20170825130239874?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSEJsb2Nr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)] 未加WHERE条件,更新所有。
让id号为偶数的字段,age+3:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZuogBcpb-1577615093823)(https://img-blog.youkuaiyun.com/20170825130319917?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSEJsb2Nr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
3、单表删除记录 DELETE FROM 表名…WHERE
如果id有自增属性,删除一个记录后,再添加一个新的记录,id号并不是原来的id,而是自增1后的ID。
如图:
4、查询表达式
格式:
注意:
- 表达式的顺序影响结果集的顺序, SELECT id,name 和SELECT name,id …
表达式中,使用别名命名字段也会影响结果集: 多表查询时,如果只查某个表的数据,表达式: 表名.id,表名.name…(因为其他表中可能也定义的id,name字段。)
注意:SELECT id name FROM class; 结果并不是显示两个字段
而是将id命名为别名name (省略AS),所以在查找是,不同的字段要加”,”分隔,或者加上AS 关键词。
5、WHERE语句
6、GROUP BY对查询结果分组
在分组时既可以指定列的列名,也可以指定列的位置(数字,1代表第一个字段)。 ASC:升序(默认) DESC:降序。多个分组条件以‘,’分隔。
7、HAVING 设置分组条件
报错:因为在进行分组时,HAVING 语句中,分组条件要么是聚合函数,要么是条件字段在前面的SELECT语句里存在。否则会报错。
SELECT * FROM class GROUP BY字段名; //按字段分好组,重复的选择第一个为0的值。
这样查询就没有重复的了:
SELECT * FROM class GROUP BY 字段名 HAVING 条件; //从分好组后的数据中选出满足条件的值
HAVING与WHERE的区别: (两点)
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
8、order by ----对查询结果排序
SELECT * FROM 表名 ORDER BY 字段名;
其中BY 后面可以跟多个字段,如果第一个就满足了需求,后面的字段就不起作用了。
第一个字段不满足时才遵守第二个字段,更多字段以此类推。
9、limit 限制查询数量。
LIMIT参数1,参数2; 参数1:从哪儿开始(下标从0开始);参数2:限制几个;
将查询结果插入到指定表: class表中年龄<25的name插入到class2中。
INSERT INTO class2 SELECT name FROM class WHERE age = 25; //class2 没加入字段名
报错:字段和值不匹配。(因为class2中有2个字段:id,name)
注意:LIMIT常用于分页,分页计算是固定的 偏移值=(当前页码-1)*每页所显示的记录数。