本文档主要关注数据库和SQL相关的面试问题,涵盖了基础的SQL语法和理解。首先,针对一个员工表,问题涉及如何编写SQL语句来查询那些薪水低于平均工资的员工。原始的SQL语句是:
```sql
SELECT last_name, first_name FROM employee WHERE salary < avg(salary);
```
为了达到目的,正确的修改是将聚合函数`avg(salary)`移动到`SELECT`列表之外,并使用`GROUP BY`子句来分组,然后加上`HAVING`子句来筛选满足条件的组,即:
```sql
SELECT last_name, first_name FROM employee GROUP BY last_name, first_name HAVING salary < AVG(salary);
```
接下来的问题讨论了在不考虑大小写的情况下查询姓氏为'Smith'的员工,正确的选项是:
```sql
SELECT last_name, first_name FROM emp WHERE LOWER(last_name) = 'smith';
```
关于`DELETE`和`TRUNCATE`两个数据库操作的区别,在`中美寰宇`的资源中,它们之间的主要差异在于:
1. **无记录级日志**:`DELETE`操作会保留记录级日志,可能影响性能但允许部分回滚;而`TRUNCATE`是物理删除,速度快且不记录任何日志,不可回滚。
2. **数据完整性**:`DELETE`保留行级空间,不影响表的总行数;`TRUNCATE`删除所有数据,立即释放空间。
在`四川银海`的题目中,关于PL/SQL组成部分的选择,`DECLARE`, `EXCEPTION`, 和 `THROW` 是PL/SQL块中的关键部分,而`CATCH`通常用于异常处理,所以`CATCH`不是PL/SQL的组成部分。
在`盈盛科技`和`中科金财`提供的选项中,用于修改表结构的SQL语句是:
```sql
ALTER TABLE;
```
这命令允许添加、修改或删除列,调整索引等。
关于数据库中`NULL`值的理解,错误的表述是:
- 比较时使用关键字“==null”和“!=null”,因为正确的比较方式是`IS NULL` 或者 `IS NOT NULL`。
最后,在`赢璟网络`的问题中,事务回滚的正确描述是:
- 将该事务对数据库的修改进行撤销,使其恢复到事务开始前的状态。
这些知识点展示了SQL查询的基本结构、数据库操作的区别、PL/SQL语法以及对NULL值和事务处理的理解,这些都是数据库面试中常见的考察点。