【MySQL上分之路】第十一篇:MySQL数据操作?来吧,来操作

神奇宝贝冲

MySQL数据的基本操作

前言

MySQL可以创建多个数据库来存储数据,数据表又是数据库的重要组成部分,每一个数据库都可以由若干个数据表组成的,而数据表的就是用来存放数据,并且数据才是我们开发过程中最关心的,所以对MySQL最实际和基本的要求就是对数据进行操作,这类操作主要是增删改查:查询数据、插入数据、删除数据、更改数据

查询数据SELECT

查询数据是指我们根据不同的需求从数据库中通过不同的查询方式获取到的不同的数据,是数据库使用频率最高并且最重要的操作,主要是使用SELECT语句来进行查询操作,可以根据对表查询的不同分为单表查询和多表查询

单表查询

SELECT语法格式

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]
字句解析:
{* | <字段列名>}:表示查询数据字段名称,可以指定要查询的字段名,或者以*通配符使用时则表示要查询所有字段名
FROM <表 1>, <表 2>…:表示要查询的数据来源于哪张表,可以是一个表或者多个表
[WHERE <表达式>]:该字句为选择项,表示查询的数据需要满足表达式,不能与聚合函数使用
[GROUP BY <group by definition>]:可选项,表示查询的数据根据group by definition进行分组,例-查询男女的数据可以根据性别分组
[HAVING <expression> [{<operator> <expression>}]]:HAVING字句主要是对分组之后的数据进行筛选,可以与聚合函数一起使用
[ORDER BY <order by definition>]:表示查询的数据按照什么顺序来进行显示
[LIMIT[<offset>,] <row count>]:表示对查询的数据进行显示条数限制

查询去重DISTINCT

当表中没有进行唯一性约束时,数据就可能会出现重复数据的情况,为了对查询进行去重可以使用关键字DISTINCT对一个字段或者多个字段的数据进行查询去重

语法格式

SELECT DISTINCT 字段名 FROM TABLE;
关键字:DISTINCT只支持在SELECT查询时使用
对多个字段进行去重是指多个字段值完全一样的情况下才会被去重
数据查询去重

查询结果限制LIMIT

当数据表中数据量多大的时候,对数据进行查询操作时会给数据库服务器造成很大压力,所以可以使用关键字LIMIT来限制查询结果的显示,LIMIT主要有三种使用方式:指定初始位置,不指定初始位置,和OFFSET配合使用,当不指定初始位置时默认从第一条数据开始显示,初始位置第一行表示为0,第二行表示为1

语法格式

LIMIT 初始位置,记录数 或者 LIMIT 记录数 OFFSET 初始位置
语句解析:
初始位置即为限制显示结果的开始位置
记录数表示为显示的结果条数
OFFSET表示为从指定初始位置的偏移显示条数
指定初始位置
数据查询指定位置
不指定初始位置
数据查询不指定初始位置
OFFSET
数据查询OFFESET指定

查询结果排序ORDER BY

关键字ORDER BY可以对查询结果进行一个排序,ORDER BY可以接子查询,同时对查询字段值为空值时,则将该空值作为最小值

语法格式

ORDER BY <字段名> [ASC|DESC]
语句解析:
字段名:表示需要排序的字段名。多个字段名需要用逗号隔开
ASC|DESC:ASC表示为字段按照升序排序,DESC表示为字段按照降序进行排序,不指定则默认为ASC
单个字段排序
数据查询单字段排序
多个字段排序

指定多个字段进行排序时,会按照字段的顺序从左到右依次进行排序,若第一个字段拥有相同的值时才会对第二个字段进行排序,若第一个字段是唯一值,则不会对第二个字段进行排序

数据查询多字段排序

条件查询WHERE

关键字WHERE可以通过指定查询条件来限制查询结果,通过查询条件可以分为单一条件查询和多条件查询,区别在于查询条件是一个还是多个

语法格式

WHERE expr
语句解析:
expr:表示为限制查询的查询条件,该查询条件可以是以下几种
1、比较运算符和逻辑运算符
2、BETWEEN AND关键字的查询条件
3、IS NULL关键字的查询条件
4、IN关键字的查询条件
5、LIKE关键字的查询条件
单一条件查询
数据查询单一条件
多条件查询

多条件查询时使用逻辑运算符AND(&&)、OR(||)、XOR将多个查询条件隔开

  • AND:表示满足多个查询条件时
  • OR:表示只要满足多个查询条件的任意一个就行
  • XOR:表示满足一个查询条件的同时要不满足另一个查询条件
数据查询多条件查询
模糊查询LIKE

