入坑数据库MySQL(5)-数据的添加、更新和删除 & 单表查询

1,207 阅读6分钟

数据的添加、更新和删除

添加数据

*为表中添加记录(数据)INSERT
语法:

   *INSERT  [INTO] 表名 [(字段列表)] 
           VALUES (值列表)
         *INSERT  [INTO] 表名
             SET 字段名1 = 值 ,字段名2 = 值 , …………
     同时添加多行数据
        *INSERT  [INTO] 表名 [(字段列表)] 
           VALUES (值列表),(值列表),…………

注意:如果表名后面没写字段名,则默认是向所有字段添加值,另外字符串值应该用单引号‘ ’ 括起来。

如何知道数据是否已经插入到表中?使用查询语句:select * from 表名;

如果表名后面没写字段名,则默认是向所有字段添加值,添加值的顺序必须和字段在表中定义的顺序相同。

更新数据

注意:更新数据时指对表中存在的记录进行修改 语法:

UPDATE 表名 
  SET 字段名1 = 更新值,字段名2 = 更新值,…………
  [WHERE  更新条件] 

叙述:where 子句是判断语句,用来设定条件,限制只更新满足条件的行,如果不带where子句,则更新所有行数据。可以一次修改多个行,多个列的数据。

删除数据

语法:

DELETE FROM 表名 
  [WHERE  删除条件]

叙述:此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表(表结构)不会被删除。

  • DELETE语句与TRUNCATE语句都能实现删除表中所有数据的功能。

DELETE语句与TRUNCATE语句的区别
1、 DELETE语句是DML(数据操纵)语句,TRUNCATE语句是DDL(数据定义)语句。
2、 DELETE语句可以使用where子句来设定只删除表中指定的数据,TRUNCATE语句只能用于删除表中所有记录(数据)。
3、使用TRUNCATE语句删除表中所有数据后,自动增加字段(AUTO_INCREMENT)的默认初始值重新由1开始,而使用DELETE语句删除表中所有记录后,再次添加记录时,自动增加字段的值为删除时该字段的最大值加1。
4、 重要:TRUNCATE语句在本质上直接清空数据表,清空后数据不能恢复,DELETE语句在删除数据前,会将删除操作写入操作日志,数据可以恢复(在满足某些条件时)。

单表查询

查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来

简单条件查询

SELECT语句的语法
SELECT [DISTINCT | DISTINCTROW | ALL]    * | 字段列表 
[FROM 表名 
  [WHERE 查询条件]
    [GROUP BY 分组字段名  [HAVING 分组过滤条件] ]
    [ORDER BY 排序字段名 [ASC | DESC] ] 
    [LIMIT [偏移量,] 记录数] 
    [PROCEDURE procedure_name]
] 
  • [DISTINCT | DISTINCTROW | ALL] :用于剔除重复的记录
  • "*| 字段列表":需要查询的字段,“ * ”代表表中所有字段
  • FROM 表名 :需要查询的表名
  • [WHERE 查询条件] :查询条件
  • GROUP BY 分组字段名 :用于将查询结果按指定字段进行分组统计
  • HAVING 分组过滤条件:对分组统计结果进行过滤的条件
  • [ORDER BY 排序字段名 [ASC | DESC] ] :对查询结果按照指定的字段进行排序
  • [LIMIT [偏移量,] 记录数] :用于限制查询结果的数量(记录数),[偏移量,] 可以设置查询结果忽略(跳过)的记录数
  • [PROCEDURE procedure_name]:查询存储过程返回的结果集数据
  • *关系运算符

=:等于 | >:大于 | >=:大于或等于 | <:小于 | <=:小于或等于 | <>:不等于

带IN关键字的查询

IN关键字用于判断某个字段的值是否在指定的集合中
集合中的数据使用小括号“ ( ) ”括起来

带BETWEEN …AND关键字的查询

BETWEEN AND用于判断某个字段的值是否在指定的范围内

空值查询

空值(NULL)不同于0,也不同于空字符串!
where ... is (not) NULL;

带DISTINCT关键字的查询

