关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:
create table table1(id int,name varchar(10))
create table table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 select 1,90
insert into table2 select 2,100
insert into table2 select 3,70
如表
-------------------------------------------------
 table1                   | table2  |
-------------------------------------------------
id  name                 |id  score |
1  lee                     |1  90 |
2  zhang                |2  100 |
4  wang                  |3  70 |
-------------------------------------------------

以下均在查询分析器中执行

一、外连接
1.概念:包括左向外联接、右向外联接或完整外部联接

2.左连接:left join 或 left outer join
(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
(2)sql语句
select * from table1 left join table2 on table1.id=table2.id
-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang NULL NULL
------------------------------
注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

3.右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id
-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
NULL NULL 3 70
------------------------------
注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示

4.完整外部联接:full join 或 full outer join 
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id
-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang NULL NULL
NULL NULL 3 70
------------------------------
注释:返回左右连接的和(见上左、右连接)

二、内连接
1.概念:内联接是用比较运算符比较要联接列的值的联接

2.内连接:join 或 inner join

3.sql语句
select * from table1 join table2 on table1.id=table2.id
-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
------------------------------
注释:只返回符合条件的table1和table2的列

4.等价(与下列执行效果相同)
A:select a.*,b.* from table1 a,table2 b where a.id=b.id
B:select * from table1 cross join table2 where table1.id=table2.id  (注:cross join后加条件只能用where,不能用on)

三、交叉连接(完全)

1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)

2.交叉连接:cross join (不带条件where...)

3.sql语句
select * from table1 cross join table2
-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 1 90
4 wang 1 90
1 lee 2 100
2 zhang 2 100
4 wang 2 100
1 lee 3 70
2 zhang 3 70
4 wang 3 70
------------------------------
注释:返回3*3=9条记录,即笛卡尔积

4.等价(与下列执行效果相同)
A:select * from table1,table2

转载于:https://www.cnblogs.com/ChrisMurphy/p/5051664.html

SQL中JOIN 的用法相关推荐

  1. oralce或sql中join的用法

    left outer join 以左表为主,左表内容全显示,右表连接上的内容才显示 right outer join相反 full outer join 左右表未连接的内容全部显示 外联接.外联接可以 ...

  2. SQL语句中JOIN的用法

    记录:257 写SQL最高境界:SELECT * FROM 表名.当然这是一句自嘲.探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟. 一.场景 把关系型数据库A中表TEST_ ...

  3. SQL中Truncate的用法

    转自:https://www.cnblogs.com/zhoufangcheng04050227/p/7991759.html 本文导读:删除表中的数据的方法有delete,truncate, 其中T ...

  4. full join 和full outer join_带你了解数据库中JOIN的用法

    前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识! 本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点.本次会介绍数据库 ...

  5. sql中join类型_SQL Join类型概述和教程

    sql中join类型 This article will provide an overview of the SQL Join and cover all of the SQL join types ...

  6. 【SQL中limit的用法】

    SQL中limit的用法 说明:limit子句用于限制查询结果返回的数量,常用于分页查询. 用法:[select * from tableName limit i,n ] 参数:tableName: ...

  7. sql去重复操作详解SQL中distinct的用法

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...

  8. SQL中的limit用法

    limit用法 SQL中的limit函数是用来对数据库中的字段进行限制提取的,如:一个用户表中有许多的用户信息,如果想要取出其中某个位置的某几条数据,就可以使用limit函数. 结构 limit函数结 ...

  9. 教你学会Sql中 ROW_NUMBER的用法

    ROW_NUMBER SqlServer 2005 推出的新功能.语法:select *,ROW_Number() over(order by 字段) as '新列名' from table顾名思义: ...

最新文章

  1. [转发]项目修复-把有麻烦的项目带向成功
  2. set在python中什么意思_python中set是什么意思
  3. Boost:双图bimap与mi_hashed indices索引的测试程序
  4. Github如何提交修改的代码以及更新到最新版本
  5. IDEA中如何给含有main方法的普通类设置JVM参数
  6. 一朝不知IP事,一世妄为测试人...
  7. VS当前不会命中断点 还没有为该文档加载任何符号
  8. 动态规划实战4-leetcode 5.Longest Palindromic Substring
  9. 定积分证明题例题_数列极限求法十五种(25个例题+推文送给微积分和数学分析同学)...
  10. 用slmgr命令激活正版Win7旗舰版系统
  11. 彻底阻止、禁用google chrome浏览器自动更新、升级
  12. jq正则过滤html style,Jqgrid利用正则匹配表达式正确移除html标签
  13. Mybatis Plus快速入门
  14. 【JavaScript】鼠标、键盘的基础事件
  15. 手机扫描计数器有哪些?实用扫描计数软件分享给你
  16. DiskGenius 复制磁盘 提示 设备未就绪
  17. webpack-dev-server的代理(proxy)
  18. computehash在php怎么实现,卓象程序员:PHP实现基础区块链
  19. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应
  20. Redis——商品秒杀之库存遗留问题

热门文章

  1. 《统计学习方法》读书笔记(1)---学习的要素
  2. Strut2与Hibernate的一个web分页功能
  3. SQL Update 语句中使用别名
  4. qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...
  5. Deep Residual Learning for Image Recognition 笔记
  6. centos下排查vsftpd出现put零字节问题的记录
  7. (转载)hive文件存储格式
  8. 基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)及代码
  9. 用numpy autograd 实现牛顿迭代
  10. 3D CNN框架结构各层计算