MYSQL——增删查改
在进行增删查改的过程中我们首先创建了一个fuxi的数据库,在数据库中创建了一个名为student 的表;
create table student(
name varchar(20),
id int(11));
insert -----添加数据
语法结构:
insert into 表名 (字段名1,字段名2)values (值1,值2) ;
insert into student(name,id) valuse("小米","20200758");
或者
insert into 表名 values (值1,值2) ;
insert into student valuse("小米","20200758");
或者
insert into student set 字段名1=值1,字段名2=值2;
insert into student set id=20200755,name="小艾";
ps:
1:当你要为表中所有的字段添加的值时,字段名可以省略不写,值的顺序要与字段名的顺序一致,否则会报错;
2:当你只添加字段的某一部分的数据,那么其他为添加的字段则保持默认值
同时添加多行数据
insert into 表名 (字段名1,字段名2)values (值1,值2) ,(值1,值2) ,(值1,值2) ,(值1,值2) ,(值1,值2) ,(值1,值2) ;
insert into student(name,id) valuse("小米","20200758"),("小米","20200758"),("小米","20200758"),("小米","20200758"),("小米","20200758"),("小米","20200758");
(才不是因为懒得打字才复制粘贴呢!!!)
同时添加多行数据注意别用第三种语法结构去添加,一般来说我们都是在SQL中使用图形化界面去快速添加多行数据,
delete -----删除数据
语法结构
删除部分数据: delete from 表名 where 条件语句;
delete from student where id = 20200755;
删除所有数据: delect from 表名;
delect from student;
或者
truncate table student;
PS:
1:DELETE 后面可以跟WHERE子句指定删除部分记录,TRUNCATE只能删除整个表的所有记录
2:使用TRUNCATE语句删除记录后,新添加的记录时,自动增长字段(如本文中student表中的 id 字段)会默认从1开始,而使用DELETE删除记录后,新添加记录时,自动增长字段会从删除时该字段的的最大值加1开始计算(即原来的id最大为5,则会从6开始计算)。所以如果是想彻底删除一个表的记录而且不会影响到重新添加记录,最好使用TRUNCATE来删除整个表的记录。
3:DELETE 和TRUNCATE 只是删除表中的数据,并没有删除表,删除表你可以输入drop table 表名;
update -----修改数据
语法结构updata 表名 set 被改字段名=被改值 where 条件语句;
update student set name="小艾" where id = 2020;
修改了id为2020的name为小艾,当没有where条件查询时,则把表中id为2020的所有name数据改为小艾。
select -----查询数据
查询表中所有字段数据
语法结构: select * from 表名;
select * from student;
根据where条件语句来查询
语法结构: select * from 表名 where 条件语句;
select * from student where id>20200755;
查询student表中字段名id大于20200755的所有信息;
根据关键字 IN 、BETWEEN AND 、DISTINCT、空值查询、LIKE
IN关键字:用于判断某个字段的值是否在指定集合中,若在,则该字段所在的记录将会被查询出来.
语法结构: select 字段名1… from student where 字段名 IN [NOT] (值1,值2…)
(NOT 为不在这个集合内,其他关键字都可以同样使用下面不在赘述)
select * from student where id in(20200755,20200855);
BETWEEN AND: 用于判断某个字段的值是否在指定范围之内,若在,则该字段所在的记录会被查询出来,反之不会。(范围包括两个值本身)
语法结构: select 字段名1… from student where 字段名 [NOT] BETWEEN 值1 AND 值2;
select * from student where id BETWEEN 20200755 AND 20200855;
DISTINCT:很多表中某些字段的数据存在重复的值,可以使用DISTINCT关键字来过滤重复的值,只保留一个值
语法结构: SELECT DISTINCT 字段名 FROM 表名;
select distinct name from student;
去除name字段中重复的值。
空值查询 IS NULL:在数据表中有些值可能为空值(NULL),空值不同于0,也不同于空字符串,需要使用 IS NULL 来判断字段的值是否为空值。
语法结构: SELECT * | 字段名1,字段名2,…FROM 表名 WHERE 字段名 IS [ NOT ] NULL
select * from student where id is null;
模糊查询LIKE
(1)百分号(%)通配符
匹配任意长度的字符串,包括空字符串。例如,字符串“ c% ”匹配以字符 c 开始,任意长度的字符串,如“ ct ”,“ cut ”,“ current ”等;字符串“ c%g ”表示以字符 c 开始,以 g 结尾的字符串;字符串“ %y% ”表示包含字符“ y ”的字符串,无论“ y ”在字符串的什么位置。
举例1:查询student2表中name字段以字符“ s ”开头的人的id,name
SELECT id,name FROM student2 WHERE name LIKE "S%";
举例2:查询student2表中name字段以字符“ w ”开始,以字符“ g ”结尾的人的id,name。
SELECT id,name FROM student2 WHERE name LIKE 'w%g';
举例3:查询student2表中name字段不包含“ y ”的人的id,name。
SELECT id,name FROM student2 WHERE name NOT LIKE '%y%';
(2)下划线(_)通配符
下划线通配符只匹配单个字符,若要匹配多个字符,需要使用多个下划线通配符。例如,字符串“ cu_ ”匹配以字符串“ cu ”开始,长度为3的字符,如“ cut ”,“ cup ”;字符串“ c__l”匹配在“ c ”和“ l ”之间包含两个字符的字符串,如“ cool ”。需要注意的是,连续的“”之间不能有空格,例如“M _QL”只能匹配“My SQL”,不能匹配“MySQL”。
举例:查询在student2表中name字段值以“ wu ”开始,以“ ong ”结束,并且中间只有一个字符的记录。
SELECT * FROM student2 WHERE name LIKE 'wu_ong';
==PS:
1:在SELECT语句中使用(‘ * ’)通配符代替所有字段,如果你只要查部分字数据,你可以把 (‘ * ’)改成你要查询的字段
2:where 后面的条件语句所用到关系运算符有 >,<,=,<=,>=,!=,<>(大于,小于,等于,小于等于,大于等于,不等于,不等于);
3:若要查询的字段值本来就含有“ % ”或者“ _ ”,则要用“ \ ”进行转义,如要查询本身含有“ % ”的字符串,命令应改为 “ %%%”。==
根据逻辑运算符查询 AND 、 OR
当需要查询的条件语句为两个或者两个以上时,可以通过逻辑运算符来连接多个条件语句;
值得注意的时,AND 是有假必假,OR 是有真必真,当同时使用两个逻辑运算符时,AND的运算顺序比OR要高,所以会先执行AND两边的条件语句。
select * from student where id >= 20209877 and name like "%小%" or id is not NULL
根据聚合函数来查询
1)COUNT()函数:统计记录的条数
语法:SELECT COUNT(*) FROM 表名
举例:查询student2表中一共有多少条记录
SELECT COUNT(*) FROM student2;
(2)SUM()函数:求出表中某个字段所有值的总和
语法:SELECT SUM(字段名) FROM 表名;
举例:求出student2表中grade字段的总和
SELECT SUM(grade) FROM student2;
(3)AVG()函数:求出表中某个字段所有值的平均值
语法:SELECT AVG(字段名) FROM 表名;
举例:求出student2表中grade字段的平均值
SELECT AVG(grade) FROM student2;
(4)MAX()函数:求出表中某个字段所有值的最大值
语法:SELECT MAX(字段名) FROM 表名;
举例:求出student2表中所有人grade字段的最大值
SELECT MAX(grade) FROM student2;
(5)MIN()函数:求出表中某个字段所有值的最小值
语法:SELECT MIN(字段名) FROM 表名;
举例:求出student2表中所有人grade字段的最小值
SELECT MIN(grade) FROM student2;
对结果进行排序查询 ORDER BY
语法:SELECT 字段名1,字段名2,…
FROM 表名
ORDER BY 字段名1 [ ASC | DESC ],字段名2 [ ASC | DESC ]…
在该语法中指定的字段名是对查询结果进行排序的依据,ASC表示升序排列,DESC 表示降序排列,默认情况是升序排列。
举例1:查出student2表中的所有记录,并按照grade字段进行升序排序
SELECT * FROM student2
ORDER BY grade;
分组查询
在对表中数据进行统计的时候,可以使用GROUP BY 按某个字段或者多个字段进行分组,字段中值相同的为一组,如男生分为一组,女生分为一组。
语法:SELECT 字段名1,字段名2,…
FROM 表名
GROUP BY 字段名1,字段名2,… [ HAVING 条件表达式 ];
(1)单独使用 GROUP BY 进行分组
单独使用GROUP BY 关键字,查询的是每个分组中的一条记录
举例:查询student2表中的数据,按照gender字段进行分组。
SELECT * FROM student2 GROUP BY gender;
注意:若在此2例中键入命令之后出现“#1055”错误,无法完成分组查询,是由于MySQL版本升级到了5.7,可自行百度“MySQL 1055错误”参考解决办法。
(2) GROUP BY 和聚合函数一起使用
GROUP BY 和聚合函数一起使用,可以统计出某个或者某些字段在一个分组中的最大值、最小值、平均值等。
举例:将student2表按照gender字段进行分组查询,计算出每组共有多少个人。
SELECT COUNT(*) ,gender FROM student2 GROUP BY gender;
(3) GROUP BY 和 HAVING 关键字一起使用
HAVING关键字和WHERE关键字的作用相同,区别在于HAVING 关键字可以跟聚合函数,而WHERE 关键字不能。通常HAVING 关键字都和GROUP BY一起使用,用于对分组后的结果进行过滤。
举例:将student2表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组
SELECT sum(grade),gender FROM student2 GROUP BY gender HAVING SUM(grade) < 300;
使用 LIMIT 限制查询结果的数量
语法:SELECT 字段名2,字段名2,…
FROM 表名
LIMIT [ OFFSET ,] 记录数
在此语法中,LIMIT 后面可以跟两个参数,第一个参数“ OFFSET ”表示偏移量,如果偏移量为0,则从查询结果的第一条记录开始,偏移量为1则从查询结果中的第二条记录开始,以此类推。OFFSET为可选值,默认值为0,第二个参数“记录数”表示指定返回查询记录的条数。
举例1:查询student2表中的前四条记录。
SELECT * FROM student LIMIT 4;
举例2:查询student2表中grade字段从第五位到第八位的人(从高到低)
SELECT * FROM student2 ORDER BY grade DESC LIMIT 4,4;