向我解释一个MySQL查询

向我解释一个MySQL查询,mysql,sql,Mysql,Sql,我很难弄清楚下面的mysql查询是如何工作的 SELECT dp.name, COUNT(em.dp) as employees FROM dp LEFT JOIN em ON dp.name=em.dp GROUP BY dp.name HAVING COUNT(em.dp) = 2; 它只是显示哪些部门有2名员工。以下是两张表格: em ---- id full_name dp dp ---- id name 这些是我输入的一些条目 INSERT INTO em (full_n

我很难弄清楚下面的mysql查询是如何工作的

SELECT dp.name, COUNT(em.dp) as employees 
FROM dp LEFT JOIN em ON dp.name=em.dp 
GROUP BY dp.name 
HAVING COUNT(em.dp) = 2;
它只是显示哪些部门有2名员工。以下是两张表格:

em
----
id
full_name
dp


dp
----
id
name
这些是我输入的一些条目

INSERT INTO em (full_name, dp) VALUES ('Chris', 'ENG'), ('Steve', 'HR'), ('Mike', 'ACC'), ('Marvin', 'ACC');
INSERT INTO dp (name) VALUES ('ENG'), ('HR'), ('ACC');

有人能简单明了地解释一下上述问题吗?如首先发生的情况等。

查询将dp.name中的所有部门分组,并返回该部门的员工人数

要将其可视化,您可以绘制一个包含两个表中所有列的表,这实际上是您的连接


然后,您可以从上面的表中一次一个地提取每个部门的名称,为每个部门创建一行,这就是GROUP by所做的,并检查该部门在第一个表(计数函数)中显示的次数,从而绘制出第二个表。

您尝试过使用mysql EXPLAIN命令吗?您可以从mysql控制台访问它

我认为更相关的问题是,你希望它返回什么?这是一个相当直截了当的问题。返回dp中的所有内容以及ep中的任何匹配项,其中每个dp中正好有2个匹配项。名称您是否在任何文档中查找了GROUP BY和Have?@SeanRedmond我已查找了文档,我了解如何连接、分组BY和处理简单案例,但我不明白他们是如何合作的。@JenZhang你对哪一部分有理解上的问题?我认为OP部分需要了解SQL中的计算流程。通常,应按照以下模式读取任何查询:FROM-WHERE-GROUP-BY-HAVING-SELECT-ORDER-BY。将其应用于上面的查询。这很容易。