【MySQL基本查询(上)】

发布于:2024-05-10 ⋅ 阅读:(26) ⋅ 点赞:(0)



一、多行插入 + 指定列插入数据

首先创建一个表如下:

mysql> create table if not exists students(
-> id int unsigned primary key auto_increment,
-> sn int not null unique key comment “学号”,
-> name varchar(20) not null,
-> qq varchar(20)
-> );

向表中插入多行数据:

mysql> insert into students values(124,1222,‘许攸’,‘224455’),(125,1233,‘董卓’,‘22444441’),(126,1211,‘张良’,‘23123131’);

向表中插入多组全列数据,中间用逗号隔开即可。

下面是向表中插入多组指定列数据:
同样中间用逗号隔开

mysql> insert into students(sn,name,qq) values(12222,‘温承翰’,‘224455’),(1231313,‘伯明翰’,‘22444441’),(12121,‘谢尔比’,‘23123131’);

更新表中某个数据的信息(on duplicate)

使用on duplicate key update,更新属性信息。

mysql> insert into students(sn,name,qq) values(12122,‘刘铁子’,‘23123132’) on duplicate key update sn=130,name=‘吕布’,qq=‘23123131’;

如果插入的刘铁子不存在于表中,就直接插入刘铁子这个信息。
此时就会出现:
1 row affected。

如果存在于表中,就把刘铁子这条信息更新成吕布的。
此时,就会出现:
2 row affected。

了解affected报告信息

0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
1 row affected: 表中没有冲突数据,数据被插入
2 row affected: 表中有冲突数据,并且数据已经被更新

二、检索功能

1.select 查询

首先创建一个表:

mysql> CREATE TABLE exam_result (
-> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL COMMENT ‘同学姓名’,
-> chinese float DEFAULT 0.0 COMMENT ‘语文成绩’,
-> math float DEFAULT 0.0 COMMENT ‘数学成绩’,
-> english float DEFAULT 0.0 COMMENT ‘英语成绩’
-> );
然后在表中插入一些数据:
mysql> INSERT INTO exam_result (name, chinese, math, english) VALUES
-> (‘唐三藏’, 67, 98, 56),
-> (‘孙悟空’, 87, 78, 77),
-> (‘猪悟能’, 88, 98, 90),
-> (‘曹孟德’, 82, 84, 67),
-> (‘刘玄德’, 55, 85, 45),
-> (‘孙权’, 70, 73, 78),
-> (‘宋公明’, 75, 65, 30);

1.1全列查询

select * from exam_result;

查询表中的所有数据:
在这里插入图片描述

1.2指定列查询

查询指定列的时候,如果要查询多列,不需要按照表的定义的顺序来:

查询名字列,然后将语数英三门科目的分数加起来,并命名成一个新名字:total。

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

在这里插入图片描述

也可以查询一个字段:该字段包含表达式:

mysql> select name ,10 from exam_result;

在这里插入图片描述

还可以对结果去重:
(distinct )

mysql> select distinct math from exam_result;

在这里插入图片描述

总结:
select既可以带表达式,又可以对表达式进行重命名,还能去重。

1.3where条件筛选子句

在这里插入图片描述

但是这里需要注意:NULL不能跟NULL比较,结果还是NULL。
NULL不参与比较运算,如果非得比,那就得用IS NULL 或 IS NOT NULL来比较

在这里插入图片描述
在这里插入图片描述

mysql> select name,english from exam_result where english < 60 ;

案例

英语不及格的同学及英语成绩 ( < 60 )
mysql> select name,english from exam_result where english < 60 ;
在这里插入图片描述

语文成绩在 [80, 90] 分的同学及语文成绩
mysql> select name,chinese from exam_result where chinese >= 80 and chinese <= 90;
在这里插入图片描述

数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
mysql> select name,math from exam_result where math=58 or math=59 or math=98 or math=99;
在这里插入图片描述
姓孙的同学 及 孙某同学
mysql> select name from exam_result where name like ‘孙%’;
% 匹配任意多个(包括 0 个)任意字符
mysql> select name from exam_result where name like ‘孙_’;
_匹配严格的一个任意字符
在这里插入图片描述

语文成绩好于英语成绩的同学
mysql> select name from exam_result where chinese > english;
在这里插入图片描述

总分在 200 分以下的同学
mysql> select name,chinese+math+english as total from exam_result where chinese+math+english < 200;
在这里插入图片描述

语文成绩 > 80 并且不姓孙的同学
mysql> select name from exam_result where chinese > 80 and name not like ‘孙%’;
在这里插入图片描述

孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80
mysql> select name chinese,math,english,chinese+math+english from exam_result where name like ‘孙%’ or chinese+math+english>200 and chinese < math and english > 80;
在这里插入图片描述

2.结果排序

关键词:order by

  • 默认排升序(asc)
  • 升序是asc (Ascending order)
  • 降序是desc (Descending order)

案例

显示同学及数学成绩,按数学成绩升序显示
mysql> select name ,math from exam_result order by math asc;
在这里插入图片描述

显示同学及 qq 号,按 qq 号排序显示
mysql> select name, qq from students order by qq asc;
在这里插入图片描述
NULL 视为比任何值都小,升序出现在最上面

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

3.筛选分页结果

mysql> select * from exam_result limit 4;
表示从最开头开始,连续读取4行。
在这里插入图片描述

mysql> select * from exam_result limit 2,4;
这个2,代表从下标为1开始读取。
表示从第一行开始,连续读取4行。
在这里插入图片描述

offset实现分页

mysql> select * from exam_result limit 4 offset 0;

代表该页有4条数据,页从0下标开始。

mysql> select * from exam_result limit 4 offset 4;

代表该页有4条数据,页从4-1下标开始。

mysql> select * from exam_result limit 4 offset 8;

代表该页有4条数据,页从8-1下标开始。

这样就实现了分3页,每页有4条数据的分页功能。


网站公告

今日签到

点亮在社区的每一天
去签到