MySQL(题目讲解二)
2026/8/9 3:48:47 网站建设 项目流程

༺ 个人主页 · 纪念229 ༻

🏠我的博客主页🏠

༒专栏目录:《数据结构》༒

༒专栏目录:《算法》༒

༒专栏目录:《MySQL数据库》༒

༒其它有趣的计算机知识༒

༺世上本没有路,走的人多了自然就有了༻


本篇文章讲的是我在做MySQL题中的一些见解,希望对你有所帮助。

这里有个提醒,sql题中有些就没给测试用列,所以测试用列错误试着提交
看看这题是否OJ

以下是题目链接

文章目录

  • 1.查找所有员工入职时候的薪水情况
  • 2.获取所有非manager的员工emp_no
  • 3.获取所有员工当前的manager

1.查找所有员工入职时候的薪水情况

题目如下所示:

题目要求:
查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)

看题所知,给了两个表一般来说都要用上

给出emp_no以及salary

emp_no两表都有,salary只有salaries有

显然这是多表联合查询
代码展示:

select e.emp_no,s.salary from employees e join salaries s on e.emp_no=s.emp_no where e.hire_date=s.from_date order by e.emp_no desc;

讲解
多表联合查询:
分为两种
1.两张表存在关联字段
统称:连接查询(JOIN),细分3类

内连接 INNER JOIN
只取出两边能匹配上关联键的数据(你截图里这条就是)

左外连接 LEFT JOIN
保留左表全部数据,右表匹配不到填 NULL

右外连接 RIGHT JOIN
保留右表全部数据,左表匹配不到填 NULL
2.两张表不存在关联字段
叫:笛卡尔积

首先多表联合查询用的两个表要用别名且用join连接
要想有关联后接on 表之间的关系

代码展示:

select e.emp_no,s.salary from employees e join salaries s on e.emp_no=s.emp_no

给出emp_no以及salary

两表中都有emp_no说明两表有关联
怎么写上面代码已解释过了

注意:e.emp_no, s.salary也可以写成s.emp_no, s.salary
只不过s表是主表所以用它

查找所有员工入职时候的薪水

查找用where可以找
入职时间:我们看表employees中有hire_date(入职时间)

salaries中有
from_datedate NOT NULL,
to_datedate NOT NULL,
这里指上班从哪天开始到现在

where where e.hire_date=s.from_date

这么写在查找薪水即可找到员工入职时候的薪水情况

最后emp_no进行逆序

order by e.emp_no desc;

注意括号里的内容与找所有员工入职时候的薪水情况无关用不着
考察的是对题目的了解,这是一个坑

2.获取所有非manager的员工emp_no

题目如下所示


语法展示

select e.emp_no from employees e left join dept_manager d on e.emp_no=d.emp_no where d.emp_no ISNULL;

要求:请你找出所有非部门领导的员工emp_no

这里讲一下内连接、左外连接、右外连接

以此题目来讲两表dept_manager和emp_no
on e.emp_no=d.emp_no以emp_no为链接

注意连接不改变表的实际结构,只是展示结构发生改变
内连接
左右两边只留下emp_no相同的行

左外连接
左表不变右表emp_no 多加10001(但是内容全为NULL)

右外连接
右表不变左表去掉emp_no 10001的那一行

找出非部门领导的员工emp_no

where d.emp_no ISNULL

由这题看

select e.emp_no from employees e left join dept_manager d on e.emp_no=d.emp_no

因为是左外连接
表 IS NULL
作用:找出该表为NULL的那一行

即该题求的
所有非部门领导的员工emp_no

3.获取所有员工当前的manager

题目如下所示:



语法展示:

select e.emp_no emp_no,m.emp_no manager from dept_emp e join dept_manager m on e.dept_no=m.dept_no where e.emp_no<>m.emp_no;

题目要求:获取所有的员工和员工对应的经理

讲解:
首先题目给了两个表说明是关联表问题

获取所有的员工和员工对应的经理(找的人在同一部门)

on e.dept_no=m.dept_no(dept_no部门编号前提)
如果员工本身是经理的话则不显示(说明在同一部门情况下,e和m两表的编号不同)

where e.emp_no<>m.emp_no

因为用的是关联表select显示的是e.xxxxx/m.xxxxx

题目要求

取别名即可
e.xxxxx/m.xxxxx 别名/ e.xxxxx/m.xxxxx as 别名


文章到此就告一段落,希望对你有所帮助,感谢观看!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询