`

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

阅读更多

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

 

什么是连接查询呢?

 

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

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

 

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

 

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

 

T_student T_class


 

连接标准语法格式:

 

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

FROM join_table join_type join_table[ON (join_condition)]

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

 

连接类型:

 

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

 

内连接(INNER JOIN)

 

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

1、等值连接

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

 

<span style="font-size:18px;"><span style="font-family:System;">     
    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</span></span>

结果是:

 

2、不等连接

 

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

 

<span style="font-size:18px;"><span style="font-family:System;">     
    select * from T_student s inner join T_class c on s.classId <> c.classId</span></span>

结果是:

 


3、自然连接

 

概念:连接条件和等值连接相同,但是会删除连接表中的重复列。

查询语句同等值连接基本相同:

 

<span style="font-size:18px;"><span style="font-family:System;">    
    select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId</span></span>

 

与等值连接对比:结果是少一个一列classId:

总结:内连接是只显示满足条件的!

 

外连接

 

  

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

 

1、左连接:

 

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

 

<span style="font-size:18px;"><span style="font-family:System;">    
    select * from  T_student s left join T_class c on s.classId = c.classId</span></span>

  结果是:

 

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

 

2、右连接:

 

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

<span style="font-size:18px;"><span style="font-family:System;">   
   select * from  T_student s right join T_class c on s.classId = c.classId</span></span>

结果是:

 


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

 

3、全连接:

 

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

 

<span style="font-size:18px;"><span style="font-family:System;">    
   select * from  T_student s full join T_class c on s.classId = c.classId</span></span>

  结果是:

 


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

 

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

 

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

 

1、不带where:

 

<span style="font-size:18px;"><span style="font-family:System;">   
   select *from T_student cross join T_class
  ‘等于
   select *from T_student, T_class</span></span>

 

结果是:



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

 

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

 
select * from T_student s cross join T_class c where s.classId = c.classId 
   (注:cross join后加条件只能用where,不能用on)
 
 
查询结果跟等值连接的查询结果是一样。
 
 
连接查询非常简单,只需要在项目中多多实践,不断总结。












分享到:
评论

相关推荐

    sql server 生成交叉表

    ### SQL Server 生成交叉表 在SQL Server中生成交叉表是一种常见的需求,特别是在进行数据分析时。本文将通过一个具体的例子来详细介绍如何利用SQL Server生成交叉表,并解释代码中的每一个步骤。 #### 标题:SQL ...

    SQL Server CROSS APPLY和OUTER APPLY的应用详解

    在SQL Server 2000中,我们通常使用CROSS JOIN来实现简单的交叉联接,但是当试图将表值函数的参数设置为另一表的字段时,会出现问题,因为CROSS JOIN不支持这种操作。例如: ```sql -- 错误示例:CROSS JOIN无法...

    SQL Server 2000完结篇系列之八:SQL Server 2000过程优化详解

    理解如何有效使用视图,以及优化联接操作(如内连接、外连接和交叉连接)能显著提高性能。 5. **临时表和表变量**:临时表和表变量在处理大量数据时有各自的优缺点。根据场景选择合适的方式,可以改善处理性能。 6...

    Sqlserver2000模拟题

    4. **查询语言T-SQL**:熟练使用SELECT语句进行数据检索,理解JOIN操作(内连接、外连接、交叉连接),学会使用子查询、聚合函数(COUNT、SUM、AVG、MIN、MAX)和分组(GROUP BY)。 5. **事务处理**:理解ACID属性...

    详解SQL Server数据库链接查询的方式

    本文将深入探讨内连接、外连接和交叉连接这三种主要的连接类型。 首先,内连接(INNER JOIN)是基于指定条件筛选出两个表中匹配的行。内连接又可以细分为等值连接、自然连接和不等连接。等值连接使用等于运算符(=...

    数据库多表连接查询详解

    连接查询的类型有三种:内连接、外连接和交叉连接。内连接是指在两个或多个表之间的连接,返回的是与连接条件相匹配的数据行。外连接则返回的是左表、右表或两个表中的所有数据行,而不仅仅是与连接条件相匹配的行。...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...

    Oracle SQL连接查询总结.docx

    ### Oracle SQL连接查询总结 #### 一、概述 在Oracle SQL中,连接查询是一种非常重要的技术,用于结合两个或多个表中的数据。连接查询能够帮助我们处理复杂的数据关系,提取出满足特定条件的信息。根据连接的方式...

    SQL Server 数据库系统原理

    在实际应用中,常常需要涉及多个表的联合查询,如查询每个学生的所有课程信息、成绩等,这可以通过内连接(INNER JOIN)、外连接(LEFT/RIGHT OUTER JOIN)或者交叉连接(CROSS JOIN)实现。 总结,SQL Server...

    sql 编程,SQL Server 编程入门,提高,技巧,详解,

    - **SQL Server 客户端**: 包括客户端应用软件及应用程序编程接口(API),用于连接到SQL Server并执行各种操作。 - **SQL Server 服务器**: 包括SQL Agent、SQL Server Engine等组件,是高性能的关系型数据库管理系统...

    精通SQL 结构化查询语言详解

    在多表查询方面,本书介绍了各种连接表的方法,包括内连接、外连接和交叉连接等。子查询部分讲解了如何创建返回单值或多行的子查询,并介绍了相关子查询的使用。数据操作章节包括如何插入、修改和删除数据库中的数据...

    sqlserveR第1章_SQL_Server_数据库基础

    ### SQL Server 数据库基础知识点详解 #### 一、SQL Server 概述 - **SQL Server 定义**:SQL Server 是由微软公司开发的一款高性能的客户端/服务器架构的关系型数据库管理系统(DBMS)。它主要用于存储、管理和...

    精通SQL-结构化查询语言详解

    此外,书中还会讲解到JOIN操作,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)、交叉连接(CROSS JOIN)等,这些是将多个表的数据合并的关键技巧。 对于高级SQL技术,书中可能涵盖了子...

    SQL Server笔试B卷

    【SQL Server 笔试知识点详解】 1. **标识名称唯一性**:在SQL Server中,表的标识名称(如表名、字段名)是需要在数据库中保持唯一的,以确保数据库对象的唯一性和规范性。选项A正确。 2. **IDENTITY属性**:一个...

    精通SQL--结构化查询语言详解

    9.3.4 外连接(outer join) 170 9.3.5 交叉连接(cross join) 176 9.4 union与union join 177 9.4.1 关系的集合运算 177 9.4.2 union运算符 178 9.4.3 order by子句排序union运算结果 180 9.4.4 对多表进行...

    Beginning Spatial with SQL Server 2008

    SQL Server提供了丰富的函数集来操作空间数据,包括计算几何对象之间的距离、交叉点、并集等。 - **空间数据操作示例**: ```sql -- 创建一个几何对象 DECLARE @g1 geometry; SET @g1 = geometry::STGeomFromText('...

    sql server教程.doc

    - 包括内连接、外连接、交叉连接等多种类型。 - **分组与聚合**: - 使用`GROUP BY`子句对数据进行分组。 - 使用聚合函数如`COUNT`、`SUM`、`AVG`等计算分组统计数据。 #### 四、数据库事务与并发控制 - **...

Global site tag (gtag.js) - Google Analytics