目录
练习四:MySQL 中如何查看sql语句的执行计划?可以看到哪些信息?
练习六:LEFT JOIN 是否可能会出现多出的行?为什么?
Ch6.决胜秋招
Section A
练习一:各部门工资最高的员工(难度:中等)
创建Employee 表,包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。
创建Department 表,包含公司所有部门的信息。
编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。
【注】每个派生表都要有别名
练习二: 换座位(难度:中等)
小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。
其中纵列的id是连续递增的
小美想改变相邻俩学生的座位。
你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
请创建如下所示seat表:
假如数据输入的是上表,则输出结果如下:
注意:
如果学生人数是奇数,则不需要改变最后一个同学的座位。
*这题自己没有想出做法(看了答案之后发现是自己想的复杂了,我还想了用存储过程......),查了一下别人的答案,下面这个答案是通过更改ID号实现结果
练习三: 分数排名(难度:中等)
假设在某次期末考试中,二年级四个班的平均成绩分别是 93、93、93、91。
目前有如下三种排序结果,请根据查询结果书写出查询用 sql。
通过观察排序结果可以发现,其分别对应专用窗口函数中3中不同排序函数的排序结果。
练习四:连续出现的数字(难度:中等)
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
*这道题也是自己想的有点复杂了(考虑了使用移动平均),参考了网上的做法,进行多表连接,将连续的3个值连成一行然后进行筛选并去重(考虑到有3个以上连续的可能会筛出重复值)。
练习五:树节点 (难度:中等)
对于tree表,id是树节点的标识,p_id是其父节点的id。
每个节点都是以下三种类型中的一种:
Root: 如果节点是根节点。
Leaf: 如果节点是叶子节点。
Inner: 如果节点既不是根节点也不是叶子节点。
写一条查询语句打印节点id及对应的节点类型。按照节点id排序。上面例子的对应结果为:
说明:
节点’1’是根节点,因为它的父节点为NULL,有’2’和’3’两个子节点。
节点’2’是内部节点,因为它的父节点是’1’,有子节点’4’和’5’。
节点’3’,‘4’,'5’是叶子节点,因为它们有父节点但没有子节点。
下面是树的图形: