- 浏览: 123572 次
- 性别:
- 来自: 成都
-
文章分类
联接类型
在关系代数中,联接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。联接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
本文从几个简单的例子里,手把手教你如何写内联接、左外联接、右外联接、全外联接以及交叉联接。
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 591persistence.xml文件配置: < ... -
Java开发中的23种设计模式
2016-09-28 00:40 575设计模式(Design Patterns) ... -
ManyToOne 双向一对多关系
2016-08-05 01:38 529双向一对多关系,一是关系维护端(owner side),多是 ... -
理解RESTful架构
2016-06-22 00:33 581原文:http://www.ruanyifen ... -
foreach循环
2016-05-31 22:23 497这种有冒号的for循环叫做foreach循环,foreach语 ... -
java几种常用设计模式简单示例
2016-05-19 23:02 539PART A:前言 平常我们都在敲代码,为了要实现一些我们 ... -
iText PdfPCell内容水平垂直居中
2016-01-14 00:13 11913先调用Cell.setUseAscender(true);再调 ... -
深入理解 hash 函数、HashMap
2015-12-15 00:52 654http://www.2cto.com/kf/201409/3 ... -
iText的showTextAligned方法
2015-12-06 16:47 5548java使用itext的showTextAligned方法给 ... -
iText PdfTemplate的使用
2015-12-06 02:32 1441在开发系统时,需要在PDF上写入总页数。于是在网上搜索到 ... -
iText表格 分页
2015-11-30 23:31 5258前言 在上一节中,通过listing 4.16产生的表格拥 ... -
iText生成PDF文档部分页面横置
2015-11-27 02:02 5577整个PDF文档页面设置 Rectangle rect ... -
iText生成PDF格式设置
2015-11-27 00:52 2557import java.io.ByteArrayOutputS ... -
Spring中的IOC和AOP
2015-11-19 00:47 522IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要 ... -
【转载】纯Java获得本地MAC地址
2015-07-29 21:18 6091 import java.net.*; 2 3 clas ... -
Java笔试题
2014-05-25 21:53 5821. float型float f=3.4是否正 ... -
单例模式的常见应用场景
2014-05-25 21:30 881单例模式(Singleton)也叫单态模式,是设计模式中最 ... -
深入Java单例模式
2014-05-25 21:29 590在GoF的23种设计模式中,单例模式是比较简单的一种。然而 ... -
java 异常捕捉 ( try catch finally )
2014-05-25 21:15 589前言:java 中的异常处理机制你真的理解了吗?掌握了吗?c ... -
多线程的实现
2014-05-15 02:11 530http://www.cnblogs.com/rollenho ...
相关推荐
SQL join 完全用法 SQL join 完全用法 学习sql join
在PL/SQL(Oracle数据库的编程语言)中,JOIN语法尤其重要,因为它是处理复杂查询的基础。以下是PL/SQL中不同类型的JOIN及其特点的详细分析: 1. **左连接(LEFT JOIN)**: 左连接返回左表(Aa)的所有行,即使在...
在SQL查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN...
sqljoin示例,包含左联右联内联以及外联等连接方式是学习SQL必不可少的知识
SQL 连接 JOIN 例解
### SQL语句中JOIN的用法详解 在SQL查询语言中,`JOIN`是一个非常重要的概念,它允许我们从两个或多个表中提取数据。通过使用不同类型的JOIN操作,我们可以根据表之间的关系来灵活地组织数据。下面我们将详细介绍几...
SQL Join 语句详解 SQL Join 语句是数据库管理系统中最基本也是最重要的语句之一。它允许用户从多个表中检索数据,并将其组合成一个结果集。今天,我们将使用图形来解释 SQL Join 语句的各种类型。 INNER JOIN ...
在SQL(结构化查询语言)中,JOIN操作是用于合并两个或多个表的数据,以便根据它们之间的关联性创建新的结果集。JOIN关键字是SQL查询中的关键部分,它允许我们在不同的表之间建立联系,以获取更丰富的信息。在这个...
### SQL Server 中 DELETE 语句结合 INNER JOIN 的应用 #### 背景介绍 在数据库管理与维护过程中,经常会遇到需要删除表中的某些记录的情况。简单地使用 `DELETE` 语句可以删除单个表中的数据,但在多表关联的情况...
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中JOIN的使用详解 在SQL查询语言中,`JOIN`操作是非常重要的一个部分,它主要用于合并两个或多个表中的数据。通过不同的`JOIN`类型,我们可以灵活地获取所需的组合数据。本文将详细介绍五种主要的`JOIN`类型...
SQL Left Join SQLLeft Join是一种常用的数据库查询操作,它可以将两个或多个表格中的数据结合起来,以便更好地分析和处理数据。在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join...
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应用大全,涵盖了基础语法、查询、更新、删除、联接、子查询以及索引等核心知识点。 1. **SQL基础** SQL的基本组成部分包括SELECT、INSERT、UPDATE、DELETE四大语句,分别用于查询、插入、更新...
在SQL语言中,`LEFT JOIN` 和 `COUNT` 是两种非常重要的操作,它们在数据库查询中扮演着关键角色。在这个问题中,我们看到一个数据表 `TPL_WORD1`,它包含字段 `Wordid`(主键)、`idFuid`(上一级节点ID)和 `Name`...
### SQL的INNER JOIN语法 #### 一、概念与作用 在SQL语言中,`INNER JOIN`是一种连接(Join)操作,用于从两个或多个表中提取数据,仅返回那些匹配的记录。简单来说,它会查找两个表中具有共同属性(如相同的键值...
在SQL(Structured Query Language)中,JOIN操作是用于合并两个或更多个表的数据,以便根据它们之间的关联性创建更复杂的查询结果。JOIN是数据库查询中的关键部分,它允许我们在多个表之间建立联系,从而获取更丰富...
SQL Join类型除内join,其他join没匹配数据时数组字段输出为NULL。