ORACLE 多表 查询作业

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoxiaode_shu/article/details/80533679
--查询和scott相同部门的员工的姓名ename和雇员日期hiredate
SELECT * FROM EMP
--1.首先查询出scott的部门编号 20
SELECT DEPTNO FROM EMP WHERE ENAME ='SCOTT';


SELECT E.ENAME,E.HIREDATE,E.DEPTNO
FROM EMP E
WHERE DEPTNO =(SELECT DEPTNO FROM EMP WHERE ENAME ='SCOTT');


--2.查询在部门为loc为newYork的部门工作的员工姓名ename,部门名称dname和岗位名称job
SELECT DEPTNO FROM DEPT WHERE LOC ='NEW YORK';


SELECT E.ENAME,D.DNAME,E.JOB,D.LOC FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.DEPTNO =(SELECT DEPTNO FROM DEPT WHERE LOC ='NEW YORK')


--3.查询上司是king的员工姓名(ename)和工资(sal)
SELECT EMPNO FROM EMP WHERE ENAME ='KING';


SELECT E.ENAME,E.SAL,E.MGR FROM EMP E WHERE MGR =
(SELECT EMPNO FROM EMP WHERE ENAME ='KING');


--4.查询与姓名中包含字母U的员工在相同的部门的员工的信息
SELECT DEPTNO FROM EMP WHERE ENAME LIKE '%U%'; --30;


SELECT * FROM EMP WHERE DEPTNO IN
(SELECT DEPTNO FROM EMP WHERE ENAME LIKE '%U%');




--1.查询所有雇员姓名和部门的名称(使用left join,inner join,right join)
SELECT E.ENAME,D.DNAME FROM EMP E
LEFT JOIN DEPT D
ON E.DEPTNO = D.DEPTNO


--2.显示每歌员工的员工姓名,部门名称,职务,工资 和工资等级 信息
(使用left join,inner join,right join)
SELECT E.ENAME,D.DNAME,E.JOB,E.SAL,S.GRADE
FROM SALGRADE S,DEPT D LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
WHERE E.SAL>=S.LOSAL
AND E.SAL <=S.HISAL;


--综合训练题
--1.取得每个部门最高薪水的人员的姓名
SELECT ENAME,SAL,DEPTNO FROM EMP WHERE SAL IN(
(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 10),
(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 20),
(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 30),
(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 40))
ORDER BY DEPTNO;


--第二种
SELECT E.ENAME,E.SAL,E.DEPTNO FROM EMP E,
(SELECT MAX(SAL) M_SAL,DEPTNO FROM EMP GROUP BY DEPTNO) C
WHERE E.DEPTNO = C.DEPTNO
AND E.SAL = C.M_SAL;


--第三种  相关子查询
--1.先执行主查询,获取emp表的deptno字段
--2.将deptno字段传递到子查询中]
--3.子查询将结果过  返回给主查询,由主查询根据子查询的而结果进行where字句的计算
--从而得到最终的查询的结果
--4.依次循环这个过程,直到所有的查询执行的结束
SELECT E.ENAME,E.SAL,E.DEPTNO FROM EMP E
WHERE E.SAL =(SELECT MAX(SAL)FROM EMP WHERE DEPTNO = E.DEPTNO);


--2.列出受雇日期早于直接上级的所有的员工的编号,姓名和部门名称
--第一种


SELECT E.EMPNO,E.ENAME,D.DNAME
FROM EMP E INNER JOIN EMP EM
ON E.MGR = EM.EMPNO
AND E.HIREDATE <EM.HIREDATE
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;




--3.列出所有'CLERK'(办事员)的姓名及部门的名称,部门的人数
--1.(办事员)的姓名及部门的名称
SELECT E.ENAME,D.DNAME FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.JOB ='CLERK'


--4.列出与"scott"从事相同工作的所有员工及部门的名称
SELECT JOB FROM EMP WHERE ENAME ='SCOTT';
SELECT * FROM EMP WHERE JOB =(SELECT JOB FROM EMP WHERE ENAME ='SCOTT');


