内联接:   左表的一行和右表的每一行进行比较, 如果左表的一行和右表的一行符合联接条件,则返回为结果集中的一行 ------   等效于where条件

当联接表时,创建的联接类型影响出现在结果集内的行。可以创建下列联接类型:

仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)例如,可以联接 titles 表和 publishers 表以创建显示每个书名的出版商名称的结果集。在内联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。这类联接所得到的 SQL 可能象下面这样:

·                SELECT     title, pub_name
·                FROM         titles INNER JOIN
publishers ON titles.pub_id = publishers.pub_id

注意   当创建内联接时,包含 NULL 的列不与任何值匹配,因此不包括在结果集内。空值不与其它的空值匹配。

sql语法:   select __ from __ inner join __ on __ 
     linQ语法:   from __ in __   join __ in __ on __  select __
     结果集:                                                      

外联接 (跟内联接的区别是,外联结至少返回左边或右表中的所有行)
       1.左向外联接: 返回左表的所有行,如果左表的某行在右表没有匹配行,则右表返回空,并组合成结果集中的一行,如果有则联接成结果集中的一行

包括第一个命名表("左"表,出现在 JOIN 子句的最左边)中的所有行。不包括右表中的不匹配行。例如,下面的 SQL 语句说明 titles 表和 publishers 表之间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名:

·                      SELECT titles.title_id, 
·                             titles.title, 
·                             publishers.pub_name
·                      FROM titles LEFT OUTER JOIN publishers 
·                                  ON titles.pub_id 
             = publishers.pub_id

语法:   select __ from __ left outer join __ on __ 
     结果集:                                                      
       2.右向外联接:返回右表的所有行,如果右表的某行在左表没有匹配行,则左表返回空,并组合成结果集中的一行,如果有则联接成结果集中的一行

