Mysql SQL查询以获取提供员工姓名的员工姓名、工资
对于列为EmpId、Name的Mysql SQL查询以获取提供员工姓名的员工姓名、工资,mysql,Mysql,对于列为EmpId、Name的员工表和列为Id、EmpId、Salary的表,其中Salary表的EmpId是员工表的外键。 是否可以编写SQL查询,以便结果包含每个员工的姓名以及由员工姓名提供的所有员工的工资 样本数据 Id EmpId Salary 1 1 1000 2 2 2000 3 3 3000 4 4 4000 员工表格 EmpId
员工
表和列为Id、EmpId、Salary的表,其中Salary表的EmpId是员工表的外键。
是否可以编写SQL查询,以便结果包含每个员工的姓名以及由员工姓名提供的所有员工的工资
样本数据
Id EmpId Salary
1 1 1000
2 2 2000
3 3 3000
4 4 4000
员工
表格
EmpId Name
1 Alice
2 Bob
3 Charlie
4 Doug
工资
表
EmpId Name
1 Alice
2 Bob
3 Charlie
4 Doug
样本数据
Id EmpId Salary
1 1 1000
2 2 2000
3 3 3000
4 4 4000
我试过询问,但看不到,我怎么写员工的名字,比如说Bob,我想在哪里找到比Bob薪水更高的员工。下面的查询给出了薪资透视图的结果,但如何按员工姓名提取
--更新了Order By子句,谢谢@草莓
SELECT s.salary
, e.empname
FROM
test.employee as e, test.salary as s
WHERE s.empid = e.empid AND s.salary > 2000
ORDER BY s.Salary DESC
LIMIT 3;
以下是您可以获取Bob工资的查询:
SELECT Salary
FROM salary
WHERE EmpId = 2;
现在,您希望获取工资高于上述查询的员工的所有姓名和工资。因此,您将使用上面的查询作为其中的嵌套查询。给你:
SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
SELECT Salary
FROM salary
WHERE EmpId = 2
);
编辑-在下面的评论中,您说过要按名称而不是EmpId进行筛选。因此,您可能希望使用WHERE Name=“Bob”进行过滤。问题是名称通常不是唯一的。因此,你可能会有两个人叫“鲍勃”。如果是这样的话,你必须想出一个解决方案,让你的薪水有所不同
下面是一个示例查询,它将获取所有Bob中薪资最高的名为“Bob”的人员的薪资,然后过滤其他员工,使其薪资高于任何其他员工的薪资:
SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
SELECT MAX(Salary)
FROM salary
WHERE EmpId IN (
SELECT EmpId
FROM employee
WHERE Name="Bob"
)
);
如果没有一个叫“鲍勃”的人,最终的问题可能会出现。上面的查询将返回一个空集。如果要打印所有人,可以执行以下操作:
SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
SELECT IF(MAX(Salary) IS NULL, 0, MAX(Salary))
FROM salary
WHERE EmpId IN (
SELECT EmpId
FROM employee
WHERE Name="Bob"
)
);
现在,如果没有“Bob”,它仍然会打印工资高于0的所有人员。“是否可以编写SQL查询…”是的,这是可能的。我了解内部Join Eric,但我显然无法获得如何使用员工姓名进行筛选,如选择e.name,s.salary from employee e internal Join salary as s,其中e.empid=s.empid将给出所有员工的结果,但这里如何使用emp name的过滤器进行检查?。。。请注意,没有ORDERBY的限制是没有意义的,尽管我的结果不是在ORDER中实现的,所以没有使用ORDERBY子句!公平地说,在SELECT语句中使用LIMIT子句来限制要返回的行数。但是,感谢您的提示,正如我所知,最好的做法是始终将LIMIT子句与ORDERBY子句一起使用,以唯一的顺序约束结果行。我的查询也返回了相同的结果。询问的查询是按emp名称(例如Bob)进行筛选,我想在其中将employee表中收入高于Bob的员工wrt提取到salary
表中。只需将其中的EmpId=2更改为其中的name='Bob'。现在,如果有两个人叫“鲍勃”,会发生什么。让我知道,我们将努力找到一个解决方案:)是的,我也这么想,但有人问我。无论如何,不同的emp名称,现在就在这个例子中,emp名称不会重复两次。如果名称是唯一的,那么您可以跳过MAX函数。