Oracle 查询

Oracle 查询常用方法


数据库源文件
链接: https://pan.baidu.com/s/1roFNgai-wC3kamBGQvVlkA
提取码:2cg8

表连接

  • 内连接
    两个表的关联字段匹配的数据才显示,不匹配就都不显示

     SELECT a.*,b.* FROM a,b WHERE a.key=b.key 
     SELECT a.*,b.* FROM a INNER JOIN b ON a.key=b.key
    
  • 外连接

    • 左外连接:
      第一张表为主表,被连接的表为副表,主表
      数据一定显示,副表数据被关键字匹配的显示,不匹配
      显示为null
     SELECT e.ename,d.dname FROM 
     emp e, dept d 
     WHERE e.deptno = d.deptno(+)
    
     SELECT e.ename,d.dname FROM 
     emp e LEFT [outer] JOIN dept d 
     ON e.deptno = d.deptno
    
    • 右外连接
      第一张表为副表,被连接的表为副表,主表
      数据一定显示,副表数据被关键字匹配的显示,不匹配
      显示为null
     SELECT e.ename,d.dname FROM 
     emp e, dept d 
     WHERE e.deptno(+) = d.deptno
      
     SELECT e.ename,d.dname FROM 
     emp e RIGHT [outer] JOIN dept d 
     ON e.deptno = d.deptno
     
    
    • 全外连接 :
      两张表的数据都会显示,匹配的在一行显示
      不匹配的在同行显示为null
      SELECT e.ename,d.dname FROM 
      emp e FULL OUTER JOIN dept d 
      ON e.deptno = d.deptno
    
  • 交叉连接
    无关联条件,会产生笛卡尔积
     select a.*, b.* from a ,b
     select a.*, b.* from a cross join b
    

合并查询

  • 并集
    union 去除重复,且排序
     SELECT empno,ename FROM emp 
     WHERE empno IN(7369, 7499, 7521)
     union
     SELECT empno aa,ename bb FROM emp 
     WHERE empno IN(7369, 7654, 7698);
    
    union all 直接合并, 不做处理(不去重,不排序)
     SELECT empno,ename FROM emp 
     WHERE empno IN(7369, 7499, 7521)
     union all
     SELECT empno aa,ename bb FROM emp 
     WHERE empno IN(7369, 7654, 7698);
    
  • 交集
    intersect
     SELECT empno,ename FROM emp 
     WHERE empno IN(7369, 7499, 7521)
     intersect
     SELECT empno aa,ename bb FROM emp 
     WHERE empno IN(7369, 7654, 7698);
    
  • 差集
    minus
     SELECT empno,ename FROM emp 
     WHERE empno IN(7369, 7499, 7521)
     minus
     SELECT empno aa,ename bb FROM emp 
     WHERE empno IN(7369, 7654, 7698);
    

分组查询

  • group by 分组
    要求: group by 写在where的后面,对列进行分组
    聚合/分组函数: 分组函数查询的时候,
    如果带有普通列,那么这个普通列就必须出现在
    group by中…
     SELECT  
     job 岗位, MAX(sal) 最高工资,
     min(sal) 最低工资,AVG(sal) 平均工资,
     SUM(sal) 总和工资,COUNT(1) 岗位人数 FROM emp
     GROUP BY job;
    
  • having二次查询
    where和having的区别.
    where是在分组之前先筛选,不能筛选分组函数
    having是二次筛选,在group by之后筛选条件,
    可以筛选普通列和分组函数了
     SELECT job,MAX(sal),AVG(sal),COUNT(1)
     FROM emp WHERE deptno = 20 
     GROUP BY job HAVING job='CLERK' 
    

子查询

  • 查询嵌套查询,把查询的结果当做新的值
    给的另一个查询使用 如:

    查询和部门10相同岗位的人

     SELECT * FROM emp WHERE job IN 
     (SELECT job FROM emp WHERE deptno=10)
    

    比30部门所有人工资高的人

     SELECT * FROM emp WHERE sal > 
     (SELECT MAX(sal) FROM emp WHERE deptno=30)
    

    和SMITH部门和岗位都相同的人

     SELECT ename,deptno,job FROM emp
     WHERE (deptno,job) = 
     (
     SELECT deptno,job FROM emp WHERE ename='SMITH'
     )
    

    查询高于自己部门平均工资的员工信息

     SELECT * FROM 
     (
     SELECT e.ename,e.deptno,e.sal,b.avgsal FROM emp e
     LEFT JOIN 
     (SELECT deptno,AVG(sal) avgsal FROM emp GROUP BY deptno)
      b ON e.deptno = b.deptno
     WHERE e.sal > b.avgsal
     )
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值