当涉及到多个数据表时,JOIN是SQL中最常用的操作之一。JOIN的作用是将多个数据表中的数据组合在一起,从而使用户可以根据不同的条件组合过滤和查询多个表中的数据,最终提取记录形成一个新的结果集,实现数据关联和查询分析。
常见的 join 类型包括:
这些 join 类型可以根据数据集之间的关系和需求来选择,以便于得到所需的结果。
为了可以更好的理解不同Join类型的区别以及用法,我们下面举一个例子来进一步解析。
INNER JOIN
内连接是最基本的连接类型,它仅返回两个数据表中共有的记录或行。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
INNER JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpID, Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
INNER JOIN Projects ON Employee.EmpID=Projects.EmpID;
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有EmpID为1、2、3、5的数据在两个表里共同存在。其他ID比如4或者9、8、7对应的数据仅在T1或者T2出现。所以最终只返回了EmpID为1、2、3、5的数据。
LEFT JOIN
LEFT JOIN 或 LEFT OUTER JOIN 返回左表中的所有记录以及右表中与左表匹配条件相符的记录。如果右表中没有匹配的记录,则在输出或结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
LEFT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
LEFT JOIN
ON Employee.EmpID = Projects.EmpID ;
输出
解析
在这个例子中,当我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有T1有EmpID为4的信息T2中并没有,因为没有匹配到有关EmpID为4的ProjectID以及ProjectName所以在返回的结果集中返回为NULL。
RIGHT JOIN
RIGHT JOIN 或 RIGHT OUTER JOIN与左连接类似,但返回的是右表中的所有记录以及左表中满足条件的记录,对于左表中没有匹配值的记录,则在输出或结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
RIGHT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
RIGHT JOIN
ON Employee.EmpID = Projects.EmpID;
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有T2有EmpID为9、7、8的信息T1中并没有,因为没有匹配到有关EmpID为9、7、8的EmpFname以及EmpLname所以在返回的结果集中返回为NULL。
FULL JOIN
Full Join或Full Outer Join返回左表和右表中满足匹配项(MatchingColumnName)的所有记录,并根据匹配条件组合在一起。如果在左表或右表中没有匹配的记录,则在结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
FULL JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID
FROM Employee
FULL JOIN Projects
ON Employee.EmpID = Projects.EmpID;
FROM Employee
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现个别EmpID对应的ProjectID或者EmpFname、EmpLname没有匹配的信息。比如T1中没有T2中EmpID为9对应的数据,所以在返回的结果集中返回为NULL。
当涉及到多个数据表时,JOIN是SQL中最常用的操作之一。JOIN的作用是将多个数据表中的数据组合在一起,从而使用户可以根据不同的条件组合过滤和查询多个表中的数据,最终提取记录形成一个新的结果集,实现数据关联和查询分析。
常见的 join 类型包括:
这些 join 类型可以根据数据集之间的关系和需求来选择,以便于得到所需的结果。
为了可以更好的理解不同Join类型的区别以及用法,我们下面举一个例子来进一步解析。
INNER JOIN
内连接是最基本的连接类型,它仅返回两个数据表中共有的记录或行。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
INNER JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpID, Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
INNER JOIN Projects ON Employee.EmpID=Projects.EmpID;
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有EmpID为1、2、3、5的数据在两个表里共同存在。其他ID比如4或者9、8、7对应的数据仅在T1或者T2出现。所以最终只返回了EmpID为1、2、3、5的数据。
LEFT JOIN
LEFT JOIN 或 LEFT OUTER JOIN 返回左表中的所有记录以及右表中与左表匹配条件相符的记录。如果右表中没有匹配的记录,则在输出或结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
LEFT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
LEFT JOIN
ON Employee.EmpID = Projects.EmpID ;
输出
解析
在这个例子中,当我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有T1有EmpID为4的信息T2中并没有,因为没有匹配到有关EmpID为4的ProjectID以及ProjectName所以在返回的结果集中返回为NULL。
RIGHT JOIN
RIGHT JOIN 或 RIGHT OUTER JOIN与左连接类似,但返回的是右表中的所有记录以及左表中满足条件的记录,对于左表中没有匹配值的记录,则在输出或结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
RIGHT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
RIGHT JOIN
ON Employee.EmpID = Projects.EmpID;
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现只有T2有EmpID为9、7、8的信息T1中并没有,因为没有匹配到有关EmpID为9、7、8的EmpFname以及EmpLname所以在返回的结果集中返回为NULL。
FULL JOIN
Full Join或Full Outer Join返回左表和右表中满足匹配项(MatchingColumnName)的所有记录,并根据匹配条件组合在一起。如果在左表或右表中没有匹配的记录,则在结果集中显示NULL值。
语法:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
FULL JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
示例
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID
FROM Employee
FULL JOIN Projects
ON Employee.EmpID = Projects.EmpID;
FROM Employee
输出
解析
在这个例子中,我们连接了两个表T1(Employee Table)和T2(Project Table),并使用两个表共同的column_name列也就是EmpID进行连接。此时我们会发现个别EmpID对应的ProjectID或者EmpFname、EmpLname没有匹配的信息。比如T1中没有T2中EmpID为9对应的数据,所以在返回的结果集中返回为NULL。