Oracle两个表表联合查询92&99

在这里插入代码--多表联合查询:
  --当需要获取的数据分布在多张表中,考虑使用联合查询
  --SQL99方式
     --依然可以使用别名
     --如果使用on或者useing关键字对结果进行筛选,必须使用inner jion作用表与表的链接,其中inner可以省略,
     --外连接的outer关键字可以不写
     --依然可以继续使用分组,having 排序等
     --笛卡尔积 使用 cross join 关键字
       --select 内容 from 表名 cross join
     select * from emp cross join dept;
     --筛选
       --查询员工姓名,工作,薪资,部门名称
       --自然连接 
         --使用select 内容 from 表名  natrual 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 连接条件
          --查询员工姓名,工作,薪资,部门名称ji没有部门的员工
          select * from  emp e left join dept d on e.deptno=d.deptno; 
        --右外连接
          --查询员工姓名,工作,薪资,部门名称ji没有部门的员工
          select * from  emp e right join dept d on e.deptno=d.deptno;
        --全外连接
          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;
 -------------------
  --SQL92方式
    --笛卡尔积:将多个表的数据一一对应,多得到结果为多表的笛卡尔积
               --结果数量为所有表的数量的乘积。
    select * from emp,dept where emp.DEPTNO=dept.DEPTNO;--两个表做全排列
    --等值连接筛选
      --仙座标的笛卡尔积,然后筛选条件为等值筛选
      --查询员工姓名,工作,薪资,部门名称
      select * frpm emp,dept where emp.DEPTNO=dept.DEPTNO;
        --可以在select子句中使用字段直接获取数据,但是效率比较低,建议字段前加上表明
        --注意:如果是公共字段,则必须声明表明
        select emp.ENAME,ename,emp.JOB,emp.SAL,dept.dname,emp.DEPTNO from emp,dept where emp.DEPTNO=dept.DEPTNO;
        select e.ENAME,e.JOB,e.SAL,d.dname,e.DEPTNO from emp e,dept d where e.DEPTNO=d.DEPTNO;
      
    --不等值连接
       --查询员工姓名,工作,工资,工资等级
       select * from emp e,salgrade s where e.sal>=s.losal and e.sal<=s.hisal;
    --自连接
       --查询员工姓名,工作,薪资,和上级领导姓名
       select e1.ename,e1.job,e1.sal,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;
    --外连接
      --左外连接
          --查询员工姓名,工作,薪资,部门名称及没有部门的员工
            select * from emp e,dept d where e.deptno=d.deptno(+);
      --右外连接
          ----查询员工姓名,工作,薪资,部门名称及没有员工的部门
           select * from emp e,dept d where e.deptno(+)=d.deptno;
--查询员工姓名,工作,薪资,部门名称
  select * from emp;
  select * from dept;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值