数据库学习 2 (MySQL)

CURD

插入数据

insert into[表名] values (对应的字段内容);

插入的字段的数目和表结构的类型要求一致

先创建一个表

  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 values  (1,'岛市老八',45.9,66.5,76.4);
//多个数据

  insert into exam_result values 
  (1,'岛市老八',45.9,66.5,76.4),
  (2,'抽象带篮子',99.9,99.5,96.4),
  (3,'带带大师兄',35.9,56.5,86.4),
  (4,'靳老师想开了',65.5,80.5,85.7),
  (5,'口子姐',60.9,76.5,56.4),
  (6,'小米粥',50.6,78.5,76.2);

查看数据

select * from exam_result;

在这里插入图片描述

这样的查找方式仅限于测试环境中使用,不能生产环境中的服务器上使用

指定列插入

 insert into exam_result(id,name) values(2,'太上老君');

关系型数据库由于对数据要进行大量的检验,所以牺牲了性能,换来的是完整性和可靠性,正因为关系型数据库效率比较低,再一个高并发的系统中,数据库很容易就称为性能瓶颈,数据库也是极端情况下最容易挂的服务.

指定列查找

   select name,chinese from exam_result;

查询字段为表达式
查询所有同学的总成绩

    select name,chinese + math + english from exam_result;

在这里插入图片描述

sum 是求多行数据的和,此处是求多列数据的和

所有同学语文成绩+50分

select name,chinese + 10 from exam_result;

在这里插入图片描述
删除操作

delete from exam_result where name = ' xxx ';

指定别名

select name,chinese + math + english as total from exam_result;

其中 as 可以省略
在这里插入图片描述
去重

select distinct chinese from exam_result;

select得到的结果也是一张表,(MySQL构造的一个临时表),大部分select操作的查找结果是无法和原来的表一一对应的.
使用distinct的时候必须把后面的列都放到distinct之后

排序
order by 指定针对哪个列进行排序

1.查找学生信息并按照语文成绩升序排序

select * from exam_result order by chinese asc;

在这里插入图片描述

2.查找学生信息并按照数学成绩降序排序

select * from exam_result order by math desc;

在这里插入图片描述
3.按总成绩降序

select name,chinese + math + english as total from exam_result order by total desc;

在这里插入图片描述
4.按照多个列来排序

先把所有同学按照语文成绩降序排序,在按照数学成绩降序排序,再按照英语成绩降序排序 (列越靠前,优先级越高)

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

在这里插入图片描述

条件查询

条件查询中涉及的运算符

  • = 是比较相等,而不是赋值
  • <=> 是比较相等,能够针对null进行比较

如果表达式 NULL = NULL => NULL 相当于条件不成立
*> 如果表达式NULL <=> NULL 相当于条件成立

  • <>
  • between x and y 表示当前值在[x,y]闭区间之间都满足条件.
  • in (若干个选项) 表示当前值在()里满足任意一个都满足条件
  • is null
  • is not null 专门用于判定值是否为null
  • like 模糊匹配 % 代表任意字符 _ 代表一个字符
  • and 逻辑与
  • or 逻辑或
  • not 逻辑取反

具体操作

1.查找谁的语文成绩为空

select * name where chinese <=> null;

where chinese = null 是错误的写法

2.查找语文成绩比数学成绩好的同学

select name from exam_result where chinese > math;

在这里插入图片描述
3.查找总分在200分以下的同学

        select name,chinese + math + english as total from exam_result where total < 200;

上面的代码是错误的,where 中不能使用别名
正确写法:

        select name,chinese + math + english as total from exam_result where chinese + math + english < 200;

在这里插入图片描述
4.查询语文成绩大于60并且数学成绩也大于60的同学

select name,chinese,math from exam_result where chinese >60 and math > 60;

在这里插入图片描述
5.查询语文成绩大于80或者英语成绩大于60的同学

select name,chinese,english from exam_result where chinese > 80 or english  > 80;

在这里插入图片描述
6.查询语文成绩在[50,60]之间的同学

select * from exam_result where chinese between 80 and 90;

在这里插入图片描述
7.查询语文成绩为60.9 或 65.5 的

select * from exam_result where chinese in (60.9,65.5); 

在这里插入图片描述
8.查询姓带的同学

select * from exam_result where name like '带%';

9.查询叫带xx的同学

select * from exam_result where name like '带__';

10.查询语文成绩以9开头的同学

select * from exam_result where chinese like '9%';

进行复杂查询时遵循"最左原则"

11.取出总成绩最高的前三名

select name ,chinese + math + english as total from exam_result  order by chinese + math + english desc limit 3;

12.从第四个同学开始取出总成绩最高的前三名

	select name ,chinese + math + english as total from exam_result  order by total desc limit 3 offset 3;
  • 此处的 offset 可以当成从下标为3开始寻找
  • 如果此处的 limit 后的数字过大超出可用结果个数,此时返回结果不会有任何错误
  • 如果此处的 offset 后的数字过大超出表中数据行数,此时返回结果不会有任何错误,并返回一个空的结果.

网站的信息过大时,就会分页,分页功能就是基于limit实现

修改数据

语法

update [表名] set [列名] = [修改的值] , [列名] = [修改的值] where 子句;

1.把’太一的语文成绩改成80’

update exam_result set chinese = 80 where name = '太一';   

如果不加where限定条件,此时就会把所有的记录进行修改.
update每次修改几行数据是不确定的,具体取决于where中的条件怎么写,得看where条件筛选过后还剩多少数据

2.把’太一’的数学成绩和英语成绩改成85,86

update exam_result set math = 85,english = 86 where name = '太一';

3.把所有同学的语文成绩减十分

update exam_result set chinese = chinese - 10; 

4.将总分为后三名的同学英语加10分

update exam_result set english = english + 10 order by chinese + math + english asc limit 3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值