Oracle面试题2

A表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE);B表:(字段:NAME,ADDRESS,PHONE)

  1. 将表A中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句(该字段类型为日期类型)
  2. 请写出将表中NAME存在重复的记录都列出来的SQL语句(按NAME排序)
  3. 请写出题目2中,只保留重复记录的第一条,删除其余记录的SQL语句(即使表中不存在重复记录)
  4. 请写出将B表中的ADDRESS,PHONE更新到A表中的SQL语句(按NAME相同进行关联)
  5. 请写出将A表中第3-5行数据列出来的SQL语句

---------------------------------------答案:

----创建表

 1 create table test_A(
 2   id number,
 3   name varchar2(10),
 4   address varchar2(10),
 5   phone number(4),
 6   logdate date);
 7
 8 create table test_B(
 9    name varchar2(10),
10    address varchar2(10),
11    phone number(4));

----插入数据

 1    insert into test_a values(1,‘a‘,‘bei‘,2230,‘11-2月-2001‘);
 2    insert into test_a values(2,‘b‘,‘jing‘,2231,‘11-2月-2002‘);
 3    insert into test_a values(3,‘c‘,‘shang‘,2232,‘11-3月-2002‘);
 4    insert into test_a values(4,‘c‘,‘hai‘,2233,‘13-3月-2002‘);
 5    insert into test_a values(5,‘d‘,‘guang‘,2234,‘12-2月-2001‘);
 6    commit;
 7
 8    insert into test_b values(‘c‘,‘shen‘,2240);
 9    insert into test_b values(‘d‘,‘shen‘,2241);
10    commit;--提交
11    select * from test_a;--查询数据
12    truncate table test_a;--删除数据
  1. 将表A中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句(该字段类型为日期类型)

    1 update test_a
    2 set logdate = to_date(‘2003-01-01‘,‘yyyy-MM-dd‘)
    3 where logdate = to_date(‘2001-02-11‘,‘yyyy-MM-dd‘);
    4 commit;
    5 select * from test_a;--查询数据
  2. 请写出将表中NAME存在重复的记录都列出来的SQL语句(按NAME排序)

    1 select * from (
    2        select a.name
    3        from test_a a
    4        group by a.name
    5        having count(*)>1
    6        order by name);
  3. 请写出题目2中,只保留重复记录的第一条,删除其余记录的SQL语句(即使表中不存在重复记录)

     1 delete test_a a
     2 where a.name <> (
     3   select * from (
     4    select a.name
     5    from test_a a
     6    group by a.name
     7    having count(*)>1
     8    order by name));
     9    commit;
    10    select * from test_a;--查询数据
  4. 请写出将B表中的ADDRESS,PHONE更新到A表中的SQL语句(按NAME相同进行关联)

     1 update test_a a
     2 set a.address = decode((select distinct b.address
     3                 from test_b b
     4                 where a.name = b.name),null,a.address,(select distinct b.address
     5                 from test_b b
     6                 where a.name = b.name))
     7    ,a.phone = decode((select distinct b2.phone
     8                 from test_b b2
     9                 where a.name = b2.name),null,a.phone,(select distinct b2.phone
    10                 from test_b b2
    11                 where a.name = b2.name));
    12     commit;--提交
    13     select * from test_a;--查询数据
  5. 请写出将A表中第3-5行数据列出来的SQL语句

    1 select b.id,b.name,b.address,b.phone,b.logdate
    2 from (select rownum rn,id,name,address,phone,logdate
    3     from test_a) b
    4 where b.rn between 3 and 5;

-------------------------欢迎建议更优秀的代码

时间: 2024-10-14 08:29:26

Oracle面试题2的相关文章

oracle 笔试题

ORACLE笔试题一.单选题1.在Oracle中,以下不属于集合操作符的是( ). A. UNION B. SUM C. MINUS D. INTERSECT2.在Oracle中,执行下面的语句:SELECT ceil(-97.342),floor(-97.342),round(-97.342),trunc(-97.342)FROM dual; 哪个函数的返回值不等于-97().A.ceil() B. floor() C. round(0) D. trunc() 3.以下哪个命令可以被用来从表

Oracle 笔试题01

数据库:Oracle数据库select面试笔试经典题目 2013-12-13 11:21:55 分类: Oracle number(10):存10位数字,即1234567890 number(10,3):123456.789 varchar2(20):最大存放20个字节的字符,其中每个字符占2个字节,如存入字符串'abc',则实际只占用6个字节空间. null不能用==或者!=比较 ,必须用 is null 或者is not null rownum 返回当前号 rowid是一个伪列,一般情况用不

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

一.表的创建: 一个通过单列外键联系起父表和子表的简单例子如下: 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

oracle sql 试题解答笔记

待验证 1.创建一张学生信息表student_info,包含以下信息:学号.姓名.性别.生日.家庭住址.联系电话:创建一张学生成绩表student_score 包含学号.学科.成绩. CREATE TABLE student_info( ID INT, NAME VARCHAR2(10), sex VARCHAR2(4), brithday DATE, address VARCHAR2(50), phone INT); CREATE TABLE student_score( ID INT, su

oracle面试题

3. Oracle中function和procedure的区别? 1). 可以理解函数是存储过程的一种 2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程 4). 在sql数据操纵语句中只能调用函数而不能调用存储过程 4. Oracle的导入导出有几种方式,有何区别? 1). 使用oracle工具 exp/imp 2). 使用plsql相关工具

oracle 面试题

1.你在设计数据库时,怎样解决锁? 锁:同一时间段,很多用户占用一个资源. 抢火车票,提交了订单但未支付,为了避免出现死锁,则可以设计为预-1,等待一段时间之后查看该订单,进行调整. 预扣决策. 例子:抢火车票,抢小米,一元秒杀. 2.有10000条数据,其中有1000条数据是错误的(比如pk了或数据格式不对),怎样把剩下9000条数据写进table? 3.你现在公司oracle db 是用什么备份?假如db down掉了,怎样恢复? 通过备份的数据文件+重做日志,共同完成.100%恢复 (ex

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL 微观上: 从数据类型,数据库的结构等等回答 2. 如何使用Oracle的游标? 1).  oracle中的游标分为显示游标和隐式游标 2

Oracle面试题之:复杂的查询与实例解析

        当需要对查询到的结果进行比较复杂的处理的时候,可以借助联合查询.子查询等得到期望的结果.下面列举一个具体的经典试题,希望对读者有所启发. 1.题目要求: 表 NBA 记录了TEAM 夺冠球队的名称及年份: TEAM               YEAR -------------------------------------------------- 活塞                 1990 公牛                 1991 公牛              

Oracle 笔试题02

1.选择部门30中的所有员工: SELECT * FROM emp WHERE deptno=30; 2.列出所有办事员(CLERK)的姓名,编号和部门编号: SELECT ename,empno,deptno FROM emp WHERE UPPER(job)='CLERK'; 3.列出佣金(comm)高于薪金(sal)的员工: SELECT * FROM emp WHERE comm>sal; 4.找出佣金(comm)高于薪金百分60的员工 SELECT * FROM emp WHERE c