• 【oracle】-表连接类型:内连接,外连接...


    一、数据准备


    1、emp表

    delete from emp;
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800.00, null, 20);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600.00, 300.00, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250.00, 500.00, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975.00, null, 20);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250.00, 1400.00, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850.00, null, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450.00, null, 10);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7788, 'SCOTT', 'ANALYST', 7566, to_date('09-12-1982', 'dd-mm-yyyy'), 3000.00, null, 20);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000.00, null, 10);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500.00, 0.00, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7876, 'ADAMS', 'CLERK', 7788, to_date('12-01-1983', 'dd-mm-yyyy'), 1100.00, null, 20);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950.00, null, 30);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000.00, null, 20);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300.00, null, 10);
    
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (8000, 'mercury', 'hh', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300.00, null, 50);
    

    2、dept表

    delete from dept;
    insert into dept (DEPTNO, DNAME, LOC)
    values (10, 'ACCOUNTING', 'NEW YORK');
    
    insert into dept (DEPTNO, DNAME, LOC)
    values (20, 'RESEARCH', 'DALLAS');
    
    insert into dept (DEPTNO, DNAME, LOC)
    values (30, 'SALES', 'CHICAGO');
    
    insert into dept (DEPTNO, DNAME, LOC)
    values (40, 'OPERATIONS', 'BOSTON ');
    
    insert into dept (DEPTNO, DNAME, LOC)
    values (60, 'test', 'test');
    




    二、oracle连接操作


    ​ 有5种类型的连接:inner,outer,natural,cross连接,自连接。

    1、交叉连接(笛卡尔积,cross join)

    • 说明

      返回的是被连接的两个表的所有数据行的笛卡尔积


    • 写法
    select e.*,d.* from emp e cross join dept d;
    
    等价于:
    select e.*,d.* from emp e,dept d;
    

    • 查询结果



    2、内连接(inner join)

    • 说明

      返回与连接条件匹配的数据行。(即两表都要存在)

      其中查询条件分为等值连接(比如:=)和不等连接(比如: >、>=、<=、<、!>、!<和<>)。


    • 写法
    select e.*,d.* from emp e inner join dept d on e.deptno = d.deptno;
    
    等价于:
    select e.*,d.* from emp e join dept d on e.deptno = d.deptno;
    

    • 查询结果



    3、外连接(outer join)

    【1】左外连接(left join)

    • 说明

      返回左表所有数据和满足连接条件的右表数据


    • 写法
    select e.*,d.* from emp e left join dept d on e.deptno = d.deptno; 
    

    • 查询结果

      其中左表为emp表



    【2】右外连接(right join)

    • 说明

      返回右表中所有数据和满足连接条件的表数据


    • 写法
    select e.*,d.* from emp e right join dept d on e.deptno = d.deptno; 
    

    • 查询结果

      其中右表为dept表



    【3】全连接(full join)

    • 说明

      返回左表和右表中全部数据和满足连接条件的表数据(即为左外连接和右外连接之和)


    • 写法
    select e.*,d.* from emp e full join dept d on e.deptno = d.deptno; 
    

    • 查询结果



    4、自连接

    • 说明

      连接的表是同一张表,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。(即自己关联自己)


    • 写法
    select e.*,e2.* from emp e,emp e2 where e.empno = e2.empno and e.ename=e2.ename; 
    

    • 查询结果



    5、自然连接

    • 说明

      自然连接是把两张表中数据类型和名字都相同的字段自动连接起来,返回的字段不会重复(比如原来表a和表b都有字段c,那么只会显示一遍)


    • 写法
    select * from emp e  natural join dept d  ; 
    

    注意:不能有限定符,比如:

    select e.*,d.* from emp e  natural join dept d  ; 
    

    • 查询结果

      ​ deptno只显示了一遍

  • 相关阅读:
    002. 在HTML页面嵌入循环代码
    001. 为input type=text 时设置默认值
    PHP包名解释
    003. vs2010发布、打包安装程序(转)
    SQL server 2008 Express Edition实现自动备份和自动删除备份
    解决phpMyAdmin中缺少mysqli扩展的错误
    IIS6下PHP环境的资源未找到(404)问题
    解决远程桌面连接过去后是蓝色屏幕问题
    解决tomcat一闪而过问题
    解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障
  • 原文地址:https://www.cnblogs.com/mercurytan/p/13380621.html
Copyright © 2020-2023  润新知