ORACLE SQL 多表查询

ORACLE SQL 多表查询

开发工具与关键技术:Oracle sql*plus 与  PLSQL Developer
作者:蒋紫晨
撰写时间:2019年04月07日

外连接

例子1、如果别人要的数据是那个部门没有员工?

Select * from departments d , employees e
    where e.department_id(+)= d.department_id 
    and e.employee_id is null;
-------------------------------------------------------
 SQL1999语法:
     Select * from departments d Left  join employees e
       On d.department_id=  e.department_id
      Where e.employee_id is null;
      

我们所想的就是把全部的部门全都写出啦,在连接那个员工对应那个部门。
空的部门就不会有员工显示。解析下(+)在左边就是以右边为主表

ORACLE SQL 多表查询_第1张图片

   例子2、所有员工那个没有分配部门的员工?
   Select * from departments d , employees e
        where e.department_id= d.department_id(+) 
        and e.department_id is null;
----------------------------------------------------
SQL1999语法如下:
     Select * from departments d Right  join employees e
         On d.department_id=  e.department_id
         Where e.department_id is null;
     

结果:如下

在这里插入图片描述

自连接(讲明白的就是自己跟自己连接)

例子:Select * from shuxin a , shuxin b  where a.zi_id=b.fu_id   

ORACLE SQL 多表查询_第2张图片

解析 a表中的zi_id是b表的fu_id,根据上的id查出下面的数据。

笛卡尔集 与叉集(CROSS JOIN)

笛卡尔集的意思是:两张表的连接关系跟没用连一样,就会发生笛卡尔集,
(所以要注意连接条件不然数据过多就会电脑的卡死,数据出现时间长)。

  例子:
          Select * from Employees e, Departments d
            Where (不写还是连接关系不成立的条件);
            
  叉集的写法:
          Select * from Employees  Cross join Departments;
          
        **上面两种条件都结果都相同**。

等值连接 (连接条件成立)

例子:Select * from Employees ,Departments 
       Where Employees.department_id=Departments.department_id;

自然连接与(Using子句)

NATURAL JOIN 子句,会以两张表之间相同的列作为等值连接的条件
如果表的列名相同而类型不同,则连接是会出现错误。

例子:
     Select * from employees natural join departments;
       
   Using子句(指定连接的列名)
例子:
     Select * from employees join departments
     Using(department_id);
     

使用on子句来多表连接

语法:
Select  * from 
   Table1 table1 Join Table table2
        On table1.table_id =table2.table_id
   Join Table3 table3
        On table2.table3_id=table3.table3_id;
        

满外连接

例子:Select * from employees e full join departments d
        On e.department_id=d.department_id;

你可能感兴趣的:(Technology)