Oracle从零开始——SQL语句——多表查询
2013-04-09 15:38
295 查看
Oracle从零开始05——SQL语句04——多表查询
6.多表查询
1) 基本语法
a) 用WHERE消除笛卡尔积
SELECT * FROM emp,deptWHERE emp.deptno=dept.deptno;
如果表名太长,可以给表起别名:
SELECT * FROM emp e,dept d
WHERE e.deptno=d.deptno;
b)自相关
如查询每个雇员的姓名、工作、雇员的直接上级领导的姓名(上级领导也是在雇员表中,所以是自相关)SELECT e.ename,e.job,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno;
c)步步为营
如:查询每个雇员的姓名、工资、部门名称、工资在公司的等级、及其领导的姓名及工资所在公司的等级分析:需要雇员表与部门表、工资等级表,雇员与部门用部门编号连接,雇员与工资等级是用sal在工资表的LOSAL和HISAL的范围内来连接
第一步:首先查询每个雇员的姓名、工资、部门名称、工资在公司的等级
第二步:其领导的姓名及工资所在公司的等级,所以加入蓝色部分
SELECT e.ename, e.sal, d.dname, s.grade, m.ename, m.sal, ms.grade
FROM emp e, dept d, salgrade s, emp m, salgrade ms
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal AND e.mgr=m.empno
AND m.sal BETWEEN ms.losal AND ms.hisal;
第三步:要求按照以下的样式显示工资等级:
第五等工资
第四等工资
第三等工资
第二等工资
第一等工资
此时肯定只能使用DECODE()函数,将s.grade和ms.grade和改为红色部分
SELECT e.ename, e.sal, d.dname,
DECODE(s.grade,1,'第五等工资', 2,'第四等工资', 3,'第三等工资', 4,'第二等工资', 5,'第一等工资'),m.ename, m.sal, DECODE(ms.grade,1,'第五等工资', 2,'第四等工资', 2,'第三等工资', 4,'第二等工资', 5,'第一等工资')
FROM emp e, dept d, salgrade s, emp m, salgrade ms
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal AND e.mgr=m.empno
AND m.sal BETWEEN ms.losal AND ms.hisal;
左右连接
如dept表中有四个部门,emp表中的雇员在其中3个部门中,查询雇员及所在部门的编号、名称与位置发现没有编号为40的部门,因为雇员没有在这个部门的,所以没有显示,如果想让它显示出来,就要用到右连接
(+)在=左边:表示右连接
(+)在=右边,表示左连接(系统默认就是左连接)
如:查找雇员的编号、姓名及其领导的编号、姓名
相关文章推荐
- 查询Oracle正在执行和执行过的SQL语句
- oracle SQL语句练习MERGE、模糊查询、排序、
- oracle学习---简单的sql语句查询
- 查询Oracle正在执行和执行过的SQL语句
- 学习SQL查询语句 基于Oracle默认的表
- Oracle使用SQL语句进行递归查询
- 常用SQL查询语句 Oracle中Union,Union All,Intersect,Minus的有什么区别
- oracle中sql语句查询优化(六)
- oracle sql 语句嵌套子查询 查询速度慢
- Oracle 查询并删除重复记录的SQL语句
- 查询ORACLE用户表空间使用情况的SQL语句
- Oracle SQL:select各类查询语句总结
- Oracle 查询并删除重复记录的SQL语句
- Oracle 查询并删除重复记录的SQL语句
- SQL数据库查询实现行转列与列转行结果SQL语句(适用于SqlServer数据库,oracle需要修改case when语句)
- 查询oracle 数据库 SQL语句执行情况
- oracle之SQL语句查询
- oracle sql语句怎么查询所有存储过程中是否包含某个注释?
- Oracle学习之路(一):oracle简介+基本sql语句+条件查询+排序数据理论与案例
- Oracle 查询并删除重复记录的SQL语句