数据库操作—DQL
查询
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
查询关键字: select
语法
select | 字段列表 | 基本查询(不加任何条件) |
from | 表名列表 | |
where | 条件列表 | 条件查询 |
group by | 分组字段列表 | 分组查询 |
having | 分组后条件列表 | |
order by | 排序字段列表 | 排列查询 |
limit | 分页参数 | 分页查询 |
基本查询
1.查询多个字段
select 字段1, 字段2, 字段3 ... from 表名 ;
select * from 表名 ;
2.字段设置别名
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] ... from 表名;
select 字段 1 [ 别名 ] , 字段2 [ 别名 ] ... from 表名 ;
3.去除重复记录
select distinct 字段列表 from 表名;
条件查询
1.常用比较运算符
比较运算符 | 功能 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between...and... | 在什么之间(含最大,最小值) |
in(....) | 在in之后的列表中的值 |
like | 模糊匹配(单个字符_ / 多个字符%) |
is null | 时null |
2.常用的逻辑运算符:
逻辑运算符 | 功能 |
and 或&& | 并且,多个条件同时成立 |
or 或 || | 或者(多个条件任意成立一个) |
not 或 ! | 非 ,不是 |
排序查询
1.语法
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;
2.排序方式
asc : 升序
desc :降序
注意:
如果是升序, 可以不指定排序方式ASC ;
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;
分页查询
1.语法
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
注意:
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示数量。
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是limit。
如果查询的是第一页数据,起始索引可以省略。
聚合函数
1.介绍
将一列数据作为一个整体,进行纵向计算 。
2.常见的聚合函数
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
3.语法
select 聚合函数(字段列表) from 表名 ;
注意:
对于count(*) 、count(字段)、 count(1)三种使用方式,建议大家使用count(*),因为数据库底层对此专门做了优化。
count(字段)不会统计字段中值为 null 的数
分组查询
1.语法
select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
2.where与having区别
(1) 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
(2) 判断条件不同:where不能对聚合函数进行判断,而having可以
注意:
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
执行顺序: where > 聚合函数 > having。
支持多字段分组, 具体语法为 : group by columnA,columnB
if 语句
统计男性和女性员工的数量 (结果展示时, 性别不能展示 1 或 2 , 要转化为 男 或 女 )
select if(gender = 1, '男性员工', '女性员工' ) name, count(*) value from 表名 group by gender;
多表设计
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
1.一对多(多对一)
一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。
2.一对一
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)
3.多对多
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
注意:
外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。 对应的关键字:foreign key
外键的操作语法:
-- 创建表时指定
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
物理外键与逻辑外键
1). 物理外键
介绍:使用 foreign key 定义外键关联另外一张表
缺点:
A. 影响增、删、改的效率(需要检查外键关系)。
B. 仅用于单节点数据库,不适用与分布式、集群场景。
C. 容易引发数据库的死锁问题,消耗性能。
2). 逻辑外键
介绍:在业务层逻辑中,解决外键关联。
特点:通过逻辑外键,就可以很方便的解决物理外键的问题