Oracle的sql语句练习题含答案

Oracle的sql语句练习题含答案
Oracle的sql语句练习题含答案

Oracle的sql语句练习题含答案(二)Oracle_SQL练习题1

1.选择部门30中的所有员工.

2.列出所有办事员(CLERK)的姓名,编号和部门编号.

3.找出佣金高于薪金的员工.

4.找出佣金高于薪金的60%的员工.

5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.

6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.

7.找出收取佣金的员工的不同工作.

8.找出不收取佣金或收取的佣金低于100的员工.

9.找出各月倒数第3天受雇的所有员工.

10.找出早于12年前受雇的员工.

11.以首字母大写的方式显示所有员工的姓名.

12.显示正好为5个字符的员工的姓名.

13.显示不带有"R"的员工的姓名.

14.显示所有员工姓名的前三个字符.

15.显示所有员工的姓名,用a替换所有"A"

16.显示满10年服务年限的员工的姓名和受雇日期.

17.显示员工的详细资料,按姓名排序.

18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.

19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.

20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.

21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.

22.找出在(任何年份的)2月受聘的所有员工。

23.对于每个员工,显示其加入公司的天数.

24.显示姓名字段的任何位置包含"A"的所有员工的姓名.

25.以年月日的方式显示所有员工的服务年限.

答案:

1.select ename,job,mgr,hiredate,sal,comm ,deptno from emp where deptno=30;

2.select ename,empno,deptno from emp where job='CLERK';

3.select * from emp where comm>sal;

4.select *

from emp

where comm>sal*0.6;

5.select empno ,ename, job,hiredate,sal,comm,deptno

from emp

where( job='MANAGER' and deptno=10)

or( job='CLERK' and deptno=20);

6.select empno,ename,job, hiredate,sal, deptno

from emp

where ( job='MANAGER' and deptno=10)

or( job='CLERK' and deptno=20)

or((job <>'MANAGER' and job<>'CLERK') and sal>=2000);

7.select distinct ename,job,comm

from emp

where NVL(comm,0)>0;

注意如果像上面这样写,就job ename comm 3个同时不同的都列出来

正确的是:

select distinct job

from emp

where NVL(comm,0)>0;

8.select ename,comm. from emp where NVL(comm,0)=0 or NVL(comm,0)<100; 如果按上面的写法就重复了,直接可以写成

select ename,comm

from emp

where NVL(comm,0)<100;

9 select ename, job,last_day(hiredate)-3

from emp;

select ename, job,hiredate

from emp

where hiredate=last_day(hiredate)-2;

10.select ename,job

from emp

where months_between(sysdate,hiredate)/12>12

11.select initcap(ename) name ,job, hiredate

from emp;

12. select ename,job,hiredate from emp where length(ename)=5;

13 select ename, job from emp where ename not like '%R%';

14.select substr(ename, 1,3) name,job,hiredate from emp;

15select replace(ename, 'A','a') name,job,hiredate from emp;

16select ename, job, hiredate from emp

where months_between(sysdate,hiredate)/12>=10;

17. select * from emp order by ename;

18.select ename, hiredate from emp order by hiredate desc;

19.select ename,job, sal from emp order by job desc, sal asc;

20.select ename, to_char(hiredate,'yyyy') year, to_char(hiredate,'mm') months

from emp

order by months, year asc;

21.select ename, sal/30 dailysal

from emp;

22. select ename, hiredatefrom empwhere to_char(hiredate,'mm')='02';

23. select ename,sysdate-hiredate 天数from emp;

24.select ename from emp where instr(ename,'A',1)>0;

25. select ename, to_char(hiredate,'yyyy/mm/dd') from emp;

--26.列出至少有一个员工的所有部门.

select dname from emp,dept where emp.deptno=dept.deptno group by dname;

select distinct dname from emp,dept where emp.deptno=dept.deptno;

--说明:(1)select中出现的字段一定要出现在group by中;

-- (2)如果select中出现的字段不出现在group by中,则一定要出现在select的聚合函数中,对于想出现的字段,可用max()或min()。

-- (3)默认的情况是按group by中的字段来排序,如果要用order by来自己排序,则order by后的字段一定是group by后的字段,不能是聚合函数的字段

--27.列出薪金比“SMITH”多的所有员工.

select ename, sal from emp where sal > (select sal from emp where upper(ename)='SMITH');

--28.列出所有员工的姓名及其直接上级的姓名.

select a.ename, b.ename mgrname from emp a,emp b where a.mgr = b.empno;

--29.列出受雇日期早于其直接上级的所有员工

select e.ename, m.ename from emp e, emp m where e.mgr=m.empno and (e.hiredate < m.hiredate ); 30.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门

select dname, emp.* from dept, emp where emp.deptno(+) = dept.deptno order by dname;

--说明:外连接(使一个都不能少,(+)对面的表里的字段都不能少)

--31.列出所有“CLERK”(办事员)的姓名及其部门名称

select distinct emp.ename, dept.deptno from emp, dept where emp.deptno = dept.deptno and upp er(emp.job)='CLERK';

--32.列出最低薪金大于1500的各种工作

select job from emp group by job having min(sal) > 1500;

--33.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号

select ename from emp, dept where emp.deptno = dept.deptno and dname = 'SALES';

--34.列出薪金高于公司平均薪金的所有员工

select ename, sal from emp where sal > (select avg(sal) from emp);

--35.列出与“SCOTT”从事相同工作的所有员工

--SCOTT从事一种工作

select ename from emp where job = (select job from emp where upper(ename) = 'SCOTT');

