MySQL表的增删改查(基础)

目录

1. CRUD

2. 新增(Create)

2.1 单行数据 + 全列插入

简写方式

2.2 多行数据 + 指定列插入

指定列插入

多行插入

3. 查询(Retrieve)

3.1 全列查询

3.2 指定列查询

3.3 查询字段为表达式

查询一个数值类型

把所有学生的语文成绩+10

列于列之间的相加

3.4 别名

简写方式

3.5 去重:DISTINCT

3.6 排序:ORDER BY

null数据视为比任何值都小

对表达式进行排序

3.7 条件查询:WHERE

LIKE运算符的说明

一行数据的两列是可以比较的

以表达式作为条件

BETWEEN

IN

3.8 分页查询:LIMIT

4. 修改(Update)

5. 删除(Delete)



1. CRUD

CRUD-增删查改

C-Create 新增

R-Retrieve 检索,查询

U-Update 更新

D-Delete 删除

2. 新增(Create

2.1 单行数据 + 全列插入

语法:

insert into 表名 [(字段1,字段2,...)] values(值,值,...);

values内的值与表名后括号内的字段一一对应,否则会报错。

注意:字符串类型的值要用单引号''包裹起来,就像示例中的'张三'一样。

简写方式

语法:

insert into 表名 values(值,值,...);

values内的值与表名后括号内的字段必须一一对应,否则会报错。

示例:

2.2 多行数据 + 指定列插入

指定列插入

语法:

insert into 表名(指定列,...) values(值,...);

示例:

没有插入值的列则自动插入默认值,因为我没有设置默认值,所以默认值为null,如下:

多行插入

语法:

insert into 表名(指定列,...) values(值,...)[,(值,...)][,(值,...)]...;

一条insert语句在values部分可以插入值,每一组values值代表一个数据行。

示例:

效果如下:

3. 查询(Retrieve

3.1 全列查询

语法:

select * from table_name;

其中,*表示要查询表中所有的列。

示例:

3.2 指定列查询

语法:

select 列名[,列名]... from 表名;

示例:只查询id,name,语文成绩

3.3 查询字段为表达式

查询一个数值类型

效果为另起一列,使所有行都包含一个表达式的值。它本身并不存在于真实的表中。

把所有学生的语文成绩+10

注意:此处的语文成绩+10分只是显示于查询结果,实际上真实的表的语文成绩并没有改变!

列于列之间的相加

3.4 别名

语法:

select 列名/表达式 as 别名 ,[列名/表达式 as 别名],...from 表名;

示例:

简写方式

语法:

select 列名/表达式 别名 ,[列名/表达式 别名],...from 表名;

示例:

我们的表里面本来没有编号、姓名、总分这些列,所有通过表达式查询出来的结果集是通过一个临时表返回给我们的,执行完之后临时表就删除了。

3.5 去重:DISTINCT

语法:

select distinct 列名 from 表名;

示例:

只查询数学成绩,发现有两个98分。

使用distinct关键字来去重:

注意:在distinct查询结果中,要每一列都相同才会被认为是重复数据(即两条数据行完全一致)。

当我们在查询数学成绩的基础上,再加上查询id,再使用distinct去重看看效果如何:

由于加上了id字段,两个数据行没有完全一致,所以MySQL不认为它们为重复数据,并没有去重。

我们再插入一条新数据:

再查询三科成绩并且使用distinct去重:

此时,孙悟空与孙行者的三科成绩完全相同,即两个数据行完全一致,可以成功去重。

3.6 排序:ORDER BY

使用order by字句,要查询的结果就会根据我们指定的规则去排序。

排序规则:

1.升序 ASC

2.降序 DESC

语法:

select 列名 from 表名 order by 列名 [ASC|DESC];

对语文成绩进行降序排序:

对英语成绩进行升序排列:

如果没有指定排序规则,则默认升序:

null数据视为比任何值都小

我们再插入一条新数据行:

再对英语成绩进行升序排序(从低到高):

对表达式进行排序

对总分进行排序:

在排序的时候可以使用别名:

可以发现孙大圣的总分始终为null,这与null的性质有关。

MySQL中的null比较特殊:

1.不论和什么值运算,返回值都为null

2.null始终被判定为false

3.null值不同于c语言中的null(c语言中等同于0),在MySQL中null就是null

3.7 条件查询:WHERE

作用:

根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户。

可以通过一些运算符,比如说比较运算符,逻辑运算符。

比较运算符:

运算符说明
>, >= , < , <=大于,大于等于,小于,小于等于
=等于,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个)任意字符; _表示任意一个字符

LIKE运算符的说明

对于like的用法,举几个例子来说明:

%表示多个(包括0个)任意字符

%放在后面则向后匹配,放在前面则向前匹配。

_表示一个字符,相当于一个占位符:

如果有两个_则相当于有两个占位符,即孙后面需要跟两个字符才会被匹配:

逻辑运算符:

运算符说明
AND多个条件必须为TRUE(1),结果才是TRUE(1)
OR任意一个条件为TRUE(1),结果为TRUE(1)
NOT条件为TRUE(1),结果为FALSE(0)
1. WHERE 条件可以使用表达式,但不能使用别名。
2. AND 的优先级高于 OR ,在同时使用时,需要使用小括号 () 包裹优先执行的部分

示例:查询英语不及格(<60)的同学

结果集中并没有null,因为null已经被自动过滤掉了。

一行数据的两列是可以比较的

示例:查询英语成绩低于语文成绩的同学

以表达式作为条件

示例:查询总分低于200的同学

注意:不可以用别名代替表达式作为查询条件。

原因:这与MySQL执行SQL语句的优先级有关。

1.如果要在数据中查某些数据,首先要确定表,先执行from

2.在查询的过程中要根据指定的条件把符合条件的数据过滤出来,此时执行where子句

3.执行select后面指定的列,这些列最终将加入结果集。

4.排序操作,根据order by子句中指定的列名和排序顺序进行排列。

因为在执行where子句的时候别名还没有被定义,所以用别名作为查询条件时会报错。

BETWEEN

示例:查询语文成绩在[80,90]分的同学及语文成绩

等效于:

IN

示例:查询数学成绩为78或者98的同学及数学成绩

等效于:

3.8 分页查询:LIMIT

作用:限制查询结果集中的条数。

语法:

-- 起始下标为 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;

示例:

第一种写法示例:从下标0开始,向后筛选三条数据

第二种写法示例:从下标3开始,向后筛选3条数据

第三种写法示例:从下标3开始,向后筛选3条数据

4. 修改(Update

语法:
UPDATE table_name SET column = expr [, column = expr ...]
[ WHERE ...] [ ORDER BY ...] [ LIMIT ...]

其中set为关键字,column为需要修改的列,expr为新值。

示例:将孙悟空的数学成绩修改为80

【注意】!!!

修改数据时一定要记得加where指定条件,否则MySQL会默认修改所有数据行。

其他例子:

-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3 ;
-- 将所有同学的语文成绩更新为原来的 2
UPDATE exam_result SET chinese = chinese * 2 ;

5. 删除(Delete

语法:
DELETE FROM   table_name [ WHERE ...] [ ORDER BY ...] [ LIMIT ...]
示例:删除所有同学中英语成绩倒数前三的所有成绩
将所有同学按英语成绩从低到高排序:
执行删除语句:
再次将所有同学按英语成绩从低到高排序:
可以看到英语成绩倒数前三的数据已经被删除了。
【注意】 !!!
执行删除语句的时候也要像对待修改语句一样,做好条件限制(加where条件),否则将删除表中的所有数据!

如果哪里有疑问的话欢迎来评论区指出和讨论,如果觉得文章有价值的话就请给我点个关注还有免费的收藏和赞吧,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值