zoukankan      html  css  js  c++  java
  • Oracle入门基础(五)一一多表查询

    SQL> --等值连接
    SQL> --查询员工信息:员工号  姓名 月薪 部门名称
    SQL> set linesize 80
    SQL> desc dept
    
    名称                                      是否为空? 类型 
     DEPTNO                                   NOT NULL NUMBER(2)
     DNAME                                     VARCHAR2(14)
      LOC                                          VARCHAR2(13)
    
    SQL> select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno;
    
     EMPNO ENAME             SAL DNAME                                                                  
      7369 SMITH             800 RESEARCH                                       
      7499 ALLEN            1600 SALES                                          
      7521 WARD             1250 SALES                                          
    
    SQL> --不等值连接
    SQL> --查询员工信息:员工号  姓名 月薪 工资级别                                            
    SQL> select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s
      3  where e.sal between s.losal  and s.hisal;
    
     EMPNO ENAME             SAL      GRADE                                                                
      7369 SMITH             800          1                                     
      7900 JAMES             950          1                                     
    
    
    SQL> --外连接:
    SQL> --按部门统计员工信息:部门号 部门名称  人数
    SQL> select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数
      2  from emp e,dept d
      3  where e.deptno=d.deptno
      4  group by d.deptno,d.dname;
    
    部门号 部门名称             人数                                                                    
        10 ACCOUNTING              3                                            
        20 RESEARCH                5                                            
        30 SALES                   6                                                                                                                                              
    
    SQL> 希望把某些不成立的记录(40号部门),任然包含在最后的结果中 ---> 外连接
    SQL> 左外连接: 当where e.deptno=d.deptno不成立的时候,等号左边的表任然被包含在最后的结果中
    SQL>     写法:where e.deptno=d.deptno(+)
    SQL> 右外连接: 当where e.deptno=d.deptno不成立的时候,等号右边的表任然被包含在最后的结果中
    SQL>     写法:where e.deptno(+)=d.deptno
    SQL> */
    SQL> select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数
      2  from emp e,dept d
      3  where e.deptno(+)=d.deptno
      4  group by d.deptno,d.dname;
    
    部门号 部门名称             人数                                                                     
        10 ACCOUNTING              3                                            
        40 OPERATIONS              0                                            
        20 RESEARCH                5                                            
        30 SALES                   6                                            
    
    SQL> host cls
    SQL> --自连接
    SQL> --查询员工信息:员工姓名  老板姓名
    SQL> set linesize 200
    SQL> select * from emp;
    
    EMPNO ENAME      JOB        MGR HIREDATE      SAL       COMM    DEPTNO                                                                                                                                                                                                                                                                                                                                  
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                              
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                              
    
    
    SQL>  --自连接: 通过表的别名,将同一张表视为多张表
    SQL> select e.ename 员工姓名,b.ename 老板姓名
      2  from emp e,emp b
      3  where e.mgr=b.empno;
    
     员工姓名   老板姓名                                                                                                                                                                                                                                                                                                                                                                 
    	FORD       JONES                                                                                                                                                                                        
    	SCOTT      JONES                                                                                                                                                                                        
    	JAMES      BLAKE                                                                                                                                                                                                                                                                                                                                                                  
    
    SQL> --自连接不适合操作大表
    SQL> --层次查询
    SQL> select level,empno,ename,mgr
      2  from emp
      3  connect by prior empno=mgr
      4  start with mgr is null
      5  order by 1;
    
     LEVEL      EMPNO ENAME             MGR                                                                                                                                                                                                                                                                                                                 
         1       7839 KING                                                                                                                                                                              
         2       7566 JONES            7839                                                                                                                                                             
         2       7698 BLAKE            7839                                                                                                                                                                                                                                                                                                                     
         3       7654 MARTIN           7698                                                                                                                                                                                                                                                                         
         3       7844 TURNER           7698                                                                                                                                                             
         4       7876 ADAMS            7788                                                                                                                                                             
         4       7369 SMITH            7902                                                                                                                                                             
    
  • 相关阅读:
    Linux开发工具之Makefile(上)
    Linux shell入门基础(八)
    Linux开发工具之gcc
    Linux shell入门基础(七)
    Linux shell入门基础(六)
    Linux shell入门基础(五)
    Linux shell入门基础(四)
    随机洗牌算法
    Windows中查找文件被何进程使用
    哲学家进餐问题解析
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814626.html
Copyright © 2011-2022 走看看