sql 面试题

本文介绍了一个具体的SQL连接查询案例,展示了如何从两个表中获取主场班级名、客场班级名及比赛场数。通过两步查询操作,实现了所需数据的有效提取。


表一 class

c_id  c_name

1 1班

2 2班
3 3班

4 4班



表二 team

h_id    g_id   num

1     2        34
2     4        37



表一中存放所有班级的id和班级名字,表二中存放的是主场班级ID ,客场班级Id,和比赛场数 。请连接查询出主场班级名,客场班级名,和比赛场数,写出sql 语句


第一步,查询 主场班级名

select  c_name as h_name , team. * from class inner join team on  class.c_id =team.h_id

第二部 将上次查出来的结果作为表ct

select  class.c_name  as g_name,ct.h_name as h_name ,ct.num from (select  c_name as h_name , team. * from class inner join team on  class.c_id =team.h_id)ct join  class on class.c_id=ct .g_id

### SQL 面试题及答案 以下是几道经典的 SQL 面试题,涵盖从基础到高级的难度,适合不同层次的求职者准备面试时参考。 #### 1. 查询员工表中工资最高的前三名员工 假设有一个名为 `employees` 的表,包含以下字段:`id`, `name`, `salary`。需要查询出工资最高的前三名员工。 ```sql SELECT id, name, salary FROM employees ORDER BY salary DESC LIMIT 3; ``` 此查询使用了 `ORDER BY` `LIMIT` 来限制结果集的大小[^1]。 #### 2. 查询部门平均工资高于公司整体平均工资的部门 假设有一个名为 `departments` 的表,包含字段 `department_id`, `department_name`,以及一个名为 `employees` 的表,包含字段 `employee_id`, `department_id`, `salary`。 ```sql SELECT d.department_name, AVG(e.salary) AS avg_salary FROM departments d JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employees); ``` 这里通过子查询计算公司的整体平均工资,并与每个部门的平均工资进行比较[^2]。 #### 3. 查询每个部门中工资最高的员工 假设同样的表结构,要求查询每个部门中工资最高的员工信息。 ```sql SELECT e1.department_id, e1.name, e1.salary FROM employees e1 WHERE e1.salary = ( SELECT MAX(e2.salary) FROM employees e2 WHERE e1.department_id = e2.department_id ); ``` 这段代码利用了子查询 `MAX()` 函数来获取每个部门的最高工资,并匹配相应的员工记录。 #### 4. 使用窗口函数查询每个部门工资排名前两名的员工 在现代 SQL 中,可以使用窗口函数实现更复杂的排序需求。 ```sql SELECT department_id, name, salary FROM ( SELECT department_id, name, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as rank_num FROM employees ) temp WHERE rank_num <= 2; ``` 这里使用了 `RANK()` 窗口函数对每个部门的员工按工资降序排列,并选取排名前两名的员工[^2]。 #### 5. 处理空值问题:查询所有员工及其对应的部门名称 假设有些员工没有分配到部门,即 `department_id` 为 `NULL`,需要显示这些员工的信息。 ```sql SELECT e.name AS employee_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id; ``` 通过使用 `LEFT JOIN`,即使某些员工没有对应的部门信息,也可以正确显示他们的记录。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值