--SCOTT从事多种工作

select ename, job from emp where job in (select job from emp where upper(ename) = 'SCOTT');

--36.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金

select ename, sal from emp where sal in(select sal from emp where deptno = 30);

--37.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金

select ename, sal from emp where sal > (select max(sal) from emp where deptno = 30);

--38.列出在每个部门工作的员工数量、平均工资和平均服务期限

select deptno "部门号", count(ename) "员工数量", avg(sal + nvl(comm, 0)) "平均工资", trunc(avg(sysdate-hiredate)) "平均服务期限(天)"

from emp group by deptno;

--39.列出所有员工的姓名、部门名称和工资

select ename, dname, sal+nvl(comm,0) from emp, dept where emp.deptno = dept.deptno;

--40.列出从事同一种工作但属于不同部门的员工的一种组合

select distinct e.deptno, e.job from emp e, emp m where e.deptno != m.deptno and e.job = m.job o rder by e.job;

--41.列出所有部门的详细信息和部门人数

select dept.*, (select count(ename) from emp where emp.deptno(+)=dept.deptno) 人数 from dept;

--42.列出各种工作的最低工资

select job, min(sal + nvl(comm, 0)) "最低工资" from emp group by job;

--43.列出各个部门的MANAGER(经理)的最低薪金

select min(sal + nvl(comm,0)) from emp where upper(job) = 'MANAGER' group by deptno;

--显示部门名称

select dname, min(sal + nvl(comm,0)) from emp, dept where emp.deptno = dept.deptno and upper (job) = 'MANAGER' group by dname;

--44.列出所有员工的年工资,按年薪从低到高排序

select ename, to_char((sal+nvl(comm,0))*12, '9999,9999.00') "年工资" from emp order by 2;

--45.显示各部门员工薪金最高的前2名

select * from (select ename, deptno, sal, row_number() over(partition by deptno order by sal desc ) r from emp ) where r <=2

--46.显示薪金最高的3位员工

select * from (select ename, sal,dense_rank() over(order by sal desc) r from emp) where r <=3;

--47.创建表myemp和emp表具有相同的结构和记录。

create table myemp as select * from emp;

--48.给my emp的empno列添加主建约束。

alter table myemp add constraint pk primary key(empno);

--49.给my emp添加一条记录。

insert into myemp values(1,'a','ab',999999,to_date('2008-9-9','yyyy-mm-dd'),5000,1000,30);

--50.给my emp添加一条记录只有empno,ename,mgr,sal,deptno有值,其他列为空。

insert into myemp(empno,ename,mgr,sal,deptno) values(20,'aa',30,999999,20);

--51.显示所有薪金高于各自部门平均薪金的人。(关联子查询)

select e.ename, e.deptno, e.sal from emp e where e.sal>(select avg(sal) from emp p where e.deptn o=p.deptno);

--52.给所有10部门的经理(MANAGER)和20部门的职员(CLERK),增加薪金10%。

update emp set sal=sal*(1+0.1) where (deptno=10 and upper(job)='MANAGER') or(deptno=20 and upper(job)='CLERK');

--53.删除DEPT中没有员工的部门。

delete from dept where deptno not in(select distinct deptno from emp);

--54.删除雇佣年限低于20年的员工。

delete from emp where trunc(sysdate-hiredate) < 365*20;

1. 查询所有雇员姓名以及其全年收入(工资+奖金),并指定列别名为“年收入”。

select ename,12*(sal+nvl(comm,0)) as年收入from emp;

2. 查询有雇员的所有部门的部门号和部门名称。

select empno,ename,dept.dname,dept.deptno from emp,dept where emp.deptno=dept.deptno;

3. 查询工资超过2850的雇员姓名和工资。

select ename, sal from emp where sal>2850;

4. 查询工资不在1500到2850之间的所有雇员姓名和工资。

select ename, sal from emp where sal not between 1500 and 2850;

5. 查询10号部门和30号部门工资超过1500的雇员姓名和工资。

select ename, sal from emp where sal < 1500 and deptno in (10,30);

6. 查询没有上司的员工姓名及其职位。

select ename, job from emp where mgr is null;

7. 查询在1981年2月1日~1981年5月1日之间入职的雇员姓名、职位及入职时间,并以入职时间的先后进行排序。

select ename,job,hiredate from emp where hiredate between '01-1月-81' and '01-5月-81' order by hiredate;

8. 查询有奖金的员工的姓名、工资和奖金,并按工资和奖金降序排序。

select ename,sal,comm from emp where comm is not null order by sal desc,comm desc; 9. 查询每种职位的雇员总数和平均工资。

select job,count(*),avg(sal) from emp group by job;

10. 查询所有雇员总数和获得奖金的员工数。

select count(empno),count(comm) from emp ;

11. 查询经理的总人数。

select count(*) from emp where job='MANAGER';

12. 查询20号部门的部门名称,以及该部门所有雇员姓名、工资和职位。

select dname,ename,sal,job from emp,dept where dept.deptno=emp.deptno and emp.deptno=20;

13. 查询有奖金的所有员工的姓名、奖金以及所在部门名称。

select ename,comm,dname from emp,dept where dept.deptno=emp.deptno and comm is not null;

14. 查询在“New York”工作的所有员工的姓名、工资及其所在部门名称。

select ename,sal,dname from emp,dept where dept.deptno=emp.deptno and loc= 'NEW YORK';

15. 查询雇员SCOTT的上级。

select empno,ename from emp where empno=(select mgr from emp where ename='SCOTT');

16. 查询20号部门的员工姓名、工资及其级别。

