oracle查询

作者: 楼亭樵客 | 来源:发表于2017-04-16 09:58 被阅读5次

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为假,

改正后

相关文章

网友评论

    本文标题:oracle查询

    本文链接:https://www.haomeiwen.com/subject/efquwttx.html