SELECT DNAME, E.* FROM DEPT D
RIGHT JOIN (SELECT * FROM EMP WHERE JOB =
(SELECT JOB FROM EMP WHERE ENAME ='SCOTT'))E
ON D.DEPTNO = E.DEPTNO
AND ENAME <>'SCOTT';


--5.查询出某个员工的上级主管,并要求求出这些主管中薪水超过3000的


SELECT E.ENAME,E.SAL,E1.ENAME,E1.SAL FROM EMP E,EMP E1
WHERE E1.EMPNO = E.MGR AND E1.SAL >3000;


--6.找出部门10中所有经理(MANAGER)和部门20中中所有办事员 (clerk)的详细资料
SELECT * FROM EMP WHERE(DEPTNO = 10 AND JOB ='MANAGER')
OR(DEPTNO = 20 AND JOB ='CLERK');
--7.找出12年前受雇员工,并按照分组,进行倒序
SELECT * FROM EMP WHERE(SYSDATE-HIREDATE)/365>12
ORDER BY HIREDATE DESC;


--8.列出从事一种工作但属于不同部门的员工的一种组合
SELECT DISTINCT E.ENAME,E.JOB FROM EMP E,EMP M
WHERE E.DEPTNO !=M.DEPTNO
AND E.JOB = M.JOB
--9.查询有奖金的所有员工的姓名 奖金以及所在部门
SELECT * FROM EMP


SELECT E.ENAME,E.COMM,D.DNAME FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND COMM IS NOT NULL
AND COMM>0;


--10.给任职日期超过25年的员工加薪10%
SELECT * FROM EMP WHERE(SYSDATE -HIREDATE)/365>25


UPDATE EMP SET SAL = SAL *1.1 WHERE (SYSDATE - HIREDATE)/365>25




SELECT * FROM EMP



展开阅读全文

Oracle联结查询多表

07-07

【根据 问卷编号 108 查询=问卷表= 得到 模板号20 】rnrn问卷表Totalrn问卷编号-----模板号-----总分rn 108----------20-------303rnrn【根据 模板号20 查询=问卷模板内容表= 得到 所属信息如1 】rn问卷模板内容表contentpointrn模板号-----所属大类-----所属小类-----新分rn 20----------X----------——A--------100rn 20----------X--------------B--------101rn 20----------Y--------------C--------102rnrn 21----------X-------------A---------- 1rn 21----------X--------------B----------2rn 21----------Y -------------C----------3rnrn1------------------------------------------------------rn问卷编号----模板号----总分----所属大类----所属小类----新分rn 108--------20--------303--------X--------A------------100rn 108--------20--------303--------X--------B------------101rn 108--------20--------303--------Y--------C------------102rn-----------------------------------------------------rnrn【根据 所属小类A、B、C 查询=小类表= 得到 所属信息如2 】 rn小类表bm_evaluationcontentrn大类号----小类号----小类名称----原分rn X----------A--------Aname------110rn X----------B--------Bname------220rn Y----------C--------Cname------330rn2--------------------------------------------------------------------------rn问卷编号---模板号---总分---所属大类号---所属小类号---新分---小类名称---原分rn 108--------20------303------X -------------A--------100--------Aname--------110rn 108--------20------303------X -------------B--------101--------Aname--------110rn 108--------20------303------Y -------------C--------102--------Aname--------110rn--------------------------------------------------------------------------rnrn【根据 所属小类A、B、C和问卷号 查询=问卷得分表= 得到 所属信息如3 】 rn问卷得分表situationrn问卷号-----小类号----得分rn 108--------x--------10rn 108--------x--------20rn 108--------y--------30rn 123--------x--------1rn 123--------x--------2rn 123--------y--------2rn3------------------------------------------------------------------------------rn问卷编号 模板号 总分 所属大类号 所属小类号 新分 小类名称 原分 得分rn 108 20 303 X A 100 Aname 110 10rn 108 20 303 X B 101 Aname 110 20rn 108 20 303 Y C 102 Aname 110 30rn------------------------------------------------------------------------------rnrn【根据 所属大类号X、Y 查询=大类表= 得到 所属信息如4 】 rn大类表bm_evaluationrn大类号--------大类名称rn X---------------X1rn Y---------------Y2rn4------------------------------------------------------------------------------------------rn问卷编号---模板号---总分---所属大类号---所属小类号---新分---小类名称---原分---得分---大类名称rn 108--------20------303------X-------------A---------100------Aname---110------10------x1rn 108--------20------303------X-------------B---------101------Aname---110------20------x1rn 108--------20------303------Y-------------C---------102------Aname---110------30------y2rn------------------------------------------------------------------------------------------- 论坛

