SQL Server连接(内连接、外连接、交叉连接)
连接查询概念:根据两个表或多个表的列之间的关系,从这些表中查询数据。
笛卡尔积:返回的是两表的乘积。
首先,新建表:
1 | --表结构 |
内连接
注:INNER可省略
典型的联接运算,使用像 = 或 <> 之类的比较运算符。
显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。
示例:
1 | SELECT * FROM [Student] INNER JOIN Score ON Student.ID= Score.StudentID |
隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积。
1 | SELECT * FROM [Student],Score WHERE Student.ID= Score.StudentID |
交叉连接
** 隐式交叉连接,没有CROSS JOIN**
1 | SELECT * FROM [Student],Score WHERE Student.ID= Score.StudentID |
** 显式交叉连接,使用CROSS JOIN**
1 | SELECT * FROM [Student] CROSS JOIN Score WHERE Student.ID= Score.StudentID |
以上两条sql 执行结果是相同的。
外连接
左连接
语法:LEFT JOIN 或 LEFT OUTER JOIN
1 | SELECT * FROM [Student] LEFT OUTER JOIN Score ON Student.ID= Score.StudentID |
左连接显示左表全部行,右表如果匹配,则显示;不匹配,显示Null。
右连接
语法:RIGHT JOIN 或 RIGHT OUTER JOIN
1 | SELECT * FROM [Student] right OUTER JOIN Score ON Student.ID= Score.StudentID |
右连接显示右表全部行,左表如果匹配,则显示;不匹配,显示Null。
全连接
语法:FULL JOIN 或 FULL OUTER JOIN
1 | SELECT * FROM [Student] full JOIN Score ON Student.ID= Score.StudentID |
返回左表和右表中的所有行
参考: