zoukankan      html  css  js  c++  java
  • Oracle3连接&子查询&联合查询&分析函数

    -- 连接:内连接,外连接,自连接,交叉连接

    select * from emp,dept; -- 笛卡尔积
    select * from emp cross join dept; -- 交叉连接,结果就是笛卡尔积
    select * from emp inner join dept on emp.deptno=dept.deptno; -- 等值连接
    select * from emp,dept where emp.deptno=dept.deptno -- 等值连接,省略写
    select * from emp natural join dept; -- 自然连接,无需条件,有相同列名才能自然连接,否则就是笛卡尔积
    select * from emp,salgrade where emp.sal between salgrade.losal and salgrade.hisal -- 不等值连接
    select * from emp left join dept on emp.deptno=dept.deptno -- 左外链接
    select * from emp right join dept on emp.deptno=dept.deptno -- 右外连接
    select * from emp full join dept on emp.deptno=dept.deptno -- 全连接,full ‘左外+右外’
    -- oracle特有外连接
    select * from emp,dept where emp.deptno(+)=dept.deptno -- 右外连接

    -- 子查询:三种,单列单值 where = ,单列多值 where in ,多列多行 做虚拟小表,注意给此小表起个别名
    select * from emp where sal =(select max(sal) from emp); -- 单列单值
    select * from emp where sal in(select sal from emp where sal>=3000); -- 单列多值
    -- 查询工资大于等于3000的员工信息和部门信息
    select * from emp,dept where emp.deptno=dept.deptno and emp.sal>=3000; -- 用内连接,多条件查询
    select * from (select * from emp where sal in(select sal from emp where sal>=3000)) e,dept
    where e.deptno=dept.deptno; -- 子查询 多列多行
    -- 查询出员工编号,姓名,以及所在部门名称
    select emp.empno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno; -- 条件查询
    select emp.empno,emp.ename,(select dept.dname from dept where emp.deptno=dept.deptno) 部门名称
    from emp; -- 采用子查询,这种子查询自身无结果,它借助了其他表,这种子查询不能查所有字段(太多)
    select emp.empno,emp.ename,(select * from dept where emp.deptno=dept.deptno) 部门名称
    from emp; -- xx 值过多

    -- 联合查询,将两个查询结果组成一个结果
    select * from student
    union all -- 并集所有,不去重
    select * from student2

    select * from student
    union -- 并集,去重
    select * from student2

    select * from student
    intersect -- 交集
    select * from student2

    select * from student
    minus -- 补集,student2的补集,全集为student与student2的并集
    select * from student2

    -- 分析函数
    select * from emp
    -- rank()over() 数值相同排名相同,后续排名跳跃
    select emp.ename,emp.sal,rank()over(order by emp.sal desc) rank from emp; -- 所有排名
    -- partition by 字段名,根据 字段名 分组排名
    select emp.ename,emp.sal,emp.deptno,rank()over(partition by emp.deptno order by emp.sal desc) rank from emp; -- 每个部门各自内部排名
    -- 查询部分排名,将整个排名表当做虚拟小表对他进行查询0
    select * from (select emp.ename,emp.sal,rank()over(order by emp.sal desc) rank from emp) where rank<=3;

    -- dense_rank()over() 数值相同排名相同,后续排名不跳跃
    select emp.ename,emp.sal,dense_rank()over(order by emp.sal desc) rank from emp;

    -- row_number()over() 行数排名,没有并列情况
    select emp.ename,emp.sal,row_number()over(order by emp.sal desc) rw from emp;
    select emp.ename,emp.sal,rownum rn from emp; -- 仅仅行数‘排名’,rownum伪列,不是函数,是属性
    -- row_number()over()用于分页
    select * from(select emp.*,row_number()over(order by emp.sal desc) rw from emp) where rw between 1 and 3

    select rowid from emp -- 查找每一行存储地址id
    select rownum from emp -- 查找每一行‘排名’,根据储存地址id
    select emp.*,rownum from emp
    select * from(select emp.*,rownum rw from emp) e where e.rw between 1 and 3 -- 不排名,只分页
    select * from(select em.*,rownum rw from (select * from emp order by sal desc) em) e where e.rw between 1 and 3 -- 排名,分页

  • 相关阅读:
    ubuntu下环境变量
    Linux/Unix里,ln -s
    ubuntu安装和查看已安装
    Android系统中 setprop,getprop,watchprops命令的使用
    js中Math.random()生成指定范围数值的随机数
    mysql下sql语句 update 字段=字段+字符串
    铁道部2012年版全国72个铁路枢纽城市
    phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode
    电脑开机一直蓝屏,一直重启要怎么办?
    电脑重装系统重装不了,老是蓝屏,是不是硬盘烧坏了!
  • 原文地址:https://www.cnblogs.com/21556guo/p/13546362.html
Copyright © 2011-2022 走看看