连接分为三种:内连接、外连接、交叉连接(即笛卡尔积)。
内连接和外连接的区别:
内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行。
内连接可分为: 等值连接、自然连接、和不等值连接。
重复列名:(1)使用表名前缀在多个表中区分相同的列。(2)不同表中具有相同列名的列可以用表的别名加以区分。
等值连接:两个表中可以没有相同的属性列,但必须具有等值的列。
不等值连接示例:查询员工姓名,月薪,薪水级别。
自连接:同一个表中自己与自己连接查询结果。
例:查询employees表,返回“Xxx works for Xxx”(表示上下级关系:员工为老板工作)
自然连接:NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。如果只是列名相同而数据类型不同,则会产生错误。
也可以写成等连接格式:
外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+)。
外连接可分为: 左外连接、右外连接、和满外连接。
左(或右)外连接:使用外连接可以查询不满足连接条件的数据;外连接的符号是 (+),可避免出现空值数据。
例:
使用SQL: 1999 语法的左(或右)外连接:
满外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行。
交叉连接(笛卡尔积)产生条件:省略连接条件、连接条件无效、所有表中的所有行互相连接
例:假设employees表有107条数据,departments表有27条数据,两表连接关系为107*27=2889条数据。