概念:DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
查询过程中去重: 语法格式: select distinct 字段列表 from 表名;
查询指定的字段: 语法格式: select 指定的字段列表 from 表名;
查询所有的字段: 语法格式: select * from 表名;
可以将查到的字段取别名使用as关键字(as也可以省略不写),示例: select name '姓名' from emp;
条件查询
使用where关键字可以查找指定的条件范围:
语法格式: select * from 表名 where 条件列表;
条件查询中常见的字符运算符:
(大于) >=(大于等于) <(小于) <=(小于等于) =(等于) <>(不等于,和!=的效果一样) BETWEEN ... AND ... (在某个返回区间) IN(....)(在in括号后的某个值,多选一) LIKE(通常用于模糊匹配,查询名字中含有新字的示例: select * from 表名 where name like '%新%' ;) IS NULL(判断是否为空) IS NOT NULL(判断是否不为空)
排序查询
语法格式: select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2.....
升序:ACS (默认使用升序排序,使用升序时ACS可以省略不写)
降序:DESC
分页查询
语法格式: select 字段列表 from 表名 limit 起始索引,每页显示数据数量
起始索引计算公式: (查询页码数 - 1) * 每页显示数据数量,如果是第一页数据,起始索引可以省略不写。
聚合函数
常见的聚合函数: count(统计数量) max(求最大值) min(求最小值) avg(求平均值) sum(求总和)
语法格式: select 聚合函数(字段列表) from 表名;
分组查询
语法格式: select 字段列表 from 表名 [where条件] group by 需要分组的字段名 [having 分组后过滤条件]
where 和 having 条件查询的区别:
1、执行时机不同: where是在分组之前进行过滤,having是在分组之后进行过滤。
2、判断条件不同:where不可以对聚合函数进行判断,having可以对聚合函数进行操作。
完整的条件查询语句:
SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
多表设计可以分为三种情况,一对一,一对多,多对多。
实现一对一: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
实现一对多: 在数据库表中多的一方,添加字段,来关联一的一方的主键。
缺点: 一个表的数据删除之后,被关联的表数据还存在,这就不能保证数据的一致性和完整性。
解决方案:可以使用外键约束来解决这个问题,什么是外键约束呢?
外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。 对应的关键字:foreign key
语法格式: alter table emp add constraint fk_dept_id foreign key (dept_id) references dept(id);
实现多对多: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键