to:themaster (独孤行)
把你去面试的那些试题贴出来看看。
把你去面试的那些试题贴出来看看。
解决方案 »
- 求教,Oracle中表的定义是放在哪个文件中的
- Oracle初学者!关于sql plus的问题
- 纵向排列如何改成横向的?????????
- 遇到一个很棘手的问题,请教高人
- 求救:更新包和包体时,等了好久,出现ora-04021 好像是被挂起了,如何解决,加急!在线等,万分感谢
- 9i与8i导出数据的问题
- 求助,什么叫迫切左外连接,迫切内连接。另,oracle中sql语句默认的连接方式。
- 50 求一条 SQL 语句,谢谢
- 新手问题:vb6 ADO怎么调用ORACLE存储过程?
- ****如何修改oracle中默认的varchar的长度??**** 急急急!!!!
- 判断数据是否存在时一般使用语句select 1 from .. where.. ,它比select count(*) from .. where ..的优点在哪里?
- 用Select生成新表不行,郁闷ing
我面试的深圳慧通,觉得比较好的有以下几题:
(1)一个单向链表,如果判断链表中是否有环存在。
(2)一个学生成绩表,如何查出成绩排名第3的学生?
(3)谈谈为什么要用factory模式
(4)比较一下String和StringBuffer有什么不同
(5)谈谈为什么要用hibernate
......
其中(2)我想了半天,后来他告诉我是用rownum,oracle当中的用法,而oracle的PL/SQL我不会啊,汗啊,所以回来以后打算恶补一下,下次就难不倒我了嘛,呵呵
可别笑我菜
解答:
//select * from student where rownum<4 order by score desc score /*此句得出前3名的学生记录*/
select a.* from (select * from student where rownum<4 order by desc score) a
where rownum<2 asc a.score /*得出第3名*/ 试问:
(1)一个单向链表,如果判断链表中是否有环存在。
如何做答呢?
我是这样答的,首先java不支持指针,所以必须用数组来模拟链表,可以用一个二维数组,第一个单元是id,第二个单元是下一个元素的id,判断链表中是否存在环,必须对链表进行遍历,将每次遍历的接点保存在一个历史数组中,每次访问下一接点时,看它的第二个单元保存的值是否在历史数组中出现过,如出现过,则表示有环。不过他说这样效率不高。我想了半天没想出来,后来我回去的时候想,他是不是这个意思,说id的值都是有序的,这样的话,只要某个节点的第二个单元的值比它本身的id小,就表示存在环
下例在没有重复记录的情况下好用如果存在重复记录还要再复杂一些。
SQL> list
1 DECLARE
2 CURSOR cur_count IS /*声明游标*/
3 SELECT name,numeric FROM tb_tmp
4 ORDER BY numeric;
5 countNum INTEGER:=0;
6 nam CHAR(8);
7 num INTEGER;
8 BEGIN
9 OPEN cur_count; /*打开游标*/
10
11 FETCH cur_count INTO nam,num; /*从游标中检索数据行*/
12 countNum:=countNum+1;
13 WHILE (cur_count%FOUND AND countNum<4) LOOP /* 查找倒数第3名*/
14 /*当前面的FETCH语句至少对应于数据库中的一条记录时,%FOUND属性为TRUE*/
15 IF (countNum=3) THEN
16 DBMS_OUTPUT.PUT_LINE(nam || ' ' || num);
17 END IF;
18 FETCH cur_count INTO nam,num;
19 countNum:=countNum+1;
20 END LOOP;
21 CLOSE cur_count; /*关闭游标*/
22* END;
SQL> /
Wangerma 67PL/SQL procedure successfully completed.SQL> desc tb_tmp;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME NOT NULL VARCHAR2(8)
NUMERIC NOT NULL NUMBER(38)SQL> select * from tb_tmp order by numeric;NAME NUMERIC
-------- ----------
Zhaoliu 34
Lisi 58
Wangerma 67
Fengba 72
Mapi 84
Fengma 89
Zhangqi 89
Wangxr 91
Zhangsan 99
Wangwu 10010 rows selected.
的确可以列出存储在最前面的3条记录对应的SQL Server命令:select top 3 * from tb_name;但是对于select * from tb_name where ROWNUM<4 order by tb_id;
则数据库首先列出存储在最前面的3条记录,然后再对这3条记录排序而不是先排序,再列出排在前面的3条记录!!!
SQL> select rownum,b.* from student b; ROWNUM NAME RESULT
---------- -------------------- ----------
1 jake 50
2 henry 60
3 merry 90
4 gggg 30SQL> select * from (select rownum a,name,result from (select * from student order by result desc)) w
here a=3; A NAME RESULT
---------- -------------------- ----------
3 jake 50
最简单的T/SQL实现