Join用于组合来自多个表的记录.根据这些表中的公共列/值连接表.
可以使用不同类型的连接.
内部加入
左外加入
右外加入
全外加入
自助加入
交叉加入
笛卡尔生产加入
INNER JOIN
Inner Join合并多个表中的记录并返回两个表中存在的值.
语法
以下是INNER JOIN语句的语法.
SELECT col1, col2, col3…. FROM Table-1 INNER JOIN Table-2 ON (col1 = col2);
示例
考虑以下员工表和工资表.
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 2007年4月25日 | 2 | 3/5/1983 |
103 | Peter | Paul | 2007年3月21日 | 2 | 4/1/1983 |
104 | Alex | Stu art | 2008年2月1日 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
EmployeeNo | Gross | 扣除 | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
以下查询连接Employee表和Sa.公共列EmployeeNo上的lary表.每个表都分配了一个别名A& B和列用正确的别名引用.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A INNER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo);
执行上述查询时,返回以下记录.员工105未包含在结果中,因为它在薪资表中没有匹配的记录.
*** Query completed. 4 rows found. 3 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo NetPay ----------- ------------ ----------- 101 1 36000 102 2 74000 103 2 83000 104 2 70000
外部加入
LEFT OUTER JOIN和RIGHT OUTER JOIN也结合了多个表的结果.
LEFT OUTER JOIN 返回左表中的所有记录,只返回右表中的匹配记录.
RIGHT OUTER JOIN 返回右表中的所有记录,只返回左表中匹配的行.
FULL OUTER JOIN 结合了LEFT OUTER和RIGHT OUTER JOINS的结果.它返回连接表中匹配和不匹配的行.
语法
关注是OUTER JOIN语句的语法.你需要使用LEFT OUTER JOIN,RIGHT OUTER JOIN或FULL OUTER JOIN中的一个选项.
SELECT col1, col2, col3…. FROM Table-1 LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN Table-2 ON (col1 = col2);
示例
考虑以下LEFT OUTER JOIN查询示例.它返回Employee表中的所有记录和Salary表中的匹配记录.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A LEFT OUTER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo) ORDER BY A.EmployeeNo;
执行上述查询时,会产生以下输出.对于员工105,NetPay值为NULL,因为它在Salary表中没有匹配的记录.
*** Query completed. 5 rows found. 3 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo NetPay ----------- ------------ ----------- 101 1 36000 102 2 74000 103 2 83000 104 2 70000 105 3 ?
CROSS JOIN
交叉连接将左表中的每一行连接到右表中的每一行.
语法
以下是CROSS JOIN语句的语法.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay FROM Employee A CROSS JOIN Salary B WHERE A.EmployeeNo = 101 ORDER BY B.EmployeeNo;
执行上述查询时,会产生以下输出. Employee表中的EmployeeNo 101与Salary Table中的每条记录一起加入.
*** Query completed. 4 rows found. 4 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo EmployeeNo NetPay ----------- ------------ ----------- ----------- 101 1 101 36000 101 1 104 70000 101 1 102 74000 101 1 103 83000