MySQL:表的增删查改——CRUD(一)

目录

1、CRUD

2、新增(Create)

2.1 单行插入+指定列插入

2.2 单行插入+全列插入

2.3 多行插入

3、查询(Retrieve)

3.1 全列查询(无条数限制)

3.2 指定列查询

3.3 表达式查询

3.3.1 表达式为新增的列

3.3.2 原有列进行表达式计算

3.4 别名

3.4.1 别名规则

3.4.2 给表达式起别名

3.4.3 给列(字段)起别名

3.5 去重查询

3.6 排序

3.6.1 MySQL中的NULL

3.6.2 指定列排序

3.6.3 表达式排序

3.6.4 多列排序


1、CRUD

  • C — Create(新增)
  • R — Retrieve(查询、检索)
  • U — Update(更新)
  • D — Delete(删除)

SQL中使用 "--空格+描述"表示注释说明。 


2、新增(Create)

即插入一条新的数据行进入表中。

2.1 单行插入+指定列插入

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

  • 前面的字段明要和后面的值一一对应,如果列与值的类型或者个数不匹配会报错。
  • 字符串类型的值要用单引号包裹
  • 没有指定出来的列为默认值,默认值为NULL

 

2.2 单行插入+全列插入

 既然是全列插入,那我们就不用指定列,代表插入所有列:

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

  • 全列插入不用指定列,默认全列都要插入值
  • 没有指定出来的列仍然为默认值,默认值为NULL

2.3 多行插入

多行插入的全列插入、指定列插入的语法与单行插入的语法相同。

这里以全列插入为例:

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

即在values后跟多个组的值,每个组代表一条数据行。 

问题:单行插入(一次提交一条数据)和多行插入(一次提交多条数据)哪个效率更高?

      该问题需要考虑:

  1. 数据量带来的网络开销
  2. 数据写入磁盘的IO开销
  3. 开启关闭事务所消耗的系统资源

答:一次提交多条数据(在可控的范围内)比单行插入效率要高一点。


3、查询(Retrieve

3.1 全列查询(无条数限制)

查询表中所有行所有列select * from 表名; 

  • * 代表查询表的所有列
  • from、select为关键字

 


3.2 指定列查询

指定列的查询:select 列名,列名 from 表名;

 


3.3 表达式查询

3.3.1 表达式为新增的列

在select选择的列后加上一个数值类型,效果为所有记录都加上了这个表达式的值

注意:这个表达式虽然在临时表中显示出来了,但是并不在我们真实所创建的表里。

3.3.2 原有列进行表达式计算

示例一:所有记录的语文成绩在原来的基础上均加10分:

示例二:计算所有学生的总分:


3.4 别名

3.4.1 别名规则

我们可以给表达式起别名,也可以给每个列起别名。

  • 在原来的名后加 as ‘别名’(最完整)
  • 在原来的名后加 as 别名
  • 在原来的名后加  ‘别名’
  • 在原来的名后直接加 别名(最简) 

也就是说:

  • as可以省略;
  • 单引号可以包裹住别名,也可以省略掉单引号,但是如果别名中有空格或者等运算符,则必须用单引号包裹住别名。 

3.4.2 给表达式起别名

3.4.3 给列(字段)起别名


注意:

不管是使用表达式还是使用别名,查询显示出的结果集都是通过真实的表所返回的临时表,执行完之后就被删除了,并不是数据库中真正的表,所以说表达式和别名并没有存在于真实的表中。


3.5 去重查询

去重查询:select distinct 列名,列名...  from 表名;

即查询所返回的结果集中过滤重复的记录,只保留一条记录。

重复的记录:要求每一列的值都要相同,只要有一列不相同,就不是重复的记录。

注意:上图仅有一个math列,只要math列相同就为重复记录,但是如果加上其他列,就要要求所有列相同才为重复记录: 

故:

去重时,只有查询结果中所有的列都相同时,才会被认定为重复记录。

去重后,重复记录只保留一条。


3.6 排序

排序规则:

  • ASC (asc):升序
  • DESC(desc):降序

 注意:desc 关键字,我们可以通过desc 表名;来查看表结构。这里的desc指的是describe 描述。而这里的desc为排序规则,descend 降序。

语法:select 列名,列名,... from 表名  order by  列名 [ASC | DESC];

通过升序或降序来对该列进行排序,降序则最大值在表的最上方。

3.6.1 MySQL中的NULL

MySQL中的NULL比较特殊,具有以下特点:

  1. 如果要排序的列中存在值为NULL的记录时,则NULL视为最小值
  2. NULL进行排序时,升序排在最上面,降序排在最下面。

  3. NULL不论和什么值进行运算,结果值都是NULL

  4. NULL始终被判定为false

3.6.2 指定列排序

我们也可以通过 指定列+别名、表达式+别名 进行排序。我们更推荐使用别名进行排序,可读性更高,也可以简化代码。

3.6.3 表达式排序

表达式+别名 进行降序排序:

若写出了order by 列名 的字句,但没有指定排序规则则默认为ASC升序。

3.6.4 多列排序

我们可以对多个字段进行排序,语法上我们只调整order by子句即可:

order by 列名 [ASC | DESC],列名 [ASC | DESC],列名 [ASC | DESC];

排序的优先级与书写顺序有关。

如下图所示,先对数学成绩进行排序,再对语文成绩进行排序,再对英语成绩进行排序:

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值