数据库字段:CLERK:办事员 MANAGER:经理 SAL字段:薪水 Mgr:为空表示是经理人

博客分类:
比较运算符
&,&:大于,小于
&=.&=:大于等于,小于等于
=:等于
!=,&&,^=:不等于
逻辑运算符运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号
逻辑运算符
AND:逻辑与,表示两个条件必须同时满足
OR:逻辑或,表示两个条件中有一个条件满足即可
NOT:逻辑非,返回与某条件相反的结果
特殊运算符
[NOT] BETWEEN…AND…:用于测试是否在范围内
[NOT] IN (…):用于测试是否在列表中
[NOT] LIKE:用于进行模式匹配
IS [NOT] NULL:用于测试是否为空值
ANY SOME:同列表或查询中的每一个值进行比较,测试是否有一个满足,前面必须使用的运算符包括=、!=、&=、&=、&、&等
ALL:同列表或查询中的每一个值进行比较,测试是否所有的值都满足,前面必须使用的运算符包括=、!=、&=、&=、&、&等
[NOT] EXISTS:测试是否子查询至少返回一行
使用以下运算形式,可以显示值满足特定集合的结果:
[NOT] IN (...)
显示职务为“SALESMAN',“CLERK”和“MANAGER”的雇员信息。
输入并执行查询:
SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK','MANAGER');
执行结果从略。
注意:如果在IN前面增加NOT,将显示职务不在集合列表中的雇员。以上用法同样适用于数值型集合,
多行子查询
如果子查询返回多行的结果,则我们称它为多行子查询。多行子查询要使用不同的比较运算符号,它们是IN、ANY和ALL。
查询工资低于任何一个“CLERK”的工资的雇员信息。
执行以下查询:
empno, ename, job,sal FROM emp
sal & ANY (SELECT sal FROM emp WHERE job = 'CLERK')
AND job && 'CLERK';
执行结果为:
&&&&
EMPNO ENAME
------------------- ------------ ----------------- ---------------------
7654 MARTIN
说明:在emp表的雇员中有4个职务为“CLERK”,他们的工资分别是800、、1300。满足工资小于任何一个“CLERK”的工资的记录有2个,在这里使用了ANY运算符表示小于子查询中的任何一个工资。
注意:条件job && 'CLERK'排除了职务是CLERK的雇员本身。
查询工资比所有的“SALESMAN”都高的雇员的编号、名字和工资。
执行以下查询:
empno, ename,sal FROM emp
WHERE sal & ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');
执行结果为:
&&
EMPNO ENAME
---------------- ------------- -----------------------
7566 JONES
7698 BLAKE
7782 CLARK
7788 SCOTT
&&& 说明:在emp表的雇员中有4个职务为“SALESMAN”,他们的工资分别是、。在这里使用了ALL运算符,表示大于查询中所有的工资。
查询部门20中职务同部门10的雇员一样的雇员信息。
执行以下查询:
SELECT
empno, ename, job FROM emp
job IN (SELECT job FROM emp WHERE deptno=10)
AND deptno =20;
执行结果为:
&&
EMPNO ENAME
------------------ -------------- ----------------------
7369 SMITH
7876 ADAMS
7566 JONES
说明:在该训练中,使用IN运算符表示职务是子查询结果中的任何一个。部门10中有3种职务:MANAGER、PRESIDENT和CLERK,以上查询得到的是部门20中是这3种职务的雇员。
多列子查询
如果子查询返回多列,则对应的比较条件中也应该出现多列,这种查询称为多列子查询。以下是多列子查询的训练实例。
查询职务和部门与SCOTT相同的雇员的信息。
执行以下查询:
empno, ename, sal FROM emp
WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);
执行结果为:
&&&&
EMPNO ENAME
------------------ --------------- ----------------
说明:在该例的子查询中返回两列,查询条件中也要出现两列,表示雇员的职务和部门应该和SCOTT的职务和部门相同。
LIKE的用法
使用LIKE操作符可完成按通配符查找字符串的查询操作,该操作符适合于对数据进行模糊查询。其语句法为:
[NOT] LIKE 匹配模式
匹配模式中除了可以包含固定的字符之外,还可以包含以下的通配符:
%:代表0个或多个任意字符。
_ :代表一个任意字符。
显示姓名以“S”开头的雇员信息。
输入并执行查询:
SELECT * FROM emp WHERE ename LIKE 'S%';
执行结果为:
EMPNO ENAME
MGR HIREDATE
------------- -------------- ------------------------- ---------- ------------------ ----------- ------------ ------------------
7369 SMITH
CLERK 月-80
7788 SCOTT
ANALYST 月 -87
说明:SMITH和SCOTT名字均以S开头,名字后边的字符和长度任意。
显示姓名第二个字符为“A”的雇员信息。
执行查询:
SELECT * FROM emp WHERE ename LIKE '_A%';
说明:“_”代表第一个字符任意,第二个字符必须为“A”,“%”代表第二个字符后面的字符为任意字符,个数任意。
判断空值NULL
在表中,字段值可以是空,表示该字段没有内容。如果不填写,或设置为空则我们说该字段的内容为NULL。NULL没有数据类型,也没有具体的值,但是使用特定运算可以判断出来。这个运算就是:
IS& [NOT] NULL
显示经理编号没有填写的雇员。
输入并执行查询:
ename, mgr FROM emp WHERE mgr IS NULL;
执行结果为:
------------ ---------------
注意:以下用法是错误的。
SELECT& ename, mgr FROM emp WHERE mgr=NULL;
黑色头发:http://heisetoufa.iteye.com/
浏览 33066
heisetoufa
浏览: 9635113 次
来自: 北京
忽悠人的。这是web的。不是java的,也不是swing的。
document.wirte拼写错了。。document.wr ...
解决了一个文件加载问题,感谢
// 设置不持久化,此处学习,实际根据项目决定
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Oracle数据库查询练习及答案.doc 6页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
Oracle数据库查询练习及答案
你可能关注的文档:
··········
··········
1 找出佣金高于薪金60%的雇员。
SELECT * FROM emp WHERE comm>sal*0.6;
2 找出部门10中所有经理和部门20中所有办事员的详细资料。
SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';
3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。
SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;
SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB'MANAGER' AND JOB'MANAGER' AND SAL>=2000);
4 找出收取佣金的雇员的不同工作。
SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;
5 找出不收取佣金或收取的佣金低于300的雇员。
SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;
6 找出各月最后一天受雇的所有雇员。
SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE);
--找出各月最后受雇的所有雇员
SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate)));
7 找出晚于26年之前受雇的雇员。
SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12;
8 显示只有首字母大写的的所有雇员的姓名。
SELECT * FROM emp WHERE ename=initcap(ename);
9 显示正好为5个字符的雇员的姓名。
SELECT * FROM emp WHERE length(ename)=5;
10显示不带有“R”的雇员姓名。
SELECT * FROM emp WHERE instr(ename,'R')=0;
SELECT * FROM emp WHERE ename NOT LIKE '%R%';
11显示所有雇员的姓名的前三个字符。
SELECT substr(ename,1,3) AS en3 FROM
12显所有雇员的姓名,用a替换所有“A”。
SELECT REPLACE(ename,'A','a') FROM
13显示所有雇员的姓名以及满10年服务年限的日期。
SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,120) AS H_10Y FROM EMP;
14显示雇员的详细资料,按姓名排序。
SELECT * FROM EMP ORDER BY ENAME;
15显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。
SELECT ENAME,HIREDATE FROM EMP ORDER BY HIREDATE;
16显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序顺序排序,而工作按薪金排序。
SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL;
17显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面。
SELECT ENAME,TO_CHAR(HIREDATE,'YYYY-MM') AS Y_M FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM'),
正在加载中,请稍后...数据库问题 一些简单的查询语句_百度知道
数据库问题 一些简单的查询语句
6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.7.找出收取佣金的员工的不同工作.11.以首字母大写的方式显示所有员工的姓名.12.显示正好为5个字符的员工的姓名.
我有更好的答案
6、SELECT * FROM emp WHERE DEPTNO = 10 AND JOB = &#39;MANAGER&#39;
SELECT * FROM emp WHERE DEPTNO = 20 AND JOB = &#39;CLERK&#39;
SELECT * FROM emp WHERE JOB && &#39;MANAGER&#39; OR JOB && &#39;CLERK&#39; AND SAL &= 2000;7、SELECT DISTINCT job FROM emp WHERE COMM IS NOT NULL;11、SELECT
INITCAP(ENAME)
EMP;12、SELECT
FROM EMP WHERE LENGTH(ENAME) = 5;
采纳率:100%
6.select * from A where 部门=&#39;10&#39; and 职位=&#39;manager&#39;select * from A where 部门=&#39;20&#39; and 职位=&#39;clerk&#39;select * from A where 部门=&#39;20&#39; and 薪金&=2000 and 职位 not in(select * from A where 职位=&#39;manager&#39; and
职位=&#39;clerk&#39;)7.select distinct name,工作 from A where 薪金&011.有点麻烦12.select name from A where name=&#39;%%%%%&#39;
本回答被网友采纳
6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.select * from 表名 where (职位=&#39;经理&#39;and 部门=10) or (职位=&#39;办事员&#39; and 部门=20) or (职位 not in (&#39;经理&#39;,&#39;办事员&#39;) and 薪金&=2000)7.找出收取佣金的员工的不同工作.这个问题,你描述的不是很清楚,我只能大概说下了,
select 工作 from 表名 where 员工=&#39;佣金员工&#39;11.以首字母大写的方式显示所有员工的姓名.这个问题,不清楚怎么弄的,不好意思12.显示正好为5个字符的员工的姓名select name from 表名 where name like &#39;_____&#39;
在SQL中下划线_代表一个字符 %代表任意个字符
补充楼上:11.select INITCAP(employeename) from emp表;
其他1条回答
为您推荐:
其他类似问题
数据库的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博客分类:
create table DEPT(
DEPTNO decimal(2) primary key,
VARCHAR(14),
VARCHAR(13));create table EMP(
decimal(4) primary key,
VARCHAR(10),
VARCHAR(9),
decimal(4),
HIREDATE DATETIME,
decimal(7,2),
decimal(7,2),
decimal(2));insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7369, 'SMITH', 'CLERK', 7902, '', 800, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, '', , 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, '', , 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, '', 2975, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, '', , 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, '', 2850, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, '', 3260.95, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, '', 6655, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, '', );insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, '', 950, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566, '', 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, '', 1730.3, null, 10);
SELECT * FROMselect *
字段说明:dept(部门表):depno,部门编号;dname,部门名称,loc,办公地点emp(员工表):EMPNO,工号;ENAME,姓名;JOB,工种;
MGR,上级编号; HIREDATE,雇佣日期;SAL,工资,COMM,奖金, DEPTNO,部门编号
简单查询(单表查询)1、查询所有没有job的人员 (job为空)select * from emp where job is null2、查询姓名以“C”开头的人员,注意,不区别大小写select * from emp where ename like'c%' or ename like'C%'3、查询所有工资在到人员,两种写法select * from empwhere sal between 2000 and 3000;select * from empwhere sal in();4、查询所有工资不在到人员select * from empwhere sal not between 2000 and 3000;5、查询所有10,20,40部门的人员,两种写法select * from emp where deptno in(10,20,40);SELECT 'The current time is: '+ CONVERT(char(30), CURRENT_TIMESTAMP)select datetime6、查询工资不为3000的,且在1980年雇佣的人员select * from emp where sal !=3000 and hiredate between ''and '';7、插入2条在今年2.1号就业的人员记录,然后查询本年雇佣的所有人员insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7686, 'XIAOYONG', 'CLERK', 7782, '', 1730.3, null, 10); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7709, 'SHANZHAN', 'CLERK', 7782, '', 0, 20); SELECT * from emp where HIREDATE between ''and ''8、对比所有人的工资和上涨20%以后的工资select SAL*1.2 as '涨价20%后'
from emp union allselect SAL as '涨价前' from emp
select SAL*1.2 as '涨价20%后',SAL as '涨价前'
from emp 9、查询时用户需要看到一个固定的列:school,内容为“lovo”。select deptno,ename,sal,HIREDATE ,max('lovo') 'school' from emp group by deptno,ename,sal,HIREDATE;
select empno,ename,'lovo'
10、查询:部门编号,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。select deptno,ename,sal,HIREDATE from emp
order by deptno,HIREDATE ;
------------------------------------------------------------------
1、查询各部门人数,字段:部门名称,人数。要求一是不显示没有人员的空部门,二是要显示这些空部门。
select d.deptno,d.dname,empnofrom dept d,emp e where
d.deptno=e.deptnoorder by d.deptno
select d.dname,count(*) as 人数from dept d,emp e where
d.deptno=e.deptnogroup by d.deptno,d.dname
select d.dname,count(*) as 人数from dept d join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
要求二select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
2、查询人数最多的部门名称,字段:同上select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dnamehaving count(e.empno)= ( select max(x) from (
select count(e.empno) as x
from dept d
left join emp e on
d.deptno=e.deptno
group by d.deptno,d.dname ) t)--方法2:使用视图(类似于内存中的一个表)create view
v1as select d.deptno,d.dname,count(e.empno) as x from dept d
left join emp e on
d.deptno=e.deptno group by d.deptno,d.dname
select * from v1where x = (select max(x) from v1)3、查询至少有3个人部门,字段:同上SELECT * FROMselect *
4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名 (提示:上级编号在mgr字段)
select e1.ename 员工姓名,e2.ename 上级姓名 from emp e1 join emp e2 on e1.mgr=e2.empno
5、查询比上级来得早的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期 SELECT * FROMselect *
select e1.ename 员工姓名,e2.ename 上级姓名,e1.hiredate 雇佣日期
from emp e1 join emp e2 on e1.mgr=e2.empnowhere e1.hiredate&e2.hiredate6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期select e1.ename 员工姓名,e2.ename 上级姓名,e1.hiredate 员工雇佣日期,e2.hiredate 上级雇佣日期 from emp e1 join emp e2 on e1.mgr=e2.empnowhere e1.hiredate&e2.hiredate
7、查询没有员工的部门,分别使用not in和not exists方法SELECT * FROMselect *
select d.dname from dept dwhere d.deptno not in (select e.deptno from emp e);
8、查询各部门工资最高的员工,要求使用2种方法select 9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。
要求2种方法,一种是使用多表连接,一种不能使用多表连接。创建工资表t_sal(autoid,empno,salary,date_sal),autoid代表流水号,date_sal代表禽工资日期。并添加一些记录。如果员工没有领取过工资,则不会在表中记录。10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份
1、查询各部门人数,字段:部门名称,人数。要求一是不显示没有人员的空部门,二是要显示这些空部门。要求一:使用传统写法和join写法select d.deptno,d.dname,empnofrom dept d,emp e where
d.deptno=e.deptnoorder by d.deptno
select d.dname,count(*) as 人数from dept d,emp e where
d.deptno=e.deptnogroup by d.deptno,d.dname
select d.dname,count(*) as 人数from dept d join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
要求二select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
2、查询人数最多的部门名称,字段:同上
select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dnamehaving count(e.empno)= ( select max(x) from (
select count(e.empno) as x
from dept d
left join emp e on
d.deptno=e.deptno
group by d.deptno,d.dname ) t)
--效率较低,但简单的方法:相关子查询
--方法2:使用视图(类似于内存中的一个表)create view
v1as select d.deptno,d.dname,count(e.empno) as x from dept d
left join emp e on
d.deptno=e.deptno group by d.deptno,d.dname
select * from v1where x = (select max(x) from v1)
3、查询至少有3个人部门,字段:同上select d.deptno,d.dname,count(e.empno) as xfrom dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dnamehaving count(e.empno)&=3
4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名 (提示:上级编号在mgr字段)
select yg.ename as 员工姓名,sj.ename as 上级姓名from emp yg,emp sjwhere yg.mgr=sj.empno
一个自己连接自己,叫“自连接”!
5、查询比上级来得到的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期
6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期7、查询没有员工的部门,分别使用not in和not exists方法8、查询各部门工资最高的员工,要求使用2种方法9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。
要求2种方法,一种是使用多表连接,一种不能使用多表连接。创建工资表t_sal(autoid,empno,salary,date_sal),autoid代表流水号,date_sal代表禽工资日期。并添加一些记录。如果员工没有领取过工资,则不会在表中记录。10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份1、查询各部门人数,字段:部门名称,人数。要求一是不显示没有人员的空部门,二是要显示这些空部门。要求一:使用传统写法和join写法select d.deptno,d.dname,empnofrom dept d,emp e where
d.deptno=e.deptnoorder by d.deptno
select d.dname,count(*) as 人数from dept d,emp e where
d.deptno=e.deptnogroup by d.deptno,d.dname
select d.dname,count(*) as 人数from dept d join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
要求二select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dname
2、查询人数最多的部门名称,字段:同上
select * group by depno
select d.dname,count(e.empno) as 人数from dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dnamehaving count(e.empno)= ( select max(x) from (
select count(e.empno) as x
from dept d
left join emp e on
d.deptno=e.deptno
group by d.deptno,d.dname ) t)
--效率较低,但简单的方法:相关子查询
--方法2:使用视图(类似于内存中的一个表)create view
v1as select d.deptno,d.dname,count(e.empno) as x from dept d
left join emp e on
d.deptno=e.deptno group by d.deptno,d.dname
select * from v1where x = (select max(x) from v1)
3、查询至少有3个人部门,字段:同上select d.deptno,d.dname,count(e.empno) as xfrom dept d
left join emp e on
d.deptno=e.deptnogroup by d.deptno,d.dnamehaving count(e.empno)&=3
4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名 (提示:上级编号在mgr字段)
select yg.ename as 员工姓名,sj.ename as 上级姓名from emp yg,emp sjwhere yg.mgr=sj.empno
一个自己连接自己,叫“自连接”!但是两次的身份是不一样的:员工和上级!
5、查询比上级来得早的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期 select yg.ename as 员工姓名,sj.ename as 上级姓名,yg.hiredate 员工日期,sj.hiredate 上级日期from emp yg,emp sjwhere yg.mgr=sj.empnoand yg.hiredate&sj.hiredate
6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期
7、查询没有员工的部门,分别使用not in和not exists方法
select * from dept where deptno not in (select distinct deptno from emp)
select * from dept where not exists (select * from emp where dept.deptno=emp.deptno)
8、查询各部门工资最高的员工,要求使用2种方法select *select * from emp order by deptno,sal desc
select ename,salfrom emp awhere sal = (select max(sal) from emp b where
b.deptno=a.deptno)
select ename,sal from emp e, (select deptno,max(sal) x from emp group by deptno) awhere e.deptno=a.deptnoand e.sal=a.x
9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部门老员工排在前面。
要求2种方法,一种是使用多表连接,一种不能使用多表连接。select dept.dname,emp.ename,emp.sal,emp.hiredatefrom emp,dept where emp.deptno=dept.deptnoorder by dept.dname,hiredate
创建工发放表t_sal(autoid,empno,salary,date_sal),autoid代表流水号,date_sal代表工资日期。并添加一些记录。
如果员工没有领取过工资,则不会在表中记录。
10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份
浏览: 63071 次
来自: 成都
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 oracle数据库基本语句 的文章

 

随机推荐