SQL数据库必会面试题:排序、计数与关联查询详解

版权申诉
0 下载量 166 浏览量 更新于2024-07-02 收藏 1.33MB PDF 举报
在SQL数据库的经典面试题中,涉及到了多个重要的知识点,这些题目旨在考察应聘者对数据库管理和SQL查询语言的深入理解。以下是针对给出的部分问题的详细解析: 1. **问题28:按部门排序并计算平均工资(排除“human resource”部门)** 这个问题要求从`employee`表中抽取部门名称和平均工资,且按照部门名的字符串顺序排序,且排除特定部门"human resource"。SQL查询语句如下: ``` SELECT depart_name, AVG(wage) FROM employee WHERE depart_name <> 'human resource' GROUP BY depart_name ORDER BY depart_name; ``` 通过`WHERE`子句过滤掉"human resource"部门,然后使用`GROUP BY`对部门进行分组,最后用`AVG`函数计算每个部门的平均工资,并按部门名排序。 2. **问题29:不使用统计函数获取最小数值** 要找出`Test`表中`num`列的最小值,但不使用`MIN`或`MAX`等统计函数,可以利用SQL的`TOP`和`ORDER BY`特性,如下面所示: ``` SELECT TOP 1 num FROM Test ORDER BY num ASC; ``` 这里是将结果按`num`列的升序排列,取第一个值即为最小值。 3. **问题33:计算每个Customer的Revenue总和(多表联接查询)** 提供的SQL创建了两张表`Customer`和`Order`,要计算每个Customer的Revenue总和,需要使用`JOIN`和`COALESCE`或`ISNULL`来处理可能的NULL值。查询语句如下: ``` SELECT Customer.ID, SUM(ISNULL(Order.Revenue, 0)) FROM Customer FULL JOIN Order ON Order.CustomerID = Customer.ID GROUP BY Customer.ID; ``` 使用`FULL JOIN`确保不会遗漏任何Customer记录,`SUM(ISNULL(Order.Revenue, 0))`用于处理可能存在的没有订单的Customer,将Revenue设为0。 4. **未完全列出的问题5:查询名为'perform'的表** 由于提供的内容在此处中断,无法提供完整的查询。但根据上下文,可能是某个名为'perform'的表的查询,这需要更多的上下文信息才能给出准确的SQL语句。假设这是一个标准的表名,查询可能类似于: ``` SELECT * FROM perform; ``` 如果`perform`表有特定的字段或条件,需要补充相关信息。 以上知识点涵盖了SQL查询中的基本操作,包括选择、过滤、分组、排序、多表联接以及处理NULL值等。在面试中,这些问题不仅能测试应聘者的SQL技能,还能看出他们对数据库设计和数据完整性理解的深度。