详解SQL Server连接(内连接、外连接、交叉连接)

详解SQL Server连接(内连接、外连接、交叉连接)在查询多个表时 我们经常会用 连接查询 连接是关系数据库模型的主要特点 也是它区别于其它类型数据库管理系统的一个标志 什么是连接查询呢 nbsp nbsp 概念 根据两个表或多个表的列之间的关系 从这些表中查询数据 nbsp nbsp 目的 实现多个表查询操作 知道了连接查询的概念之后 什么时候用连接查询呢 nbsp nbsp nbsp 一般是用作关联两张或两张以上的数据表时用的 看起来有点抽象 我们举个例子 做两张表

    在查询多个表时,我们经常会用“连接查询”。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

  

什么是连接查询呢?

  

    概念:根据两个表或多个表的列之间的关系,从这些表中查询数据。

    目的:实现多个表查询操作。

 

知道了连接查询的概念之后,什么时候用连接查询呢?

     

    一般是用作关联两张或两张以上的数据表时用的。看起来有点抽象,我们举个例子,做两张表:学生表(T_student)和班级表(T_class)。

 

                     T_student                                   T_class

    详解SQL Server连接(内连接、外连接、交叉连接)   详解SQL Server连接(内连接、外连接、交叉连接)        详解SQL Server连接(内连接、外连接、交叉连接)

 

连接标准语法格式:

    

    SQL-92标准所定义的FROM子句的连接语法格式为:

    FROM  join_table join_type join_table[ON (join_condition)]

    其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。join_type 指出连接类型。join_condition指连接条件。

 

连接类型:

   

    连接分为三种:内连接、外连接、交叉连接。

 

内连接(INNER JOIN)

   

    使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接和不等连接两种。

1、等值连接

     概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

 select * from T_student s,T_class c where s.classId = c.classId  等于 select * from T_student s inner join T_class c on s.classId = c.classId

       结果是:

                 详解SQL Server连接(内连接、外连接、交叉连接)

                 

2、不等连接

 

   概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<

 select * from T_student s inner join T_class c on s.classId <> c.classId

       结果是:

                详解SQL Server连接(内连接、外连接、交叉连接)

外连接

   

    外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。

 

1、左连接:

 

    概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

 select * from T_student s left join T_class c on s.classId = c.classId

  结果是:
                详解SQL Server连接(内连接、外连接、交叉连接)



  总结:左连接显示左表全部行,和右表与左表相同行。

 

2、右连接:

 

   概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

   select * from T_student s right join T_class c on s.classId = c.classId

   结果是:

              详解SQL Server连接(内连接、外连接、交叉连接)

  总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。

 

3、全连接:

 

  概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

 select * from T_student s full join T_class c on s.classId = c.classId

   结果是:

            详解SQL Server连接(内连接、外连接、交叉连接)

   总结:返回左表和右表中的所有行。

 

交叉连接(CROSS JOIN):也称迪卡尔积

    概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积(例如:T_student和T_class,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数

 

1、不带where:

 select *from T_student cross join T_class ‘等于 select *from T_student, T_class

    

结果是:

                           详解SQL Server连接(内连接、外连接、交叉连接)



       总结:相当与笛卡尔积,左表和右表组合。


2、有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。


select * from T_student s cross join T_class c where s.classId = c.classId   (注:cross join后加条件只能用where,不能用on)





      查询结果跟等值连接的查询结果是一样。





      连接查询非常简单,只需要在项目中多多实践,不断总结。












版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176240.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:24
下一篇 2026年3月26日 下午10:24


相关推荐

  • RST文件打开_rpt文件

    RST文件打开_rpt文件RST与Python类似Javadoc与Java,如果下载了别人的Python源码,里面有rst文件夹,我们可以转为html后用浏览器打开,具体为:安装python的sphinx模块:pipinstallsphinx,我装的anaconda,其中已经有了,那么在cmd中进入rst的父文件夹,输入:sphinx-build-bhtmldocbuilddoc是含有rst

    2022年10月1日
    3
  • Word修改默认字体

    Word修改默认字体在Win10的最近一次更新后,发现我的office365默认字体都给我改成等线,什么鬼,以前都是宋体,现在这个还真的不习惯,就动手修改默认字体,设置如下: 1、在word空白处点击鼠标右键,选择字体。 2、在弹出框设置样式(字体、大小等),设置完成之后点击设置默认值3、选择如下,点击确定即可。后面再创建word就默认是设置的字体以及大小。…

    2022年6月13日
    45
  • m-learning_数据库上云

    m-learning_数据库上云这是云从大佬在CVPR上的一篇paper。基本思想就是通过对globalfeature进行多粒度的切分,提取更局部的细节特征。当时在Market-1501,CUHK03,DukeMTMC-reID三个数据集刷新了SOTA纪录,其中最高在Market-1501上的首位命中率(Rank-1Accuracy)达到96.6%,让(ReID)在准确率上首次达到商用水平,很大程度上可以说是推动了整个rei…

    2022年10月5日
    5
  • Linux重启nodejs

    Linux重启nodejs想要重启nodeserver进入相应的项目执行npmstop发现没用server仍然在,于是要杀掉相应进程1、ps-ef|grepnode查看node对应的pid,然后killpid,再进入对应项目npmstart2、如果以上方法不行可以这样:killnode或者kilallnode

    2022年10月18日
    3
  • 一篇文章带你揭 秘现代浏览器原理与方法_浏览器发送请求原理

    一篇文章带你揭 秘现代浏览器原理与方法_浏览器发送请求原理现代浏览器原理揭秘首先我们先了解一些关键的计算机术语以及Chrome浏览器的多进程架构。前提计算机基础概念1.CPU(CentralProcessingUnit)中央处理器,解释计算机指令以及处理计算机软件中的数据,功能强大,它可以串行地一件接着一件处理交给它的任务现代电脑上cpu通常会有多个核心,比如经常听到的8核处理器,4核处理器等等。因为多核心CPU可以大大提高手机和电脑的运算能力CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心

    2025年12月5日
    3
  • AnalyticDB MySQL_tidb和mysql

    AnalyticDB MySQL_tidb和mysqlDLA一键建仓上线之后陆续收到很多反馈,其中一个就是RDS的数据能不能投递到AnalyticDBforMySQL里面去,以达到极致的分析速度,最近我们实现了这一特性,今天给大家介绍一下。一键建仓首先打开DLA的解决方案页面,点击“一键建仓(AnalyticDBforMySQL)”的“进入向导”按钮进入主页面,这里因为要列出您的RDS列表方便您操作,因此需要您授予DLARDSAPI的权限…

    2025年12月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号