`

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

 
阅读更多

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' 这样的话 就只会放回一条数据了

分享到:
评论

相关推荐

    java 实现两张表的等值连接

    java 用排序-合并算法实现两张表的等值连接

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

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

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

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

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

    等值连接:连接运算符为"=" ⾃然连接:把⽬标列中重复的属性列去掉。 在SQL中没有⾃然连接,即⾃动把冗余部分删掉,故需要在SELECT中需显⽰的字段显⽰出来。 查询选修2课程并且分数⼤于80分的学⽣的学号和名字。 ...

    数据库:区分笛卡儿积、自然连接、内连接、等值连接、外连接

    假设存在两张表 c 和 p,这里使用的是MySQL数据库。 数据表 c: course_id title dept_name credits BIO-301 Genetics Biology 4 CS-190 Game Design Comp.sci 4 CS-315 Robotics Comp.sci 3 数据表 p...

    动力节点MySQL数据库入门视频教程-055-内连接之非等值连接

    动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。

    数据库报告

    数据库的单表查询和连接查询,数据库的简单查询和连接查询,1、简单查询操作 该实验包括投影、选择条件表达式、数据排序、使用临时表...该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、

    数据库和ado知识

    SQL中表等值连接(内连接) inner join SQL中表左连接(左外连接) left join SQL中表右连接(右外连接) right join SQL中表交叉连接(两张表的乘积) SQL中表全连接 full join SQL中变量 SQL中的事务 创建存储过程 存储...

    数据库关系代数的连接图画法.xlsx

    这是关于“如何画关系代数的连接图?(数据库关系代数中笛卡儿积、θ连接、等值连接、自然连接、外连接)”的草稿图

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

    熟练掌握连接查询操作:包括等值连接、自然连接、卡尔连接、交叉连接、内连接、外连接、自身连接等操作。 具体内容: 用SQL语句表示下列操作,在学生库中实现数据查询。  求数学系学生的学号和姓名。  求选修了...

    SQL精讲语法(SQL语法大全.doc数据库)

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

    经典的sql数据库函数语句

    In:等值连接,用来查找多表相同字段的记录 Not In:非等值连接,用来查找不存在的记录 Inner join:内连接,主要用来查找都符合条件的记录 Left join:左连接,主要用来查找左边有,右边没有的用空值表达 Right ...

    数据库系统原理期末考试简答题.docx

    2、试述等值连接与自然连接的区别和联系。 连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的...

    数据库系统概论第四版课后题

    6.试述等值连接与自然连接的区别和联系。 答:连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的...

    Oracle数据库Sql语句详解大全

    在一张或多张表中使用等值或非等值连接 使用外连接查询 自连接查询 第五章 组函数 定义及有效的使用组函数 使用Group By对查询数据分组 使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及...

    Oracle数据库、SQL

    13.6非等值连接 27 13.7表连接总结 27 十四、 集合 28 14.1表连接主要解决的问题 28 14.2集合运算 28 14.3集合运算符 28 14.4子查询、连接、集合总结 29 十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where ...

    SQL SERVER 试题

    sql server 试卷考试一.选择题(每题2分,共30分) 1.( )是位于用户和操作...θ连接是一种特殊的等值连接 B.θ连接是一种特殊的自然连接  C.等值连接是一种特殊的自然连接 D.自然连接是一种特殊的等值连接

    数据库教学管理实验报告

    系统中不区分等值连接和自然连接。系统只认等值连接查询,不认自然连接。而要想得 到自然连接的结果,必须自己在写查询语句时在select 中对所须属性进行投影

    兄弟连数据库第3天课程笔记

    等值连接 非等值连接 自连接 2.外连接 2.1 特点 外连接的结果集 等于 内连接的结果集 加上 匹配不上的数据。 (一个也不能少) 2.2 如何实现? (+) (+)字段所在的表的 对面 表的数据全部被选中 原来内连接...

Global site tag (gtag.js) - Google Analytics