select ename,sal,grade from emp,salgrade where deptno=20 and sal between losal and hisal;

17. 查询与BLAKE同一部门的其他员工。

select empno,ename from emp where deptno=(select deptno from emp where ename='BLAKE') and

ename!= 'BLAKE';

18. 查询工资超过平均工资的所有员工的姓名、工资和职位。

select ename,sal,job from emp where sal> (select avg(sal) from emp);

19. 查询工资、奖金与SCOTT完全相同的所有员工的姓名、工资和奖金。

select ename,sal, comm from emp where (sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where

ename='SCOTT') ;

20. 查询81年入职的员工

select * from emp where to_char(hiredate, 'yy')= '81';

21. 按年月日查询员工信息

select to_char(hiredate, 'yyyy-mm-dd' )from emp;

22. 向DEPT表中插入一条数据,要求:部门号为50,部门名称为ADMINISTRATOR,部门位置为BOSTON。

Insert into dept values(50, 'ADMINISTRATOR','BOSTON');

23. 向EMP表中插入一条数据,要求:员工号为2000,姓名为JOHN,工资为1000,入职时间为2003年4月7日,部门号为30号。

Insert into emp (empno,ename,sal,hiredate,deptno) values(2000, 'JOHN',1000, '07-4月-03',30);

24. 给10号部门的每个雇员增加10%的工资。然后提交事务。

Update emp set sal=sal*1.1 where deptno=10;

commit

25. 删除50号部门。然后回滚事务。

Delete from dept where deptno=50;

Rollback;

新建一张学员信息表(student),要求:

1. 字段如下:学号(sid),姓名(name),性别(sex),年龄(age),地址(address).

2. 分别为字段添加约束:学号为主键,姓名为非空,性别为检查约束,年龄为检查约束,地址为默认约束.

3. 为表建立自增值(sid), 建议初始值从为1001, 增量为 1.

4. 插入记录.

新建一张课程表(course),要求:

1. 字段如下:课程编号(cid),课程名称(subject).

2. 分别为字段添加约束:课程编号为主键,课程名称为非空.

3. 为表建立自增值(cid), 建议初始值从为1, 增量为 1.

4. 插入记录.

新建一张学员考试成绩表(grade),要求:

1. 字段如下:成绩编号(gid),学号(sid),课程编号(cid),考试成绩(score).

2. 分别为字段添加约束:成绩编号为主键,学号为外键,课程编号为外键,考试成绩为非空.

3. 为表建立自增值(gid), 建议初始值从为101, 增量为 1.

4. 插入记录.

回顾分组查询:

1. group by

用途:对结果集进行分组,常与汇总函数一起使用.

2. having

用途:指定群组或汇总的搜寻条件。

注:having 通常与group by 子句同时使用。不使用group 时,having 则与where 子句功能相似。针对以上三张表,要求完成如下:

1. 按照课程编号分组并求出每一组的平均分数(每门课程的平均分)

2. 按照课程编号分组并求出每一组及格人数(grade >= 60)的平均分数(每门课程的及格人数的平均分)

3. 求每个学员所有的课程的平均分

4. 求每个学员所有的(考试成绩)及格课程的平均分

5. 每次内部测试不同学员的平均成绩(每个学员的每门课程的平均分)

6. 查询补考过的学员的平均成绩(求出学员的课程编号(cid)在分组内出现过一次以上)(每个学员的每门课程的课程编号出现过一次以上)

7. 使用多表内连接查询,求出学员的学号,姓名,考号,科目和成绩

8. 建立一张视图,要求字段为中文,包含学员的学号,姓名,考号,科目,成绩这些字段

9. 创建触发器,实现学生表与课程表更新时成绩表作同步更新。

数据库练习题答案

第四章练习题 一、选择题 1、设有两个关系R(A,B)和S(B,C),与下列SELECT语句 SELECT A,B FROM R WHERE B NOT IN(SELECT B FROM S WHERE C='C56'); 等价的关系代数表达式是 [ C] A.πA,B(σC≠'C56'(R?S))B.πA,B(R ? S) C≠'C56' C.R-πA,B(σC= 'C56'(R?S))D.R-πA,B(σC≠'C56'(R?S)) 2、嵌入式SQL的预处理方式,是指[ B] A.识别出SQL语句,加上前缀标识和结束标志 B.把嵌入的SQL语句处理成函数调用形式 C.对源程序进行格式化处理 D.把嵌入的SQL语句编译成目标程序 3、SQL中,“DELETE FROM 表名”表示 [ A] A.从基本表中删除所有元组B.从基本表中删除所有属性 C.从数据库中撤消这个基本表D.从基本表中删除重复元组 4、SQL中,聚合函数COUNT(列名)用于[ C] A.计算元组个数B.计算属性的个数 C.对一列中的非空值计算个数D.对一列中的非空值和空值计算个数 5、在传统SQL技术中,使用“ORDER BY”子句的SELECT语句查询的结果,实际上为 [ B] A.数组 B.列表 C.包 D.集合 6、在数据库中,能提高查询速度的是(C ) A. 数据依赖 B. 视图 C. 索引 D. 数据压缩 7、语句 delete from sc 表明( A ) A. 删除sc中的全部记录 B. 删除基本表sc C. 删除基本表sc中的列数据 D. 删除基本表sc中的部分行 8、在DB应用中,一般一条SQL 语句可产生或处理一组记录,而DB主语言语句一般一次只能处理一条记录,其协调可通过( B )实现。 A. 指针 B. 游标 C. 数组 D. 栈 9、在下列基本表的定义中,数值5表示( C ) CREATE TABLE student (Sno char(5) not null unique,Sname char(2)); A. 表中有5条记录 B. 表中有5列 C. 表中字符串Sno 的长度 D. 表格的大小 10、在视图上不能完成的操作是( C )

