常见DBMS面试问题|集2

本文是本文的延伸 常见DBMS面试问题|集1 .

null

问:有一个表格,其中只有一行是完全重复的。编写查询以查找重复的行

名称 部分
abc CS1
卡介苗 CS2
abc CS1

在上表中,我们可以使用下面的查询找到重复的行。

SELECT name, section FROM tbl
GROUP BY name, section
HAVING COUNT(*) > 1

问:查询员工的第二高薪?

SELECT max(salary) FROM EMPLOYEES WHERE salary IN
(SELECT salary FROM EMPLOYEEs MINUS SELECT max(salary)
FROM EMPLOYEES);

SELECT max(salary) FROM EMPLOYEES WHERE 
salary <> (SELECT max(salary) FROM EMPLOYEES);

考虑下面的员工表。以下查询的结果中有多少行?

ID薪资部门名称 1万欧共体 24000欧共体 3.3万立方厘米 4.4万我 5.5万我 60000我 7.7万立方厘米

以下查询的结果中有多少行?

SELECT E.ID
FROM  Employee E
WHERE  EXISTS  (SELECT E2.salary
FROM Employee E2
WHERE E2.DeptName = 'CS'
AND   E.salary > E2.salary)

以下5行是查询的结果,因为3000是CS员工的最低工资,所有这些行都大于30000。

2. 4 5. 6. 7.

如果某个部门的薪酬被更新,那么所有员工的薪酬都应该被更新

假设表名为Dept和Emp,触发器可以写为——

CREATE OR REPLACE TRIGGER update_trig
AFTER UPDATE ON Dept
FOR EACH ROW
DECLARE
CURSOR emp_cur IS SELECT * FROM Emp;
BEGIN
FOR i IN emp_cur LOOP
IF i.dept_no = :NEW.dept_no THEN
DBMS_OUTPUT.PUT_LINE(i.emp_no);  --  for printing those
UPDATE Emp                      -- emp number which are
SET sal = i.sal + 100           -- updated
WHERE emp_no = i.emp_no;
END IF;
END LOOP;
END;

问:有一个表包含两列学生和分数,你需要找到所有分数高于平均分数的学生,即高于平均分数的学生名单。

SELECT student, marks 
FROM table
WHERE marks > SELECT AVG(marks) from table;

问:通过子查询,说出获得第三高分数的学生。

SELECT Emp1.Name
FROM Employee Emp1
WHERE 2 = (SELECT COUNT(DISTINCT(Emp2.Salary))
           FROM Employee Emp2
           WHERE Emp2.Salary > Emp1.Salary
          )

*逻辑——工资高于此人的人数为2人。

问:为什么我们不能将WHERE子句与have这样的聚合函数一起使用?

SQL中having和where子句的区别在于where子句不能与聚合一起使用,但having子句可以。请注意:这不是一个预定义的规则,但总的来说,您会看到在大量SQL查询中,我们使用的是GROUP by之前的WHERE和GROUP by之后的HAVING。

Where子句充当前置过滤器,其中as充当后置过滤器。

where子句适用于行的数据,而不是聚合数据。

让我们考虑下面的“标记”。

学生课程成绩

C140 c250 b c3 60 d c1 70 e c2 80

考虑查询

SELECT Student, sum(Score) AS total 
FROM Marks

这将逐行选择数据。having子句适用于聚合数据。

例如,下面查询的输出

SELECT Student, sum(score) AS total FROM Marks

学生总数 90 b 60 d 70 e 80

当我们在上面的查询中应用having时,我们得到

SELECT Student, sum(score) AS total
FROM Marks having total > 70

学生总数 90 e 80

问:主键和唯一键之间的区别,如果唯一键只允许一个空值,为什么要使用唯一键?

主键:

  • 一行中只有一个(元组)。
  • 从不允许空值(仅键字段)。
  • 唯一密钥标识符,不能为null,且必须唯一。

唯一密钥:

  • 一行中可以有多个唯一键。
  • 唯一键可以有空值(只允许单个空值)。
  • 它可以是一个候选密钥。
  • 唯一密钥可以为null,也可能不是唯一的。

问:物化视图和动态视图有什么区别?

物化视图

  • 基于磁盘的,并根据查询定义定期更新。
  • 物化表很少创建或更新,必须与其关联的基表同步。

动态视图

  • 仅虚拟,并在每次访问时运行查询定义。
  • 每次用户请求特定视图时,都可以创建动态视图。

问:什么是嵌入式和动态SQL?

静态或嵌入式SQL

  • 应用程序中的SQL语句在运行时不会更改,因此可以硬编码到应用程序中。

动态结构化查询语言

  • 在运行时构造的SQL语句;例如,应用程序可能允许用户输入自己的查询。
  • 动态SQL是一种编程技术,使您能够在运行时动态构建SQL语句。通过使用动态SQL,您可以创建更通用、更灵活的应用程序,因为SQL语句的全文在编译时可能是未知的。
不。 静态(嵌入式)SQL 动态(交互式)SQL
1. 在静态SQL中,如何访问数据库是在嵌入式SQL语句中预先确定的。 在动态SQL中,访问数据库的方式在运行时确定。
2. 它更加快捷高效。 它没有那么迅速和高效。
3. SQL语句在编译时编译。 SQL语句在运行时编译。
4. 解析、验证、优化和生成应用程序计划都是在编译时完成的。 应用程序计划的解析、验证、优化和生成在运行时完成。
5. 它通常用于数据均匀分布的情况。 它通常用于数据分布不均匀的情况。
6. 不使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句。 使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句。
7 它不那么灵活。 它更灵活。

http://docs.oracle.com/cd/A87860_01/doc/appdev.817/a76939/adg09dyn.htm

问:CHAR和VARCHAR有什么区别?

  • CHAR和VARCHAR在存储和检索方面有所不同。
  • CHAR列长度是固定的,而VARCHAR长度是可变的。
  • CHAR数据类型最多可容纳255个字符,而VARCHAR最多可容纳4000个字符。
  • CHAR比VARCHAR快50%。
  • CHAR使用静态内存分配,而VARCHAR使用动态内存分配。

你可能还喜欢:

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享