部分常见ORACLE面试题以及SQL注意事项

上传人:大米 文档编号:550314238 上传时间:2023-06-15 格式:DOCX 页数:47 大小:67KB
返回 下载 相关 举报
部分常见ORACLE面试题以及SQL注意事项_第1页
第1页 / 共47页
部分常见ORACLE面试题以及SQL注意事项_第2页
第2页 / 共47页
部分常见ORACLE面试题以及SQL注意事项_第3页
第3页 / 共47页
部分常见ORACLE面试题以及SQL注意事项_第4页
第4页 / 共47页
部分常见ORACLE面试题以及SQL注意事项_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《部分常见ORACLE面试题以及SQL注意事项》由会员分享,可在线阅读,更多相关《部分常见ORACLE面试题以及SQL注意事项(47页珍藏版)》请在金锄头文库上搜索。

1、一、表的创建:一个通过单列外键联系起父表和子表的简单例子如下:CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE)建表时注意不要用关键字当表名或字段名,如insert,use等。CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (i

2、d) TYPE=INNODB;InnoDB Tables概述 InnoDB给MySQL提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant)型表。 InnoDB提供了行锁(locking on row level),提供与 Oracle类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB的列

3、锁定(row level locks)适宜非常小的空间。 InnoDB是 MySQL上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。 InnoDB的设计目标是处理大容量数据库系统,它的CPU利用率是其它基于磁盘的关系数据库引擎所不能比的。从一个表中查询出数据插入到另一个表中的方法:select * into destTbl from srcTbl ;insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl ;以上两句都是将srcTbl的数据插入到destTbl,但两句又有区别的。第一句(select i

4、nto from)要求目标表(destTbl)不存在,因为在插入时会自动创建。第二句(insert into select from)要求目标表(destTbl)存在,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量,如例中的:5。如果只想要结构而不要数据。 create table s_emp_42 as select * from s_emp where 1=2;/永假式SQL查询练习题1.表1:book表,字段有id(主键),name (书名);表2:bookEnrol表(图书借出归还登记),字段有id,bookId(外键),dependDate(变更时间

5、),state(1.借出2.归还)。id name1 English2 Math3 JAVA id bookId dependDate state1 1 2009-01-02 12 1 2009-01-12 23 2 2009-01-14 14 1 2009-01-17 15 2 2009-02-14 26 2 2009-02-15 17 3 2009-02-18 18 3 2009-02-19 2要求查询结果应为:(被借出的书和被借出的日期)Id Name dependDate1 English 2009-01-172 Math 2009-02-15Select e.bookId,b.nam

6、e,e.dependDate from book b,bookEnrol e where第二个表是用来登记的,不管你是借还是还,都要添加一条记录。请写一个SQL语句,获取到现在状态为已借出的所有图书的相关信息。参考语句:select book.id,book.name,max(dependDate)from book inner join bookEnrol on book.id=bookEnrol.bookid AND booker.state=1group by book.id ;2第(1)题练习使用group by /having子句。类似的笔试题还有:表一:各种产品年销售量统计表 sa

7、le年产品 销量 2005 a 700 2005 b 550 2005 c 600 2006 a 340 2006 b 500 2007 a 220 2007 b 350要求得到的结果应为:年产品 销量 2005 a 700 2006 b 500 2007 b 350即:每年销量最多的产品的相关信息。参考答案: Select * from sale a where not exists(select * from sale where 年=a.年and 销量a.销量); -or: select * from sale a inner join (select年,max(销量) as销量from

8、 sale group by年) b on a.年=b.年and a.销量=b.销量3.查询语句排名问题:名次姓名 月积分(char)总积分(char)1 WhatIsJava 1 992 水王76 9813 新浪网65 964 牛人22 95 中国队64 896 北林信息 66 667 加太阳53 668 中成药11 339 西洋参 25 2610 大拿33 23如果用总积分做降序排序.因为总积分是字符型,所以排出来是这样子(9,8,7,6,5.),要求按照总积分的数字大小排序。select * from tablename order by cast(总积分as int) desc表tb

9、uid mark 1 7 1 6 2 3 2 2 2 5 3 4 3 3 4 8 4 1 4 3 想查出uid=4的名次: uid mc 4 3select uid, sum(mark) as total from tab_name group by uid order by total desc;4表A字段如下month name income月份人员收入1 a 10002 a 20003 a 3000要求用一个SQL语句(注意是一个)的处所有人(不区分人员)每个月及上月和下月的总收入要求列表输出为月份当月收入上月收入下月收入 2 2000 1000 3000Select (Select M

10、onth From Table Where Month = To_Char(Sysdate, mm)月份,(Select Sum(Income) From Table Where Month = To_Char(Sysdate, mm)当月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sysdate) - 1)上月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(

11、Month From Sysdate) + 1)下月收入From Dual5.删除重复记录方法原理:1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。实现方法:SQL create table a (2 bm char(4), -编码3 mc varchar2(20) -名称4 )5 /SQL select rowid,bm,mc from a;ROWID BM MC- - -000000D5.0000.0002 1111 1111000000D5.0001.0002 1112 1111000000D5.0002.0002 1113 1111000000D5.0003.0002 1114 1111000000D5.0004.0002 1111 1111000000D5.0005.0002 1112 1111000000D5.0006.0002 1113

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号