码迷,mamicode.com
首页 > 其他好文 > 详细

多表查询

时间:2016-08-23 23:42:57      阅读:586      评论:0      收藏:0      [点我收藏+]

标签:

 

范例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()进行替换

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 ;

 

 

多表查询

标签:

原文地址:http://www.cnblogs.com/doudouxiaoye/p/5801163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!