DQL 全称 Data Query Language。数据查询语言,用来查询数据库中表的记录。
语法:
select 查询列表(字段、常量、函数、表达式) from 表名;字段别名:
select 字段1 as '字段1别名', 字段2 as '字段2别名', ... from 表名;注意:别名可用单或双引号引起来,当别名是一个单词时可省略引号,当别名是多个单词组合且含空格或特殊符号时不能省略,as 可省略。
语法:
select 字段列表 from 表名 [where 条件列表];条件分类:
语法:
select 字段列表 from 表名 [where 条件列表] group by 分组字段列表 [having 分组后条件列表];where 与 having 区别:
注意事项:分组之后,查询的字段一般为聚合函数与分组字段。
语法:
select 字段列表 from 表名 [order by 字段名1 排序方式, 字段名2 排序方式, ...];排序方式:升序:asc(默认值,可以不写)、降序:desc。
注意事项:如果是多个字段排序,当第一个字段值相同时,才会根据第二个字段排序。
语法:
select 字段列表 from 表名 [limit 起始索引, 查询记录数];注意事项:起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数,若查询第一页,起始索引可省略,简写为 limit 查询记录数。
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一。
一对多
案例:部门与员工的关系。
关系:一个部门对应多个员工,一个员工对应一个部门。
实现:在多的一方建立外键,指向一的一方的主键。
多对多
案例:学生与课程的关系。
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择。
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。
一对一
案例:用户与用户详情的关系。
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的。
多表查询时需要消除无效的笛卡尔积。笛卡尔积是指在数学中,两个集合:A集合与B集合的所有组合情况。
查询两表交集部分的数据。
隐式内连接:
select 字段列表 from 表1, 表2 [where 条件列表...];显示内连接:
select 字段列表 from 表1 [inner] join 表2 on 连接条件 ...;左外连接:查询左表(表1)所有数据,以及两表交集部分的数据。
select 字段列表 from 表1 left [outer] join 表2 on 连接条件 ...;右外连接:查询右表(表2)所有数据,以及两表交集部分的数据。
select 字段列表 from 表1 right [outer] join 表2 on 连接条件 ...;当前表与自身的连接查询,自连接必须使用别名。自连接可以是内连接,也可以是外连接。
select 字段列表 from 表1 别名1 [inner|left|right] join 表1 别名2 on 连接条件 ...;将多张表查询的结果合并成一个新的结果集,同时多张表的查询列数及数据类型需保持一致。
union all 直接将全部数据合并在一起,union 会对合并之后的数据去重。
select 字段列表 from 表1 ...union [all]select 字段列表 from 表2 ...;SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询。子查询外部的语句可以是 insert / delete / update / select 的任意一个。
根据子查询结果分为:
根据子查询位置分为:select 之后、from 之后、where 之后。
select 之后:
select (select B.字段 from 表2 B where B.字段 = A.字段) from 表1 A ...;from 之后:
select A.* from (select * from 表名 where 条件列表 ...) A;where 之后:
select A.* from 表1 A where A.字段 in (select B.字段 from 表2 B);5 select 字段列表 1 from 表名列表 2 where 条件列表 3 group by 分组字段列表 4 having 分组后条件列表 6 order by 排序字段列表 7 limit 分页参数