第三章 SQL语言练习题和答案

第三章SQL语言 一、选择题 1. SQL语言是(B )的语言,容易学习。 A.过程化 B. 非过程化 C.格式化 D. 导航式 2. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是(A)。 A. SELECT B. INSERT C. UPDATE D. DELETE 3. 在视图上不能完成的操作是()。 A. 更新视图 B. 查询 C. 在视图上定义新的表 D. 在视图上定义新的视图 4. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能()。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 5. SQL语言中,删除一个视图的命令是()。 A.DELETE B.DROP C.CLEAR D.REMOVE 6. 在SQL语言中的视图VIEW是数据库的()。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,()不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW D. GRANT 8. 若要撤销数据库中已经存在的表S,可用()。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S 9. 若要在基本表S中增加一列CN(课程名),可用()。 A.ADD TABLE S(CN CHAR(8)) B.ADD TABLE S ALTER(CN CHAR(8)) C.ALTER TABLE S ADD(CN CHAR(8)) D.ALTER TABLE S (ADD CN CHAR(8)) 10. 学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()。 A. DELETE Age from S B. ALTER TABLE S DROP Age C. UPDATE S Age D. ALTER TABLE S ‘Age’ 11. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄,C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是()。

学生选课数据库SQL语句练习题(详细分解答案)

学生选课数据库SQL语句练习题(详细分解答案)

一、设有一数据库,包括四个表:学生表(Student)、课程表 (Course)、成绩表(Score)以及教师信息表(Teacher)。 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 表1-1数据库的表结构 表(一)Student 含义 属性名数据类型可否为 空 Sno Char(3) 否学号(主键) Sname Char(8) 否学生姓名 Ssex Char(2) 否学生性别 Sbirthday datetime 可学生出生年 月 Class Char(5) 可学生所在班 级 表(二)Course 含义 属性名数据类型可否为 空 Cno Char(5) 否课程号(主 键) Cname Varchar(10) 否课程名称 Tno Char(3) 否教师编号(外 键) 表(三)Score 含义 属性名数据类型可否为 空 Sno Char(3) 否学号(外键) Cno Char(5) 否课程号(外 键) Degree Decimal(4,1) 可成绩

