Oracle – SQL表的连接
1. 笛卡尔连接(交叉连接 )
● 笛卡尔(Descartes)乘积
又叫直积。假设集合A = {a, b},集合B = {0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
● 笛卡尔(Descartes)连接
笛卡尔连接是指在SQL语句中没有写出表连接的条件,优化器把第一个表的每一条记录和第二个表的所有纪录相连接。如果第一个表的纪录数为m, 第二个表的纪录数为n,则会产生m*n条纪录数。
● 语法:
SELECT *
FROM table_1 CROSS JOIN table_2
2. 外部连接(OUTER JOIN)
外连接的连接查询结果集中既包含那些满足条件的行,还包含其中某个表的全部行
● 左(外)连接:LEFT OUTER JOIN
在连接查询中,左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么连接成功。如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL)。
左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不管左端的表中的数据是否满足连接条件,均输出左端表中的内容。
è语法
SELECT columns
FROM table_1 LEFT OUTER JOIN table_2 ON condition
|
● 右(外)连接:RIGHT OUTER JOIN
右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。
è语法:
SELECT columns
FROM table_1 RIGHT OUTER JOIN table_2 ON condition
|
● 全(外)连接:FULL OUTER JOIN
全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。
è语法:
SELECT columns
FROM table_1 FULL OUTER JOIN table_2 ON condition
|
3. 内部连接(INNER JOIN)
内连接的连接查询结果集中仅包含满足条件的行,内连接是SQL Server缺省的连接方式。
● 语法:
SELECT columns
FROM table_1 INNER JOIN table_2 ON condition
或者
SELECT columns
FROM table_1, table_2
WHERE condition
● 等值连接:
在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
|
● 自然连接:
在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
|
● 不等连接:
在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。
● 自连接:
一个表连接内连接自身。使用同一个表的相同列进行比较,这时对于同一个表应给出不同的别名。
|