文章目录
- 一、多行插入 + 指定列插入数据
- 更新表中某个数据的信息(on duplicate)
- 了解affected报告信息
- 二、检索功能
- 1.select 查询
- 1.1全列查询
- 1.2指定列查询
- 1.3where条件筛选子句
- 案例
- 2.结果排序
- 案例
- 3.筛选分页结果
- offset实现分页
一、多行插入 + 指定列插入数据
首先创建一个表如下:
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条数据的分页功能。