数据库连接之内连接、自然连接、外连接区分

数据库中的连接分为:内连接、自然连接、外连接;(外连接又分为:左外连接,右外连接和全外连接)

自然连接(natural join):

自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。

内连接(inner  join):

指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

(内连接基本与自然连接相同,不同之处在于自然连接要求是同名属性列的比较,而内连接则不要求两属性列同名,可以用on来指定某两列字段相同的连接条件)

自然连接,内连接时某些属性值不同则会导致这些元组会被舍弃,那如何保存这些会被丢失的信息呢,外连接就解决了相应的问题。

外连接:

连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接:

左边表数据行全部保留,右边表保留符合连接条件的行

右外连接:

右边表数据行全部保留,左边表保留符合连接条件的行

全外连接:

左外连接 union右外连接

例子:

表TESTA,TESTC,TESTD各有A, B两列

TESTB有A,C两列

首先做个全表查询(笛卡尔积)

SELECT * FROM TESTA,TESTB;

一、自然连接

SELECT * FROM TESTA NATURAL JOIN TESTB;

二、内连接:这边我们演示的是等值连接

方式一:SELECT * FROM TESTA a ,TESTC c WHERE a.A=c.A;

方式二:SELECT * FROM TESTA a INNER JOIN TESTC c ON (a.A=c.A);

结果表如下:

三、外连接:

1.左外连接 left outer join 或者 left join

左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

写法一:SELECT * FROM TESTA a LEFT OUTER JOIN TESTC c ON (a.A=c.A);

写法二:SELECT * FROM TESTA a LEFT JOIN TESTC c ON (a.A=c.A);

ORACLE特有写法:SELECT * FROM TESTA a,TESTC c WHERE a.A=c.A(+);

结果表如下:

2.右外连接 right outer join 或者 right join

右外连接是在等值连接的基础上加上被连接表的不匹配数据

写法一:SELECT * FROM TESTA a RIGHT OUTER JOIN TESTC c ON (a.A=c.A);

写法二:SELECT * FROM TESTA a RIGHT JOIN TESTC c ON (a.A=c.A);

ORACLE特有写法:SELECT * FROM TESTA a,TESTC c WHERE a.A(+)=c.A;

结果表如下:

3.全外连接 full outer join 或者 full join

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上

写法一:SELECT * FROM TESTA a FUll OUTER JOIN TESTC c ON (a.A=c.A);

写法二:SELECT * FROM TESTA a FUll  JOIN TESTC c ON (a.A=c.A);

等价写法:

SELECT * FROM TESTA a LEFT JOIN TESTC c ON (a.A=c.A)

UNION

SELECT * FROM TESTA a RIGHT JOIN TESTC c ON (a.A=c.A);

结果表如下:

时间: 2024-10-12 12:03:14

数据库连接之内连接、自然连接、外连接区分的相关文章

SQL:内连接、左外连接、右外连接、全连接、交叉连接区别

有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据表B结构如下: Bid:int:标识种子,主键,自增ID Bnameid:int 数据情况,即用select * from B出来的记录情况如下图2所示: 图2:B表数据为 了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100.有SQL基本知识的人都知道,两个表要做连接,就必须有个

内连接、左外连接、右外连接、交叉连接区别

内连接.左外连接.右外连接.交叉连接区别 http://blog.csdn.net/cnham/archive/2008/06/25/2584936.aspx 在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚.这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下.希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助.(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自

Linq to EF 内连接和左外连接

Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.本文主要讲解没连接和左外连接. 本次使用到的数据实体模型具体的创建方法不再累述.该实体模型中包括Student.Course两个表,他们之间是一对多的关系. 一.内连接 内连接与SqL中inner join一样,即找出两个序列的交集 Model1Container model = new Model1Container(); //内连接 var query = from s in model.Student join c in mode

Oracle内连接、外连接、右外连接、全外连接小总结

数据库版本:Oracle 9i 表TESTA,TESTB,TESTC,各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 40C 连接分为两种:内连接与外连接. A.内连接 内连接,即最常见的等值连接,例: SELECT * FROM TESTA,TESTBWHERE TESTA.A=TESTB.A 结果 A B A B 001 10A 001 10B B.外连接 外连接分为左外连接,右外连接和全外连接. 1.  左外

Oracle 数据库的内外连接区别及外连接详解

内连接(inner join):返回2个表中完全符合条件的记录,结果集中每个表的字段内容均来自各自的表:外连接(outer join):返回2个表中完全符合条件的记录,再加上2个表中各自的记录,结果集中的字段只有一个表中有记录时,另一个表中的字段均使用空值null填写. Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足

Oracle 左连接、右连接、全外连接、(+)号作用 (转载)

Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行.它还返回任何在第二个输入中没有匹配行的第一个输入中的行.外连接分为三种: 左外连接,右外连接,全外连接. 对应SQL:LEFT/RIGHT/FULL OUTER JOIN. 通常我们省略outer 这个关键字. 写成:LE

4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

 mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,执行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- 选择数据库 use mydb61; -- 增加 dbuser1 用户 --     创建用户'dbuser61'密码为 'dbuser61'拥有操作数据库mydb61的所有权限 GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY "dbuser61&quo

Oracle 左连接、右连接、全外连接、(+)号作用

Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行.它还返回任何在第二个输入中没有匹配行的第一个输入中的行.外连接分为三种: 左外连接,右外连接,全外连接. 对应SQL:LEFT/RIGHT/FULL OUTER JOIN. 通常我们省略outer 这个关键字. 写成:LE

左外连接,右外连接,全外连接

左外连接 用在查询块的from短语中 又称左连接,列出左边所有元组,A left join B on 条件表达式中的on决定了B表中符合条件表达式的数据才保留,不符合的右边字段为null where短语的条件等到外连接结束后才使用,对外连接结果进行过滤 例子: create table t1(c1 int primary key, c2 int); create table t2(cc1 int primary key, cc2 int); insert into t1 values (1,1)

SQL 四种连接:内连接、左外连接、右外连接、全连接--转载

原文:http://zwdsmileface.iteye.com/blog/2191730 个人理解 内连接(INNER JOIN)(典型的连接运算,使用像   =   或   <>   之类的比较运算符).包括相等连接和自然连接. 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行 左连接(LEFT   JOIN   或   LEFT   OUTER   JOIN)是右左边表中的数据为基准,若左表有数据右表没有数据,否则显示左表中的数据右表中的数据显示为空 右连接(RIGHT  JO