FROM join_table_1 join_type join_table_2
[ON (join_condition)]
/*
join_table指出参与联接操作的表名,联接可以对同一个表操作,也可以对多表操作,对同一个表操作的联接又称做自联接。
联接操作中的ON (join_condition) 子句指出联接条件,它由被联接表中的列和比较运算符、逻辑运算符等构成。
无论哪种联接都不能对text、ntext和image数据类型列进行直接联接,但可以对这三种列进行间接联接。
*/
INNER JOIN
内联接使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与联接条件相匹配的数据行。
根据所使用的比较方式不同,内联接又分为等值联接、自然联接和不等联接三种。
1.等值联接:在联接条件中使用等于号(=)运算符比较被联接列的列值,其查询结果中列出被联接表中的所有列,包括其中的重复列。
2.不等联接: 在联接条件使用除等于运算符以外的其它比较运算符比较被联接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3.自然联接:在联接条件中使用等于(=)运算符比较被联接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除联接表中的重复列。
内联接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和联接条件的行。
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。
OUTER JOIN
外联接分为左外联接(LEFT OUTER JOIN或LEFT JOIN)、右外联接(RIGHT OUTER JOIN或RIGHT JOIN)和全外联接(FULL OUTER JOIN或FULL JOIN)三种。
1.左向外联接:左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2.右向外联接:右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3.完整外部联接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
外联接时,它返回到查询结果集合中的不仅包含符合联接条件的行,而且还包括左表(左外联接时)、右表(右外联接时)或两个联接表(全外联接)中的所有数据行。
外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。
CROSS JOIN
交叉联接(CROSS JOIN)没有WHERE 子句,它返回联接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。