回到顶部
您的当前位置: 编程语言> 数据库> SQL> 基础语法
分组函数与多表查询
2014-05-06 12:08:29
标签: 原创 分组函数 多表查询
分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

组函数类型:

AVG
COUNT
MAX
MIN
SUM

AVG(平均值)和 SUM (合计)函数:

可以对数值型数据使用AVG 和 SUM 函数。

MIN(最小值) 和 MAX(最大值)函数:

可以对任意数据类型的数据使用 MIN 和 MAX 函数。

COUNT(计数)函数:

① COUNT(*) 返回表中记录总数

② COUNT(expr) 返回 expr不为空的记录总数
DISTINCT 关键字:

COUNT(DISTINCT expr) 返回 expr非空且不重复的记录总数。

组函数与空值:

① 组函数忽略空值

② NVL函数使分组函数无法忽略空值

分组数据: GROUP BY 子句语法

① 可以使用GROUP BY子句将表中的数据分成若干组

② 在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY子句中

③ 包含在 GROUP BY 子句中的列不必包含在SELECT 列表中

④ 所有包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中

非法使用组函数:

① 不能在 WHERE 子句中使用组函数
② 可以在HAVING 子句中使用组函数
过滤分组: HAVING 子句

①  行已经被分组
② 使用了组函数
③ 满足HAVING 子句中条件的分组将被显示

多表查询

笛卡尔集:

1) 笛卡尔集会在下面条件下产生:
① 省略连接条件
② 连接条件无效
③ 所有表中的所有行互相连接
2)笛卡尔集的大小是组成它的各个子集的乘积
3)为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件

连接类型:

1)Oracle 连接

① 在WHERE 字句中写入连接条件
② 在表中有相同列时,在列名之前加上表名前缀

2)等值连接

3)适用于SQL: 1999的连接

区分重复的列名:

① 使用表名前缀在多个表中区分相同的列
② 使用表名可以提高效率
③ 在不同表中具有相同列名的列可以用别名加以区分

表的别名:

① 使用别名可以简化查询
② 使用表名前缀可以提高执行效率

外连接语法:

① 使用外连接可以查询不满足连接条件的数据
② 外连接的符号是 (+)
③ 没有(+)的一侧将显示全部记录,有(+)的一侧显示匹配的记录

叉集:

① 使用CROSS JOIN 子句使连接的表产生叉集
② 叉集和笛卡尔集是相同的

自然连接:

① NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接
② 在表中查询满足等值条件的数据

使用 USING 子句创建连接:

① 使用 USING 可以在有多个列满足条件时进行选择
② 不要给选中的列中加上表名前缀或别名

内连接:

在SQL: 1999中,内连接只返回满足连接条件的数据