表与表的连接总体分为三类:

内连接:inner join

外连接:left join 、right join、full join、

交叉连接:cross join

下面将一一介绍

先建表a 和b

create table a (col int,coll int)
insert into a values(1,10)
insert into a values(2,20)
insert into a values(3,30)
insert into a values(4,40)
insert into a values(5,50)
go
create table b (col int,coll int)
insert into b values(1,10)
insert into b values(6,20)
insert into b values(7,30)
insert into b values(8,40)
insert into b values(2,50)

首先介绍内连接 inner join

select * from a inner join b on a.col=b.col

他返回了两个表中符合关联条件的结果

接下来是外连接 left outer join / right  outer join / full outer join

在实际应用中可以直接写left join 可以省掉outer。

select * from a left outer join b on a.col=b.col

他返回了左边的所有行,如果右边有匹配的值就显示,没有匹配的值就以null值返回

select * from a right outer join b on a.col=b.col

和左连接相返,以右表为主,返回右表的所有行,如果左表有匹配值就返回,没有匹配值以null值返回

select * from a full  outer join b on a.col=b.col

返回两个表的所有结果,没匹配的以null返回,相当于left join的结果加上right join的结果

--exec sp_dbcmptlevel dbname,80 设置数据库的兼容级别
select * from a,b where a.col*=b.col

这是左连接的简化写法。

select * from a,b where a.col=*b.col

右连接的简化写化。

在sql2000中支持,要在2005 或2008中使用请先设置数据库的兼容级别

接下来是交叉连接 cross join
select * from a cross join b

在不加where条件的情况下,返回两表的笛卡尔乘积a表5行,b表5行,返回25行

where a.col=b.col

加了where 条件后,和inner join的结果一样,满足条件的才会返回。和inner join的区别是,内连接必须有关联条件,而交叉连接可以不要条件。

select * from a,b where a.col=b.col

这是cross  join的简化写法。

另外,表和本身也可以连接使用,叫做自连接。

select * from a where coll=coll

返回coll值一样的结果,如果coll某行的值在整个表中只有一条记录,则不返回。

转载于:https://www.cnblogs.com/bingyuw/archive/2008/11/20/1337349.html

SQL系统教程一(表之间的连接关系)相关推荐

  1. [SQL基础教程] 1-5 表的删除和更新

    [SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...

  2. 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解

    主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...

  3. SAP库存表之间的逻辑关系

    SAP库存表之间的逻辑关系 转载于SAP学习门户网,原文链接: http://www.sap6.com/learn/mm/073504302015/3370.html 当前库存: 一般保存在 MARD ...

  4. 关系型数据库表之间的联系[关系]详解

    关系型数据库表之间的联系[关系]详解 在表中,行和列的逻辑顺序无关紧要.每个表至少包含一列,该列被称为主键,它唯一地标识了表中的每一行. 键是表中扮演特殊角色的列,有两种键:主键.外键. 主键(Pri ...

  5. 微服务下数据表之间的耦合关系

    微服务下数据表之间的耦合关系 1.问题产生 今天同事给我发了一个链接,问我这种做可视化建表的过程觉得怎么样?(如下图) 同事的意思主要是,在微服务架构下,新建单一数据表,然后表内数据需要引用其他数据表 ...

  6. 一起学Hadoop——实现两张表之间的连接操作

    ---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...

  7. sql server 中用sql实现两个表之间的inert/delete/update

    sql 中涉及到两个表CurrentData.dbo.EVUniverse and CurrentData.dbo.Staging_EVUniverse, 从前表到后表操作 ;--INSERT NEW ...

  8. 根据用户查进程_【磨叽教程】Android进阶教程之在Android系统下各进程之间的优先级关系...

    导读:本文大约2000字,预计阅读时间3分钟.本文纯属技术文,无推广. 正文     首先应用进程的生命周期并不由应用本身直接控制,而是由系统综合多种因素来确定的.Android系统有自己的一套标准, ...

  9. sql 系统函数取表基本信息

    SELECT 表名=case when a.colorder=1 then d.name else '' end, 序号=a.colorder, 列名=a.name, 数据类型=b.name, 长度= ...

最新文章

  1. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则
  2. css标签显示特性(块级元素、行内元素、行内块元素、标签显示模式转换display、简单文字居中、简单导航栏案例)
  3. MySQL优化篇:锁机制
  4. 政府安全资讯精选 2017年第六期 车联网和移动安全可能成为未来监管重点
  5. 2020-03-21
  6. SP22343 NORMA2 - Norma(分治优化复杂度)
  7. 将Host Cobol批次和Monolith Webapps移动到云和微服务
  8. 【计算机网络复习 数据链路层】3.3.1 差错控制(检错编码)
  9. 创建表空间时ora-01119和ora-27040的处理
  10. java cl 規格_Java JavaCL類代碼示例
  11. html5+css3第一次作业_老娘我,饿死也不要陪孩子做手工作业,高考陪考真香!...
  12. HTML5该怎么学?HTML5入门知识汇总
  13. vue项目打包之后首页白屏的问题
  14. hdu 4991 Ordered Subsequence
  15. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例
  16. 嘻哈 软件技术知识与项目管理知识
  17. Android TableLayout 表格布局详解
  18. 最大团(最大完全子图)
  19. 程序员的这些前五大无奈,你占了多少?
  20. unity种四种光源

热门文章

  1. jquery双击修改_jQuery双击
  2. 百家与g对比oogle_如何在Java Web应用程序中集成G​​oogle reCAPTCHA
  3. 学习Web前端,前景无限光明?
  4. 人工智能重点领域有哪些呢?
  5. C++进阶教程之信号处理
  6. 新书推荐:可爱的Python
  7. [Python学习笔记][第八章Python异常处理结构与程序调试]
  8. 分析优秀的.NET 文档设计工具Vsdocman 7.1 软件保护技术
  9. Hadoop JobTracker和NameNode运行时参数查看
  10. Android导出jar包后的资源使用问题