数据库基础(三)
聚合函数
概念:
查询时需要做一些数据统计,比如,查询职员表中各部门支援的平均薪水,各部门的员工人数。当需要统计的数据并不能在职员表里直观列出,而是需要根据现在的数据计算得到结果,这种功能可以使用聚合函数来实现。
关键字
GROUP BY
列 按此列名进行分组HAVING
进一步限制分组得到结果MAX(列)
此列的最大值(可统计任何数据类型)MIN(列)
此列的最小值(可统计任何数据类型)AVG(列)
此列的平均值(只能统计数字类型,忽略null)SUM(列)
此列的和值(只能统计数字类型,忽略null)COUNT(列)
计算表中的记录条数,即使数据一样也会记录多条数据,忽略null值
查询语句的执行顺序
当一条查询语句中包含所有的子句,执行顺序依下列子句次序:
FROM
子句:执行顺序为从后往前、从右到左,数据量较少的表尽量放在后面。WHERE
子句:执行顺序为自下而上、从右到左,将能过滤掉最大数量记录的条件写在WHERE 子句的最右。GROUP BY
:执行顺序从左往右分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉。HAVING
子句:消耗资源。尽量避免使用,HAVING 会在检索出所有记录之后才对结果集进行过滤,需要排序等操作。SELECT
子句:少用*号,尽量取字段名称,ORACLE 在解析的过程中,通过查询数据字典将*号依次转换成所有的列名, 消耗时间。ORDER BY
子句:执行顺序为从左到右排序,消耗资源。
关联查询
在实际应用中所需要的数据,经常会需要查询两个或两个以上的表,这种查询两个或两个以上数据或视图的查询叫做连接查询,连接查询通常建立在存在相互关系的父子表之间。
-
内连接
例如:# 第一种 SELECT table1.column, table2.column FROM table1,table2 WHERE table1.column1 = table2.column2; # 第二种 SELECT table1.column,table2.column FROM table1 JOIN table2 ON table1.column1 = table2.column2;
-
外连接
:内连接返回两个表中所有满足连接条件的数据记录,在有些情况下,需要返回那些不满足连接条件的记录,需要使用外连接,即不仅返回满足连接条件的记录,还将返回不满足连接条件的记录(包含左连接和右连接)。SELECT table1.column, table2.column FROM table1 [ LEFT | RIGHT ] OUTER JOIN table2 ON table1.column1 = table2.column2;
笛卡尔积
笛卡尔积指关联操作的每一表的每一行都和其它表的每一行做组合,假设两个表的记录条数分别为x和y,笛卡尔积将返回x*y条数据纪律,当两个表进行关联查询时,如果不写连接条件,得到的结果就是笛卡尔积。
等值连接
等值连接是连接查询中最常见的一种,通常是在有主外键关联关系的表间建立,并将连接条件设定为有关系的列,使用等号“=”连接相关的表。
SELECT table1.column1, table1.column2, table2.column1, table2.column2
FROM table1, table2 WHERE table1.column3 = table2.column3;
分页查询
关键字:limit num1,num2
num1
表示起始行号(行号从0开始)。
num2
表示返回数据记录的条数。