SQLJOIN用于组合多个表并根据关系数据库中的公共字段检索数据。 我们可以使用规范化来确保和提高数据的完整性。在各种规范化形式中,数据被分布到多个逻辑表中。这些表使用引用约束(主键和外键)来强制SQLServer表中的数据完整性。SQLJOIN类型 SQL连接通过组合多个关系表来生成一个数据集。这些表使用键关联,具有一对一或一对多的关系。要想得到正确的数据,必须了解数据要求和连接机制。 SQLServer支持多个连接,并且每种方法都有特定的方式从多个表中检索数据。下图指定了支持的SQLServer连接。 SQL连接内连接INNERJOIN SQL内连接产生一个满足连接条件的数据集,其中包括来自左表的行,来自右表的匹配行。 SQL内连接 例子selectemployee。empid,employee。firstname,branch。branchname fromemployee innerjoinbranch onemployee。empidbranch。mgrid SQL内连接示例SQL自连接SELFJOIN 在SQL自连接中,SQLServer将表与自身连接。这意味着同一个表的名字在from子句中出现了两次。 SQL自连接 例子selecte。empid,e。firstname,m。firstname,m。empid fromemployeee innerjoinemployeem onm。empide。superid SQL自连接示例SQL交叉连接CROSSJOIN 交叉连接连接两个或多个不相关的表。 CROSSJOIN将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。 换句话说,交叉连接返回两个表中行的笛卡尔积。 交叉连接 例子selectemployee。empid,employee。firstname,branch。branchname fromemployee crossjoinbranch 交叉连接示例 如果第一个表有x行,第二个表有n行,则交叉连接在输出中给出xn行。 所以应该避免在较大的表上进行交叉连接,因为它可能会返回大量数据,这样的话数据库需要大量的计算能力(CPU、内存和IO)来处理。SQL外连接OUTERJOIN SQL外连接时,不仅会列出匹配的行,还会返回其他表中不匹配的行。不匹配的行取决于关键字left、right或full。左外连接LEFTOUTERJOIN SQL左外连接返回两个表的匹配行以及左表中不匹配的行。如果左表中的记录在右表中没有任何匹配的行,则显示具有NULL值的记录。 左外连接 例子selectemployee。empid,employee。firstname,branch。branchname fromemployee leftjoinbranch on employee。empidbranch。mgrid 左外连接示例右外连接RIGHTOUTERJOIN SQL右外连接返回两个表的匹配行以及右表中的不匹配行。如果右表中的记录在左表中没有任何匹配的行,则显示具有NULL值的记录。 SQL右外连接 例子selectemployee。empid,employee。firstname,branch。branchname fromemployee rightjoinbranch on employee。empidbranch。mgrid SQL右外连接示例全外连接FULLOUTERJOIN 完整外部联接在输出中返回以下行:两个表之间的匹配行。类似于左外连接的不匹配行:右表中不匹配行的NULL值。类似于右外连接的不匹配行:左表中不匹配行的NULL值。 全外连接 例子selectemployee。empid,employee。firstname,branch。branchname fromemployee fulljoinbranch on employee。empidbranch。mgrid 全外连接NULL值和SQL连接 假设我们在表列中有NULL值,并且我们在这些列上连接表。SQLServer是否匹配NULL值? NULL值彼此不匹配。因此,SQLServer无法返回匹配的行。