Oracle - 多表联合查询相关

-- 多表联合查询
-- 当需要获取的数据分布在多张表中时, 考虑使用联合查询

-- SQL92方式

  -- 笛卡尔积
    -- 将多个表的数据进行一一对应, 所得到的结果为多表的笛卡尔积
    -- 结果的记录条数为所有表的记录条数的乘积
    -- select * from 表1, 表2
        
  -- 等值连接筛选
    -- 先做表的笛卡尔积, 然后筛选, 筛选条件为等值筛选
    -- select * from 表1, 表2 where 表1.字段 = 表2.字段
          
  -- 不等值连接
    -- select * from 表1, 表2 where 表1.字段 > 表2.字段
          
  -- 自连接 : 自己和自己做笛卡尔积
    -- select b1.*, b2.* from 表1 b1, 表2 b2
          
  -- 外连接
    -- 左外连接 : 显示左边对应字段没有值的数据
    -- select * from 表1, 表2 where 表1.字段 = 表2.字段(+)
    -- 右外连接 : 显示右边对应字段没有值的数据
    -- select * from 表1, 表2 where 表1.字段(+) = 表2.字段
   
-- SQL99方式

  -- 笛卡尔积 : 使用 cross join 关键字
  -- select * from 表1 cross join 表2
        
  -- 自然连接 : 
    -- inner 和 outer 可以省略不写
  
    -- 使用 natural join 关键字
    -- 底层先笛卡尔积, 然后按照同名同值字段, 自动进行筛选 
    -- select * from 表1 natural join 表2
    
    -- 使用 inner join using 关键字
    -- 指明使用指定的字段对联合查询的结果进行等值筛选
    -- 指明的字段必须是两个表的同名同值字段
    -- select * from 表1 [inner] join 表2 using(字段1, 字段2, ...)
    
    -- 使用 inner join on 关键字
    -- 指明的字段可以不同名
    -- select * from 表1 [inner] join 表2 on 表1.字段 = 表2.字段
    
  -- 外连接 : 
  
    -- 左外连接 : left [outer] join on
    -- 左表有并且连接不到右表的数据也会查出
  
    -- 右外连接 : right [outer] join on
    -- 右表有并且连接不到左表的数据也会查出
  
    -- 全外连接 : full [outer] join on
    -- 左右表互相连接不到的数据也会查出
    
  -- 自连接 : 自己连接自己
  -- select b1.*, b2.字段 from 表 b1 [inner] join 表 b2 on b1.字段 = b2.字段
   
posted @ 2020-01-16 16:50  萌胖次  阅读(196)  评论(0编辑  收藏  举报