模糊查询主要是关键字LIKE配合通配符来进行,主要用于搜索匹配字段中的指定内容,使用通配符时需要注意一下几点:

  • 注意大小写,MySQL默认是不区分大小写,若要区分则需要关键字BINARY
  • 注意尾部空格,尾部空格会干扰到匹配结果,会去找字段中含有空格的数据
  • 注意NULL,统配符可以匹配任何长度的任意字符,但是不能匹配NULL

语法格式

[NOT] LIKE  '字符串'
语句解析:
NOT:为可选参数,表示字段中内容与指定的字符串不匹配时才满足条件
字符串:表示用来匹配的字符串,该字符串可以是一个完整的字符串,也可以是包含了通配符的字符串,必须用加单引号或双引号
"%"通配符查询

通配符"%",可以代表任何长度的字符串

数据查询任意通配符
"_"通配符查询

通配符"_",只能代表单个字符,字符的长度不能为0

数据查询单个通配符
区分大小写查询

默认情况下,LIKE关键字匹配是不区分大小写的,要对大小写进行区分需要加上关键字BINARY

数据查询模糊匹配大小写
范围查询BETWEEN AND

关键字BETWEEN AND可以用来判断字段的数值是否在范围内,这个范围表示为闭区间,即包括起始值和结尾值

语法格式

[NOT] BETWEEN 取值1 AND 取值2
语句解析:
NOT:可选参数,表示指定范围之外的值
取值1:表示取值范围的起始值
取值2:表示取值范围的结尾值
数据查询取值范围
空值查询IS NULL

关键字IS NULL用来判断字段的值是否为空值NULL,主要NULL不等同于0,也不等同于空字符串

数据查询空值查询
分组查询GROUP BY

关键字GROUP BY可以根据一个或多个字段对查询结果进行分组

语法格式

GROUP BY  <字段名>
语句解析:
字段名:表示需要分组的字段名称,多个字段需要用逗号分开
GROUP BY与聚合函数使用
数据查询GROUOP单独出现
GROUP BY与GROUP_CONCAT

GROUP_CONCAT可以将字段分组之后的值都显示出来

数据查询gourp与concat
分组过滤HAVING

HAVING关键字可以对分组之后的数据进行过滤

语法格式

HAVING <查询条件>
语句解析:
HAVING主要是用于过滤分组,并且是可以使用聚合函数,查询条件中可以使用字段别名
数据查询分组过滤
WHERE与HAVING的区别?
  1. WHERE与HAVING都是条件查询,用来过滤数据,但是在使用条件上面还是有一下几点区别:
  2. WHERE主要用于数据行即数据记录过滤,HAVING是用来过滤分组
  3. WHERE在查询条件中时不能使用聚合函数,HAVING查询条件中可以使用聚合函数
  4. WHERE是在数据分组前进行数据过滤,HAVING是数据分组之后才进行数据过滤
  5. WHERE是针对数据库文件(数据表的字段值)进行过滤,HAVING针对查询结果(分组查询出来的字段)进行过滤
  6. WHERE查询条件中不能使用别名,HAVING查询条件中可以使用别名

多表查询

多表查询就是在数据库中同时查询两个表或者多个表,多表查询的方式主要分为交叉连接、内连接和外连接

交叉连接CROSS JOIN

交叉连接可以查询两个或多个表,一般用来返回连接表的笛卡尔积,笛卡尔积是指两个集合的乘积,当数据表中数据较多时会查询得到没有意义的结果,这种查询应当避免

语法格式

SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
SELECT <字段名> FROM <表1>, <表2> [WHERE子句] 
语句解析:
多表交叉连接时,多个表之间使用CROSS JOIN或者逗号连接
字段名:需要查询的字段名称
表1、表2:需要交叉连接的表名
WHERE字句:用于交叉连接的查询条件
数据查询多表查询交叉连接

内连接INNER JOIN

内连接主要是通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接,多个表连接时表中间使用INNER JOIN或JOIN关键字则表示表间的连接方式为内连接

语法格式

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
语句解析:
字段名:需要查询的字段名称
表1、表2:需要内连接的表名
INNER JOIN:内连接可以省略INNER关键字,只用关键字在JOIN
ON子句:用来设置内连接的连接条件
INNER JOIN也可以使用WHERE子句来指定连接条件
数据查询多表查询内连接

外连接

外连接是将连接的表分为基表和参考表,然后再以基表为依据返回满足和不满足条件的记录,外连接可以分为左外连接和右外连接

左连接LEFT JOIN

