深入理解Sql的四种连接

1、内连接

(典型的连接运算,使用= 或<> 之类的比较运算比较符)包括相等连接的自然连接
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索student 和course表中学生标识号相同的所有行。
(1)innner join:有两种,显式和隐式的,返回连接表中符合连接条件和查询条件的数据行(所谓连接表就是数据库在做查询形成的中间表)
*

  1. 隐式的内连接没有inner join,形成的中间表经过on条件过滤后的笛卡尔积* ,如下
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C,ORDERS O
WHERE C.ID=O.CUSTOMER_ID;

2 显式内连接,有inner join,形成的中间表经过on条件过滤后的笛卡尔积

 select t1.c1, t2.c2
from t1
inner join t2
on t1.c3 = t2.c3


内连接与左右连接不同,内连接的代码中,inner join 两边的t1和t2表的位置可以互换,结果都是一样的。

左连接

左连接:left [outer] join,左连接从左表(t1)取出所有记录,与右表(t2)匹配。如果没有匹配,以null值代表右边表的列。outer 可以不写,默认情况下不写outer关键字

select t1.c1, t2.c2
from t1
left join t2
on t1.c3 = t2.c3

下面表结构显示学生信息存在student表中,学生分数存在score表中,我想知道每个学生每科成绩和个人信息,显然这里主表是score表,因为它存储每科每个学生成绩,每个学生对应多个成绩,如果是student表的话每个人只有一条记录,没有办法表示每科成绩。这里我们使用左连接,score表为左表,student表为右表


左表score表写在left join前面是主表,因此左表的数据记录全部会出现在结果集中,而右表student中的记录如果在主表中没找到匹配,就不会出现在结果集中,上面的s_id=8的记录就没有出现在最终结果中

左连接还有一种情况,就是我只需要取出左表中不在右表的部分数据:

select t1.c1, t2.c2
from t1
left join t2
on t1.c3 = t2.c3
where t1.c3 is nul

右连接

右连接:right [outer] join,右连接从右表(t2)取出所有记录,与左表(t1)匹配。如果没有匹配,以null值代表左边表的列

select t1.c1, t2.c2
from t1
right join t2
on t1.c3 = t2.c3

实际上,右连接取出的结果和左连接取出的结果是一样的,唯一的不同时字段顺序不同,两者的字段顺序是相反的,左连接的左表结果在右连接的右边,左连接的右表结果在右连接的左边;而对于每种连接来说,哪张表写在前面,哪张表的字段默认就会出现在结果集的左边(select后指定字段的情况除外)

右连接还有一种情况,就是我只需要取出右表中不在左表的部分数据:

select t1.c1, t2.c2
from t1
right join t2
on t1.c3 = t2.c3
where t2.c3 is null

内连接(inner on)

内连接,也叫等值连接, inner join得出同时存在t1表和t2表的数据集,通俗一点说就是求两个表的交集。

select t1.c1, t2.c2
from t1
inner join t2
on t1.c3 = t2.c3


与左连接和右连接不同,内连接的代码中,“inner join”两边的t1表和t2表的位置可以互换,结果都一样。上面的s_id=8的记录没有出现在score表中所以就不是交集,被排出

【sql的四大连接】相关推荐

  1. SQL中内连接、外连接、交叉连接

    SQL中内连接.外连接.交叉连接 SQL连接可以分为内连接.外连接.交叉连接. 数据库数据:            book表                                      ...

  2. SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法

    SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者 ...

  3. word文档无法连接服务器,sql数据库无法连接服务器解决办法绝对有效

    SQL Server 2005无法连接到服务器的解决方法 标题: 连接到服务器 ------------------------------ 无法连接到 XXXX(服务器名). ----------- ...

  4. SQL数据库隐藏服务器后需要在连接字符串增加端口号,(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)]...

    1.将SQL数据库服务设置为隐藏,端口默认改为2433 2.原有的ASP.NET程序访问数据库报错: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器. ...

  5. SQL server连接到服务器,无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Se

    标题: 连接到服务器 无法连接到 (local). 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL S ...

  6. SQL的各种连接(cross join、inner join、full join)的用法理解

    SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...

  7. SQL 左外连接,右外连接,全连接,内连

    SQL 左外连接,右外连接,全连接,内连接       连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条 ...

  8. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver

    今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在与 SQL Serve ...

  9. sql横着连接起来sql_SQL联接的简要介绍(到目前为止)

    sql横着连接起来sql SQL Join是什么意思? (What does a SQL Join mean?) A SQL join describes the process of merging ...

  10. SQuirreL SQL Client3.8 连接 HIVE2.2

    在 使用  SQuirreL SQL Client3.8  连接  HIVE2.2 发生错误,后换用     SQuirreL SQL Client3.7 好用! 只需要使用 hive-jdbc-2. ...

最新文章

  1. 多线程番外之真假*程
  2. 062_html多媒体
  3. [工具] 解决sublime text运行javascript console无输出问题
  4. Python《搞事情==蜂-鸟-图-片(一)》
  5. 真假难辨!全球首位AI合成女主播正式上岗 引发全球媒体圈关注
  6. linux shell学习问题部分记录
  7. mysql switch binlog_TiDB binlog实时同步数据到下游Kafka
  8. 【ICLR2019】重要的,是那些训练中被多次遗忘的样本
  9. dbf转成excel_DBF文件转换成excel工具(DbfToExcel)
  10. 单片机1到十五c语言,手把手教你学单片机的C语言程序设计(十五).pdf
  11. 谷歌出品!机器学习常用术语总结
  12. Excel工作表事件(1)
  13. UE4 Gameplay
  14. matlab 三分之一倍频程,三分之一倍频程谱
  15. 为黑客打工能挣多少?月薪最高达2万美元
  16. FastDB 高效率的内存数据库系统
  17. 【TUM公开数据集RGBD-Benchmark工具evaluate_rpe.py参数用法原理解读】
  18. 与电容有关的几个滤波电路
  19. IT痴汉的工作现状51-离职之花与诅咒之座
  20. python3视频教程推荐_《Python3从入门到放弃》视频教程

热门文章

  1. C# 和欧姆龙 Omron PLC 以太网通信
  2. android百度云和谐,视频总被百度云和谐?这个小工具帮你完美解决
  3. sap abap开发从入门到精通_云端的ABAP Restful服务开发
  4. 房屋租赁管理系统 基于SSM框架
  5. IOS开发之——硬件开发-蓝牙介绍(05)
  6. matlab2016 win10,新手,win10电脑上面装matlab2016a还是b好呢?64位操作系统
  7. 手机支付需厘清六大关键问题
  8. LFW人脸数据库的简介
  9. 首个集成BNB应用侧链链游Meta Apes,必看全新测评与攻略
  10. springboot内置浏览器_SpringBoot启动后启动内嵌浏览器的方法