Oracle SQL99联合查询

本文深入探讨SQL多表查询的多种方式,包括内连接、外连接、自连接及笛卡尔积的应用。讲解如何使用ON、USING和NATURAL JOIN关键字进行高效数据筛选与整合。
---多表联合查询:
  --当需要获取的数据分布在多张中,考虑使用联合查询
    --SQL92方式
    --SQL99方式
----------------------------------------------------------------

--SQL99多表查询
    --注意1:依然可以给表添加别名
    --注意2:如果使用on或者usering关键对结果进行筛选,必须使用inner join作用表与表的连接,其中
inner可以省略

    --注意3:外连接的 outer关键字可以省略不写
    --注意4:依然可以继续使用分组,having ,排序等

    --笛卡尔积:使用cross join 关键字

            ---select 内容 from 表名 cross join 
             select * from emp cross join dept
   

     --筛选
        
        --查询员工姓名,工作,薪资,部门名称

         --自然连接:使用关键字 natural join
           
         --使用:select 内容 from 表名 natural join 表名
            --特点1:底层先笛卡尔积,然后按照所有的同名同值字段自动进行等值筛选。
            --问题1:如果只想按照部分字段结果筛选怎么办?
            --问题2:如果想按照字段名不同,但是值相同进行等值筛选怎么办?

            select * from emp natural join dept

             --解决1:使用using关键字
                  --作用1:指明使用指定的字段对联合查询的结果进行等值筛选
                  --注意:指明的字段必须是两表的同名同值字段
                  --使用:select 内容 from 表名 inner join 表名 using(字段名,字段名,....)
                  select * from emp inner join dept using(deptno)

            --解决2:使用on关键字进行自定义连接条件筛选(等值筛选,不等值筛选)
                  --注意:普通筛选条件使用where进行筛选,不要使用on进行。好处:SQL语句的阅读性变强。
                  --使用:select 内容 from 表名 inner join 表名 on 连接条件 where 普通筛选条件
                  select * from emp inner join dept on emp.deptno=dept.deptno where sal>2000

        --外连接:

             --左外连接:select 内容 from 表名 left outer join 表名 on 连接条件 

                 --查询员工姓名,工作,薪资,部门名称及没有部门的员工信息

                 select * from emp e left outer  join dept d on e.deptno=d.deptno

             --右外连接:select 内容 from 表名 right outer join 表名 on 连接条件 


                  --查询员工姓名,工作,薪资,部门名称及没有员工的部门信息

                  select * from emp e right outer  join dept d on e.deptno=d.deptno

             --全外连接:select 内容 from 表名 full outer join 表名 on 连接条件 
                  select * from emp e full  outer join dept d on e.deptno=d.deptno

       --自连接:
             --查询员工及其上级领导姓名
             select  e1.*,e2.ename from emp e1 inner join emp e2 on e1.mgr=e2.empno
                
       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值