345 execs and answers.docx
《345 execs and answers.docx》由会员分享,可在线阅读,更多相关《345 execs and answers.docx(14页珍藏版)》请在冰点文库上搜索。
![345 execs and answers.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/50c2ee42-dfc6-4173-99b2-9434efb18c6b/50c2ee42-dfc6-4173-99b2-9434efb18c6b1.gif)
345execsandanswers
第三章习题
一、填空题
1.数据库的存储结构就是数据库存储数据的方式,oracle数据库的存储结构分为()和(),()主要用于描述()的方式,而物理存储结构用于描述()。
2.()是oracle中可以使用的最大的逻辑存储结构,()是oracle逻辑存储结构中最小的I/O单元
3.表空间通过()来扩大,表空间的大小等于()。
4.表空间的类型(),(),();状态有:
(),(),()读写,只读,脱机;
二、问答题
1.在创建表空间时,其对应的物理数据文件需要提前创建吗?
2.在删除一个表空间时,如果没有删除对应的数据文件,那么该数据文件还可以使用吗?
3.表空间与数据文件的关系
三、语句练习
1、使用autoallocate方式创建表空间,数据文件为’e:
\t1_1.dbf’大小2M
2、修改上述表空间,增加一个2MB的文件t1_2.dbf
3、修改表空间t1,使其脱机
4、查询t1表空间空间名,状态,内容;
5、创建表student,包括id,name,address三个字段;
6、插入记录(’1’,’lisa’,’太原理工’)
7、创建student的同义词s1;
8、查询s1验证是否与student内容一样。
9、思考通过已经存在的表student直接创建另一张表student_copy,怎样弄?
并且能否实现创建表student_copy时不包含student的数据?
答案:
一、
1.逻辑存储结构,物理存储结构,逻辑存储结构,oracle内部组织和管理数据,oracle外部即操作系统中组织和管理数据的
2.表空间,数据块
3.数据文件,构成这些表空间的所有数据文件的大小之和
4、永久,临时,还原;读写,只读,脱机
二、
1、新建表空间时,不需要提前创建对应的数据文件,而且也不能单独创建不属于任何表空间的数据文件。
一个数据文件一旦创建成功,那么他必然对应一个表空间。
2、数据文件对应的表空间被删除后,如果其他表空间想要使用该数据文件,必须使用Reuse选项才可以。
3、表空间是oracle中可以使用的最大的逻辑存储结构,表空间在物理上与数据文件相对应,每一个表空间由一个或多个数据文件组成,一个数据文件只可以属于一个表空间,这是逻辑与物理的统一。
三、
1、Createtablespacet1
Datafile’e:
\t1_1.dbf’size2M
Autoallocate;
2、Altertablespacet1
Adddatafile’e:
\t1_1.dbf’size2M;
3、Altertablespacet1offline;
4、Selecttablespace_nametbs_name
Status,
Contents
Fromdba_tablespaces
Wheretablespace_name=’T1’;(注意表空间的名称必须全部用大写字母,否则查不到该表空间)
5.Createtablestudent
(idchar(5)primarykey,
Namevarchar(10),
Addressvarchar(50)
);
6、Insertintostudent
Values(’1’,’lisa’,’太原理工’);
7、Createsynonyms1forstudent;
8、Select*froms1;
9、Createtablestudent_copyasselect*fromstudent;
可以通过Createtablestudent_copyasselect*fromstudentwhere1=0;来实现,这样数据就不会复制到新建的表中;
第四章习题
一、填空
1.在检索数据时,如果使用()符号,表示检索所有的列。
2.在orderby子句中,()关键字表示升序排列,()关键字表示降序排列。
3.如果定义与组有关的搜索条件,可以把()子句添加到select语句中。
4.当进行模糊查询时,应该使用关键字()和通配符()或百分号“%”
5.where子句可以接受from子句输出的数据,而having子句则可以接受来自(),from或()子句的输出。
6.在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是()。
7.()函数返回某个字符的ASCII值,()函数返回某个ASCII值对应的字符。
8.子查询语句必须使用()括起来,否则无法判断子查询语句的开始和结束。
在子查询语句中,不能使用()子句。
二.选择题
1.下列那个子句在select语句中用于排序结果集?
()
A.having子句B.where子句C.from子句D.orderby子句
2.为了删除结果集中重复的行,可在select语句使用下列那个关键字?
()
A.allB.distinctC.spoolD.having
3.下列哪个关键字或子句用来限定查询结果集中的行?
A.selectB.whereC.updateD.insert
4.groupby子句作用是什么?
()
A.查询结果的分组条件B.组的筛选条件C.限定返回行的判定条件D.对结果集进行排序
5.having子句的作用是什么?
()
A.查询结果的分组条件B.组的筛选条件C.限定返回行的判定条件D.对结果集进行排序
6.有关子查询的描述,下列那一项是正确的?
()
A.子查询只允许在select语句中使用B.子查询没有必要使用括号括起来
C.子查询不允许嵌套D.子查询允许嵌套
7.当col_name取()值时,表达式col_name>any(5,10,13)为假
A.12B.11C.8D.2
三、查询练习
使用scott/tiger用户下的emp和dept表完成下列练习,表的结构说明如下:
Emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm.佣金/deptno部门编号)
Dept部门表(deptno部门编号/dname部门名称/loc地点)
工资=薪金+佣金
1.列出至少有一个员工的所有部门。
(两个表联合查询,及groupby...having的用法)
2.列出薪金比“SMITH”多的所有员工。
(经典的自连接查询)
selectenamefromempwheresal>(selectsalfromempwhereenamelike'SMITH');
3.列出所有员工的姓名及其直接上级的姓名
selectename,(selectenamefromempwhereempnoin(a.mgr))fromempa;
4.列出受雇日期早于其直接上级的所有员工
selecte1.ename,e1.hiredate,e2.enamemgr,e2.hiredatefromempe1joinemp
e2one1.mgr=e2.empnoande1.hiredate5列出所有“CLERK”(办事员)的姓名及其部门名称。
selecte.ename,d.dnamefromempejoindeptdone.deptno=d.deptnoande.joblike'CLERK';
6.列出最低薪金大于1500的各种工作
selectdistinctjobfromempwheresal>1500
7.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门(以emp表为主,左连接查询)
selectdname,emp.*fromdeptleftjoinempondept.deptno=emp.deptno;
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
(经典的两个表连接)
selectenamefromempwheredeptno=(selectdeptnofromdeptwherednamelike'SALES');
9.列出薪金高于公司平均薪金的所有员工。
(反复查自己)
selectenamefromempwheresal>(selectavg(sal)fromemp);
10.列出与“SCOTT”从事相同工作的所有员工。
(排除自己)
selectenamefromempwherejobin(selectjobfromempwhereenamelike'SCOTT')andename!
='SCOTT';
11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
(any的用法,且排挤)
selectename,salfromempwheresal=any(selectsalfromempwheredeptno=30)anddeptno!
=30;
selectename,salfromempwheresalin(selectsalfromempwheredeptno=30)anddeptno!
=30;
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
(max的用法)
selectsal,enamefromempwheresal>(selectmax(sal)fromempwheredeptno=30);
13.列出在每个(每个是关键字,对此groupby)部门工作的员工数量、平均工资和平均服务期限。
(经典的groupby用法)
**selectdeptno,count(*),avg(a.sal),avg(sysdate-HIREDATE)fromempagroupbydeptno;
selectdeptno,count(*),avg(a.sal),avg(to_number(to_char(sysdate,'yyyy'),'9999')-to_number(to_char(HIREDATE,'yyyy'),'9999'))fromempagroupbydeptno;
14.列出所有员工的姓名、部门名称和工资.(经典的两个表的连接查询,用具体的名称替换一个表中的主键的id(解决很多人在实际运用中会遇到的不能绑定多列的问题),也可用where来查询,与题5比较)
selectename,sal,(selectdnamefromdeptawherea.deptno=b.deptno)asdnamefromempb;
selectename,dname,salfromempjoindeptonemp.deptno=dept.deptno;
15.列出所有部门的详细信息和部门人数。
(因为是*,将显示dept和后面临时表b的全部字段(注意:
不只是dept的字段,注意*号))
select*fromdeptaleftjoin(selectdeptno,count(*)fromempgroupbydeptno)bona.deptno=b.deptno;
selectd.*,cfrom(select*fromdept)dleftjoin(selectcount(*)c,deptnofromempgroupbydeptno)eone.deptno=d.deptno;
16.列出各种(与每个同义(参看题13))工作的最低工资。
selectjob,min(sal)fromempgroupbyjob;
17.列出各个部门的MANAGER(经理,经理唯一,不用groupby)的最低薪金。
selectmin(sal)fromempwherejoblike'MANAGER';(因为MANAGER是值不是字段,所以不能用小写)
18.列出所有员工的年工资,按年薪从低到高排序。
(nvl:
空转化函数)
selectename,sal*12+nvl(comm,0)anuual_salfromemporderbyanuual_salasc;
19,列出经理人的名字(雇员的empno出现在mgr列中的是经理人)
SQL>selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
20.不用组函数,求出薪水的最大值(此题猥琐)
SQL>selectename,salfromempwheresalnotin(selectdistincte1.salfromempe1joinempe2one1.sal答案:
一、
1.*2.ascdesc3.groupby4.like下划线_5.wheregroupby6.外连接
7.ASCII()CHR()8.括号orderby
二、
DBBABDD
三、
1、selectdnamefromdeptwheredeptnoin(selectdeptnofromempgroupbydeptnohavingcount(*)>1);
2.selectenamefromempwheresal>(selectsalfromempwhereenamelike'SMITH');
3.selectename,(selectenamefromempwhereempnoin(a.mgr))fromempa;
4、
selecte1.ename,e1.hiredate,e2.enamemgr,e2.hiredatefromempe1joinemp
e2one1.mgr=e2.empnoande1.hiredate5selecte.ename,d.dnamefromempejoindeptdone.deptno=d.deptnoande.joblike'CLERK';
6.selectdistinctjobfromempwheresal>1500
7.
selectdname,emp.*fromdeptleftjoinempondept.deptno=emp.deptno;
8.
selectenamefromempwheredeptno=(selectdeptnofromdeptwherednamelike'SALES');
9.selectenamefromempwheresal>(selectavg(sal)fromemp);
10.selectenamefromempwherejobin(selectjobfromempwhereenamelike'SCOTT')andename!
='SCOTT';
11.
selectename,salfromempwheresal=any(selectsalfromempwheredeptno=30)anddeptno!
=30;
selectename,salfromempwheresalin(selectsalfromempwheredeptno=30)anddeptno!
=30;
12.
selectsal,enamefromempwheresal>(selectmax(sal)fromempwheredeptno=30);
13.**selectdeptno,count(*),avg(a.sal),avg(sysdate-HIREDATE)fromempagroupbydeptno;
selectdeptno,count(*),avg(a.sal),avg(to_number(to_char(sysdate,'yyyy'),'9999')-to_number(to_char(HIREDATE,'yyyy'),'9999'))fromempagroupbydeptno;
14.
selectename,sal,(selectdnamefromdeptawherea.deptno=b.deptno)asdnamefromempb;
selectename,dname,salfromempjoindeptonemp.deptno=dept.deptno;
15.select*fromdeptaleftjoin(selectdeptno,count(*)fromempgroupbydeptno)bona.deptno=b.deptno;
selectd.*,cfrom(select*fromdept)dleftjoin(selectcount(*)c,deptnofromempgroupbydeptno)eone.deptno=d.deptno;
16.
selectjob,min(sal)fromempgroupbyjob;
17.selectmin(sal)fromempwherejoblike'MANAGER';(因为MANAGER是值不是字段,所以不能用小写)
18.selectename,sal*12+nvl(comm,0)anuual_salfromemporderbyanuual_salasc;
19,
SQL>selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
20.
SQL>selectename,salfromempwheresalnotin(selectdistincte1.salfromempe1joinempe2one1.sal
第五章
一、选择题
1、DELETEFROMSWHERE年龄>60语句的功能是______。
A、从S表中彻底删除年龄大于60岁的记录
B、S表中年龄大于60岁的记录被加上删除标记
C、删除S表D、删除S表的年龄列
2、设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
读者(借书证号C(4),单位C(8),姓名C(6),性别C
(2),职称C(6),地址C(20))
借阅(借书证号C(4),总编号C(6),借书日期D(8))
对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。
SQL语句正确的是_____。
SELECT姓名,书名FROM借阅,图书,读者WHERE;借阅.借书证号="0001"AND;______
______
A、图书.总编号=借阅.总编号AND; 读者.借书证号=借阅.借书证号
B、图书.分类号=借阅.分类号AND; 读者.借书证号=借阅.借书证号
C、读者.总编号=借阅.总编号AND; 读者.借书证号=借阅.借书证号
D、图书.总编号=借阅.总编号AND;
3、设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
读者(借书证号C(4),单位C(8),姓名C(6),性别C
(2),职称C(6),地址C(20))
借阅(借书证号C(4),总编号C(6),借书日期D(8))
对于图书管理数据库,分别求出各个单位当前借阅图书的读者人次。
下面的SQL语句正确的是______。
SELECT单位,______FROM借阅,读者WHERE;借阅.借书证号=读者.借书证号______
A、COUNT(借阅.借书证号)GROUPBY单位
B、SUM(借阅.借书证号)GROUPBY单位
C、COUNT(借阅.借书证号)ORDERBY单位
D、COUNT(借阅.借书证号)HAVING单位
4、设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
读者(借书证号C(4),单位C(8),姓名C(6),性别C
(2),职称C(6),地址C(20))
借阅(借书证号C(4),总编号C(6),借书日期D(8))
对于图书管理数据库,检索借阅了《现代网络技术基础》一书的借书证号。
下面SQL语句正确的是_____。
SELECT借书证号FROM借阅WHERE总编号=;______
A、(SELECT借书证号FROM图书WHERE书名="现代网络技术基础")
B、(SELECT总编号FROM图书WHERE书名="现代网络技术基础")
C、(SELECT借书证号FROM借阅WHERE书名="现代网络技术基础")
D、(SELECT总编号FROM借阅WHERE书名="现代网络技术基础")
二简答题
1.简述数据完整性的分类并解释其含义。
2.在oracle中,完整性约束有几种状态
3.索引的特点与不足
答案:
一、
AAAB
二
1、
2.有四种状态。
(1)禁止的非校验状态,表示该约束是不起作用的,即使该约束定义依然储存在数据字典中;
(2)禁止的校验状态,表示对约束列的任何修改都是禁止的。
(3)允许的非校验状态或强制状态。
该状态可以向表中添加数据,但是与约束有冲突的数据不能添加,如果表中已存在的数据与约束有冲突,这些数据可以存在。
(4)允许的校验状态。
表示约束处于正常状态,这时,表中所有的数据,无论是已有的还是新添加的,都必须满足约束条件。
3.索引特点:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引不足:
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每