DQL
数据查询语言,用来查询数据库中表的记录。
语法
基本查询
查询多个字段:select 字段1, 字段2, 字段3 from 表名;
查询所有字段(通配符):select * from 表名;
设置别名:select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名;
去除重复记录:select distinct 字段列表 from 表名;
*
号代表查询所有字段,在开发中少用(不直观、影响效率)。
条件查询
条件查询:select 字段列表 from 表名 where 条件列表 ;
运算符
between...and... | 在某个范围之内(含最小、最大值) |
in(...) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
is null | 是null |
排序查询
条件查询:
select
字段列表
from
表名
order by
字段
1
排序方式
1 ,
字段
2
排序方式
2 ;
排序方法:
ASC
:升序(默认值)
DESC
:降序
分页查询
分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数 ;l分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
聚合函数
将一列数据作为一个整体,进行纵向计算
语法;select 聚合函数(字段列表) from 表名 ;
分组查询
分组查询:
select
字段列表
from
表名
[
where
条件
]
group by
分组字段名
[
having
分组后过滤条件
];
where与having区别
1.
执行时机不同:
where
是分组之前进行过滤,不满足
where
条件,不参与分组;而
having
是分组之后对结果进行过滤。
2.
判断条件不同:
where
不能对聚合函数进行判断,而
having
可以。
多表设计
- 一对多(多对一)
- 多对多
- 一对一
一对多(多对一) 举例:一个部门对应多个员工,一个员工对应一个部门
实现:一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。
-- 创建表时指定
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
物理外键:
概念:
使用
foreign key
定义
外键关联另外一张表
。
缺点:
l
影响增、删、改的效率(需要检查外键关系)。
l
仅用于单节点数据库,不适用与分布式、集群场景。
l
容易引发数据库的死锁问题,消耗性能
。
逻辑外键:
decimal:decimal(M,N)
概念:在业务层逻辑中,解决外键关联。
通过逻辑外键,就可以很方便的解决上述问题。
一对一:
举例
:
用户 与 身份证信息 的关系
关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
实现
:
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的
(UNIQUE)
多对多
举例
:
学生 与 课程的关系
关系
:
一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现
:
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键