sql join on 用法

 更新时间:2009年07月31日 15:45:34   作者:  
非常不错使用join on实现数据库字段的连接输出效果。

A left join B 的连接的记录数与A表的记录数同
A right join B 的连接的记录数与B表的记录数同
A left join B 等价B right join A


table A:
Field_K, Field_A
1 a
3 b
4 c
table B:
Field_K, Field_B
1 x
2 y
4 z
select a.Field_K, a.Field_A, b.Field_K, b.Field_B from a left join b on a.Field_K=b.Field_K

Field_K Field_A Field_K Field_B
---------- ---------- ---------- ----------
1 a 1 x
3 b NULL NULL
4 c 4 z

也就是说left join 则连接左边表中所有记录都会出现,如果根据连接条件在table2中找不到相关记录,则显示为null。
right join 则显示右边表中的全部记录。inner join 则只有符合条件的记录才会出现在结果集中。
 

EG2∶有两表a和b,前两字段完全相同:(id int,name varchar(10)...)
id name
----------- ----------
1 a
2 b
3 c




以下的查询语句,你知道它的运行结果吗?:
1.
select * from a left join b on a.id=b.id where a.id=1


2.
select * from a left join b on a.id=b.id and a.id=1


3.
select * from a left join b on a.id=b.id and b.id=1


4.
select * from a left join b on a.id=1




结果:
id name id name
----------- ----------- ----------- -----------
1 10 1 10

(1 row(s) affected)

id name id name
----------- ----------- ----------- -----------
1 10 1 10
2 20 NULL NULL
3 30 NULL NULL

(3 row(s) affected)

id name id name
----------- ----------- ----------- -----------
1 10 1 10
2 20 NULL NULL
3 30 NULL NULL

(3 row(s) affected)

id name id name
----------- ----------- ----------- -----------
1 10 1 10
1 10 2 20
1 10 3 30
2 20 NULL NULL
3 30 NULL NULL

(5 row(s) affected)




思路:
left join , 无非是左边表为基础, 扫描右边表匹配的记录

先是左边表的第1条记录
1 a
按条件 a.id=1, 来扫描右边表的记录
对于右边表的每条记录, 显然 a.id=1 这个条件都是成立的, 所以第1条记录匹配后的结果是:

1 a 1 a
1 a 2 b
1 a 3 c

---------------------------------------------
然后再扫描第2条记录
2 b
对于条件 a.id=1, 在边表中没有与之匹配的记录, 所以右边表为NULL
因此第2条记录匹配的结果为
2 b NULL NULL

----------------------------------------------
第3条记录与第2条记录一样, 匹配的结果是
3 c NULL NULL

---------------------------------------
因此最终结果是5条记录
1 a 1 a
1 a 2 b
1 a 3 c
2 b null null
3 c null null




内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。

外联接,外联接可以是左向外联接、右向外联接或完整外部联接。


在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉联接。
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

相关文章

  • explain慢查询SQL调优exists的实战

    explain慢查询SQL调优exists的实战

    这篇文章主要介绍了explain慢查询SQL调优exists的实战,经过两次优化SQL语句之后,慢SQL的性能显著提升了,耗时从8s优化到了0.7s,现在拿出来给大家分享一下,希望对你会有所帮助
    2023-12-12
  • 利用带关联子查询Update语句更新数据的方法

    利用带关联子查询Update语句更新数据的方法

    这篇文章主要介绍了利用带关联子查询Update语句更新数据的方法,需要的朋友可以参考下
    2014-08-08
  • Beekeeper Studio开源数据库管理工具比Navicat更炫酷

    Beekeeper Studio开源数据库管理工具比Navicat更炫酷

    这篇文章主要为大家介绍了一款界面更炫酷的开源数据库管理工具Beekeeper Studio比Navicat更好用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • leaf方案实现美团点评分布式ID生成系统

    leaf方案实现美团点评分布式ID生成系统

    在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求
    2022-01-01
  • 有效防止SQL注入的5种方法总结

    有效防止SQL注入的5种方法总结

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。下面这篇文章主要给大家介绍了关于防止SQL注入的5种方法,教大家有效的防止sql注入,需要的朋友可以参考学习。
    2017-03-03
  • Spark SQL小文件问题处理

    Spark SQL小文件问题处理

    大量的小文件会影响Hadoop集群管理或者Spark在处理数据时的稳定性,这篇文章主要介绍了Spark SQL小文件问题的处理,感兴趣的同学可以借鉴一下
    2023-04-04
  • Sql Server下数据库链接的使用方法

    Sql Server下数据库链接的使用方法

    Sql Server下数据库链接的使用方法...
    2006-12-12
  • SQL修改语法语句梳理总结

    SQL修改语法语句梳理总结

    这篇文章主要介绍了关于SQL修改语句的语法梳理总结,文中附含详细的修改语句示例,有需要的朋友 可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Navicat Premium 15 linux 安装与激活 ArchLinux 2022最新教程(完整激活版)

    Navicat Premium 15 linux 安装与激活 ArchLinux 2022最新教程(完整激活

    navicat premium mac是一款强大数据库管理软件,通过navicat premium 15 用户快速轻松地构建,管理和维护您的数据库,结合了其他Navicat软件使用更有意想不到的功能,这篇文章主要介绍了Navicat Premium 15 linux 安装与激活 ArchLinux 2022,需要的朋友可以参考下
    2023-01-01
  • 关于hive中SQL的执行原理解析

    关于hive中SQL的执行原理解析

    这篇文章主要介绍了关于hive中SQL的执行原理解析,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,需要的朋友可以参考下
    2023-07-07

最新评论