`

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

 
阅读更多

第一部分、查询理论

连接查询方式有:

内连接、外连接(左连接、右连接、全连接)、交叉连接

左连接和右连接的区别:

左连接以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为NULL;右连接刚好相反。

全连接就是先以左表进行左外连接,然后以右表进行右外连接。

说明:所谓的基准,就是以某张表的限制条件查询条件为准!

具体如下:

一、内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<、!=和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

二、外连接

返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

三、交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

第二部分、实例说明

  • 实例

Book表:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

 Student表:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

一、内连接

select *

from [Book] as b,[Student] as s

where b.StudentId=s.StudentId

等价于如下(也可以不要关键字inner,此为系统默认),但这种方法不能再用left join等外连接了

select *

from [Book] as b inner join [Student] as s

ON b.StudentId=s.StudentId

这种方法还可以加and条件,并且后面可能接着用left join等外连接

         结果为:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

         执行过程

相当于内连接的向右连接。以from  [Book] inner join [Student]等式右边为基准,即以Student表(等式右表,s表)的s.StudentId为基准,遍历Book表(等式左表,Book表)中与之匹配的b.StudentId,然后拼接返回。结果含有重复的列,b.StudentId和s.StudentId。

说明

这与where b.StudentId=s.StudentId或者s.StudentId=b.StudentId位置没有关系。它仅仅代表满足条件而已,不判定谁为基准。以下外连接,交叉连接相同操作。

二、外连接

1、左外连接

代码

select *

from [Book] as b left join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] left join [Student]的Book表为基准,即以Book表(b表)的b.StudentId为基准。遍历Student表(s表)中与之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配项,则进行拼接,然后遍历Student表的下一条s.StudentId,当查询完毕则进入下一条b.StudentId。若b.StudentId没有相应s.StudentId匹配项时,则显示左表的项,拼接右表的项显示为NULL。

2、右外连接

代码

select *

from [Book] as b right join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] right join [Student]的Student表为基准,即以Student表(s表)的s.StudentId为基准。遍历Book表(b表)中与之匹配的s.StudentId。若s.StudentId含有b.StudentId匹配项,则进行拼接,然后遍历Book表的下一条b.StudentId,当查询完毕则进入下一条s.StudentId。若s.StudentId没有相应b.StudentId匹配项时,则显示右表的项,拼接左表的项显示为NULL。

3、全外连接

代码

select *

from [Book] as b full outer join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] full outer join [Student]中先以Book表进行左外连接,然后以Student表进行右外连接。

三、交叉连接

代码

select *

from [Book] as b CROSS Join [Student] as a

Order by b.BookId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即是按照Order排序的Id,把要Join的右表无条件拼接过来。这样依次执行,这样这种记录便为两个表的记录的笛卡尔积。

分享到:
评论

相关推荐

    SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接

    本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...

    数据库:左连接、右连接、全连接

    外连接(OUTER JOIN)是一种连接操作,用于查询多个表中的数据,但不 sadece 返回符合连接条件的数据行,而是返回左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。外连接可以分为三种...

    数据库表连接(内外、左右连接).docx

    - 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN):与左外连接相反,返回右表的所有行,左表中没有匹配的行同样填充NULL。 - 全外连接(FULL OUTER JOIN 或 FULL JOIN):返回两个表的所有行,无论是否存在匹配。如果...

    数据库表连接(内外、左右连接).pdf

    本文主要探讨了四种基本的表连接类型:内连接、外连接(包括左外连接、右外连接)以及交叉连接。 首先,内连接(INNER JOIN)基于指定的连接条件,返回两个表中匹配的行。它又分为等值连接、自然连接和不等连接。...

    SQL左连接,右连接,内连接,交叉连接,自连接

    根据连接的方式不同,可以分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)、全连接(FULL JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。每种连接类型都有其特定的应用场景和使用...

    SQL_左外连接_右外连接_全连接_内连接

    右外连接与左外连接相反,返回右表的所有行,即使在左表中没有匹配的行。对于左表中没有匹配的行,结果集中的相应列将是NULL。 ```sql SELECT authors.*, publishers.* FROM authors RIGHT JOIN publishers ...

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    根据连接的方式和结果,SQL连接可以分为内连接、左连接、右连接、全连接和交叉连接等多种类型。 内连接 内连接是最基本的连接类型,它将两个表格中的数据根据某个条件连接起来。内连接可以分为等值连接、不等值...

    右连接、左连接、全连接、内连接、交叉连接、自连接.pdf

    交叉连接返回两个表的笛卡尔积,即每个左表的记录与右表的每个记录组合。如果没有WHERE子句,结果将是左表的行数乘以右表的行数。这通常会产生大量的记录,除非有明确的筛选条件。 6. **自连接**: 自连接是将同...

    数据库连接表查询

    交叉连接(CROSS JOIN)是一种特殊的连接方式,它返回的是参与连接的两个表的所有可能组合,即两个表的笛卡尔积。这种连接不包含任何连接条件,因此返回的结果集大小通常是两个表的记录数相乘。 **分类:** 交叉...

    SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf

    右外连接与左外连接相反,返回右表的所有行,如果在左表中没有匹配的行,则左表的字段将为NULL。因此,当`a.id`不等于`b.parent_id`时,`a.*`列在结果中将是NULL。 4. **全连接(FULL OUTER JOIN)**: 全连接...

    数据库内连接、外连接.ppt.ppt

    2. 右外连接(RIGHT JOIN):与左外连接相反,它返回右表的所有记录,以及与左表匹配的记录。左表中没有匹配的记录时,相应列填充NULL。 ```sql SELECT 列名表 FROM 表名1 RIGHT JOIN 表名2 ON 条件表达式 ``` 3. ...

    sql内连接和外连接

    ### SQL内连接与外连接详解 #### 一、SQL内连接(INNER JOIN) **定义**: 内连接(INNER JOIN)是一种最常用的连接方式,它仅返回两个数据集合中具有匹配关系的那些行。具体来说,它会从位于两个互相交叉的数据...

    数据库 左连接 右连接 全连接用法小结

    - **右外连接(RIGHT JOIN)**:与左连接相反,返回右表的所有记录,以及与左表匹配的记录。左表中没有匹配的记录将显示为NULL。 - **全外连接(FULL JOIN)**:返回两个表的所有记录,如果在其中一个表中没有匹配...

    数据库表连接

    右外连接与左外连接相反,返回右表的所有记录,即使左表中没有匹配。如果左表中没有匹配,则结果集中相应的列包含NULL值。 ```sql SELECT O.ID, O.ORDER_NUMBER, O.CUSTOMER_ID, C.ID, C.NAME FROM ORDERS O ...

    oracle左右连接方法

    本文将详细介绍Oracle中的左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)、全连接(Full Join)以及交叉连接(Cross Join)的方法,并通过示例来帮助理解每种连接的特点。 ### 一、左连接(Left...

    数据库各种join连接

    Join连接可以分为交叉连接、内连接和外连接三种类型。 一、交叉连接(Cross Join) 交叉连接也叫笛卡尔积,返回的是两表的乘积。交叉连接有两种,显式的和隐式的,不带on子句。例如: 语句 1:隐式的交叉连接,...

    自连接外连接

    - **右外连接(Right Outer Join)**:与左外连接相反,优先显示右侧表的所有记录,左侧表中未找到匹配项时显示为`NULL`。 - 示例代码: ```sql SELECT t.*, s.* FROM teacher t RIGHT JOIN student s ON t.id ...

    SQL连接查询数据库操作

    交叉连接是一种特殊的连接类型,它返回左表和右表的所有可能组合。这意味着如果左表有m行,右表有n行,则结果集将包含m*n行。然而,除非有特定需求,否则交叉连接很少在实际应用中使用,因为其结果通常包含大量冗余...

    Oracle外连接查询

    与左外连接相反,右外连接返回右表的所有记录,即使在左表中没有匹配的记录。等价的旧式写法是将`(+)`符号放置在等于号的右侧,如`SELECT e.last_name, e.department_id, d.department_name FROM employees e, ...

Global site tag (gtag.js) - Google Analytics