1
groud by
按照部门号,给查询出来的结果集进行排序
过滤分组后的数据,
过滤部门平均工资大于2000的工资总和
********相同的部门号deptno合并,只显示一个,然后空格一行,
*
多表查询1.笛卡尔集
连接条件是去除表中多余的部分,
多表查询就是从这张笛卡尔集表中选择合适条件的结果。
连接条件至少有n-1个,n代表表的个数,
不等值连接
between and ....小值在前,大值在后。
上面查出来的结果没有考虑部门为空部门的情况,所以、、、
要用到右外链接。
这里当部门中的人数为空时就用(+)=
当取右边的表时,就在左边用(+)=
当取左边的表时,就在右边用(+)=
一个笛卡尔集,,,,,,没有where条件的语句。
只有一张表的情况下才不会产生笛卡尔集。
leve树的深度, 要查询他的话,就写上他,
prior表时层次,上一层,
start with 表示从树的那个节点开始, 根节点时,可以用mgr is null这种表时方式,也可以按正常的表时方式 ,
select后面
having后面
这里having 不能换成where,因为,后面有分组函数,avg(sal),
from后面
from后面的结果集被当成了一张表来处理。
使用子查询
使用多表查询
当涉及多表查询的时候,首先要想到,笛卡尔集,然后在想到,连接条件。连接条件至少n-1
完整的语句
rownum为伪列,是数据库自动加上去的,显示行号,上面讲到的lever也是伪列,
要显示伪列,在查询的过程中必须,显式地把它写出来,
默认的顺序,指对表没有排序时,得到的行号,
所以用下面的查询是查不到正确的结果的
要正确查询,必须要用到子查询
得到正确结果。
相关子查询
必须要定义 emp表的别名,avgsal 为子查询结果的别名
单行子查询,必须返回单个结果,不能是集合
deptno,部门号
emp员工表
dept部门表
用多表查询解决这个问题
and优先级比or高,要打括号
等同于
等同于
当mgr包含null空值时,这个where为假,
改正后
网友评论