本文是 DBMS 面试常见问题的延伸 |设置 1。
问:有一个表格,其中只有一行完全重复。编写查询以查找重复行
Name | Section |
abc | CS1 |
bcd | CS2 |
abc | CS1 |
在上表中,我们可以使用以下查询找到重复的行。
SELECT name, section FROM tbl
GROUP BY name, section
HAVING COUNT(*) > 1
Q. 查询以找到员工的第二高工资?
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 10000 欧
2 40000 欧文
3 30000 CS
4 40000 ME
5 50000 米
6 60000 米
7 70000 CS
以下查询的结果中有多少行?
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
Q. 编写一个触发器来更新 Emp 表,这样,如果在 Dep 表中进行了更新,那么该部门所有员工的工资应该增加一些(更新)
假设表名是 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;
Q. 有一个包含Student 和Marks 两列的表格,您需要找到所有分数高于平均分的学生,即高于平均分的学生列表。
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
)
*LOGIC- 薪水高于此人的人数为 2。
问:为什么我们不能将 WHERE 子句与 HAVING 等聚合函数一起使用?
SQL 中的 having 和 where 子句之间的区别在于 where 子句不能与聚合一起使用,但 having 子句可以。请注意:这不是预定义的规则,但总的来说,您会看到在大量 SQL 查询中,我们在 GROUP BY 之前使用 WHERE,在 GROUP BY 之后使用 HAVING。
Where 子句充当前置过滤器,而 Have 作为后置过滤器。
where 子句适用于行的数据,而不适用于聚合数据。
让我们考虑下表“标记”。
学生课程成绩
一个 c1 40
一个 c2 50
b c3 60
d c1 70
e c2 80
考虑查询
SELECT Student, sum(Score) AS total
FROM Marks
这将逐行选择数据。 have 子句适用于聚合数据。
例如,以下查询的输出
SELECT Student, sum(score) AS total FROM Marks
学生总数
一个 90
60
d 70
80
当我们在上面的查询中应用具有时,我们得到
SELECT Student, sum(score) AS total
FROM Marks having total > 70
学生总数
一个 90
80
Q. 主键和唯一键的区别,如果只允许一个 null ,为什么要使用唯一键?
首要的关键:
- 只有一行(元组)。
- 从不允许空值(仅关键字段)。
- 唯一键标识符并且不能为空且必须是唯一的。
唯一键:
- 一行中可以有多个唯一键。
- 唯一键可以有空值(只允许单个空值)。
- 它可以是候选键。
- 唯一键可以为空,也可以不唯一。
问:物化视图和动态视图有什么区别?
物化视图
- 基于磁盘并根据查询定义定期更新。
- 物化表很少创建或更新,它必须与其关联的基表同步。
动态视图
- 仅虚拟并在每次访问时运行查询定义。
- 每次用户请求特定视图时,都可以创建动态视图。
问:什么是嵌入式和动态 SQL?
静态或嵌入式 SQL
- 应用程序中的 SQL 语句在运行时不会更改,因此可以硬编码到应用程序中。
动态 SQL
- 在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。
- 动态 SQL 是一种编程技术,使您能够在运行时动态构建 SQL 语句。您可以使用动态 SQL 创建更通用、更灵活的应用程序,因为 SQL 语句的全文在编译时可能是未知的。
S.No. | Static (embedded) SQL | Dynamic (interactive) SQL |
1. | In static SQL how database will be accessed is predetermined in the embedded SQL statement. | In dynamic SQL, how database will be accessed is determined at run time. |
2. | It is more swift and efficient. | It is less swift and efficient. |
3. | SQL statements are compiled at compile time. | SQL statements are compiled at run time. |
4. | Parsing, validation, optimization, and generation of application plan are done at compile time. | Parsing, validation, optimization, and generation of application plan are done at run time. |
5. | It is generally used for situations where data is distributed uniformly. | It is generally used for situations where data is distributed non-uniformly. |
6. | EXECUTE IMMEDIATE, EXECUTE and PREPARE statements are not used. | EXECUTE IMMEDIATE, EXECUTE and PREPARE statements are used. |
7. | It is less flexible. | It is more flexible. |
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 使用动态内存分配。
你也许也喜欢:
- 关于 DBMS 的练习测验
- 最后一分钟笔记 – DBMS
- 数据库管理系统文章