📜  如何在 SQL 中左连接多个表

📅  最后修改于: 2022-05-13 01:54:26.307000             🧑  作者: Mango

如何在 SQL 中左连接多个表

Left Join 是在 SQL 中编写查询时使用的关键字之一。在 SQL 中,我们通常使用 Join 来通过从具有匹配记录的两个表中取出公共数据(如行或记录或元组)来形成新表。

在这里,当谈到 SQL 中的左连接时,它只返回左表中的所有记录或元组或行,并且只返回右表中匹配的那些记录。

左连接的语法:

SELECT column names
FROM table1
LEFT JOIN table2
ON table1.matching_column = table2.matching_column;

注意:例如,如果您有一个包含 10 行的左表,则在对两个表应用连接操作后,您保证至少有 10 行。

考虑两个表:



1. 员工(左表):

Emp_IdFirst_NameLast_NameGenderAgeDate_of_join
1PranayThanneruM452000-10-09
2SanthoshPrabhuM481999-07-10
3MaryclaraF342008-08-26
4JaneVatsalF302006-02-31
5HardikprabhuM222012-07-23

2. 项目(右表):

iddateProject_NoEmp_idNo_of_hours_worked
12005-03-151473162
22005-03-162322192
32005-03-172761198

要加入这两个表并获取公共信息,我们需要使用以下查询

SELECT E.Emp_id, E.First_Name, E.Last_Name, E.Gender, E.age, E.Date_of_join,    
       P.date AS Project_Assigned_date, P.No_of_hours_worked AS hours_worked
FROM Employee E
LEFT JOIN Projects P
ON E.Emp_id = P.Emp_id
GROUP BY E.Emp_id;

执行查询后获得的表将如下所示:

Emp_IdFirst_NameLast_NameGenderAgeDate_of_joinProject_Assigned_datehours_worked
1PranayThanneruM452000-10-092005-03-17198
2SanthoshPrabhuM481999-07-102005-03-16192
3MaryclaraF342008-08-262005-03-15162
4JaneVatsalF302006-02-31[NULL][NULL]
5HardikprabhuM222012-07-23[NULL][NULL]

  • 获得表后,您可以看到没有为 Project_Assigned_date 的项目分配的 Emp_id 变为 NULL,No_of_hours_worked 也变为 NULL,因为 Employee 没有分配任何事情要做。
  • 这里 Left Join 的意思是基于上述表,它从匹配的表行中获取数据,它还返回表 2 中不存在数据的行的值作为 NULL 因为我们需要考虑所有的数据左表。

一个查询中的多个 LEFT JOIN:
有时您需要 LEFT JOIN 两个以上的表来获取特定分析所需的数据。幸运的是,LEFT JOIN 关键字可以与 SQL 中的 MULTIPLE TABLES 一起使用。

考虑一个名为 Salary 的表:

id Emp_idSalary_IncDate
15500002015-01-01
21650002015-01-01
32550002015-01-01

在这里,我们结合了来自这些表 Employee、Projects 和 Salary 的数据。

为此,需要按以下格式编写查询:



SELECT E.Emp_id, E.First_Name, E.Last_Name, E.Gender, E.age, E.Date_of_join,  
   P.No_of_hours_worked AS hours_worked, S.Salary_inc AS Salary_Increment
FROM Employee E
LEFT JOIN Projects P
ON E.Emp_id = P.Emp_id
LEFT JOIN Salary S
ON E.Emp_id = S.Emp_id;

结果表在多次 Left Join之后看起来像:

Emp_idFirst_NameLast_NameGenderageDate_of_joinhours_workedSalary_Increment
1PranayThanneruM452000-10-0919865000
2SanthoshPrabhuM481999-07-1019255000
3MaryclaraF342008-08-26162[NULL]
4JaneVatsalF302006-02-31[NULL][NULL]
5HardikPrabhuM222012-07-23[NULL]50000

因此,您可以看到我们多次使用 Left Join 将三个表中的数据合并到一个表中。

再考虑一张名为 Experience 的表:

idEmp_nameExperience
1Pranay5
2Santhosh4
3Mary3

在这里,我们结合了来自这些表 Employee、Projects 和 Experience 的数据。

为此,需要按以下格式编写查询:

SELECT E.Emp_id, E.First_Name, E.Last_Name, P.date AS Project_Assigned_date, 
E1.Experience AS EXP
FROM Employee E
LEFT JOIN Projects
 P
ON E.Emp_id = P.Emp_id
LEFT JOIN Experience E1
ON E.Emp_id = E1.id;

多个左连接后的结果表如下所示:

Emp_idFirst_NameLast_NameProject_Assigned_dateEXP
1PranayThanneru2005-03-175
2SanthoshPrabhu2005-03-164
3Maryclara2005-03-153
4JaneVatsal[NULL][NULL]
5HardikPrabhu[NULL][NULL]

如您所见,SQL 中的 LEFT JOIN 可用于多个表。