MySQLⅡ增删查改

5 篇文章 0 订阅

sql语句

表操作

增删查改(CURD)

以此student表为例:

drop table if exists student; 
create table student( 
	id INT,
	sn INT, 
	name VARCHAR(20),
	qq_mail VARCHAR(20)
);

增加

  1. 单列全列插入
    每次只能插入一行,且每一个字段要和数据库对应
 insert into student values(1,1001,"张三","123@qq.com");
 insert into student values(2,1002,"李四","456@qq.com");
  1. 指定列多行插入
insert into student(id,sn,name) values(3,1003,"王五"),(4,1004,"赵六");
//(id,sn,name)为指定列,数据之间用逗号隔开

如果没有指定某个字段的值,那么默认是NULL

  1. 插入数据,若存在,请忽略
insert ignore into student(id,sn) values(1,1001);

删除

删除整个表

delete from student;

删除表中某个数据

delete from student where id=1;
//删除id=1的行

mysql不允许在查询的同时删除原表数据
必须给原始数据表取一个别名再删除

查询

exam_result表为例

drop table if exists exam_result;
create table exam_result ( 
	id INT, 
	name VARCHAR(20), 
	chinese DECIMAL(3,1), 
	math DECIMAL(3,1), 
	english DECIMAL(3,1) 
);
insert into exam_result (id,name, chinese, math, english)
values
(1,'A', 67, 98, 56), 
(2,'B', 87.5, 78, 77),
(3,'C', 88, 98, 90), 
(4,'D', 82, 84, 67), 
(5,'E', 55.5, 85, 45), 
(6,'F', 70, 73, 78.5), 
(7,'G', 75, 65, 30),
(8,'H', 78, 32, 98);
全列查询
select * from exam_result;
// * 代表当前表中的所有字段

在这里插入图片描述

指定列查询
select id,name from exam_result;

在这里插入图片描述

查询字段为表达式
select id,name,10 from exam_result;
//10:此列都为10

在这里插入图片描述

将所有数学成绩+10查询
select id,name,math+10 from exam_result;

在这里插入图片描述

查询总成绩
select id,name,math+chinese+english from exam_result;

在这里插入图片描述
起别名:

select id,name,math+chinese+english as 总成绩 from exam_result;
//as 可以省略

在这里插入图片描述
起别名的作用:

简化表明或列名,便于查看,不改变表本身名字

去重(distinct)

数学成绩:
在这里插入图片描述

select distinct math from exam_result;

在这里插入图片描述

注意

若写为

//1.
select id,name,distinct math from exam_result;

在这里插入图片描述
错误,必须将distinct放在第一位

//2.
select distinct math, id,name from exam_result;

在这里插入图片描述
并没有去重的原因是:去重针对的是所有的字段,只有当三个字段同时重复时,才会去重

排序(order by)
升序

将数学成绩从低到高排序,包括null

select * from exam_result order by math asc;

在这里插入图片描述

降序

将数学成绩从高到低排序,包括null

select * from exam_result order by math desc;

在这里插入图片描述

注意

desc 为关键字
eg:若要创建一个表名为desc的表,需要加`
在这里插入图片描述

总结
  • order by asc 和 order by 默认为 从低到高 排序
  • order by desc 为 从高到低 排序
  • 对于MySQL的关键字,用作变量名时,要加符号`
  • 对于要排序的字段为NULL时,asc NULL 在最前,desc NULL 在最后
  • 可以对多个字段进行排序,优先级随书写顺序

查询各科成绩,按数学降序,英语升序,语文升序的方式显示

select * from exam_result order by math desc,chinese,english;

在这里插入图片描述

条件查询(where)
  1. 查询数学成绩>80的同学及成绩
select id,name,math from exam_result where math > 80;

在这里插入图片描述

  1. 查询数学成绩>80的同学及成绩,并升序排序
select id,name,math from exam_result where math > 80 order by math;

在这里插入图片描述

  1. 查询数学成绩=98的同学及成绩
select id,name,math from exam_result where math = 98;

在这里插入图片描述
注意:若成绩为null,则不能使用=,是查不到的,要使用<=>

  1. 查询数学成绩!=98的同学及成绩
select id,name,math from exam_result where math != 98;

在这里插入图片描述
注意:若成绩为null,则不能使用!=,是查不到的,要使用<>

  1. 查询数学成绩在80~90
select id,name,math from exam_result where math between 80 and 90;

在这里插入图片描述
相当于:

select id,name,math from exam_result where math >= 80 and math <= 90;

在这里插入图片描述
所以,between … and 的区间为闭区间,eg:[80,90]

  1. 查询数学成绩为98,85,73的同学
select id,name,math from exam_result where math in (98,85,73);

在这里插入图片描述
相当于:

select id,name,math from exam_result where math = 98 or math = 85 or math = 73;

在这里插入图片描述

  1. 查询数学成绩是否为null

我们先插入几个为数学成绩为null的同学

insert into exam_result (id,name,chinese,english) values(9,'I',78,97);
insert into exam_result (id,name,chinese,english) values(10,'J',56,32);

在这里插入图片描述
查询数学成绩为null

select id,name,math from exam_result where math is null;

在这里插入图片描述

查询数学成绩不为null

select id,name,math from exam_result where math is not null;

在这里插入图片描述

  1. 模糊查询

查询名字包含“三”的

select * from exam_result where name like '%三%';
//代表一定是 三 开头的
select * from exam_result where name like '三%';

//代表一定是 三 结尾的
select * from exam_result where name like '%三';

%:代表通配符,表示任意数量的字符
-:表示一个字符

//代表一定是 三× 两个字
select * from exam_result where name like '三_';

//代表一定是 三×× 三个字
select * from exam_result where name like '三_ _';

注意:and 优先级 高于 or,同时使用时要加括号

分页查询(limit)

原因:数据量太大时,一次性查找数据的时候,系统会执行SQL语句,查询需要时间,这时有可能系统就会被卡住,所以,一般采取的优化的方案就是用 分页查询

原理:每次只查询,当前页需要显示的数据即可
如果 每页10条数据,那么只查询10条数据,每次点击下一页的时候,又会请求查询10条数据。这样就提高了效率

//方法1 
select * from exam_result limit s,n;
//s 表示偏移位置 n 表示数据个数
//即从s开始取n个数据

eg:

select * from exam_result limit 0,5;

在这里插入图片描述
如果n的值过大,只会查询到能查询到的内容
如果s的值过大,SQL不会报错,但是什么也查不到

如果没有写s,默认是从0偏移开始取n个

select * from exam_result limit 5;
//方法2
select * from exam_result limit n offset s;

eg:

select * from exam_result limit 5 offset 0;

在这里插入图片描述

修改

  1. 将B同学的数学成绩修改为99
update exam_result set math = 99 where name = 'B';

在这里插入图片描述

  1. 将C同学的数学成绩改为60,语文成绩改为80
update exam_result set math = 60,chinese = 80 where name = 'C';

在这里插入图片描述

  1. 将总成绩倒数前三的同学的数学成绩+30

对于复杂的sql语句可以使用分步式思想,最终写出语句

①找出总成绩倒数前三的同学

select id,name,chinese+math+english sum from exam_result order by chinese+math+english limit 3;

在这里插入图片描述
注意:这里只要有一门成绩为null,则总成绩就为null
因为 null不能使用任何运算符与其他字段或变量进行运算
所以不建议order by 与 limit 一起使用

②更新数学成绩

update exam_result set math = math + 30;

最终写法为:

update exam_result set math = math + 30 order by chinese+math+english limit 3;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值