主码:Sno+ Cno 表(四)Teacher 含义 属性名数据类型可否为 空 Tno Char(3) 否教师编号(主 键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年 月 Prof Char(6) 可职称Depart Varchar(10) 否教师所在部 门 表1-2数据库中的数据 表(一)Student Sno Sname Ssex Sbirthday class 108 曾华男1977-09-01 95033 105 匡明男1975-10-02 95031 107 王丽女1976-01-23 95033 101 李军男1976-02-20 95033 109 王芳女1975-02-10 95031 103 陆君男1974-06-03 95031 表(二)Course Cno Cname Tno 3-105 计算机导论825 3-245 操作系统804 6-166 数字电路856

sql语句练习题及答案

一在数据库 school 中建立student , sc, course 表。 学生表、课程表、选课表属于数据库School ,其各自的数据结构如下:学生Student (Sno,Sname,Ssex,Sage,Sdept) 课程表course(Cno,Cname,Cpno,Ccredit) 学生选课SC(Sno,Cno,Grade) 二设定主码 1 Student表的主码:sno 2 Course表的主码:cno 3 Sc表的主码:sno,cno 1写出使用 Create Table 语句创建表 student , sc, course 的SQL语句2 3 删除student表中的元组 4在数据库school中删除关系student 5在student表添加属性sbirthdate 类型datetime

Delete 1 删除所有JSJ 系的男生delete from Student where Sdept=’JSJ’ and Ssex=’男’; 2 删除“数据库原理”的课的选课纪录 delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’); Update 1 修改0001 学生的系科为: JSJ 2 把陈小明的年龄加1岁,性别改为女。 2 修改李文庆的1001课程的成绩为9 3 分 3 把“数据库原理”课的成绩减去1分 Select 查询语句 一单表 1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。 2查询姓名中第2个字为“明”字的学生学号、性别。 3查询 1001课程没有成绩的学生学号、课程号 4查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列 5按10分制查询学生的sno,cno,10分制成绩 (1-10分为1 ,11-20分为2 ,30-39分为3,。。。90-100为10) 6查询 student 表中的学生共分布在那几个系中。(distinct) 7查询0001号学生1001,1002课程的成绩。 二统计 1查询姓名中有“明”字的学生人数。 2计算‘JSJ’系的平均年龄及最大年龄。 3查询学生中姓名为张明、赵英的人数 4计算每一门课的总分、平均分,最高分、最低分,按平均分由高到低排列 5 计算 1001,1002 课程的平均分。 6 查询平均分大于80分的学生学号及平均分 7 统计选修课程超过 2 门的学生学号 8 统计有10位成绩大于85分以上的课程号。 9 统计平均分不及格的学生学号 10 统计有大于两门课不及格的学生学号 三连接 1查询 JSJ 系的学生选修的课程号 2查询选修1002 课程的学生的学生姓名 (不用嵌套及嵌套2种方法) 3查询数据库原理不及格的学生学号及成绩 4查询选修“数据库原理”课且成绩 80 以上的学生姓名(不用嵌套及嵌套2种方法) 5查询平均分不及格的学生的学号,姓名,平均分。 6查询女学生平均分高于75分的学生姓名。 7查询男学生学号、姓名、课程号、成绩。(一门课程也没有选修的男学生也要列出,不能

数据库SQL语句练习题含答案

SQL语句练习 练习5. 1. 2: 基于不断滚动的电影数据库的实例: Movie( 电影名title,拍摄年代year ,长度length, inColor ,制片厂名studioName, 制片人证书号producerC# ) StarsIn(电影名movieTitle,拍摄年份movieYear ,影星名starName) MovieStar (姓名name,地址address,性别gender ,生日birthdate) MovieExec( 姓名name,地址address ,证书号cert # ,净资产netWorth ) Studio(姓名name, 地址address,总裁证书号presC# ) 请写出下列SQL 查询语句: * ( a) 找出米高梅制片公司(MGM studios)的地址。 SELECT address AS Studio_Address FROM Studio WHERE name = 'MGM'; ( b) 找出桑德拉·布洛克( Sandra Bullock ) 的出生日期( birthdate) 。SELECT birthdate AS Star_Birthdate FROM MovieStar WHERE name = 'Sandra Bullock'; * ( c) 找出在1980 年拍摄过电影的所有影星, 或者拍摄过电影名中含有“Love”的电影的所有影星。 SELECT starName FROM StarsIn WHERE movieYear = 1980 OR movieTitle LIKE '%Love%'; ( d) 找出净资产至少1 000 万美元的所有行政长官。

数据库期末考试复习题(附答案)

数据库期末考试复习题(附答案) 数据库系统概论 2011年期末考试复习题 一、选择题 ? 第(1)至(3)题基于以下的叙述:有关系模式A(C,T,H,R,S),基中各属性的含义是: ? C:课程T:教员H:上课时间R:教室S:学生 ? 根据语义有如下函数依赖集:? F={C→T,(H,R)→C,(H,T)→R,(H,S)→R} ? 1、关系模式A的码是(D) ? A. C B. (H,R)C.(H,T)D.H,S) ? 2、关系模式A的规范化程度最高达到(B) ? A. 1NF B. 2NF C. 3NFD. BCNF ? 3、现将关系模式A分解为两个关系模式A1(C,T),A2(H,R,S),则其中A1的规范化程度达到(D) ? A. 1NF B. 2NF C. 3NF D. BCNF ? 4.设有关系R(A,B,C)和S(C,D)。与SQL语句? select A,B,D from R,S where R.C=S.C ? 等价的关系代数表达式是(B) ? A. σR.C=S.C(πA,B,D(R×S)) ? B. πA,B,D(σR,C= S.C (R×S)) ? C. σR.C=S.C((πA,B R)×(πDS)) ? D. σR,C=S.C(πD((πA,BR)×S) ? 5、设关系R和关系S的元数分别是3和4,关系T是R与S的广义笛卡尔积,即:T=R×S,则关系T的元数是(C) ? A. 7 B. 9 C. 12 D. 16 ? 6、数据库设计阶段分为(B) ? A. 物理设计阶段、逻辑设计阶段、编程和调试阶段 ? B. 概念设计阶段、逻辑设计阶段、物理设计阶段、实施和调试阶段 ? C. 方案设计阶段、总体设计阶段、个别设计和编程阶段 ? D. 模型设计阶段、程序设计阶段和运行阶段 ? 7、设U是所有属性的集合,X、Y、Z都是U的子集,且Z=U-X-Y。下面关于多值依赖的叙述中,不正确的是(C) ? A. 若X→→Y,则X→→Z B. 若X→Y,则X→→Y ? C. 若X→→Y,且Y′?Y,则X→→Y′ D. 若Z=Φ,则X→→Y ? 8、查询优化策略中,正确的策略是(D) A.尽可能早地执行笛卡尔积操作B.尽可能早地执行并操作 C.尽可能早地执行差操作D.尽可能早地执行选择操作 ? 9、语句delete from sc 表明(A) A. 删除sc中的全部记录 B. 删除基本表sc? C. 删除基本表sc中的列数据 D. 删除基本表sc中的部分行 ? 10、在DB应用中,一般一条SQL 语句可产生或处理一组记录,而DB主语言语句一般一次只能处理一条记录,其协调可通过哪种技术实现(B) ? A. 指针 B. 游标 C. 数组 D. 栈 11、五种基本关系代数运算是( A ) ? A. ∪,-,×,π和σ B. ∪,-,?,π和σ

Oracle的sql语句练习题含复习资料

Oracle的sql语句练习题含答案(二)Oracle_SQL练习题1 1.选择部门30中的所有员工. 2.列出所有办事员(CLERK)的姓名,编号和部门编号. 3.找出佣金高于薪金的员工. 4.找出佣金高于薪金的60%的员工. 5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料. 6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料. 7.找出收取佣金的员工的不同工作. 8.找出不收取佣金或收取的佣金低于100的员工. 9.找出各月倒数第3天受雇的所有员工. 10.找出早于12年前受雇的员工. 11.以首字母大写的方式显示所有员工的姓名. 12.显示正好为5个字符的员工的姓名. 13.显示不带有"R"的员工的姓名. 14.显示所有员工姓名的前三个字符. 15.显示所有员工的姓名,用a替换所有"A" 16.显示满10年服务年限的员工的姓名和受雇日期. 17.显示员工的详细资料,按姓名排序. 18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面. 19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序. 20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面. 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数. 22.找出在(任何年份的)2月受聘的所有员工。 23.对于每个员工,显示其加入公司的天数. 24.显示姓名字段的任何位置包含"A"的所有员工的姓名. 25.以年月日的方式显示所有员工的服务年限. 答案: 1.select ename,job,mgr,hiredate,sal,comm ,deptno from emp where deptno=30; 2.select ename,empno,deptno from emp where job='CLERK'; 3.select * from emp where comm>sal; 4.select * from emp where comm>sal*0.6; 5.select empno ,ename, job,hiredate,sal,comm,deptno from emp where( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20); 6.select empno,ename,job, hiredate,sal, deptno from emp where ( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20) or((job <>'MANAGER' and job<>'CLERK') and sal>=2000);

SQL语句练习及答案

sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet, tno) 课程表 sc(sno,cno,score) 成绩表 teacher(tno,tname) 教师表 要求:完成以下操作 1.查询姓"欧阳"且全名为三个汉字的学生的姓名。 select sname from student where sname like “欧阳__?; 2.查询名字中第2个字为"阳"字的学生的姓名和学号。 select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。 select sname,sno,ssex from student where sname not like “刘%”; 4.查询db_design课程的课程号和学分。 select cno,ccredit from course where cname like 'db_design' 5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。 select * from course where cname like 'db%i_ _'; 6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查 询缺少成绩的学生的学号和相应的课程号。

select sno,cno from sc where grade is null; 7.查所有有成绩的学生学号和课程号。 select sno,cno from sc where grade is not null; 8.查询计算机系年龄在20岁以下的学生姓名。 select sname from student where sdept= 'cs' and sage<20; 9.查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 select sno, grade from sc where cno= ' 3 ' order by grade desc;10.查询学生总人数。 select count(*) from student; 11.查询选修了课程的学生人数。 select count(distinct sno) from sc; 12.计算1号课程的学生平均成绩。 select avg(grade) from sc where cno= ' 1 '; 13.查询选修1号课程的学生最高分数。 select max(grade) from sc where cno= ' 1 '; 14.查询学生200215012选修课程的总学分数。 select sum(grade) from sc,course where sno= ' 200215012 ' and https://www.360docs.net/doc/8111053131.html,o=https://www.360docs.net/doc/8111053131.html,o;

3-SQL语句练习题参考答案

标准SQL语言 一、选择题 1、下面关于SQL标准的叙述中,不正确的是(B )。 A.SQL语言是集数据定义、数据操纵、数据控制功能为一体的语言。 B.SQL语言是一种高度过程化的语言。 C.SQL标准规定数据库是按三级模式结构构建。 D.SQL语言是关系型数据库的标准语言。 E.SQL语言是面向集合的语言。 2、SQL语言中,修改基本表结构的语句是( B )。 A.UPDATE B.ALTER C.DROP D.CREATE 3、SQL语言中,删除基本表结构的语句是( C )。 A.DELETE B.ALTER C.DROP D.CREATE 4、下面关于“视图”的叙述中,不正确的是( C )。 A.视图是一种“虚表”,它的数据被存放在基本表中。 B.视图提供了逻辑数据独立性。 C.不能通过视图来更新数据库中的数据。 D.视图能提供对数据的安全保护。 5、下面关于SELECT语句的叙述中,不正确的是(C)。 A.SELECT产生的结果是一个集合。 B.HA VING子句必须与GROUP BY子句一起使用。 C.可以省略FROM子句。 D.可以省略WHERE子句。 二、填空题 1、在使用INSERT语句向一个表中插入元组时,“值列表”中值的个数、(顺序)、类型必须与“列名表”保持一致。 2、在向一个表中插入元组时,对于未指定默认值且(不能取空值)的字段必须赋值。 3、向表中插入元组时,主键的值不能取(NULL )值。 4、在使用DELETE语句时,如果不指定(where 条件)就会将整个表的数据删除。 5、视图是从一个或几个基本表或(视图)导出的表,它与基本表不同,是一个虚表。 三、判断题 1、SQL语言是面向集合操作的语言。√ 2、可以通过视图来查询数据,但不能通过视图来更新数据库中的数据。× 3、在SQL Server数据库系统中,向表中插入元组时,系统自动为具有标识属性的列赋值。√ 4、在SQL Server数据库系统中,向表中插入元组时,对取值类型为timestamp(时间戳)的列不能赋值,系统自动赋值。√

SQL语句练习题(包含有多表查询)-答案

SQL语句练习题 1、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。 select ename,sal from emp where job='CLERK' or job='MANAGER'; 2、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。 select ename,deptno,sal,job from emp where deptno between 10 and 30; 3、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。 select ename,sal,job from emp where ename like 'J%'; 4、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。select ename,job,sal from emp where sal<=2000 order by sal desc; 5、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。 select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=’CLERK’; 6、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。 select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000; 7、查询所有雇员的姓名、SAL与COMM之和。 select ename,sal+nvl(comm,0) “sal-and-comm” from emp; 8、查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字 select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and hiredate<=to_date(‘1981-07-01’,’yyyy-mm-dd’); 9、查询列出来公司就职时间超过24年的员工名单 select ename from emp where hiredate<=add_months(sysdate,-288); 10、查询于81年来公司所有员工的总收入(SAL和COMM) select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,’yyyy’)=’1981’; 11、查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp; 12、查询列出各部门的部门名和部门经理名字 select dname,ename from emp,dept where emp.deptno=dept.deptno and job=’MANAGER’;

