zoukankan      html  css  js  c++  java
  • 多表查询

     

    范例1查询emp表中的数据量 —— 14条数据

    SELECT COUNT(*) FROM emp ;

     

    范例2查询dept表中的数据量 —— 4条数据

    SELECT COUNT(*) FROM dept ;

     

    范例3现在查询所有的雇员和部门的全部详细信息

    SELECT * FROM emp,dept ;

     

    范例4查询sh.sales表中的数据量

    SELECT COUNT(*) FROM sales ;

    范例6-5查询sh.costs表中的数据量

    SELECT COUNT(*) FROM costs ;

    范例6-6salescosts两张表关联查询,同时设置消除笛卡尔积的条件

    SELECT COUNT(*) FROM sales s,costs c

    WHERE s.prod_id=c.prod_id ;

    范例7之前的查询结果中包含了笛卡尔积,现在将其消除

    SELECT *

    FROM emp,dept

    WHERE emp.deptno=dept.deptno ;

     

    范例8查询每个雇员的编号、姓名、职位、基本工资、部门名称、部门位置信息

    SELECT emp.empno,emp.ename,emp.job,emp.sal,dept.dname,dept.loc

    FROM emp,dept

    WHERE emp.deptno=dept.deptno ;

    范例9通过别名查询雇员的编号、姓名、职位、基本工资、部门名称、部门位置

    SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc

    FROM emp e,dept d

    WHERE e.deptno=d.deptno ;

     

    范例10查询出每个雇员的编号、姓名、雇佣日期、基本工资、工资等级

    SELECT e.empno,e.ename,e.hiredate,e.sal,s.grade

    FROM emp e,salgrade s

    WHERE e.sal BETWEEN s.losal AND s.hisal ;

     

    范例11使用DECODE()进行替换  s.grade为条件,类似if else

    SELECT e.empno,e.ename,e.hiredate,e.sal,

    DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资') grade

    FROM emp e,salgrade s

    WHERE e.sal BETWEEN s.losal AND s.hisal ;

     

    范例12查询出每个雇员的姓名、职位、基本工资、部门名称、工资所在公司的工资等级;

    SELECT e.ename,e.job,e.sal

    FROM emp e ;

    SELECT e.ename,e.job,e.sal,d.dname

    FROM emp e,dept d

    WHERE e.deptno=d.deptno ;

    SELECT e.ename,e.job,e.sal,d.dname,s.grade ,

      DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资') grade

    FROM emp e,dept d,salgrade s

    WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal ;

    范例:emp表中添加一条新的纪录

    INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

    VALUES (8888,'李兴华','CLERK',7369,SYSDATE,800,100,null);

    范例13现在将empdept表联合查询,使用内连接(等值连接)

    SELECT *

    FROM emp e,dept d

    WHERE e.deptno=d.deptno ;

     

    范例14使用左外连接,显示雇员8888的信息

    SELECT *

    FROM emp e,dept d

    WHERE e.deptno=d.deptno(+) ;

    范例15增加右外连接,显示部门40的信息

    SELECT *

    FROM emp e,dept d

    WHERE e.deptno(+)=d.deptno ;

    范例16取出emp表中的全部数据

    SELECT * FROM emp ;

     

    范例17查询出每个雇员的编号、姓名及其上级领导的编号、姓名

    SELECT e.empno eno ,e.ename ename,m.empno mno,m.ename mname

    FROM emp e,emp m

    WHERE e.mgr=m.empno ;

    SELECT e.empno eno ,e.ename ename,m.empno mno,m.ename mname

    FROM emp e,emp m

    WHERE e.mgr=m.empno(+) ;

     

    范例18查询出在1981年雇佣的全部雇员的编号、姓名、雇佣日期(按照年--日显示)、工作、领导姓名、雇员月工资、雇员年工资(基本工资+奖金),雇员工资等级、部门编号、部门名称、部门位置,并且要求这些雇员的月基本工资在1500~3500之间,将最后的结果按照年工资的降序排列,如果年工资相等,则按照工作进行排序

    SELECT e.empno,e.ename,e.hiredate,e.sal,(e.sal+NVL(e.comm,0))*12 income

    FROM emp e

    WHERE   TO_CHAR(e.hiredate,'yyyy')='1981'  AND e.sal BETWEEN 1500 AND 3500 ;

    SELECT e.empno,e.ename,e.hiredate,e.sal,(e.sal+NVL(e.comm,0))*12 income , m.ename mname

    FROM emp e , emp m

    WHERE   TO_CHAR(e.hiredate,'yyyy')='1981'  AND e.sal BETWEEN 1500 AND 3500

            AND e.mgr=m.empno(+) ;

    SELECT  e.empno,e.ename,e.hiredate,e.sal,(e.sal+NVL(e.comm,0))*12 income , m.ename mname ,

            d.deptno,d.dname,d.loc

    FROM emp e , emp m , dept d

    WHERE   TO_CHAR(e.hiredate,'yyyy')='1981'  AND e.sal BETWEEN 1500 AND 3500

            AND e.mgr=m.empno(+)

            AND e.deptno=d.deptno ;

    SELECT  e.empno,e.ename,e.hiredate,e.sal,(e.sal+NVL(e.comm,0))*12 income , m.ename mname ,

            d.deptno,d.dname,d.loc ,

            s.grade, DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资') 工资等级

    FROM emp e , emp m , dept d , salgrade s

    WHERE   TO_CHAR(e.hiredate,'yyyy')='1981'  AND e.sal BETWEEN 1500 AND 3500

            AND e.mgr=m.empno(+)

            AND e.deptno=d.deptno

            AND e.sal BETWEEN s.losal AND s.hisal ;

    SELECT  e.empno,e.ename,e.hiredate,e.sal,(e.sal+NVL(e.comm,0))*12 income , m.ename mname ,

            d.deptno,d.dname,d.loc ,

            s.grade, DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资') 工资等级

    FROM emp e , emp m , dept d , salgrade s

    WHERE   TO_CHAR(e.hiredate,'yyyy')='1981'  AND e.sal BETWEEN 1500 AND 3500

            AND e.mgr=m.empno(+)

            AND e.deptno=d.deptno

            AND e.sal BETWEEN s.losal AND s.hisal

    ORDER BY income DESC , e.job ;

     

    范例19使用交叉连接(CROSS JOIN),产生笛卡尔积

    SELECT *

    FROM emp

    CROSS JOIN dept ;

    范例20使用自然连接(NATION JOIN

    SELECT *

    FROM emp NATURAL JOIN dept ;

    范例21USING子句,直接使用JOIN进行连接,同时指定关联的列

    SELECT *

    FROM emp JOIN dept USING(deptno) ;

     

    范例22ON子句,直接编写条件

    SELECT *

    FROM emp e JOIN salgrade s

    ON(e.sal BETWEEN s.losal AND s.hisal) ;

     

    范例23使用SQL:1999语法实现左外连接

    SELECT *

    FROM emp e LEFT OUTER JOIN dept d

    ON (e.deptno=d.deptno) ;

    范例24使用SQL:1999语法实现右外连接

    SELECT *

    FROM emp e RIGHT OUTER JOIN dept d

    ON (e.deptno=d.deptno) ;

     

    范例25使用SQL:1999语法实现全外连接

    SELECT *

    FROM emp e FULL OUTER JOIN dept d

    ON (e.deptno=d.deptno) ;

    范例26查询dept表的全部记录

    SELECT * FROM dept ;

     

    范例27查询10部门的详细记录

    SELECT * FROM dept WHERE deptno=10 ;

     

    范例28使用UNION将两个查询结果连接

    SELECT * FROM dept

      UNION

    SELECT * FROM dept WHERE deptno=10 ;

     

    范例29使用UNION ALL将两个查询结果连接

    SELECT * FROM dept

      UNION ALL

    SELECT * FROM dept WHERE deptno=10 ;

     

    范例30使用UNION来代替OR,查询所有办事员与销售人员的信息

    SELECT * FROM emp WHERE job='SALESMAN'

    UNION

    SELECT * FROM emp WHERE job='CLERK'  ;

     

    范例31使用MINUS执行差集操作

    SELECT * FROM dept

      MINUS

    SELECT * FROM dept WHERE deptno=10 ;

     

    范例32使用INTERSECT执行交集操作

    SELECT * FROM dept

      INTERSECT

    SELECT * FROM dept WHERE deptno=10 ;

     

     

  • 相关阅读:
    豆豆
    艺术家
    姐姐
    书名与歌名
    MySQL
    杂文
    武侠
    青年诗人
    那些歌
    传世
  • 原文地址:https://www.cnblogs.com/doudouxiaoye/p/5801163.html
Copyright © 2011-2022 走看看