联接——外联接

与内联接和交叉联接不同,外联接是在ANSI SQL-92
中才被引入的,因此它只有一种标准语法——在表名之间指定JOIN关键字,在ON子句中指定联接条件。外联接会应用内联接所应用的两个逻辑处理步骤(笛卡尔积和ON过滤),此外还多加一个外联接特有的第三步:添加外部行。

在外联接中,要把一个表标记为“保留的”表,可以在表名之羊使用关键字LEFT OUTER JOIN、RIGHT OUTER JOIN、以及FULL
OUTER JOIN,其中 OUTER
关键字是可选的。LEFT关键字表示左边表的行是保留的,RIGHT关键字表壳右边表的行是保留的,而FULL关键字则表示左右两边表的行都是保留的。

外联接的第三个逻辑查询处理步骤就是要识别保留表中按照ON条件在另一个表找不到与之匹配的那些行,再把这些行添加到联接的前两个步骤生成的结果表中;对于来自联接的非保留表的那些列,追加的外部行中的这些列则用NULL
作为占位符。

时间: 2024-10-12 15:40:58

联接——外联接的相关文章

SQL联接 外联接 内联接 完全联接 交叉联接

联接分为: 内联接????????????????????????[inner join] 外联接????????(左外联接,右外联接)????????[left join/left outer join, right join/right outer join] 完全联接????????????????????[full join] 交叉联接????????????????????[cross join] a表???? id????ebcid????name????????b表 ????uid

分组外联接的使用

今天在itpub上卡到一个帖子,大致要解决的问题如下:假设有一个公司的考勤记录,数据如下: 张三,20140619: 张三,20140620: 张三,20140621: 李四,20140619: 李四,20140621: 王五,20140619: 王五,20140620: 假设有需求,需查询出某位员工在某段时间内未考勤的日期,如何写这个sql语句呢? 模拟出实验数据: drop table t02; create table t02 (names varchar2(20),rq varchar2

【数据库系列学习二】外联接

表t1: 表t2: 自然联接: 全外联接: 左外联接: 右外联接:

SQL SERVER中 外联接即(left join)on 和 where 的区别

使用内联接,无论在JOIN 子句还是 WHERE 子句中,条件具有相同的结果,但使用外联接时并非如此. 当条件在JOIN子句时,SQL SERVER包括外表的所有行,然后使用条件包括第二个表中的行. 当限制置于WHERE子句时,先执行联接,然后将where子句应用于联接行. 上述表述不是很明白 ,以下的解释更清楚. 即:ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行. 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有

hive内联接和外联接

hql很多语句和sql有相似之处,下面用例子快速了解内外联接的用法 在多表操作的时候,经常会遇到需要的数据,一部分存在a表,一部分存在b表,或者存在更多的表中. 而我们可以从这些表的关系进行联接,下面创建两个表进行实例演示: 首先创建一个学生信息表,有id,s_name,c_name三个属性 hive> create table stu_msg( > id string, > s_name string, > c_name string) > row format delim

SQL语句汇总(终篇)—— 表联接与联接查询

既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接. 上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. 而表联接是通过笛卡尔乘积将表进行横向联接,所谓的通过笛卡尔乘积简单说就是两表的行依次相联再相加.要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句. 现在有如下两张表: 这是

联接-----交叉联接

在逻辑上,交叉联接是一种最简单的联接.交叉联接只实现一个逻辑查询步骤(笛卡尔积).这一步是对输入的两个表进行操作,把它们联接起来,生成二者的笛卡尔积.也就是将一个输入表的每行与另一个表的所有行进行匹配.如果一个表有m行,而另一个表有n行,将得到m*n行的结果集. SQL Server 支持交叉联接的两种标准语法: ANSI SQL-92 SELECT C.custid,E.empid FROM dbo.Customers AS C CROSS JOIN dbo.Employees AS E AN

SQL语句汇总(终篇)—— 表联接与联接查询

上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. 而表联接是通过笛卡尔乘积将表进行横向联接,所谓的通过笛卡尔乘积简单说就是两表的行依次相联再相加.要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句. 现在有如下两张表: 这是当初老师布置的一份作业,我偷个懒就不改数据了.不过把这些真神级人物的大名贴出来做“实验”总觉得心里有很虚,更何况大部分

SQL学习之高级联结(自联结、自然联结、外联接)

create table Customers( Id int identity(1000000,1), Company varchar(30) null, Name varchar(20) null ) insert into Customers values('Fun4All','Tom') insert into Customers values('Alibaba','Tim') insert into Customers values('BaiDu','Jerry') insert int