学生选课数据库SQL语句练习题(详细分解答案)

一、设有一数据库,包括四个表:学生表(Student)、课程表 (Course)、成绩表(Score)以及教师信息表(Teacher)。 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 表1-1数据库的表结构 表(一)Student 含义 属性名数据类型可否为 空 Sno Char(3)否学号(主 键) Sname Char(8)否学生姓名 Ssex Char(2)否学生性别 Sbirthday datetime可学生出生年 月 Class Char(5)可学生所在班 级 表(二)Course 含义 属性名数据类型可否为 空 Cno Char(5)否课程号(主 键) Cname Varchar(10)否课程名称 Tno Char(3)否教师编号 (外键) 表(三)Score 含义 属性名数据类型可否为 空 Sno Char(3)否学号(外 键) Cno Char(5)否课程号(外 键)

Degree Decimal(4,1)可成绩 主码:Sno+ Cno 表(四)Teacher 含义 属性名数据类型可否为 空 Tno Char(3)否教师编号 (主键)Tname Char(4)否教师姓名Tsex Char(2)否教师性别Tbirthday datetime可教师出生年 月 Prof Char(6)可职称Depart Varchar(10)否教师所在部 门 表1-2数据库中的数据 表(一)Student Sno Sname Ssex Sbirthday class 95033 108曾华男1977-09- 01 105匡明男1975-10- 95031 02 95033 107王丽女1976-01- 23 95033 101李军男1976-02- 20 109王芳女1975-02- 95031 10 95031 103陆君男1974-06- 03 表(二)Course

