Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1369|回复: 0

Oracle中的企业级的面试题

[复制链接]

该用户从未签到

发表于 2011-10-9 17:18:03 | 显示全部楼层 |阅读模式
要求:--1. 实训拓展训练【企业面试题】
--为岗位业务培训业务建立3个表:
--S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表工号、员工姓名、所属单位、员工年龄
--C (C#,CN ) C#,CN 分别代表课程编号、课程名称
--SC( S#,C#,G ) S#,C#,G 分别代表工号、所选修的课程编号、成绩


解题思路:下面是分步解析的 要仔细观察


CREATE TABLE S
(
  S# VARCHAR2(10),
  SN VARCHAR2(20),
  SD VARCHAR2(20),
  SA NUMBER(3)
)
--利用 begin end  可以向其中加入多条数据
BEGIN
insert into S values('001','Jack','IBM',20);
insert into S values('002','Lucy','Microsoft',22);
insert into S values('003','Tom','Sun',30);
insert into S values('004','Jane','Asus',31);
END;
SELECT * FROM S
DROP TABLE S

--
CREATE TABLE C
(
C# VARCHAR2(10),
CN VARCHAR2(20)
)
DROP TABLE C
--向其中插入数据
BEGIN
insert into C values('C001','C');
insert into C values('C002','java');
insert into C values('C003','SQL');
END;
SELECT * FROM C

CREATE TABLE SC
(
S# VARCHAR2(10),
C# VARCHAR2(10),
G NUMBER(3,1)
)
DROP TABLE SC
BEGIN
insert into SC values('001','C001',50);
insert into SC values('001','C002',50);
insert into SC values('002','C002',70);
insert into SC values('003','C001',99);
insert into SC values('003','C002',52);
insert into SC values('003','C003',44);
insert into SC values('004','C003',54);
END;
SELECT * FROM SC

--【问题一】使用标准SQL嵌套语句查询选修全部课程的员工姓名和所属单位;
            --方案一:
            
            SELECT SN,SD
            FROM S,(SELECT COUNT(C#)AS NUM,S# FROM SC GROUP BY S#) T
            WHERE T.S#=S.S# AND T.NUM=(SELECT COUNT(*) FROM C);  
            
            --方案二:
            
            
                                                                     
                                                                    
--【问题二】列出有二门以上(含两门)不及格课程的员工姓名及其平均成绩;

            --方案一 :
            SELECT * FROM SC
            
            SELECT SN AS 姓名,AVG_G AS 平均成绩 FROM S
            INNER JOIN
            (SELECT COUNT(G)AS NUM,AVG(G)AS AVG_G,S# FROM SC WHERE G<60 GROUP BY S#) T
            ON S.S#=T.S#
            WHERE NUM>=2
                                                      
--【问题三】列出既学过"C001"号课程,又学过"C002"号课程的所有员工姓名;
             SELECT * FROM SC
            
             --方案一:
             SELECT SN,S# FROM S WHERE S# IN(
             SELECT S# FROM SC WHERE C#='C001'
              INTERSECT
             SELECT S# FROM SC WHERE C#='C002'
             )  
             --方案二:
             SELECT S# AS 编号,SN 姓名 FROM S
             WHERE S# IN
             (
             SELECT T1.S# FROM
             (SELECT S# FROM SC WHERE C#='C001') T1
             INNER JOIN
             (SELECT S# FROM SC WHERE C#='C002') T2
             ON T1.S#=T2.S#
              )                                                     

--【问题四】列出"C001"号课成绩比"C002"号课成绩高的所有员工的工号
--及其"C001"号课和"C002"号课的成绩 .
          SELECT * FROM SC
         
         SELECT T1.S#,T1.G AS C001成绩,T2.G AS C002成绩
         FROM (SELECT S#,G FROM SC WHERE C#='C001') T1 INNER JOIN
         (SELECT S#,G FROM SC WHERE C#='C002') T2
         ON T1.S#=T2.S#
         WHERE T1.G>T2.G



总结:一般在面试的时候 问到的 “查询前几名的员工的信息 ” 比较多 也是高级查询中相对较难的 要区分开“查询前几名”和“查询前几个员工信息”的区别★



【注解】:要分清 在Oracle中和在SQL2005中 两个查询的主要区别。
回复

使用道具 举报

该用户从未签到

发表于 2012-6-19 16:15:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-4-19 23:28 , Processed in 0.401142 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表