oracle数据库中的多表查询

/*多表查询
     from   t1,t2.....

   1:内连接  n张表操作 有n-1有效条件 只返回符合条件的记录数
              有效条件是表连接条           
             a:等值连接 (= 做连接的条件 )
 eg:      select * from emp e,dept d where e.deptno =d.deptno
             b:非等值连接  in between   > < ....like
             c:自连接   (同表查询)                
eg:      select * from emp e,emp m where m.mgr =e.deptno
   2:外连接  n张表操作 有n-1有效条件 
                  返回符合条件的记录数与主表的所有记录                 
                1:左外连接
                    select *  from A left join B
                               on  A.XX=B.xx;
                    或者                       
                    select *  from A ,B where A.XX=B.xx(+);                           
                2:右外连接   
                          select *  from A right join B
                               on  A.XX=B.xx;
                       或者         
                        select *  from A ,B where A.XX(+)=B.xx;
                3:全外连接
                       select *  from A full outer join B
                               on  A.XX=B.xx;     
   3:笛卡尔积 n张表操作 如果有效条件 低于n-1个 就会产生 
*/
select * from emp;
select * from dept;

eg:
/*查询雇员信息与雇员所在部门信息*/
   --sql 标准    oracle 标准 
 select * from emp e join dept d on e.deptno=d.deptno;     
 select * from emp e,dept d where
                             e.deptno=d.deptno;                                     
/*查询雇员姓名与薪资 薪资等级信息 */ 
   select * from salgrade; 
      select e.*,s.grade from emp e ,salgrade s
                where e.sal between s.losal and s.hisal;               
/*查询雇员姓名,所在部门名称  薪资 薪资等级信息 */ 
          select * from emp e,dept d,salgrade g
                where e.deptno=d.deptno
                   and e.sal between g.losal and g.hisal;

 /*查询出 雇员姓名 与雇员的经理的姓名 */                 
     select e.ename,m.ename from emp e,emp m
                            where e.mgr=m.empno ;

/*查询所有雇员姓名与部门名称 没有部门的雇员也要显示*/
select * from emp;
/* (+) 所在的一边为从表  另外一端就是主表
        查询语句中 主表出现的位置在左边就是 左外连接
        主表出现的位置在右边就是 右外连接
  */
         select e.ename,d.dname from emp e,dept d
                               where e.deptno=d.deptno(+);                                 
         select  e.ename,d.dname from emp e left join dept d
                                   on  e.deptno=d.deptno;                                                                         
 /*查询所有雇员姓名与部门名称 没有雇员的部门名也要显示*/                           
    select e.ename,d.dname from emp e,dept d
                               where e.deptno(+)=d.deptno; 

     select e.ename,d.dname from emp e right join dept d
                                  on  e.deptno=d.deptno;                           
/*查询所有雇员姓名与部门名称 没有部门的雇员也要显示
  没有雇员的部门名也要显示
*/
    /*全外连接 */ 
    select e.ename,d.dname from emp e full outer join dept d
                                  on  e.deptno=d.deptno; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值