SQL语句练习及标准答案

SQL语句练习及答案

————————————————————————————————作者:————————————————————————————————日期:

sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet, tno) 课程表 sc(sno,cno,score) 成绩表 teacher(tno,tname) 教师表 要求:完成以下操作 1.查询姓"欧阳"且全名为三个汉字的学生的姓名。 select sname from student where sname like “欧阳__?; 2.查询名字中第2个字为"阳"字的学生的姓名和学号。 select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。 select sname,sno,ssex from student where sname not like “刘%”; 4.查询db_design课程的课程号和学分。 select cno,ccredit from course where cname like 'db_design' 5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。 select * from course where cname like 'db%i_ _'; 6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查 询缺少成绩的学生的学号和相应的课程号。

SQL语句练习及答案

现在有一教学管理系统,具体的关系模式如下:Student (no, name, sex, birthday, class) Teacher (no, name, sex, birthday, prof, depart) Course (cno, cname, tno) Score (no, cno, degree) 其中表中包含如下数据: Course表: Score表: Student表:

Teacher表: 根据上面描述完成下面问题: (注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)DDL 1.写出上述表的建表语句。 命令:create table Student (no nvarchar(5), name nvarchar(5), sex nvarchar(1), birthday datetime, class nvarchar(5)

) DML 2.给出相应的INSERT语句来完成题中给出数据的插入。 命令: 单表查询 3.以class降序输出student的所有记录(student表全部属性) 命令:select*from Student order by class desc 4.列出教师所在的单位depart(不重复)。 命令:select distinct depart from teacher 5.列出student表中所有记录的name、sex和class列 命令:select name,sex,class from student

6.输出student中不姓王的同学的姓名。 命令:select name from Student where name not like'王%' 7.输出成绩为85或86或88或在60-80之间的记录(no,cno,degree) 命令:select*from Score where degree=85 or degree=86 or degree=88 or degree between 60 and 80

SQL语句强化练习题及答案1

一、简单查询 1、列出全部学生的信息。 SELECT * FROM 学生 2、列出软件专业全部学生的学号及姓名。 SELECT 学号,姓名 FROM 学生 WHERE 专业="软件" 3、列出所有必修课的课号。 SELECT DISTINCT 课号 FROM 必修课 4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。 SELECT 学号,成绩 FROM 选课 WHERE 课号="1" AND 成绩>80 ORDER BY 成绩DESC 5、列出非软件专业学生的名单。 方法一:SELECT 姓名 FROM 学生 WHERE 专业<>"软件" 方法二:SELECT 姓名 FROM 学生 WHERE NOT 专业="软件" 方法三:SELECT 姓名 FROM 学生 WHERE 专业!="软件" 6、查询成绩在70~80分之间的学生选课得分情况 方法一:SELECT * FROM 选课 WHERE 成绩>=70 AND 成绩<=80 方法二:SELECT * FROM 选课 WHERE 成绩 BETWEEN 70 AND 80 不在此范围内的查询:(注意写出和以下语句等价的语句) SELECT * FROM 选课 WHERE 成绩 NOT BETWEEN 70 AND 80 7、列出选修1号课或3号课的全体学生的学号和成绩。 方法一:SELECT 学号,成绩 FROM 选课 WHERE 课号="1" OR 课号="3" 方法二:SELECT 学号,成绩 FROM 选课 WHERE 课号 IN ("1","3") 相反条件查询:SELECT 学号,成绩 FROM 选课 WHERE 课号 NOT IN ("1","3") 8、列出所有98级学生的学生成绩情况。

SQL语句练习题答案

SQL练习题及答案: 请用SQL语句实现以下功能。(1至6题每题10分,7至8题每题20分) 1. 如何用SQL语句求带辅助核算206科目12月的余额在贷方的合计值?cendd_c为余额方向字段,字符型,me为余额。 SELECT sum(me) FROM gl_accass WHERE ccode="206" and cendd_c="贷" and iperiod=12 2.如何查找GL_accass中的科目在科目表中不是末级的?(如下3种写法均正确) SELECT https://www.360docs.net/doc/8111053131.html,ODE ,B.BEND FORM GL_ACCASS AS A JOIN CODE AS B ON https://www.360docs.net/doc/8111053131.html,ODE=https://www.360docs.net/doc/8111053131.html,ODE WHERE B.BEND =0 select distinct ccode from gl_accass where ccode in(select ccode from code where bend=0) select distinct ccode from gl_accass where ccode not in(select ccode from code where bend=1)

