目录
比较运算符和逻辑运算符图
一、增加(Create)
1、全列插入
2、指定列插入
二、查询(Retrieve)
1、全列查询
2、指定列查询
3、别名(as)
4、表达式查询
5、去重(distinct)
6、排序(order by)
7、条件查询(where)
(1)基本查询
(2)AND和OR
(3)范围查询(between...and...)
(4) 模糊查询like
(5) null和is null查询
8、分页查询(limit)
三、更新(update)
四、删除(delete)
比较运算符和逻辑运算符图
在学习表的增删改查的前提,我们必须要对比较运算符和逻辑运算符有一个清晰的了解,因为在查询中是必不可少的。
比较运算符:
运算符 | 解释 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于,但对于NULL来说不安全(NULL==NULL结果为NULL) |
<=> | 等于,对于NULL来说是安全的(NULL==NULL结果是true) |
!=、<> | 不等于 |
BETWEEN a AND b | 范围匹配,如果范围是[a,b],结果为TRUE(1) |
IN(A,B...) | 如果是A、B任意一个,就返回TRUE(1) |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配。%表示任意多个(包括0个)任意字符;_表示任意一个字符。 |
逻辑运算符:
运算符 | 解释 |
AND | 逻辑与,包含所有条件,则为TRUE(1),否则为FALSE(0) |
OR | 逻辑或,包含任意一个条件,则为TRUE(1),否则为FALSE(0) |
NOT | 逻辑非,如果包含条件为TRUE(1),则为FALSE(0),反之,则为true(1) |
XOR | 逻辑异或(不常用),如果包含所有条件或者一个条件都不包含,则为false(0),否则就为TRUE(1) |
案例用表: 表结构如下;
create table student(
id int comment '序号',
sn int comment '学号',
name varchar(5) comment '姓名',
qq_email varchar(50) comment 'qq邮箱',
birthday varchar(4) comment '生日'
)
表2:成绩表
成绩表
create table ExamTable(
id int ,
sn int,
name varchar(10),
Chinese int,
Math int,
EngLish int
)
insert into ExamTable values
(01,9,'weq',null,null,null),
(01,1,'石昊',60,79,90),
(02,2,'云曦',90,99,89);
(03,3,'火灵儿',54,87,45),
(04,4,'石毅',43,58,90);
(05,5,'长弓衍',20,32,null),
(06,6,'帝冲',null,78,32),
(07,7,'月婵',87,43,23),
(08,8,'清猗',89,90,99);
一、增加(Create)
固定语法:
INSERT [INTO] TABLE_NAME[(column1[,column2],...)] VALUES [(VALUES1[,VALUES2],...)]
注:其中中括号[ ]里面是指定列插入写法。
1、全列插入
全列也就是不选中列,把表中的列全都添加内容,语法如下;
INSERT INTO TABLE_NAME VALUES(VALUES1,VALUES2...)
例如,给学生表添加新内容,序号为1,序号为01,名字为牛一,qq邮箱为321@qq.com,生日为7月6号(0716)。
insert into student values(1,01,'牛一','321@qq.com','0706')
2、指定列插入
INSERT [INTO] TABLE_NAME[(column1[,column2],...)] VALUES [(VALUES1[,VALUES2],...)]
给学生表添加新信息,序号为2,名字为小二,其他不写。
insert into student(id,name) values(02,'小二')
我们发现,我们对于指定列插入,如果有些地方不写信息的话,那么就会用空值(NULL)来代替,这是我们要注意的一点。
二、查询(Retrieve)
1、全列查询
语法如下(也是我们最常用的一个查询):
select * from student
2、指定列查询
语法如下:
select column1,column2... from student
例如查看表中的序号,学号和名字:
select id,sn,name from student
效果如下 :
3、别名(as)
别名的用法只需要在需要修改的名字后面加别名就行,as也可以不加,例如:我需要查看表中的id、sn、name,且别名分别为序号、学号和名字。
select id as '序号',sn as '学号',name '名字' from student
结果如下:
我们发现原本的id、sn和name列全都被改成别名了,这就是别名的用法
4、表达式查询
表达式查询类似于用列加减法这些,例如,我想查成绩表全部同学的总成绩。
select id,sn,name,Chinese+Math+English '总分' from ExamTable;
5、去重(distinct)
我们在表达式查询看到总分有俩个一样的,我们可以通过distinct去重
select distinct Chinese+Math+English '总分' from ExamTable;
结果如下(注意:去重需要完全相同)
6、排序(order by)
order by的用法只需要在order by后面加列名就行,例如把数学(Math)成绩按低到高排序一下。
select id,sn,name,Chinese,Math,English from ExamTable order by Math asc;
结果如下:
注意:跟在order by后面的列必须要在select查找范围之内,其次,order by列名后面默认是ASC(升序),而降序需要添加DESC,这个降序DESC和查看表结构的词相同,但意思不同。
7、条件查询(where)
(1)基本查询
基本查询主要是用到了比较运算符和逻辑运算符,这个是我们十分常见的查询。
我们举几个例子,1、查找语文成绩及格的人
2、查找总分俩百以上的人
1、
select id,sn,name,Chinese from ExamTable where Chinese>60;
查询结果如下:
2、
select id,sn,name,Chinese+Math+English '总分' from ExamTable where Chinese+Math+English>200;
结果如下:
(2)AND和OR
这个用法也是十分容易的,AND和OR就是一个与和或的概念,比如:我们查找俩个内容,第一个内容是查找语文和数学高于六十分的同学,第二个内容就是查找语文或者数学低于六十分的人。
1、
select id,sn,name,Chinese,Math from ExamTable where Chinese>60 and Math>60;
2、
select id,sn,name,Chinese,Math from ExamTable where Chinese<60 or Math<60;
(3)范围查询(between...and...)
这个范围查询的用法也可以用and来替代,俩者可以达成一样的效果,例如查找语文分数在40到60之间的人。
1、
select id,sn,name,Chinese from ExamTable where Chinese between 40 and 60;
2、
select id,sn,name,Chinese from ExamTable where Chinese >40 and Chinese<=60;
结果如下:
注:betwee...and...的用法and前面和后面的值是一个闭区间。
(4) 模糊查询like
模糊查询主要分为俩大点,一个是%模糊查询,一个是_模糊查询,前者是代表前面或者后面缺失的所有内容,而后者只是代表一个字的内容。例如我们需要查找火灵儿这位同学的英语成绩,但我们只知道她的姓,我们可以通过模糊查询来查找。
select id,sn,name,Chinese from ExamTable where name Like '火%';
结果如下:
但如果我们用_查询火灵儿。
我们发现我们是查找不出的,因为_只能代表一个字,如果是查找姓石的话能找到石昊和石毅。
select id,sn,name,Chinese from ExamTable where name Like '石_';
(5) null和is null查询
这个查找相对于前面常用度会低点,但能判断里面的值是否为空,比如我们查找English为空的同学有谁。
select id,sn,name,English from ExamTable where English is null;
我们发现能查找出俩位同学,这就是null的用法
8、分页查询(limit)
分页查询的语法一共有三种:
-- 查找从0行开始到第n行的结果
select [(column1,[column2...]) from table_name [where...] [order by...] limit n;
-- 查找从n行开始到第s行的结果
select [(column1,[column2...]) from table_name [where...] [order by...] limit n,s;
-- 查找从n行开始到第s行的结果(更推荐使用)
select [(column1,[column2...]) from table_name [where...] [order by...] limit s offset n;
我们三种方法都用一次就很熟悉了。
1、查找ExamTable表通过id排序从第1行到第5行的同学所有信息。
seselect * from ExamTable order by id limit 5;
查找如下:
2、查找ExamTable表语文成绩前五名同学的全部信息。
select * from ExamTable order by Chinese desc limit 1,5;
查找如下:
3、查找ExamTable表总分在第二到第五的同学序号,学号,姓名和总分。
select id,sn,name,Chinese+Math+English final from ExamTable
order by final desc
limit 5 offset 1
结果如下:
三、更新(update)
基本语法:
UPDATE TABLE_NAME SET COLUMN1=...[,COLUMN2=...,[COLUMN3=...]]
[WHERE...][ORDER BY...][LIMIT...]
我们只需要做三个案例就很明确可以使用更新这个了。
1、将‘石昊的语文成绩修改为80分’。
update ExamTable set Chinese=80 where name='石昊'
修改前: 修改后
我们发现,进行修改操作把石昊的语文分数已经成功从60分修改到80分。
注意:由于update的操作是比较危险的,所以在图示化工具的时候可能会出现更新失败的问题,如果更新失败请把下面语句加上去:
SET SQL_SAFE_UPDATES = 0;
如果还是想安全一点就设为1就行。
2、将语文成绩前三的同学成绩都加三十。
update ExamTable set Chinese=Chinese+30 order by Chinese desc limit 3;
修改前: 修改后:
3、将所有同学的语文成绩都加10分。
select *,Chinese+Math+English final from ExamTable
修改前: 修改后:
四、删除(delete)
删除操作基本语法:
DELETE FROM TABLE_NAME [WHERE...][ORDER BY...][LIMIT...]
我们主要写俩个内容就差不多能把这个删除完全掌握,一个是删列的,一个是删表的。
1、将石昊的成绩删除
delete from ExamTable where name='石昊'
删除前: 删除后
2、将Exan_Table表删除
delete from ExamTable;
删除前: 删除后
注意:删除表和更新表的操作都是一个十分危险的操作,而这个操作尽量避免使用,以防出现有关于数据的问题。