- 浏览: 119772 次
- 性别:
- 来自: 成都
-
文章分类
联接类型
在关系代数中,联接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。联接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
本文从几个简单的例子里,手把手教你如何写内联接、左外联接、右外联接、全外联接以及交叉联接。
SQL 提供了多种类型的联接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于联接的行时所采用的方法不同。
内联接:只联接匹配的行;
左外联接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行;
右外联接:包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行;
全外联接:包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行;
(H)(theta)联接:使用等值以外的条件来匹配左、右两个表中的行;
交叉联接:生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配。
在 INFORMIX 中联接表的查询。如果 FROM 子句指定了多于一个表引用,则查询会联接来自多个表的行。联接条件指定各列之间(每个表至少一列)进行联接的关系。因为正在比较联接条件中的列,所以它们必须具有一致的数据类型。
SELECT 语句的 FROM 子句可以指定以下几种类型的联接:
CROSS JOIN:笛卡尔乘积(所有可能的行对);
INNER JOIN:仅对满足联接条件的 CROSS 中的列;
LEFT OUTER JOIN:一个表满足条件的行,和另一个表的所有行;
RIGHT OUTER JOIN:与 LEFT 相同,但两个表的角色互换;
FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER中所有行的超集。
示例详解
创建 T_STUDENT 表:
- -- Create table
- create table T_STUDENT
- (
- ID NUMBER(15) not null,
- NAME VARCHAR2(50)
- )
- tablespace SYBJ
- pctfree 10
- pctused 40
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table T_STUDENT
- is '学生表';
- -- Add comments to the columns
- comment on column T_STUDENT.NAME
- is '姓名';
- -- Create/Recreate primary, unique and foreign key constraints
- alter table T_STUDENT
- add constraint T_STUDENT_PRIM primary key (ID)
- using index
- tablespace SYBJ
- pctfree 10
- initrans 2
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
编辑 T_STUDENT 表数据如下:
创建 T_SCORE 表:
- -- Create table
- create table T_SCORE
- (
- ID NUMBER(15) not null,
- SCORE NUMBER(3)
- )
- tablespace SYBJ
- pctfree 10
- pctused 40
- initrans 1
- maxtrans 255
- storage
- (
- initial 64
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table T_SCORE
- is '学生成绩表';
- -- Create/Recreate primary, unique and foreign key constraints
- alter table T_SCORE
- add constraint T_SCORE_PRIM primary key (ID)
- using index
- tablespace SYBJ
- pctfree 10
- initrans 2
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
编辑 T_SCORE 表数据如下:
一、外联接
1、概念:包括左向外联接、右向外联接或完整外部联接。
2、左联接:left join 或 left outer join。
1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
2)sql 语句:
- select * from t_student left join t_score on t_student.id=t_score.id
结果集:
注释:包含 t_student 的所有子句,根据指定条件返回 t_score 相应的字段,不符合的以 null 显示。
3、右联接:right join 或 right outer join。
1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
2)sql 语句:
- select * from t_student right join t_score on t_student.id=t_score.id
结果集:
注释:包含 t_score 的所有子句,根据指定条件返回 t_student 相应的字段,不符合的以 null 显示。
4、完整外部联接:full join 或 full outer join。
1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
2)sql 语句:
- select * from t_student full join t_score on t_student.id=t_score.id
结果集:
注释:返回左右连接的和(见上左、右连接),即:返回左右联接的结果集的并集。
二、内联接
1、概念:内联接是用比较运算符比较要联接列的值的联接。
2、内联接:join 或 inner join。
3、sql 语句:
- select * from t_student inner join t_score on t_student.id=t_score.id
结果集:
注释:只返回符合条件的 t_student 和 t_score 的列,即:返回左右联接的结果集的交集。
4、等价(与下列执行效果相同):
A:select a.*,b.* from t_student a,t_score b where a.id=b.id
B:select * from t_student cross join t_score where t_student.id=t_score.id(注:cross join 后加条件只能用 where,不能用 on)
三、交叉联接(完全)
1、概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小(t_student 和 t_score 交叉联接产生 3 * 3 = 9 条记录)。
2、交叉联接:cross join(不带条件 where...)。
3、sql语句:
- select * from t_student cross join t_score
结果集:
注释:返回 3 * 3 = 9 条记录,即笛卡尔积。
4、等价(与下列执行效果相同):
A:select * from t_student,t_score
发表评论
-
eclipselink-DDL Schema Generation的四种方式
2016-10-12 00:17 565persistence.xml文件配置: < ... -
Java开发中的23种设计模式
2016-09-28 00:40 535设计模式(Design Patterns) ... -
ManyToOne 双向一对多关系
2016-08-05 01:38 500双向一对多关系,一是关系维护端(owner side),多是 ... -
理解RESTful架构
2016-06-22 00:33 553原文:http://www.ruanyifen ... -
foreach循环
2016-05-31 22:23 455这种有冒号的for循环叫做foreach循环,foreach语 ... -
java几种常用设计模式简单示例
2016-05-19 23:02 495PART A:前言 平常我们都在敲代码,为了要实现一些我们 ... -
iText PdfPCell内容水平垂直居中
2016-01-14 00:13 11823先调用Cell.setUseAscender(true);再调 ... -
深入理解 hash 函数、HashMap
2015-12-15 00:52 619http://www.2cto.com/kf/201409/3 ... -
iText的showTextAligned方法
2015-12-06 16:47 5398java使用itext的showTextAligned方法给 ... -
iText PdfTemplate的使用
2015-12-06 02:32 1384在开发系统时,需要在PDF上写入总页数。于是在网上搜索到 ... -
iText表格 分页
2015-11-30 23:31 5158前言 在上一节中,通过listing 4.16产生的表格拥 ... -
iText生成PDF文档部分页面横置
2015-11-27 02:02 5497整个PDF文档页面设置 Rectangle rect ... -
iText生成PDF格式设置
2015-11-27 00:52 2489import java.io.ByteArrayOutputS ... -
Spring中的IOC和AOP
2015-11-19 00:47 489IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要 ... -
【转载】纯Java获得本地MAC地址
2015-07-29 21:18 5751 import java.net.*; 2 3 clas ... -
Java笔试题
2014-05-25 21:53 5351. float型float f=3.4是否正 ... -
单例模式的常见应用场景
2014-05-25 21:30 823单例模式(Singleton)也叫单态模式,是设计模式中最 ... -
深入Java单例模式
2014-05-25 21:29 541在GoF的23种设计模式中,单例模式是比较简单的一种。然而 ... -
java 异常捕捉 ( try catch finally )
2014-05-25 21:15 546前言:java 中的异常处理机制你真的理解了吗?掌握了吗?c ... -
多线程的实现
2014-05-15 02:11 508http://www.cnblogs.com/rollenho ...
相关推荐
SQL join 完全用法 SQL join 完全用法 学习sql join
PL/SQL Join实例分析 数据库Join 使用分析比较
SQL语句left join/right join/inner join 的用法比较 SQL语句left join/right join/inner join 的用法比较
sqljoin示例,包含左联右联内联以及外联等连接方式是学习SQL必不可少的知识
SQL 连接 JOIN 例解
sql语句中join的用法 sql语句中join的用法
【SQL】在sql server中 delete时 使用INNER JOIN 京华志出品 必数精华
SQL 中的左外连接、内连接、右外连接用法详解 SQL 中的连接操作是数据库管理系统中最基本的操作之一,它能够将多个表中的数据结合起来,生成一个新的结果集。本文将对 SQL 中的左外连接、内连接、右外连接进行详细...
LINQ to SQL语句之Join和Order By部分代码 语句描述:这个例子在From子句中使用外键导航筛选在西雅图的雇员,同时列出其所在地区。这条生成SQL语句为: SELECT [t0].[FirstName], [t0].[LastName], [t2]....
手把手教你写 SQL Join 联接 手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客
SQL Inner Join SQL Left Join SQL Right Join SQL Full Join SQL Union SQL Select Into SQL Create DB SQL Create Table SQL Constraints SQL Not Null SQL Unique SQL Primary Key SQL Foreign Key ...
画图解释 SQL join 语句1
sql的 INNER JOIN 语法,sql的 INNER JOIN 语法
SQL Join类型除内join,其他join没匹配数据时数组字段输出为NULL。
SQL语句inner join,left join ,right join连接的不同之处, 非常实用
详细说明JOIN的用法,包括LEFT JOIN、RIGHT JOIN、INNER JOIN、SELF JOIN、FULLJOIN
SQL 之JOIN 用法完全版.rar
SQL left join用法,初学者应用
SQL中大概有这么几种JOIN:cross joininner joinleft outer joinright outer joinfull outer join他们都是基于cross join(笛卡尔乘积),举例说明
关于SQL 中的inner join的使用,是DOC文档,希望对大家有用,关于SQL 中的inner join的使用,是DOC文档,希望对大家有用