左外连接又称为左连接,使用关键字 LEFT OUTER JOIN来连接来个表,使用ON来设置连接条件

语法格式:

SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
语句解析:
字段名:表示需要进行查询的字段名称
表1、表2:表示需要建立左连接的表名
LEFT OUTER JOIN:左连接可以省略OUTER关键字,只使用关键字LEFT JOIN
ON子句:用于设置左连接的连接条件

左连接语法中,表1为基表,表2为参考表,左连接查询时,可以查询表1所有记录和表2匹配连接条件的记录

数据查询多表查询左连接
右连接RIGHT JOIN

右外连接又称为右连接,右连接是左连接的反向连接,使用的是关键字RIGHT OUTER JOIN,使用ON来设置连接条件

语法格式

SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
语句解析:
字段名:表示需要进行查询的字段名称
表1、表2:表示需要建立右连接的表名
RIGHT OUTER JOIN:右连接可以省略关键字OUTER,只使用关键字RIGHT JOIN

右连接是左连接的反向连接,在语法中,表2是作为基表,表1是作为参考表,可以查出表2中所有记录和表1中匹配连接的记录

数据查询多表查询右连接

子查询

子查询是指在一个查询语句中嵌套在另一个查询语句中,通过子查询也可以实现多表查询,在实际开发中是比较常用的查询方法

语法格式

WHERE <表达式> <操作符> (子查询)
语句解析:
操作符:操作符可以是比较运算符和IN、NOT IN、EXISTS、NOT EXISTS
IN|NOT IN:当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回值正好相反
EXISTS|NOT EXISTS:用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回的值正好相反
数据查询多表查询子查询
子查询的注意事项

1、子查询语句可以嵌套在SQL语句中任何表达式出现的位置

语法格式

SELECT (子查询) FROM 表名;
SELECT * FROM (子查询) AS 表的别名;

子查询可以被嵌套在select语句中的列、表和查询条件中

2、只出现在子查询中而没有出现在父查询中的表不能出现在输出列中

插入数据INSERT

插入数据可以向数据库已有的表中插入一行或者多行数据

语法格式

INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];
语法解析:
表名:指定被插入数据的表名
列名:表示指定需要插入数据的列名,若是向表中所有列插入数据,则可以省略
VALUES:表示插入表的具体数据值,顺序应该与列的顺序对应

指定字段添加数据

数据插入指定子段

全部字段插入数据

数据插入全部插入

更改数据UPDATE

使用关键字UPDATE来更改一个或者多个表的数据

语句格式

UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
语句解析:
表名:表示要更新数据的表名
SET:用于指定要更改的字段名和字段值,字段值可以是表达式,也可以是该字段的默认值
数据修改update1

删除数据DELETE

使用关键字DELETE来删除数据表中一行或多行数据

语法格式

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
语句解析:
表名:表示要删除数据的表名
ORDER BY 子句:可选参数,表示删除时,表中各行将按照子句中指定的顺序进行删除
WHERE 子句:可选参数,表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行

删除表中全部数据

数据删除全部删除

根据条件删除表中数据

数据删除条件删除

清空表记录TRUNCATE

TRUNCATE关键字与DELETE关键字一样可以用来删除表中的数据,但是TRUNCATE是用来完全清空一个表

语法格式:

TRUNCATE [TABLE] 表名
数据删除truncate

TRUNCATE与DELETE区别?

TRUNCATE和DELETE都能对数据进行删除,DROP也是实现删除的数据,但是在不需要该表的情况下,但是在使用上还是有以下几个区别:

  1. DELETE是DML类型的语句,TRUNCATE是DDL类型的语句,用来清空表中的数据
  2. DELETE是将数据一条一条删除,TRUNCATE则是直接删除原来的表,然后再创建一个一模一样的表,而不是删除表中的数据,执行比DELETE快
  3. DELETE删除数据后,可以配合回滚找回数据,TRUNCATE不支持事务的回滚,数据被删除之后就无法找回
  4. DELETE删除数据之后,系统不会重新设置自增字段的计数器,TRUNCATE清空表记录后,会重新设置自增字段的计数器
  5. DELETE使用范围更广,可以根据指定条件进行删除,TRUNCATE不支持where子句,只能删除整体
  6. DELETE会返回删除数据的行数,TRUNCATE只会返回0,没有任何意义

总结

数据的增删改查操作是操作数据的基本,其中数据的查询时平常开发中最频繁的操作,对数据表的操作主要可以 分为单表查询和多表查询,其中介绍了多表查询时内连接、左外连接、右外连接以及子查询的方式

赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤👍,peace&love

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值