3. 如何将AA库中的department表用语句把数据导入BB库中? INSERT INTO BB..DEPARTMENT SELECT * FROM AA..DEPARTMENT 4.如何查辅助总帐中的部门编号(cDEPT_ID)在部门目录(department 表cdepcode)中不存在的记录?SELECT cDEPT_ID FROM GL_ACCASS WHREE cDEPT_ID NOT IN (SELECT cdepcode FROM DEPARTMENT) 5. 如何在部门目录表中查找部门名称(CDEPNAME)重复的记录数? SELECT CDEPNAME, COUNT(CDEPNAME) FROM DEPARTMENT GROUP BY CDEPNAME HA VING COUNT(CDEPNAME)>1; 6. 已知有表R(sno, sname, age),其中sno表示学生的学号,类型为Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是 SELECT sname FROM R WHERE sno LIKE ′2003%′ 7. 判断题:

SQL语言章节练习答案

SQL 语言章节练习答案 一、设有如下关系模式: student(SNO, SNAME , SEX ,BIRTHDAY, CLASS) teacher(TNO,TNAME,SEX,BIRTHDAY,PRO F,DEPART) PROF 为职称,DEPART 为系别 course(CNO, CNAME, TNO) score(SNO, CNO, DEGREE) DEGREE 为成绩 写出实现以下各题功能的SQL 语句: 1.查询至少有2名男生的班号;——(难) SELECT CLASS FROM student WHERE SEX='男' GROUP BY CLASS HAVING COUNT(*)>=2; Having 语句用来对结果集进行附加筛选,通常与group by 语句一起使用。 ************************************************************* 2.查询不姓“王”的同学记录;——(易) SELECT * FROM student WHERE NAME NOT LIKE '王%' 3.查询每个学生的姓名和年龄;——(难) SELECT NAME,2007-year(BIRTHDAY) FROM student 4.查询学生中最大和最小的birthday 日期值;——(中) SELECT MAX(BIRTHDAY), MIN(BIRTHDAY) FROM student 5.查询学生表的全部记录并按班号和年龄从大到小的顺序;——(中) SELECT * FROM student ORDER BY CLASS,BIRTHDAY DESC 6.查询男教师及其所上的课程;——(中) SELECT https://www.360docs.net/doc/8111053131.html,, https://www.360docs.net/doc/8111053131.html,ame FROM teacher , course WHERE teacher.no=course.tno and teacher.sex='男' 7.查询最高分同学的学号,课程号和成绩; ——(中) SELECT * FROM score WHERE degree= ( SELECT max(degree) FROM score ) 满足嵌套子查询的条件(最后投影的属性列可以在一个表格中给出) **************************************88 8.查询和“李军”同性别并同班的所有同学的姓名;——(中) SELECT NAME FROM student WHERE sex= ( SELECT sex FROM student WHERE name='李军' ) and class= ( SELECT class FROM student WHERE name='李军' ) 要习惯用多重条件的复合运算来做题 9.查询选修“数据库系统概论”课程的男同学的成绩表;——(中) SELECT * FROM score WHERE no IN ( SELECT no

sql sever进阶测试题(含答案

SQL进阶测试 1) 为表userinfo添加约束,语法如下: alter table userinfo add constraint uq_userid unique ( userid ) 执行成功后,为userinfo表的()字段添加了()约束。 a) Userid ;主键 b) Userid ;唯一 c) Uq_userid ;外键 d) Uq_userid ;检查 2) 运行如下T-SQL,结果返回包含()的记录集。 create table scores ( scoreid int identity(1,2), score numeric(4,2) not null, courseid int ) insert into scores values(90.5, null); insert into scores values(100, 2); select * from scores; a) 1、90.5、null 3、100、2 b) 1、100、2l c) 1、90.50、null d) 1、90.5、null 3、100.0、2 3) 关于子查询,以下说法正确的是()。(选择两项) a) 一般来说,表连接都可以用子查询替换。 b) 一般来说,子查询都可以用表连接替换。 c) 相对于表连接,子查询适合于作为查询的筛选条件。 d) 相对于表连接,子查询适合于查看多表的数据。 4) 创建存储过程如下: CREATE procedure bookproc @id int, @title char(20) OUTPUT as select @title=title from book where id= @id 执行该存储过程的方法正确的是()。(选择一项) a) exec bookproc 1,@title output print @title b) exec bookproc @id =1,@title output print @title c) declare @title char(20)

Oracle的sql语句练习题含答案

--1、选择部门30中的雇员 select * from emp where deptno=30; --2、列出所有办事员的姓名、编号和部门 select ename,empno,dname from emp e inner join dept d on = where job=upper('clerk’); --3、找出佣金高于薪金的雇员 select * from emp where comm>sal; --4、找出佣金高于薪金60%的雇员 select * from emp where comm>sal* ^ --5、找出部门10中所有经理和部门20中的所有办事员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')); --6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(‘manager’) and job<>upper(‘clerk’) and sal>=2000) --7、找出收取佣金的雇员的不同工作 select distinct job from emp where comm>0; --8、找出不收取佣金或收取的佣金低于100的雇员 select * from emp where nvl(comm,0)<100; | --9、找出各月最后一天受雇的所有雇员 select * from emp where hiredate= last_day(hiredate); --10、找出早于25年之前受雇的雇员 select * from emp where months_between(sysdate,hiredate)/12>25; select * from emp where hiredate

相关文档
最新文档