如何在 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_Id First_Name Last_Name Gender Age Date_of_join 1 Pranay Thanneru M 45 2000-10-09 2 Santhosh Prabhu M 48 1999-07-10 3 Mary clara F 34 2008-08-26 4 Jane Vatsal F 30 2006-02-31 5 Hardik prabhu M 22 2012-07-23
2. 项目(右表):id date Project_No Emp_id No_of_hours_worked 1 2005-03-15 147 3 162 2 2005-03-16 232 2 192 3 2005-03-17 276 1 198
要加入这两个表并获取公共信息,我们需要使用以下查询
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_Id First_Name Last_Name Gender Age Date_of_join Project_Assigned_date hours_worked 1 Pranay Thanneru M 45 2000-10-09 2005-03-17 198 2 Santhosh Prabhu M 48 1999-07-10 2005-03-16 192 3 Mary clara F 34 2008-08-26 2005-03-15 162 4 Jane Vatsal F 30 2006-02-31 [NULL] [NULL] 5 Hardik prabhu M 22 2012-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_id Salary_Inc Date 1 5 50000 2015-01-01 2 1 65000 2015-01-01 3 2 55000 2015-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_id First_Name Last_Name Gender age Date_of_join hours_worked Salary_Increment 1 Pranay Thanneru M 45 2000-10-09 198 65000 2 Santhosh Prabhu M 48 1999-07-10 192 55000 3 Mary clara F 34 2008-08-26 162 [NULL] 4 Jane Vatsal F 30 2006-02-31 [NULL] [NULL] 5 Hardik Prabhu M 22 2012-07-23 [NULL] 50000
因此,您可以看到我们多次使用 Left Join 将三个表中的数据合并到一个表中。
再考虑一张名为 Experience 的表:id Emp_name Experience 1 Pranay 5 2 Santhosh 4 3 Mary 3
在这里,我们结合了来自这些表 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_id First_Name Last_Name Project_Assigned_date EXP 1 Pranay Thanneru 2005-03-17 5 2 Santhosh Prabhu 2005-03-16 4 3 Mary clara 2005-03-15 3 4 Jane Vatsal [NULL] [NULL] 5 Hardik Prabhu [NULL] [NULL]
如您所见,SQL 中的 LEFT JOIN 可用于多个表。