回顾
SQL的分类如下:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言(主要是SELECT),用来查询记录(数据)。
上一篇文章主要介绍了DDL、DML,今天重点介绍DQL。
DQL-数据查询语言
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端(虚拟,查出来放在内存里面)。
查询返回的结果集是一张虚拟表。
查询关键字:SELECT
为了更好地说明,我们以3张表为例:
相关的表创建以及数据插入SQL语句如下:
1 基础查询
2 条件查询
3 模糊查询
当想模糊匹配的时候就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
4 字段控制查询
5 排序order by 列名 asc(默认) desc
6 聚合函数sum avg max min count
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
7 分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部门来分组。
注:凡和聚合函数同时出现的列名,一定要写在group by 之后
having与where的区别:
having是在分组后对数据进行过滤。where是在分组前对数据进行过滤
having后面可以使用聚合函数(统计函数)。where后面不可以使用聚合函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
8 LIMIT
LIMIT用来限定查询结果的起始行,以及总行数。涉及到分页技术。
MySQL中有,Oracle中没有这个LIMIT关键字。
查询代码的书写顺序和执行顺序
我们用一个图来理解查询的过程(可以看到查询结果不断减少、分组化、有序化):
注意:排序和筛选的顺序不能够反过来(执行就会报错),因为筛选之后数据的顺序可能就乱了。
领取专属 10元无门槛券
私享最新 技术干货