本文是本文的延伸 常见DBMS面试问题|集1 .
问:有一个表格,其中只有一行是完全重复的。编写查询以查找重复的行
名称 | 部分 |
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使用动态内存分配。
你可能还喜欢:
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。