`

数据库等值连接,左连接,右连接的区别

 
阅读更多

inner join(等值连接) 只返回两个表中联结字段相等的行

 

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

 

INNER JOIN 语法:

 

INNER JOIN 连接两个数据表的用法:

 

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号

 

INNER JOIN 连接三个数据表的用法:

 

SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号

 

INNER JOIN 连接四个数据表的用法:

 

SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN

表4 ON Member.字段号=表4.字段号

 

INNER JOIN 连接五个数据表的用法:

 

SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号

 

连接六个数据表的用法:略,与上述联接方法类似,大家举一反三吧:)

 

注意事项:

在输入字母过程中,一定要用英文半角标点符号,单词之间留一半角空格;

在建立数据表时,如果一个表与多个表联接,那么这一个表中的字段必须是“数字”数据类型,而多个表中的相同字段必须是主键,而且是“自动编号”数据类型。否则,很难联接成功。

代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后在后括号后面继续添加“INNER JOIN 表名X ON 表1.字段号=表X.字段号”代码即可,这样就可以无限联接数据表了:)

1.理论

只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。

个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来。

语法

select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

INNER JOIN 操作包含以下部分:

部分说明

 

table1, table2要组合其中的记录的表的名称。

field1,field2要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。

compopr

 任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。      

说明

可以在任何 FROM 子句中使用 INNER JOIN 操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。

可以将 INNER JOIN 用于 Departments 及 Employees 表,以选择出每个部门的所有雇员。而要选择所有部分(即使某些部门中并没有被分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以通过 LEFT JOIN 或者 RIGHT JOIN 操作来创建外部联接。

如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。

可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指 Categories.CategoryID。

也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:

SELECT fields

FROM table1 INNER JOIN table2

ON table1.field1 compopr table2.field1 AND

ON table1.field2 compopr table2.field2 OR

ON table1.field3 compopr table2.field3;

也可以通过如下语法嵌套 JOIN 语句:

SELECT fields

FROM table1 INNER JOIN

(table2 INNER JOIN [( ]table3

[INNER JOIN [( ]tablex [INNER JOIN ...)]

ON table3.field3 compopr tablex.fieldx)]

ON table2.field2 compopr table3.field3)

ON table1.field1 compopr table2.field2;

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。

 

2.操作实例

表A记录如下:

aID               aNum

1                  a20050111

2                  a20050112

3                  a20050113

4                  a20050114

5                  a20050115

表B记录如下:

bID               bName

1                   2006032401

2                  2006032402

3                  2006032403

4                  2006032404

8                  2006032408

 

实验如下:

1.left join

sql语句如下:

select * from A

left join B

on A.aID = B.bID

结果如下:

aID               aNum                          bID                  bName

1                   a20050111                1                      2006032401

2                   a20050112                2                     2006032402

3                   a20050113                3                     2006032403

4                   a20050114                4                     2006032404

5                   a20050115                NULL              NULL

(所影响的行数为 5 行)

结果说明:

               left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).

B表记录不足的地方均为NULL.

2.right join

sql语句如下:

select * from A

right join B

on A.aID = B.bID

结果如下:

aID               aNum                          bID                  bName

1                   a20050111                1                      2006032401

2                   a20050112                2                     2006032402

3                   a20050113                3                     2006032403

4                   a20050114                4                     2006032404

NULL           NULL                          8                     2006032408

(所影响的行数为 5 行)

结果说明:

        仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

 

3.inner join

sql语句如下:

select * from A

innerjoin B

on A.aID = B.bID

结果如下:

aID               aNum                          bID                  bName

1                   a20050111                1                      2006032401

2                   a20050112                2                     2006032402

3                   a20050113                3                     2006032403

4                   a20050114                4                     2006032404

结果说明:

        很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.  还有就是inner join 可以结合where语句来使用 如:   select * from A innerjoin B on A.aID = B.bID where b.bname='2006032401' 这样的话 就只会放回一条数据了

分享到:
评论

相关推荐

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

    1. 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值。 2. 不等连接:在连接条件中使用除等于运算符以外的其它比较运算符比较被连接的列的列值。 3. 自然连接:在连接条件中使用等于(=)运算符比较被...

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

    这种连接类型又可以细分为等值连接、自然连接和不等连接。等值连接基于两个表的特定列的值相等;自然连接进一步考虑了两个表中相同列的名称和数据类型;不等连接则允许使用不等于运算符进行匹配。 2. **外连接...

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

    它又分为等值连接、自然连接和不等连接。等值连接是基于两个表中指定列的值相等来匹配行;自然连接不仅考虑列值相等,还会自动匹配具有相同名称和数据类型的列;而不等连接则是基于不等的比较运算符来筛选结果。 外...

    java 实现两张表的等值连接

    在数据库领域,等值连接(Equi-Join)是一种常见的操作,它用于将两个或多个表的数据基于一个或多个共享的列进行合并。在Java编程中,虽然原生的Java库并不直接支持数据库查询,但我们可以通过编写代码来模拟等值...

    剖析MySQL左连接右连接等值连接异同.pdf

    根据文件中提供的信息,我们可以详细探讨MySQL中的不同连接类型,包括左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)以及等值连接的概念和它们之间的异同。 首先,我们需要明确什么是“连接”...

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

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

    数据库一般连接.pptx

    * 连接操作的条件:连接操作的条件需要根据实际情况选择,例如,等值连接、非等值连接等。 * 连接操作的优化:连接操作的优化非常重要,需要根据实际情况选择合适的优化方法。 数据库一般连接是关系数据库管理系统...

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

    - **等值连接**:基于相等的比较运算符(=)来匹配两个表的记录。 - **不等连接**:使用不等于()、大于(&gt;)、小于(&lt;)等其他比较运算符来匹配记录。 - **自然连接**:除了等值连接外,还会自动去除重复列,...

    Gbase 8s查询之连接查询

    在 Gbase 8s 中,连接查询可以使用各种形式的连接谓词,例如使用等值连接、不等值连接、存在连接等。连接谓词可以是简单的条件,例如将两个表中的某一列相等,也可以是复杂的条件,例如使用子查询或 EXISTS 子句。 ...

    数据库系统概论数据查询之连接查询.pdf

    1. **等值连接**:等值连接是最常见的连接类型,通过比较不同表中的相同列的值来连接两个或更多表。例如,`SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno = SC.Sno` 这样的查询将`Student`表和`SC`...

    Oreacle数据库多表连接练习题(包答案)

    这不仅涵盖了基础的等值连接、非等值连接,还包括了SQL-99标准下的连接方式,如自然连接、使用ON子句的连接、使用USING子句的连接以及左连接。 ### 等值连接练习题 #### 练习1 **题目:** 显示所有员工姓名,部门...

    数据库实验报告——数据库的简单查询和连接查询

    - 等值连接、自然连接和笛卡尔积等连接类型,以获取学生和他们所选课程的完整信息。 - 外连接(左连接、右连接)和内连接,以满足特定查询需求,如查找所有学生及其选修课程,或者找到选修特定课程且成绩高于90分的...

    数据库作业7:SQL练习4 – SELECT(连接查询、嵌套查询)

    连接查询—(1)等值与非等值连接查询:等值连接:连接运算符为=(对比关系代数中的等值连接) 【例3.49】查询每个学生及其选修课程的情况. SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno; 从两...

    数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf

    连接类型主要包括等值连接、非等值连接、外部连接(左外连接、右外连接、全外连接)以及内部连接。等值连接是最常见的,它基于两个表中的特定列相等的条件来匹配行。非等值连接则是基于列之间的不等条件进行连接。...

    数据库报告

    一般连接允许非等值连接,外连接(包括左连接和右连接)则会返回所有左表或右表的记录,即使在另一表中没有匹配项;内连接仅返回两表中匹配的记录。 实验中,学生需要通过SQL语句实现这些查询,例如,查找选修C1且...

    分布式平台等值连接优化技术分析.pdf

    等值连接操作可以广泛应用于传统的关系型数据库查询中,同时也是大数据分析处理中的一个基础环节。由于分布式平台的节点众多,存储和计算资源都是分布式的,传统的等值连接优化方法在分布式环境中难以实施,或者会...

    MySQL数据库:交叉连接和内连接.pptx

    在这样的情形下,通常要使用WHERE子句设定条件来将结果集减少为易于管理的大小,这样的连接即为等值连接。 ;交叉连接和内连接; 【例】 查找Bookstore数据库中客户订购的图书书名,订购册数和订购时间。 SELECT Book....

    浅谈《SQL Server数据库》教学中的连接查询和嵌套查询.pdf

    内连接可以根据比较方式分为等值连接、不等连接和自然连接三种,等值连接使用等号( = )运算符比较被连接的列的列值,不等连接使用除等于运算符以外的其它比较运算符比较被连接的列的列值,而自然连接使用等于( = )...

    数据库实验报告-数据库的简单查询和连接查询

    通过实践,学生将进一步掌握涉及一个以上数据表的查询技巧,包括等值连接、自然连接、非等值连接、自身连接、外连接和复合条件连接。 ### 实验原理 #### SQL Server查询分析器 查询分析器是SQL Server提供的一种...

    sql 左连接和右连接的使用技巧(left join and right join)

    在众多的连接类型中,左连接(LEFT JOIN)和右连接(RIGHT JOIN)是两种常用的外连接方式,它们允许我们处理不完全匹配的数据情况。 左连接的主要特点是保留左表(也就是在FROM子句中先出现的表)的所有记录,即使...

Global site tag (gtag.js) - Google Analytics