在运用关系数据库时,咱们经常会用到连接多张表来获取记录。针对左连接,右连接,内连接等各样连接,新手常常容易理不清,因此呢作如下记录,以下以oracle为例:
1、内联接(典型的联接运算,运用像 = 或 <> 之类的比较运算符)。包含相等联接和自然联接。
内联接运用比较运算符按照每一个表共有的列的值匹配两个表中的行。例如,检索 a和b表中a的id号和b的parent_id号相同的所有行:select a.*,b.* from a inner join b on a.id=b.parent_id 。
2、外联接。外联接能够是左向外联接、右向外联接或完整外边联接。
在 FROM子句中指定外联接时,能够由下列几组关键字中的一组指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包含 LEFT OUTER子句中指定的左表的所有行,而不仅是联接列所匹配的行。倘若左表的某行在右表中无匹配行,则在关联联的结果集行中右表的所有选取列表列均为空值。例如: select a.*,b.* from a left join b on a.id=b.parent_id 。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。倘若右表的某行在左表中无匹配行,则将为左表返回空值。例如: select a.*,b.* from a right join b on a.id=b.parent_id 。
3)FULL JOIN 或 FULL OUTER JOIN
完整外边联接返回左表和右表中的所有行。当某行在另一个表中无匹配行时,则另一个表的选取列表列包括空值。倘若表之间有匹配行,则全部结果集行包括基表的数据值。例如:select a.*,b.* from a full join b on a.id=b.parent_id 。
3、交叉联接
交叉联接有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,亦叫笛卡尔积。
语句1:隐式的交叉连接,无CROSS JOIN。例如:select o.id, o.order_number, c.id, c.name from orders o , customers c where o.id=1;;
语句2:显式的交叉连接,运用CROSS JOIN。例如:select o.id,o.order_number,c.id, c.name from orders o cross join customers c where o.id=1;
语句1和语句2的结果是相同的。