这份文档汇集了Oracle公司的常见面试题及其详细解答,旨在帮助求职者准备技术面试,涵盖数据库管理、编程语言等多个方面。
Oracle 是一种关系数据库管理系统(RDBMS),使用 SQL 语言来管理和存储数据。以下是 Oracle 面试题及答案整理中的部分知识点:
1. 表:table1(FId,Fclass,Fscore)。
如何列出各班成绩最高的列表,显示班级和成绩两个字段?
知识点包括 GROUP BY 子句和 MAX 函数。可以使用以下 SQL 语句来解决问题:
```sql
SELECT fclass, MAX(fscore)
FROM table1
GROUP BY fclass;
```
2. 表:table1,包含字段 FID 和 Fno(两个字段都不为空)。
如何列出一个 FID 对应多个不同的 Fno 的记录?
知识点包括自连接和 EXISTS 子句。可以使用以下 SQL 语句:
```sql
SELECT t2.*
FROM table1 t1, table1 t2
WHERE t1.fid = t2.fid AND t1.fno <> t2.fno;
```
3. 表:empinfo,字段包括 Fempno、Fempname、Fage 和 Fsalary。
如何用一个 SQL 语句计算以下四种人(fsalary>9999 and fage > 35, fsalary>9999 and fage < 35, fsalary <9999 and fage > 35, fsalary <9999 and fage < 35)的员工数量?
知识点包括 CASE语句和 SUM 函数。可以使用以下 SQL 语句:
```sql
SELECT
SUM(CASE WHEN fsalary > 9999 AND fage > 35 THEN 1 ELSE 0 END) AS fsalary>9999_fage>35,
SUM(CASE WHEN fsalary > 9999 AND fage < 35 THEN 1 ELSE 0 END) AS fsalary>9999_fage<35,
SUM(CASE WHEN fsalary < 9999 AND fage > 35 THEN 1 ELSE 0 END) AS fsalary<9999_fage>35,
SUM(CASE WHEN fsalary < 9999 AND fage < 35 THEN 1 ELSE 0 END) AS fsalary<9999_fage<35
FROM empinfo;
```
4. 表 A 字段如下:month(月份)、person(人员)和 income(收入)。如何用一个 SQL 语句处理所有人每个月及上月、下月的总收入?
要求输出为:
- 月份
- 当月收入
- 上月收入
- 下月收入。
知识点包括窗口函数和解析函数。可以使用以下 SQL 语句来实现需求:
```sql
SELECT months, MAX(incomes) AS 当月收入,
MAX(prev_months) AS 上月收入,
MAX(next_months) AS 下月收入
FROM (SELECT months,
incomes,
DECODE(LAG(months) OVER(ORDER BY months), TO_CHAR(ADD_MONTHS(TO_DATE(months,yyyymm), -1),yyyymm),
LAG(incomes) OVER(ORDER BY months),
0
) AS prev_months,
DECODE(LEAD(months) OVER (ORDER BY months),TO_CHAR(ADD_MONTHS(TO_DATE(months, yyyymm), +1), yyyymm),
LEAD(incomes) OVER (ORDER BY months),
0
) AS next_months
FROM (SELECT months,
SUM(income) as incomes
FROM a GROUP BY months)
aa
)
aa
GROUP BY months;
```