DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
语法
语法结构:
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
查询多个字段
select 字段1,2,3...from 表名列表
查所有
select * from
设置别名
select 字段1 as 别名,2 as 别名...from表名
去重
select distinct 字段列表 from 表名
条件查询
语法:select 字段列表 from 表名 where 条件列表 ; -- 多个条件用and连接
构建条件的运算符和Java中的大部分一样,这里列举特例
between...and... 在范围内,含最小,最大值
in(...) in之后的列表中的值,多选一
like占位符 模糊匹配(_匹配单字符,%匹配任意个)
is null 是null
聚合函数
语法:select 聚合函数(字段列表) from 表名 ;
常用聚合函数(都是字面意思)
count min max avg sum
分组查询
分组: 按照某一列或者某几列,把相同的数据进行合并输出。
通常会使用到聚合函数
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
注意事项:
• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
• 执行顺序:where > 聚合函数 > having
排序查询
有升序排序,也有降序排序。
select 字段列表
from 表名
[where 条件列表]
[group by 分组字段 ]
order by 字段1 排序方式1 , 字段2 排序方式2 … ;
排序方式
-
ASC :升序(默认值)
-
DESC:降序
分页查询
语法:
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
起始索引=(查询页码 - 1)每页显示记录数
多表设计
各个表结构之间也存在着各种联系,基本上分为三种:
-
一对多(多对一)
-
多对多
-
一对一
一对多(多对一)
想解决数据库层面,并未建立关联,无法保证数据的一致性和完整性的问题,以通过数据库中的 外键约束 来解决。
外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。
对应的关键字:foreign key
-- 创建表时指定
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
可用图形化界面操作
物理外键和逻辑外键
-
物理外键
-
概念:使用foreign key定义外键关联另外一张表。
-
缺点:
-
影响增、删、改的效率(需要检查外键关系)。
-
仅用于单节点数据库,不适用与分布式、集群场景。
-
容易引发数据库的死锁问题,消耗性能。
-
-
-
逻辑外键
-
概念:在业务层逻辑中,解决外键关联。
-
通过逻辑外键,就可以很方便的解决上述问题。
-
在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key
一对一(特殊的一对多)
略 任意一方添加外键
多对多
建立第三张中间表,至少包含两个外键,分别关联两边
下面举个例子
其中学生课程关系表属于中间表,包含两个外键,关联到两张表