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