带有 JOIN 和 WHERE 子句的 SQL 语句

Posted

技术标签:

【中文标题】带有 JOIN 和 WHERE 子句的 SQL 语句【英文标题】:SQL statement with JOIN and WHERE clause 【发布时间】:2015-09-28 18:57:15 【问题描述】:

我是 SQL 新手,我试图用两个表 Employee 和 Department 来解决这个问题。我想显示“人力资源”和“销售”部门的所有员工的姓名。 表是 Employee (emp_id, emp_name, dept_id)Department (dept_id, dept_name)

谢谢!

【问题讨论】:

下次你应该表现出你自己的一些努力。一定有一些你自己有的想法由于某种原因没有奏效。或者你还没有尝试过任何东西 就像我写的那样,我在问这里之前尝试了这些问题。从下次开始,我会牢记您的指示。无论如何,谢谢! 【参考方案1】:

试试这个:

Select e.emp_name from 
Employee e inner join Department d
on e.dept_id = d.dept_id
Where d.dept_name in ('HR','Sales');

此查询将比较Employee 表和Department 表的dept_id。那些匹配的值将被返回。然后在所有字段中选择emp_name 并使用where 子句限制属于HRSales 部门的员工。

【讨论】:

谢谢兄弟!那行得通,我实际上对这个问题中的“where”子句感到困惑。谢谢 不客气:) 如果有用,请点赞并接受答案:) 很抱歉再次打扰您,实际上我正在尝试使用不同的 scnerios 但使用相同的表来探索问题,并遇到了一些不同类型的问题。如何显示所有员工人数超过 10 人的部门名称。谢谢! 试试这个:Select d.dept_name from Employee e inner join Department d on e.dept_id = d.dept_id group by d.dept_name with count(*) > 20 @user2439492:这是一个完全不同的问题。先尝试自己解决。如果它不起作用,请提出一个新问题,说明您尝试了什么以及卡在哪里。【参考方案2】:

由于您只想显示员工数据,因此只能从该表中进行选择。剩下的就是标准。您希望他们的部门是“人力资源”或“销售”,因此直接编写此内容的方式是 IN 子句(您也可以使用 EXISTS 子句):

select emp_name
from employee
where dept_id in 
(
  select dept_id 
  from department
  where dept_name in ('HR', 'Sales')
);

我认为这比先加入表格更容易阅读,只使用一个作为另一个过滤器。

【讨论】:

【参考方案3】:
select Employee.emp_name [Emplyee Name] from Employee inner join Department on Department.dept_id=Emplyee.emp_id where Department.dept_name='HR'

【讨论】:

【参考方案4】:

你可以这样,

SELECT [emp_name] FROM [dbo].[Employee] AS E
INNER JOIN [dbo].[Department] AS D
ON D.dept_id=E.dept_id
WHERE D.dept_name='HR' OR D.dept_name='Sales'

【讨论】:

以上是关于带有 JOIN 和 WHERE 子句的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

带有 WHERE 子句的 GROUP BY 以及 sql 中的 OR 的 LEFT JOIN

使用 wpdb prepare 安全地收集带有“join”的“where”子句数组

带有 LEFT JOIN 和 MAX 的 LibreOffice HSQLDB WHERE 子句?

SQL语句中,为啥where子句不能使用列别名,而order by却可以?

Linq-to-Entities:带有 WHERE 子句和投影的 LEFT OUTER JOIN

带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用