表中的某些字段的数据可能存在重复的值,在查询结果中也有可能有重复的值,从而导致出现重复的数据行

带LINK关键字的查询

使用LIKE可以进行模糊查询。
通配符:

  • 下划线 “ _ ”:代表一个任意字符
  • 百分号 “ % ”:代表0个或多个任意字符

注意:通配符必须配合LIKE使用。如果在like模糊查询中,字符串中需要使用_%字符,则需要使用转义字符,即在_%字符加上反斜杠“ \ ” eg: where ... like ‘%%%’ ;(包含%)

where ... like '';(*%,%*,*%*,%*% -> *代字母,字母开头,字母结尾,开头结尾,包含字母)

带AND,OR关键字的多条件查询

AND:而且(多个条件需要同时满足,表达式才成立)
OR:或者(多个条件只需要满足一个,表达式就成立)

提示:多个查询条件,每个条件最好使用小括号括起来

高级查询

聚合函数

  • COUNT():返回某列的行数
  • SUM():返回某列的和
  • AVG():返回某列的平均值
  • MAX():返回某列的最大值
  • MIN():返回某列的最小值 上面的函数对一组(一列)数值进行统计,并返回唯一的一个数值(结果),所以这些函数被称为聚合函数。

COUNT()函数 —— 计数

 select COUNT( * )
 from ...
 where ...;

SUM()函数 —— 求和

select SUM( 字段名)
from 表名 ;

MAX()函数——求最大值

select MAX( 字段名 )
from 表名 ;

MIM()函数——求最小值

select MIN( 字段名)
from 表名 ;

对查询结果排序

SELECT [DISTINCT | DISTINCTROW | ALL]    * | 字段列表 
[FROM 表名 
	[WHERE 查询条件] 
	[ORDER BY 排序字段名 [ASC | DESC] ] 
] 

[ORDER BY 排序字段名 [ASC | DESC] ] :对查询结果按照指定的字段进行排序。
[ASC | DESC] :排序方式ASC 为升序, DESC为降序。默认是ASC 升序。

注意:ORDER BY在WHERE子句的后面

分组查询

SELECT [DISTINCT | DISTINCTROW | ALL]    * | 字段列表 
[FROM 表名 
   [WHERE 查询条件] 
   [GROUP BY 分组字段名  [HAVING 分组过滤条件] ]
   [ORDER BY 排序字段名 [ASC | DESC] ] 
] 

[GROUP BY 分组字段名 [HAVING 分组过滤条件] ]
注意:各个子句的先后次序!

WHERE  
  GROUP BY
  ORDER BY  

使用LIMIT限制查询结果的数量

查询数据时,可能会返回很多条记录,用户可以使用LIMIT来限制查询结果显示的行数。例如分页功能,也可以使用LIMIT来实现。 SELECT语句的语法:

SELECT [DISTINCT | DISTINCTROW | ALL]    * | 字段列表 
[FROM 表名 
  [WHERE 查询条件] 
  [GROUP BY 分组字段名  [HAVING 分组过滤条件] ]
  [ORDER BY 排序字段名 [ASC | DESC] ] 
  [LIMIT [偏移量,] 记录数] 
  [PROCEDURE procedure_name]
] 
  • [DISTINCT | DISTINCTROW | ALL] :用于剔除重复的记录
  • * | 字段列表 :需要查询的字段,“ * ”代表表中所有字段
  • FROM 表名 :需要查询的表名
  • [WHERE 查询条件] :查询条件
  • GROUP BY 分组字段名 :用于将查询结果按指定字段进行分组统计
  • HAVING 分组过滤条件:对分组统计结果进行过滤的条件
  • [ORDER BY 排序字段名 [ASC | DESC] ] :对查询结果按照指定的字段进行排序
  • [LIMIT [偏移量,] 记录数] :用于限制查询结果的数量(记录数),[偏移量,] 可以设置查询结果忽略(跳过)的记录数
  • [PROCEDURE procedure_name]:查询存储过程返回的结果集数据

注意:LIMIT同样适用于UPDATE与DELETE语句