zoukankan      html  css  js  c++  java
  • oracle的多表查询与表的连接

    一、多表查询
        在任何多表查询中一定会产生笛卡尔积的问题,但是,笛卡尔积产生的结果对于用户来说是毫无意义的,是重复的无用数据。因此我们需要消除笛卡尔积,那么在多表查询的时候,就必须要有关联字段。
        范例:emp.deptno=dept.deptno;两张表中的关联字段将消除笛卡尔积
        SELECT * FROM emp, dept WHERE emp.deptno=dept.deptno;  
       多表的查询,建议多做些习题增加熟练度。
    二、表的连接
         内连接:之前利用了WHERE子句消除了笛卡尔积,这个是内连接。只有满足条件的数据才会显示。
        外连接:分为左外连接、右外连接、全外连接。

    为了更好的观察到连接的区别,现在已经在dept表中提供了一个没有雇员的部门40,同时在emp表中增加一个没有部门的雇员。

    INSERT INTO emp (empno,ename,deptno) VALUES(8989,'HELLO', null);

    emp表目前如下:HELLO这个雇员没有部门

    观察一:内连接实现效果

    SELECT e.empno, e.ename, d.deptno, d.dname

    FROM emp e, dept d

    WHERE e.deptno = d.deptno;

    此时没有部门的雇员以及没有雇员的部门信息都没有出现,因为null的判断不满足。

    观察二:使用左(外)连接,希望所有的雇员信息都显示出来,即便他没有部门。

    SELECT e.empno, e.ename, d.deptno, d.dname

    FROM emp e, dept d 

    WHERE e.deptno = d.deptno(+);

    此时出现了没有部门的雇员。也就是左表的数据全部显示了。

    观察三:使用右(外)连接,将所有的部分信息都显示出来。

    SELECT e.empno, e.ename, d.deptno, d.dname

    FROM emp e, dept d

    WHERE e.deptno(+) = d.deptno;

    内连接指的就是所有满足关联条件的数据出现,不满足的不出现。外连接就是指定一张数据表中的数据全部都显示,但是没有对应的其他表数据,内容为null。

  • 相关阅读:
    maven配置使用
    【插件使用】 vscode, 中以服务形式运行文件的方法 ,Live Sever 插件的使用
    常用位运算操作
    [LeetCode] 743. Network Delay Time( 网络延迟时间)
    STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)
    767. 重构字符串(仿函数调用外部数据)
    C++之ptr_fun、mem_fun和mem_fun_ref
    STL算法之for_each
    C++之not1和not2
    C++之compose1、compose2
  • 原文地址:https://www.cnblogs.com/Etude/p/9275286.html
Copyright © 2011-2022 走看看