当前位置:文档之家› 数据库习题1附答案

数据库习题1附答案

创建EMP_INFO表完成下列练习,表的结构说明如下EMPNO 员工号EMPNAME 员工姓名JOB 工作MGR 上级编号HIREDATE 受雇日期SAL 薪金COMM 佣金DEPTNO 部门编号1.选择部门30中的所有员工.select*from myemp where deptno=30;2.列出所有办事员(CLERK)的姓名,编号和部门编号.select ename,empno,deptno from myemp where job= 'CLERK';3.找出佣金高于薪金的员工.select*from myemp where comm>sal;4.找出佣金高于薪金的60%的员工.select*from myemp where comm>(sal*;5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.select*from myemp where(deptno=10and job='MANAGER')or(deptno=20and job='CLERK')6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.select*from myemp where(deptno=10andjob='MANAGER')or(deptno=20andjob='CLERK')or(job!='MANAGER'and job!='CLERK'and sal>=2000)7.找出收取佣金的员工的不同工作.select job from myemp where comm is not null;8.找出不收取佣金或收取的佣金低于100的员工.select ename from myemp where comm is null or comm<100;9.找出各月倒数第3天受雇的所有员工.select ename from myemp wherelast_day(hiredate)-hiredate=210.找出早于12年前受雇的员工.select*from myemp where(to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy'))> =13;11.以首字母大写的方式显示所有员工的姓名.select initcap(ename)from myemp12.显示正好为5个字符的员工的姓名.select ename from myemp where length(ename)=5;13.显示不带有"R"的员工的姓名.select ename from myemp where ename notlike='%r%'14.显示所有员工姓名的前三个字符.select substr(ename,0,3)as s from myemp15.显示所有员工的姓名,用a替换所有"A"select replace(ename,'A','a')from myemp16.显示满10年服务年限的员工的姓名和受雇日期.select ename,hiredate from myemp where(to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy'))>1017.显示员工的详细资料,按姓名排序.select*from myemp order by ename;18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.select ename,hiredate from myemp order by hiredate;19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.select ename,job,sal from myemp order by job desc,sal desc20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.selectename,to_char(hiredate,'yyyy'),to_char(hiredate,'mm ')from myemp order byto_char(hiredate,'mm'),to_char(hiredate,'yyyy')21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.select ename,trunc(sal/30,0)from myemp22.找出在(任何年份的)2月受聘的所有员工。

select ename,trunc(sal/30,0)from myemp23.对于每个员工,显示其加入公司的天数.select ename,(sysdate-hiredate)from myemp;24.显示姓名字段的任何位置包含"A"的所有员工的姓名.select ename from myemp where ename like'%A%'25.以年月日的方式显示所有员工的服务年限selectename,trunc((months_between(sysdate,hiredate))/12,0 )as年,trunc(((months_between(sysdate,hiredate)-(trunc((mo nths_between(sysdate,hiredate))/12,0)*12))))as月,round((months_between(sysdate,hiredate)-trunc(month s_between(sysdate,hiredate)))*to_char(last_day(hiredate),'dd'),0)as日from myemp现有2个表,一个t_appinfo即应用信息表,另一个t_download即用户下载记录表.t_download表中的字段:down_iddown_datelog_idt_appinfo表中的字段app_idprice_idapp_dateapp_name1.现要查询下载表里3月7日15点以后的下载记录前5条,按时间倒序排列.(下载记录表里有down_date这个字段,时间格式是2012-3-7 00:00:00).2.查询昨天被下载的所有应用的价格和上传时间.(应用表里有price_id和app_date 这2个字段)3.查询下载记录表里所有下载量大于10次的用户(下载表里有log_id表示用户)4.查询应用表里所有名字中含有'中'字的应用.(应用表里有app_name这个字段表示名字)5.查询应用表中app_id字段第五位和第八位的数字(app_id是一串数字)三、根据表和提供的数据进行操作。

1.删除重复记录(当表中无主键时)create table TESTTB(bm varchar(4),mc varchar2(20))insert into TESTTB values(1,'aaaa');insert into TESTTB values(1,'aaaa');insert into TESTTB values(2,'bbbb');insert into TESTTB values(2,'bbbb');是用来登记的,不管你是借还是还,都要添加一条记录。

请写一个SQL语句,获取到现在状态为已借出的所有图书的相关信息,ID为3的java书,由于已归还,所以不要查出来。

题目:要求查询结果应为:(被借出的书和被借出的日期)create table book(id int ,name varchar2(30),PRIMARY KEY (id))insert into book values(1,'English');insert into book values(2,'Math');insert into book values(3,'JAVA');create table bookEnrol(id int,bookId int,dependDate date,state int,FOREIGN KEY (bookId) REFERENCES book(id) ON DELETE CASCADE)insert into bookEnrol values(1,1,to_date('2009-01-02','yyyy-mm-dd'),1);insert into bookEnrol values(2,1,to_date('2009-01-12','yyyy-mm-dd'),2);insert into bookEnrol values(3,2,to_date('2009-01-14','yyyy-mm-dd'),1);insert into bookEnrol values(4,1,to_date('2009-01-17','yyyy-mm-dd'),1);insert into bookEnrol values(5,2,to_date('2009-02-14','yyyy-mm-dd'),2);insert into bookEnrol values(6,2,to_date('2009-02-15','yyyy-mm-dd'),1);insert into bookEnrol values(7,3,to_date('2009-02-18','yyyy-mm-dd'),1); insert into bookEnrol values(8,3,to_date('2009-02-19','yyyy-mm-dd'),2);。

相关主题