包括第二个命名表("右"表,出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。例如,在 titlespublishers 表之间的右向外联接将包括所有的出版商,甚至包括那些在 titles 表中没有书名的出版商。所得到的 SQL 可能象下面这样:

·                      SELECT titles.title_id, 
·                             titles.title, 
·                             publishers.pub_name
·                      FROM titles RIGHT OUTER JOIN publishers 
·                                  ON titles.pub_id 
             = publishers.pub_id

语法:   select __ from __ right outer join __ on __
     结果集:                                                        
       3.完整外部联接:返回左表和右边的所有行;若不匹配,则一边有值,一边为空

包括所有联接表中的所有行,不论它们是否匹配。例如,titles 表和 publishers 表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个表中没有匹配值的书名和出版商。

·                      SELECT titles.title_id, 
·                             titles.title, 
·                             publishers.pub_name
·                      FROM titles FULL OUTER JOIN publishers 
·                                  ON titles.pub_id 
             = publishers.pub_id

语法:   select __ from __ full outer join __ on __
     结果集:                                                         
交叉联接:返回左表中的每一行,左表中的每一行与右表中的所有行组合,结果集的行数等于左表的行数乘右表的行数

在这类联接的结果集内,两个表中每两个可能成对的行占一行。例如,在通过作者 CROSS JOIN 出版商输出的结果集内,每个可能的作者/出版商组合占一行。所得到的 SQL 可能象下面这样:

·                SELECT *
FROM authors CROSS JOIN publishers 

语法:   select __ from __ cross join __ on __
     结果集:                                                          
自联接:和自身进行联接     语法:   select __ from __ inner join __ on __
多表联接:
     语法:   select __ from __ inner join __ on __ inner join __ on __

空值和联接

如果要联接的表的列中有空值,则这些空值互相不匹配。如果其中一个联接表的列中出现空值,只能通过外联接返回这些空值(除非 WHERE 子句不包括空值)。

下面的两个表中,每个表在要参与联接的列中均包含 NULL 值:

table1                          table2
a           b                   c            d
-------     ------              -------      ------
      1        one                 NULL         two
   NULL      three                    4        four
      4      join4

将列 a中的值与列 c中的值进行比较的联接在包含 NULL 值的列上不能获得匹配结果:

SELECT *
FROM table1 t1 JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

只返回列 ac值为 4 的一行:

a           b      c           d      
----------- ------ ----------- ------ 
4           join4  4           four   
 
(1 row(s) affected)

从基表返回的空值和从外联接返回的空值也很难区分。例如,下面的 SELECT 语句对这两个表进行左向外联接:

SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

下面是结果集:

a           b      c           d      
----------- ------ ----------- ------ 
NULL        three  NULL        NULL 
1           one    NULL        NULL 
4           join4  4           four   
 
(3 row(s) affected)

结果并不能使数据中的 NULL 值和表示联接失败的 NULL 值容易区分。如果要联接的数据出现空值,最好用常规联接将这些空值从结果中省略。

参考:

http://www.cnblogs.com/cyberhedgehog/articles/1195523.html

http://www.cnblogs.com/zp89850/archive/2007/06/04/770983.html

转载于:https://www.cnblogs.com/WayneZeng/p/3352405.html

数据库:内联接,外联接,空值和联接相关推荐

  1. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

  2. Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)

    Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+) 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大 ...

  3. 智能家电市场群雄割据 “内冷外热”的现实何时能改变?

    智能家电市场群雄割据 "内冷外热"的现实何时能改变? 早上醒来,窗帘自动打开,电视为你播报今天天气,客厅里咖啡机也自动开启早餐模式,阵阵咖啡香味飘来,让你精神为之一振--这幅智能家 ...

  4. mysql数据库内置函数大全_MySQL数据库——内置函数

    MySQL数据库--内置函数 建表并插入数据 create table student( id char(36) primary key, name varchar(8) not null, age ...

  5. 数据库中主外键概念详细介绍

    关于数据库的主外键设置问题 一.主外键概念 主键 ​ 1.主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改.删除时使用 ...

  6. 局部变量写在循环内还是外_循环内的局部变量和性能

    局部变量写在循环内还是外 总览 有时会出现一个问题,即分配一个新的局部变量需要多少工作. 我的感觉一直是,代码已优化到成本为静态的程度,即一次执行,而不是每次运行都执行一次. 最近, Ishwor G ...

  7. sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由

    点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 Piotr Konon ...

  8. mysql数据库约束详解_MySQL数据库中的外键约束详解

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器 ...

  9. “内”忧“外”患,3 万台 Mac 有危险!

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 去年苹果发布的自研 M1 芯片可谓是赚足了眼球,搭载该芯片的 Mac 电脑也成为了许多人争相购买的产品之一.不过彼时刚刚诞生的 M1 M ...

最新文章

  1. 设置Squid Cache_mem大小
  2. 解决chrome浏览器us-yahoo.com搜索劫持
  3. CodeForces - 1213E Two Small Strings(暴力+构造)
  4. C#编写的windows程序随系统启动
  5. Sql SUBSTR函数
  6. Android单选中listview中的一项
  7. 吴恩达神经网络和深度学习-学习笔记-27-多任务学习
  8. Hibernate 关于配置Mapping不成功 Unknow Entity
  9. 第50篇-企查查请求头参数分析【2022-09-29】
  10. 一个描述二氧化硅的两体势能BKS
  11. wcf教程-传递数据过大怎么配置?读取 XML 数据时,超出最大字符串内容长度配额 (8192)
  12. ​华为回应出售手机业务传闻:假消息;微软将ChatGPT整合到更多工具中:不用写代码就能开发应用;苹果更新Mac产品线|极客头条...
  13. 网站优化与seo的方法(seo的优化基础)
  14. 用智能ABC关闭程序
  15. Berkeley DB(BDB)介绍
  16. 祝女生节快乐的c语言,女生节祝福语:3月7日女生节到了,祝福送给娇滴滴的你...
  17. Oracle查询当前时间的前1个小时的数据
  18. 爆炸分享!7个常用的平面设计工具软件都在这!
  19. 发那科系统整套梯形图设计 FANUC全套PMC设计 发那科标 准PLC 完美解决方案
  20. Java PriorityQueue(优先级队列/二叉堆)的使用及题目应用

热门文章

  1. OpenGL——使用Bresenham算法绘制圆
  2. gzip(来源百度百科)
  3. 我在学习技术的过程遇到的不会的单词(不断完善)
  4. XML Parsing in a Producer-Consumer Model
  5. COLINUX的安装与网络配置
  6. oracle 常见操作
  7. x722网卡支持百兆吗_同样是无线网卡,为什么要选千兆的?
  8. csg显示寻找专用服务器失败,支持邻近发现过程的方法和装置
  9. 云上技术 | 混合云多活容灾方案
  10. 深度解读 MongoDB 4.4 新特性