数据库开发-MySQL

1、DQL

DQL是数据查询语言,用来查询数据库中表的记录。

DQL查询语句的语法与执行顺序:

SQL的执行原理

在执行 SELECT 语句时,会先执行 FROM 子句,从数据源中选择需要查询的表和视图。

然后,如果 WHERE 子句存在,会对查询结果进行过滤,只返回符合条件的行。

接着,如果 GROUP BY 子句存在,会对查询结果进行分组,按照指定的列进行分组。

如果 HAVING 子句存在,会对分组结果进行过滤,只返回符合条件的分组。

然后,会执行 SELECT 子句,选择需要返回的列,以及对列进行计算。

最后,如果 ORDER BY 子句存在,会对查询结果进行排序,按照指定的列进行排序。

如果 LIMIT 子句存在,会限制查询结果的数量,只返回指定数量的行。

SELECT 语句的执行原理是基于关系型数据库的查询语言,它可以处理大量的数据,并且可以进行复杂的数据处理和分析。

在执行 SELECT 语句时,数据库会读取数据源中的数据,对数据进行过滤、分组、排序和计算,最后返回结果

1.1、基本查询

select 字段1, 字段2, 字段3 ...  from 表名 ;

 * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

起别名

select 字段1  [ as  别名1 ] , 字段2  [ as  别名2 ]   ...  from 表名;

as可以省略

一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

去除重复字段

select distinct  字段列表 from 表名;

1.2、条件查询(WHERE)

select 字段列表 from 表名 where 条件列表;

常用比较运算符

常用逻辑运算符

1.3、排序查询(order by)

select 字段列表 from 表名 order by 字段1  排序方式1 , 字段2  排序方式2;

ASC : 升序(默认值)

DESC: 降序

如果是升序, 可以不指定排序方式ASC

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

1.4、分页查询(limit)

select 字段列表 from 表名 limit 起始索引, 查询记录数;

起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

1.5、聚合函数

select  聚合函数(字段列表)  from   表名;

NULL值是不参与所有聚合函数运算的。

1.6、分组查询(group by)

select 字段列表 from 表名  [ where 条件 ] group by 分组字段名  [ having 分组后过滤条件];

where与having区别

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以

!注意!

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

执行顺序: where > 聚合函数 > having 。

支持多字段分组

2、多表设计

外键约束:

让两张表的数据建立连接,保证数据的一致性和完整性。对应的关键字:foreign key

2.1、物理外键

介绍:

使用 foreign key 定义外键关联另外一张表

缺点:

影响增、删、改的效率(需要检查外键关系)。

仅用于单节点数据库,不适用与分布式、集群场景。

容易引发数据库的死锁问题,消耗性能。

2.2、逻辑外键

介绍:

在业务层逻辑中,解决外键关联。

特点:

通过逻辑外键,就可以很方便的解决上述问题。

现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。

在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key

3、多表查询

3.1、内连接

隐式内连接

select  字段列表   from   表1 , 表2   where   条件 ...;

显式内连接

select  字段列表   from   表1  [ inner ]  join 表2  on  连接条件 ...;

inner可以省略

3.2、外连接

左外连接

select  字段列表   from   表1  left  [ outer ]  join 表2  on  条件 ...;

右外连接

select  字段列表   from   表1  right  [ outer ]  join 表2  on  条件 ...;

outer可以省略

3.3、子查询

SELECT  *  FROM   t1   WHERE  column1 =  ( SELECT  column1  FROM  t2 );

标量子查询

子查询返回的结果是单个值

列子查询

子查询返回的结果是一列(可以是多行)

行子查询

子查询返回的结果是一行(可以是多列)

表子查询

子查询返回的结果是多行多列,常作为临时表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值