SQL查询 多表重复查询

05-20

有没有办法 将一个表的查询结果 保存在一个变量中,在查其他表时可以多次调用,不用再重新查询一遍啊?rnrn目前是这样:rnrn Select a.编号,a.名称,b.数量 as 数量1,c.数量 as 数量2,d.数量 as 数量3,e.数量 as 数量4rn From ( Select table1.编号,table1.名称 From table1 where table1.编号 Like '%10%') a rn rn Left Join ( Select table2.编号,table2.数量 From table1,table2 where table1.编号 Like '%10%' and tbale1.编号=table2.编号 and table2.type = '1' ) b on a.编号=b.编号rnrn Left Join ( Select table2.编号,table2.数量 From table1,table2 where table1.编号 Like '%10%' and tbale1.编号=table2.编号 and table2.type = '2' ) c on a.编号=c.编号rnrnrn Left Join ( Select table2.编号,table2.数量 From table1,table2 where table1.编号 Like '%10%' and tbale1.编号=table2.编号 and table2.type = '3' ) d on a.编号=d.编号rnrn Left Join ( Select table2.编号,table2.数量 From table1,table2 where table1.编号 Like '%10%' and tbale1.编号=table2.编号 and table2.type = '4' ) e on a.编号=e.编号rnrn像这样 b,c,d,e都要将a的查询重新执行一遍,速度很慢;table2的数据量很大,如果b,c,d,e中不增加条件“table1.编号 Like '%10%' and tbale1.编号=table2.编号”速度更慢。现在有没有办法将a的查询结果保存,在bcde中直接调用,不重新查询呢?rnrn大家遇到这问题都怎么弄的啊?[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/8.gif][/img] 论坛

C#查询多表条件查询

04-29

遇到个问题,请看下文: rn表1,它有id,name;rn表2,它有cuid,name;rn表3,它有NUMBERID,User,IDN,CID,ADDTIME.rn解释一下,表3中的NUMBERRID是独立的一个ID列,换句话说,也就是它的数据是由程序直接生成的,与其他的表没任何关系,USER一样,不过,IDN中的数据,它是和表1中的ID向对应,CID和表2的CUID向对应。rnrn现在出现各问题,现在我想编写一个程序,是通过条件来查询表3中的数据,而且IDN不显示表1中相对应的ID号,它显示的是表1中和ID对应的NAME值,CID也是一样,查询完成后程序显示出来的是我所输入的值所获得的最终结果。我应该怎么完成这个条件查询呢?rnrn表1例:id name 表2例:cuid name rn 1 POP1 3 ADMINrn 2 POP3 10 NELLSTOKErn表3:NUMBERID USER IDN CID ADDTIMErn 20001 CT_NO1 2 10 2008-04-24rn 20006 CT_NO9 2 3 2008-04-28rnrn查询分别为:通过表3的USER来查询;通过表3的IDN查询;通过表3的CID查询;通过表3的ADDTIME查询。rnrnPS下:我对数据库是个“脑白金”,所以,在建数据库时,存储过程还有视图,函数还有事务等等可以说是一知半解。rn所以我想请高手们帮忙回答下除上面的问题外的以下附加问题:rnrn存储过程它的工作原理是什么?它是否可以做到快速的完成多表查询的T-SQL语句;rn多表查询高手们你们是怎么完成的?(包括有条件和无条件)rn太多的太多了,总就是一句话,SQL数据库十分牛XX的,+我QQ:66189927,需要你的帮助。 论坛

没有更多推荐了,返回首页