目录
❄️一、新增(Create):
☑ 1、单行数据 + 全列插入:
☑ 2、指定列插入:
☑ 3、多行插入:
❄️二、查询(Retrieve):
☑ 1、全列查询:
☑ 2、指定列查询:
☑ 3、查询字段为表达式:
☑ 4、别名:
☑ 5、去重(DISTINCT):
☑ 6、排序(ORDER BY):
1、存在 NULL 数据的情况下:
2、在使用表达式及别名的情况下:
3、对多个字段进行排序:
☑ 7、条件查询(WHERE):
1、基本查询:
2、AND 和 OR的使用:
3、范围查询:
4、模糊查询:
☑ 8、分页查询(LIMIT):
❄️三、修改(Update):
❄️四、删除(Delete):
❄️总结:
我们的 CRUD 呢就是对应着我们的——增删查改,这些操作的。
C——Create ,增
R——Retrieve,查
U——Update,改
D——Delete,删
我们一一来介绍这些操作。
我们在介绍这些语法之前呢,我们先来创建一个 student 表,来进行操作:
❄️一、新增(Create):
语法:
INSERT INTO 表名 [(字段1,字段2)] VALUES (值,值);
(这里要注意:字符串类型的值,要使用 单引号 括起来,不想JAVA中使用 双引号)
我们来解释解释,这里面的每一个段的意思:
我们有几种插入方式,我们来一一介绍:
☑ 1、单行数据 + 全列插入:
对于这个全列插入呢,我们不需要对其 表名后面进行字段的编写,直接就可以按照我们定义的顺序来进行赋值。
以上面的 student 这个表为例:
INSERT INTO student VALUES (值,值,值);
我们来插入演示一下看看:
这个就是我们的单行全列插入的演示了,我们再引入一个新的语法—— select * from student;
查询表中的数据,当然这里的 * 可以换成任意的一个 列,这里的 * 代表的是全列查询。
我们可以看到,当我们的有个值没有对应上,就会报错。
☑ 2、指定列插入:
这个就是非常简单的了,就是字面意思:
INSERT INTO student (字段1,字段2,字段3) VALUES (值,值,值);
这个呢就比较简单了,我们来看:
这个呢就是指定列插入了,并且没有被指定赋值的列呢,我们会默认赋值为 NULL。
☑ 3、多行插入:
语法:
INSERT INTO student (字段1,字段2,字段3) VALUES (值,值,值),(值,值,值)......
在values后面跟多个 values组,每一组呢表示插入的一个数据行
注意:
一次插入多条数据(在一个可控范围内),比一次提交一次数据的效率要高那么一点。
所以我们尽可能的在插入数据的时候呢,执行插入多条数据。
❄️二、查询(Retrieve):
语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...我们一个一个来介绍都是什么作用。
☑ 1、全列查询:
这个语法呢,在上面我们已经了解过了,语法非常的简单:
SELECT * FROM 表名 ;
这个就是全列查询的语法和其使用示例。
其中:
1、 * 是表示的是要查询的所有列。
但是要注意的是:
1、通常情况下,不要使用全列查询的方式,来查询列,因为如果数据太多,而所查的数据只是其中的小部分,这样会大大降低效率,所以不建议使用这个方法。
☑ 2、指定列查询:
语法:
SELECT 列,列,列 FROM 表名;
这里要注意的是,我们在这里查询的顺序不需要是按照我们表的定义顺序来
这个就是我们的 指定列查询的 使用示例。
☑ 3、查询字段为表达式:
我们来看第一种表达式的编写方法:
语法:
SELECT 列,列,列,数字 FROM 表名;
我们可以看到,10这个列呢,同样被查询出来了,但是这里要注意的是呢,我们的 这个 表达式10本身并不在我们的真实的表中。
我们再来看下一种表达式的编写方法:
假如 我们想要把其 所有人的年龄加 10 的话呢,我们要怎样才能做到呢?我们来看:
语法:
SELECT 列,列,列+数字 FROM 表名;
我们可以看到,这个年龄在原来的基础上已经 增加了10。
我们重新来创建 student表 这个表:
我们呢,对其每个学生的 成绩计算出它们的总和为多少:
语法:
SELECT 列 + 列 + 列 FROM 表名;
我们来看一下:
这个就是 我们的对于 列和列之间的表达式了。
我们的表中是没有上面表达式这个列的,其实是存于一个临时表中,当我们执行完之后呢就会把这个临时表给删除了。
☑ 4、别名:
我们在上面的 列和列之间形成表达式,但是呢由这个 表达式 而形成的列名呢,是不是非常的长,所以呢,这里我们可以使用 —— 别名,来是其 列的长度缩减下来,我们来看看如何使用:
语法:
SELECT 列 + 列 + 列 [ AS ] 别名 FROM 表名;
这样呢就是我们 别名的使用方法了,但是其实,我们如果不写 as 的话呢同样可以达到这样的效果,我们来看看当不使用 as 的情况下,是不是和上面一样的结果:
我们可以看到是相同的结果。
☑ 5、去重(DISTINCT):
我们在上面的查询中已经介绍了对于 查询的语法了,那么其中的 DISTINCT 就是 —— 去重的作用
那么其中的语法是什么呢?我们来看:
语法:
SELECT DISTINCT 列,列,列 FROM 表名;
这个就是可以把指定的列中的 重复出现的达到去重的效果
对于数学成绩呢,有三个 80 分的达到了重复的效果,当我们使用去重的语法后,看看是否是剩余一个80分的成绩:
我们可以看到 这时候我们表中 math 中的成绩只剩下一个 80 了。
但是有一种情况要注意,当我们指定多个列进行去重的时候呢,我们要确保列和列对应的数据必须是都重复的,如果有一个不是重复的话呢,那么就不会达到去重的效果了,我们来看:
这样就不会达到去重的效果了,因为其中的 id 并不是重复的。
☑ 6、排序(ORDER BY):
这个呢是我们查询中非常重要的语法了,如果没有 ORDER BY 这个语法的时候查询出来的是默认的一个顺序,我们在查询的时候呢要排除一个有序的顺序,而非乱序的,所以我们来看看对于这个排序语法是如何使用的:
语法:
SELECT 列,列 FROM 表名 ORDER BY column [ ASC | DESC ], [...];
其中:
1、ASC:为升序(从小到大)如果使用排序语法,而没有定义排序规则会默认为这个排序
2、DESC:为降序(从大到小)
1、ASC:为升序(从小到大):
我们可以看到对于这个排序规则呢,有 math 的升序来决定的查询顺序。
2、DESC:为降序(从大到小):
我们可以看到,我们这个查询的顺序是由 math 这个顺序来决定的。
我们对于排序有几个特殊的情况:
1、存在 NULL 数据的情况下:
1)、ASC 情况下:
math 中的 NULL 会排在最前面。
2)、DESC 情况下:
我们的 NULL 排在最后面。
这是为什么呢?
因为:
NULL 在排序的时候呢,视为比任何的值都小。
2、在使用表达式及别名的情况下:
在使用表达式的情况,我们来看看:
这个就是使用 表达式的情况下。我们来看看使用别名的情况下:
我们可以看到,使用别名和使用表达式达到的情况是一样的。
我们可以在上面注意到一个点:
我们的 NULL 不论和谁进行相加都是 NULL,我们的 MySQL 中的NULL,是特殊的始终都会被判定为 FALSE。
3、对多个字段进行排序:
对于这中情况下,我们 排序的优先级与书写的顺序有关。
我们呢对 上面的实例进行排序,对数学进行降序,语文进行升序,数学进行升序。
我们这种情况是如何进行排序的呢?我们呢先对 math进行降序,当math相等的时候呢,对相等的 math 值进行 语文成绩的比较,进行升序排序,再当语文相等的时候呢,对数学进行升序。
☑ 7、条件查询(WHERE):
我们先来看几个条件:
比较运算符:
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= (MySQL中是 = ,而其余的语言中为 == ,这里要注意) | 等于,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、基本查询:
数学成绩 < 80 的进行查询打印:
这个便是我们的 查询结果了。
注意:这个查询会自动过滤掉值为 NULL 的数据
我们同样可以进行字段之间的基本查询:
查询 语文成绩 > 数学成绩的学生:
这个便是查询的结果啦。
同样,我们亦可对其进行 表达式的查询:
总分小于200的学生了。但是这里不能使用 别名进行条件查询,我们来看使用的情况下是何结果:
这样呢就会发生报错,这是因为,程序执行过程中:
先执行from -> 之后是 where -> 之后再是 select -> 最后是 order by
2、AND 和 OR的使用:
AND:查询 数学大于 60 并且 语文小于 80 的同学。
这个就是对于 AND 的使用方法了。
OR: 查询 数学大于 60 或者 语文小于 80 的同学。
这个就是我们的 OR 的使用方法了。
我们再来看看对于 AND 和 OR 这个两个关键字的优先级谁大:
再看当我们把 or 这里给括起来,结果是否一样:
是不是就不一样了,这时候是先执行的 or 后执行 and,所以不同。由此可以得出:
AND 的优先级大于 OR 的优先级,所以当我们共同使用时,应用 () 把需要先执行的括起来
3、范围查询:
1、 BETWEEN a0 AND a1 :
查询 数学成绩在 [70,80] 之间的。
对于这个方法我们同样可以使用 and 这个关键字做到:
2、IN :
查询 语文成绩是 40 60 70 的学生。
同样使用 OR 也可以做到:
4、模糊查询:
我们的模糊查询就是对于—— LIKE 的使用,对于这个 关键字使用的时候呢,有两个 字符 去搭配着使用分别为:% 和 _
%:匹配任意多个字符。
_ : 匹配一个字符。
☑ 8、分页查询(LIMIT):
语法:
从 0 开始查询 n 个结果
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT n;
从 s 开始查询 n 个结果
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT s,n;
从 s 开始查询 n 个结果
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT n OFFEST s;
通过分页查询呢可以有限的控制一次查询出来的结果集中的记录的条数,可以有效的减少数据库服务器的压力,同时对于用户也比较友好。
我们把上面的 student 这个表进行 对于 id 的分页查询,分成3页,即使最后一页不够也没事。
❄️三、修改(Update):
语法:
UPDATE 表名 SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
我们来使用一下看看:
把张三的数学成绩改成 90:
但是当我们不写 where 这个条件查询的时候呢,我们这里会修改所有人的成绩。
我们在来写一个修改的示例:
把总成绩倒数前3的人的数学成绩 + 30 。
我们这里要注意,我们的 math = math + 30 不能写成 math += 30
❄️四、删除(Delete):
语法:
DELETE FROM 表名 [WHERE ...] [ORDER BY ...] [LIMIT ...]
我们来简单的实现一下:
删除张三的成绩:
我们可以看到 张三的成绩已经没有了。
当然这里如果不加条件的话,就是相当于把表中的数据都删除。
❄️总结:
OK,到这里呢,我们的 CRUD 的基础操作到这里就结束了,在下一篇博客中我们来介绍一下对于 CRUD 的进阶操作与其介绍。尽情期待吧!!!拜拜~~~下次见