唐僧还在拜佛求经路。  

    实际上所谓的多表查询指的就是从多张数据表中取出数据并且显示的一种操作。
              select * from scott.emp,dept.emp 笛卡尔积存在的原因
            实际:
              SELECT * FROM scott.emp e, scott.dept d  WHERE e.deptno=d.deptno;

范例1:查询出每个雇员的编号,姓名、职位、基本工资、部门名称、部门位置。
                ·确定要使用的数据表:
                  -:emp表:编号,姓名、职位、基本工资、
                  -:detp表:部门名称、部门位置。
                ·确定已知的关联字段:
                  -:雇员与部门:emp.deptno=dept.deptno
          第一步:查询出每个雇员的编号,姓名、职位、基本工资。
                  select  e.empno,e.ename,e.job,e,sal from emp e;
          第二步:查询出每个雇员对应的部门信息;需要引入dept表(引入表的时候一定考虑有关联),deptno字段关联,所以利用where子句消除笛卡尔积。
                  select e.empno,e.ename,e.job,e.sal,d.dname,d.loc
                   from scott.emp e, scott.dept d
                   where e.deptno=d.deptno;

        范例2:查询出每个雇员的编号,姓名、职位、基本工资、工资等级。
              select e.empno,e.ename,e.job,e.sal,s.grade
              from scott.emp e,scott.salgrade s
              where e.sal  BETWEEN s.losal and s.hisal;
        范例3:查询出每个雇员的编号,姓名、职位、基本工资、部门名称、工资等级。
                确定所需要的数据表:
                    -:emp表:编号,姓名、职位、基本工资、
                    -:detp表:部门名称、
                    -:salgrade表:工资等级
                确定已知的关联字段:
                    -:雇员与部门:emp.deptno-dept.deptno
                    -:雇员与工资等级;emp.sal BETWEEN salgrade.losal and salgrade.hisal
                  第一步:select e.empno,e.ename,e.job,e.sal
                           from emp e;
                  第二步:加入部门名称、增加一张表就增加一条消除笛卡尔积。
                          select e.empno,e.ename,e.job,e.sal,d.dname
                           from emp e,dept d
                           where e.deptno=d.deptno;
                  第三步:加入工资等级信息,与原始的
                          select e.empno,e.ename,e.job,e.sal,d.dname,s.grade
                           from emp e,dept d,salgrade s
                           where e.deptno=d.deptno and e.sal between s.losal and s.hisal;

posted on 2017-10-04 10:28  唐僧还在拜佛求经路。  阅读(262)  评论(0编辑  收藏  举报