目录
我们首先创建一张学生表来做为我们的例子:
表里包含的元素有id,学号,姓名,邮箱;
然后我们进行全列插入
格式为 insert into student values(数据1,数据2,数据3)
数据格式:
Insert into stuent(列名,列名,列名)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 (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
?
?通常情况下不建议使用select *查询,会造成大量的性能资源使用。
1.查询的列越多,意外着需进行传输的数据越大。
2.可能会影响索引的使用
select *from exam_resule;
指定列的顺序不需要按照定义的时候的顺序
语法格是:
select id,name,chinese from exam_result;
表达式不包含字段
select id,name,10 from exam_result;
表达式包含一个字段
select id? ,name,chinese+10 from exam_result;
表达式包含多个字段:
select id,name,english+chinese+math? from exam_result;
select id,name ,math+chinese +english as 总分 from exam_result;
我们先查询一下math成绩
select math from exam_result;
可以看到98分重复了 我们使用 distnit关键字试试
select distinct math from exam_result;
order by 关键字
desc为降序 默认为升序
降序 desc关键字写到最后面
可以对多个字段排序,排序的优先级随书写顺序
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 |
逻辑运算符:
运算符 | 说明 |
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
注:
1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
例子:
查询英语成绩不及格的同学
select name,english from exam_result where english < 60;
查询语文成绩好于英语成绩的同学:
select name,chinese,english from exam_result where chinese>english;?
查询总分在200以下的学生:
select? name, math+chinese+english as 总分 from exam_result where math+chinese+english < 200;
查询语文成绩大于80,并且英语成绩大于80分的同学
select name,english,chinese from exam_result where chinese>80 and english >80;
猪悟能同学好厉害hhhh
查询语文成绩大于80 或者英语成绩大于80的同学
select name , chinese ,english from exam_resut where chinese>80 or english >80;
观察一下and和or的优先级(一般情况下如果想要哪个优先级高就用小括号给它加起来);
首先我们先查找全部的同学成绩 select *from exam_result;
select *from exam_result where chinese>80 or math>70 and english>70;
?我们给前面的or 打上括号看看
select * from exam_result where (chinese>80 or math>70) and english >70;
可以看到 and 的优先级大于or
between ...and...
查询语文成绩在80~90之间的同学
select name,chinese from exam_result where chinese between 80 and 90;
使用 and也可以实现
select name,chinese from exam_result where chinese>=80 and chinese<=90;
%匹配多个字符
select name from exam_result where name like '孙%';
_ 匹配一个字符
select name from exam_result where name like '孙_';
起始下标为0?
从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s
?
案例 :按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
select id ,name from exam_result order by id limit 3 offset 0;
select id ,name from exam_result order by id limit 3 offset 3;
select id ,name from exam_result order by id limit 3 offset 6;
update from table_name set colume=expr,[colume = expr] [where...] [order by ...] [limit...]
?把孙悟空同学的数学成绩改为80分
update exam_result set math = 80 where name='孙悟空';
将曹孟德的数学成绩改为60,语文成绩改为70
update exam_result set math =60 ,chinese =70 where name ='曹孟德';
将总成绩倒数后三名的数学成绩加上10分
update exam_result set math = math+10 order by math+chinese+english limit 3;
将所有同学的语文成绩变成原来的两倍
首先是这样的
update exam_result set chinese = chinese *2 ;
delete from 表名 where... orderby...limit...
案例
删除孙悟空同学的考试成绩
detele from exam_result where name = '孙悟空';
删除整张表
drop table if exists for_delete;首先判断库里面有没有这张表,有的话就删了
create table for_delete(id int ,name varchar(20)); 创建表
insert into for_delete (name) values('A'),('B'),('C');加入数据
select *from for_delete; 查看表
delete from for_delete; 删除一整张表
selete *from for_delete ;再次查看表,会发现为空了?