SQL试题解析:复杂查询与统计分析

0 下载量 79 浏览量 更新于2024-08-30 收藏 257KB PDF 举报
"这篇资料主要涉及SQL语句的典型应用,包括如何找出特定用户间讨论的话题差异以及计算被多对用户讨论的话题数量。同时,资料还涵盖了员工表EMP和部门表DEPT的数据结构,以及如何利用SQL查询特定部门员工工资的中位数,并计算部门内员工入职时间的年月差。" 在SQL查询中,我们首先看到的是如何找到被Alice和Bob讨论但未与Crowe讨论的话题。这里使用了`EXCEPT`操作符来找出两个查询结果的差异。第一个子查询选取了Alice与Bob讨论的所有话题,而第二个子查询则选择了Alice与Crowe讨论的话题。`EXCEPT`操作符返回的是只存在于第一个子查询但不在第二个子查询中的结果,从而达到题目要求。 接着,第二个SQL语句是计算被超过10对用户讨论的话题数量。首先,通过内部查询`SELECT topic FROM Discuss GROUP BY topic HAVING COUNT(*) > 10`,我们获取了所有至少被10对用户讨论的话题,然后外部查询`SELECT COUNT(*) FROM (...) AS T`统计了这些话题的数量。 在员工和部门表的介绍中,我们看到了表`EMP`包含员工编号(eno),姓名(ename),职位(job),雇佣日期(hire)和薪水(salary),以及部门编号(dno)。而表`DEPT`则包含部门编号(dno),部门名称(dname)和地点(loc)。接下来的问题是找出部门名为'RI'的员工工资的中位数。由于SQL标准并不直接支持中位数函数,因此采用了变量和排序的方法。两种方法都利用了窗口函数的概念,通过计算排序后的索引来定位中位数的位置,并计算平均值得到结果。 最后的问题是计算每个部门内最早和最晚入职员工之间的时间差,并转换为年和月。这需要对日期进行处理,可能涉及到SQL的日期函数,如`DATEDIFF`来计算两个日期之间的差值,然后转换为年或月。具体的SQL实现没有给出,但通常会涉及到`DATEDIFF`和`YEAR`或`MONTH`函数的组合使用。 总结起来,这份资料主要介绍了SQL中的子查询、集合操作符、分组聚合函数、变量使用以及复杂日期处理技巧,这些都是在实际数据库查询和分析中非常重要的技能。