你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试。——《心灵捕手》
前言:
大家好,上期我们讲到了表的GRUD操作中的新增数据、查询数据以及表中数据的排序、去重等操作,本期讲解条件查询、修改数据、删除数据的简单操作,很容易理解。一起来看看吧。表的增删改查(一)
目录
1、条件查询
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
1.1比较运算符
运算符 | 说明 |
---|---|
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不稳定,例如NULL=NULL的结果是NULL |
<=> | 等于,NULL稳定,例如NULL<=>NULL的结果是TRUE(1) |
!=,<> | 不等于 |
BETWEEN a AND b | 匹配范围,[a,b],如果a<+value<=b,返回TRUE(1) |
IN(option,...) | 如果是()中的任意一个,就返回TRUE(1) |
IS NULL | 是空 |
IS NOT NULL | 不是空 |
LIKE | 模糊查询。%表示任意多个(包括0个)任意字符;_表示任意一个字符 |
首先我们来创建一个名为student_grade的成绩表:
mysql> create table student_grade(
-> id int,
-> name varchar(20),
-> english decimal(3,1),
-> math decimal(3,1),
-> chinese decimal(3,1)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into student_grade (id,name,english,math,chinese) values
-> (1,'Turr',55,66,76),
-> (2,'Rorric',65,77,65),
-> (3,'Coline',43,56,76),
-> (4,'Bob',77,66,64),
-> (5,'Tom',53,74,66);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
窗口显示为:
1.1.1基本查询
当我们要查询某一条件下的数据,我们直接在where后面写出判断条件,格式为:where 字段(<、>、<=>、!=、<>)数字
比如我要查询英语不及格的同学即英语成绩 <60的学生。
mysql> select name,english from student_grade where english <60;
+--------+---------+
| name | english |
+--------+---------+
| Turr | 55.0 |
| Coline | 43.0 |
| Tom | 53.0 |
+--------+---------+
3 rows in set (0.00 sec)
窗口显示:
当然你也可以进行字段与字段之间的比较,格式为:where 字段1 判断符 字段2;
查询语文成绩好于英语成绩的同学
mysql> select name,chinese ,english from student_grade where chinese>english;
+--------+---------+---------+
| name | chinese | english |
+--------+---------+---------+
| Turr | 76.0 | 55.0 |
| Coline | 76.0 | 43.0 |
| Tom | 66.0 | 53.0 |
+--------+---------+---------+
3 rows in set (0.00 sec)
窗口显示:
我们也可以给表达式起别名的时候同时进行条件判断,起别名在上一期表的增删改查中详细讲解到了,我们直接用就好了。表达式判断格式为:字段1 算术运算符(+、-、*等) 字段2 算术运算符(+、-、*等) 字段n 条件判断符 数字;
查询总分在200分以下的同学并且给表达式起名为sum:
mysql> select name,chinese + math + english sum from student_grade
-> where chinese + math + english < 200;
+--------+-------+
| name | sum |
+--------+-------+
| Turr | 197.0 |
| Coline | 175.0 |
| Tom | 193.0 |
+--------+-------+
3 rows in set (0.00 sec)
窗口显示:
1.1.2范围查询
当你想查找一个范围里面的数据时,你可以使用between and 来查询,格式为:select 字段 from 表名 where 字段 between 数字 and 数字;
比如我要查找语文成绩在70-80之间的同学:
mysql> select name,chinese from student_grade where chinese between 70 and 80;
+--------+---------+
| name | chinese |
+--------+---------+
| Turr | 76.0 |
| Coline | 76.0 |
+--------+---------+
2 rows in set (0.00 sec)
窗口显示:
1.1.3IN查询
in查询就是查找某一列值满足一堆数字里面的值,格式为:select 字段 from 表名 where 字段 in(数据1,数据n);
查询数学成绩是56或者66或者77分的同学及数学成绩:
mysql> select name,math from student_grade where math in(56,66,77);
+--------+------+
| name | math |
+--------+------+
| Turr | 66.0 |
| Rorric | 77.0 |
| Coline | 56.0 |
| Bob | 66.0 |
+--------+------+
4 rows in set (0.00 sec)
窗口显示:
1.1.4LIKE查询
like为模糊查询,分为%和_两中查询。%为 匹配任意多个(包括 0 个)字符。通常查询姓为什么的数据,格式为select 字段 from 表名 where 字段 like '字段%';
比如我要查询开头为T的所有同学:
mysql> select name from student_grade where name like 'T%';
+------+
| name |
+------+
| Turr |
| Tom |
+------+
2 rows in set (0.00 sec)
窗口显示:
_ 匹配严格的一个任意字符,格式为:select 字段 from 表名 where 字段 like'字段_';其中_可以为多个。
比如我要查询开头为T且姓名长度为三的同学:
mysql> select name from student_grade where name like 'T__';
+------+
| name |
+------+
| Tom |
+------+
1 row in set (0.00 sec)
窗口显示:
查询名字为T开头且总长度三个字符的同学只需要将姓写在开头加上两个_即可,比如Tom写为'T__'
1.1.5IS NULL和IS NOT NULL
由于student_grade表中没有一个值为空,我们来增加几个空值。我们使用多行插入,插入两行信息。怎样插入数据在表的增删改查(一)中有详细介绍。
mysql> insert into student_grade (name,chinese,math,english) values
-> (6,'sarah',68,89,NULL),
-> (7,'Tommy',NULL,60,80);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student_grade;
+------+--------+---------+------+---------+
| id | name | english | math | chinese |
+------+--------+---------+------+---------+
| 1 | Turr | 55.0 | 66.0 | 76.0 |
| 2 | Rorric | 65.0 | 77.0 | 65.0 |
| 3 | Coline | 43.0 | 56.0 | 76.0 |
| 4 | Bob | 77.0 | 66.0 | 64.0 |
| 5 | Tom | 53.0 | 74.0 | 66.0 |
| 6 | sarah | NULL | 89.0 | 68.0 |
| 7 | Tommy | 80.0 | 60.0 | NULL |
+------+--------+---------+------+---------+
7 rows in set (0.00 sec)
窗口显示:
![]()
is null的用法,is null就是满足空。语法比较简单,我们直接来看实例查询英语成绩为空的学生:
mysql> select name,english from student_grade where english is null;
+-------+---------+
| name | english |
+-------+---------+
| sarah | NULL |
+-------+---------+
1 row in set (0.00 sec)
窗口显示:
is not null的用法,is not null就是满足不是空。语法比较简单,我们直接来看实例查找英语成绩非空的学生:
mysql> select id,name,english,math,chinese from student_grade where english is not null;
+------+--------+---------+------+---------+
| id | name | english | math | chinese |
+------+--------+---------+------+---------+
| 1 | Turr | 55.0 | 66.0 | 76.0 |
| 2 | Rorric | 65.0 | 77.0 | 65.0 |
| 3 | Coline | 43.0 | 56.0 | 76.0 |
| 4 | Bob | 77.0 | 66.0 | 64.0 |
| 5 | Tom | 53.0 | 74.0 | 66.0 |
| 7 | Tommy | 80.0 | 60.0 | NULL |
+------+--------+---------+------+---------+
6 rows in set (0.00 sec)
窗口显示:
1.2逻辑运算符
运算符 | 说明 |
---|---|
AND | 多个条件必须都为TRUE(1),结果才是TRUE(1) |
OR | 任意一个条件为TRUE(1),结果为TRUE(1) |
NOT | 条件为TRUE(1),结果为FALSE(0) |
1.2.1AND查询
我们单独用and来查询一个范围内的数据,跟between and相似。只不过and需要两个表达式。格式为:表达式1 and 表达式2
mysql> select name,chinese from student_grade where chinese >70 and chinese <80;
+--------+---------+
| name | chinese |
+--------+---------+
| Turr | 76.0 |
| Coline | 76.0 |
+--------+---------+
2 rows in set (0.00 sec)
窗口显示:
1.2.2OR用法
or用法是多个表达式组成的,相对于in的用法更为复杂,格式为:select 字段1,字段n from 表名 where 表达式1 or 表达n;
比如我要查询数学成绩为66、77、74的学生:
mysql> select name,math from student_grade where math=66 or math=77 or math=74;
+--------+------+
| name | math |
+--------+------+
| Turr | 66.0 |
| Rorric | 77.0 |
| Bob | 66.0 |
| Tom | 74.0 |
+--------+------+
4 rows in set (0.00 sec)
窗口显示:
1.2.3NOT用法
not是mysql中的一个逻辑运算符,逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。通常用于检测数据库对象是否存在。
mysql> select not 1;
+-------+
| not 1 |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> select !0;
+----+
| !0 |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
窗口显示:
2、修改数据
修改数据语法:UPDATE table_name SET column = expr [, column = expr ...][WHERE ...] [ORDER BY ...] [LIMIT ...]。其中大写的为关键字。
比如我是数学老师有一天我看Tom不爽我把他的数学成绩置为0:
mysql> update student_grade set math=0 where name='Tom';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select name,math from student_grade where name='Tom';
+------+------+
| name | math |
+------+------+
| Tom | 0.0 |
+------+------+
1 row in set (0.00 sec)
窗口显示:
有一天班主任看Tom被数学老师恶意修改了数学成绩,班主任为Tom报不平把Tom的数学成绩置为了满分并且把不及格的英语成绩置为及格:
mysql> update student_grade set english=60,math=90 where name='Tom';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select name,english,math from student_grade where name='Tom';
+------+---------+------+
| name | english | math |
+------+---------+------+
| Tom | 60.0 | 90.0 |
+------+---------+------+
1 row in set (0.00 sec)
窗口显示:
数学老师看见班主任把Tom的成绩修改回来了,一气之下把数学倒数前三名学生的数学成绩全部置为了0:
mysql> update student_grade set math=0 order by math limit 3;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select name,math from student_grade;
+--------+------+
| name | math |
+--------+------+
| Turr | 0.0 |
| Rorric | 77.0 |
| Coline | 0.0 |
| Bob | 66.0 |
| Tom | 90.0 |
| sarah | 89.0 |
| Tommy | 0.0 |
+--------+------+
7 rows in set (0.00 sec)
窗口显示:
最后班主任只好妥协了。
以上就是修改数据的用法。举了个例子,希望你能理解。
3、删除数据
删除数据的语法为:DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
删除关于Tom的所有信息:
mysql> delete from student_grade where name='Tom';
Query OK, 1 row affected (0.00 sec)
mysql> select * from student_grade;
+------+--------+---------+------+---------+
| id | name | english | math | chinese |
+------+--------+---------+------+---------+
| 1 | Turr | 55.0 | 0.0 | 76.0 |
| 2 | Rorric | 65.0 | 77.0 | 65.0 |
| 3 | Coline | 43.0 | 0.0 | 76.0 |
| 4 | Bob | 77.0 | 66.0 | 64.0 |
| 6 | sarah | NULL | 89.0 | 68.0 |
| 7 | Tommy | 80.0 | 0.0 | NULL |
+------+--------+---------+------+---------+
6 rows in set (0.00 sec)
窗口显示:
删除student_grade整张表:
窗口显示:
总结:
1、查询
全列查询
select * from 表
指定列查询select 字段1,字段2... from 表
查询表达式字段
select 字段1+100,字段2+字段3 from 表
别名
select 字段1 别名1, 字段2 别名2 from 表
去重DISTINCT
select distinct 字段 from 表
排序ORDER BY
select * from 表 order by 排序字段
条件查询WHERE
(1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR
(8)NOT
select * from 表 where 条件
2、修改
update 表 set 字段1=value1, 字段2=value2... where 条件
3、删除
delete from 表 where 条件
4、插入
多行插入
insert into 表(字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...);
本期博客到这里就结束了,如有收获,还请三连博主,感谢了!
Never Give Up