sql表连接查询使用方法(sql多表连接查询)

 更新时间:2014年01月06日 14:44:26   作者:  
表连接就是通过关联多张表,从而检索出需要的数据的方法,下面我们通过代码示例来学习一下sql的表连接使用方法

实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从A表找出限制性的条件来从B表中检索数据。不但需要分多表来操作,而且效率也不高。比如书中的例子:

复制代码 代码如下:

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,这样就可以到T_Order中检索FCustomerId等于2 的记录:

复制代码 代码如下:

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

下面我们详细来看看表连接。表连接有多种不同的类型,有交叉连接(CROSS JOIN)、内连接(INNER JOIN)、外连接(OUTTER JOIN)。

(1)内连接(INNER JOIN):内连接组合两张表,并且只获取满足两表连接条件的数据。

复制代码 代码如下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

注:在大多数数据库系统中,INNER JOIN中的INNER是可选的,INNER JOIN 是默认的连接方式。

在使用表连接的时候可以不局限于只连接两张表,因为有很多情况下需要联系许多表。例如,T_Order表同时还需要连接T_Customer和T_OrderType两张表才能检索到所需要的信息,编写如下SQL语句即可:

复制代码 代码如下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId

(2)交叉连接(CROSS JOIN):交叉连接所有涉及的表中的所有记录都包含在结果集中。可以采用两种方式来定义交叉连接,分别是隐式和显式的连接。

下面看看隐式的例子:

复制代码 代码如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order

使用显式的连接则需要使用CROSS JOIN,例子如下:

复制代码 代码如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order

(3)外连接(OUTTER JOIN):内部连接只获取满足连接条件的数据,而对于外部连接来说,主要是解决这样的一种场景。满足条件的数据检索出来,这个没有疑问,外部连接还会检索另一部分数据,那就是将不满足条件的数据以NULL来填充。先来看一下外连接的分类:左外部连接(LEFT OUTER JOIN)、右外部连接(RIGHT OUTER JOIN)和全外部连接(FULLOUTER JOIN)。

I、左外部连接(LEFT OUTER JOIN):前头也说了,将不满足条件的数据以NULL来填充。那么具体是哪些需要以NULL来填充呢,对于左外连接来说的话,连接条件当中,如果出现满足条件的左表的数据在右表中没有相应匹配时,需要把相应的右表字段填充NULL值。也就是说左外部连接的主体是左表,右表来配合。

复制代码 代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:如果使用左外部连接的话,通过where语句能过滤其中不符合的数据

复制代码 代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

II、右外部连接(RIGHT OUTER JOIN):右外部连接与左外连部接相反,将会被填充NULL值的是左表的字段。也就是说右外部连接的主体是右表,左表来配合。

复制代码 代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:同左外连接一样,可以使用where语句进行过滤

III、全外部连接(FULLOUTER JOIN):全外部连接是左外部连接和右外部连接的合集。也就是既包括左外部连接的结果集,也包括右外部连接的结果集。

复制代码 代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

其结果相当于:

复制代码 代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

相关文章

  • sql server2016里面的json功能浅析

    sql server2016里面的json功能浅析

    这篇文章主要介绍了sql server2016里面的json功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • SQLServer清理日志文件方法案例详解

    SQLServer清理日志文件方法案例详解

    这篇文章主要介绍了SQLServer清理日志文件方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • SQL Server 触发器 表的特定字段更新时,触发Update触发器

    SQL Server 触发器 表的特定字段更新时,触发Update触发器

    另外再补充一句:insert和update的数据都会保存在临时表中,所以使用inserted可以取出这些数据,删除时使用deleted可以取出被删除的数据
    2009-08-08
  • SqlServer开发神器'SQLPrompt'插件的使用详解

    SqlServer开发神器'SQLPrompt'插件的使用详解

    SQLPrompt是Sql Server 开发智能提示插件,方便查询表结果,避免了开发人员一个个敲查询语句、执行语句等,这篇文章主要介绍了SqlServer数据库开发神器'SQLPrompt插件'的使用说明,需要的朋友可以参考下
    2023-03-03
  • SQL Server索引碎片的原因和修复

    SQL Server索引碎片的原因和修复

    索引碎片会影响数据库性能,主要有逻辑碎片和物理碎片两种类型,逻辑碎片导致数据页顺序不连续,而物理碎片影响磁盘读取性能,解决方法包括重建或重组索引,以及定期维护,下面就一起来看一下
    2024-09-09
  • sql server2008调试存储过程的完整步骤

    sql server2008调试存储过程的完整步骤

    这篇文章主要给大家分享介绍了关于sql server2008调试存储过程的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • SQL查询服务器下所有数据库及数据库的全部表

    SQL查询服务器下所有数据库及数据库的全部表

    这篇文章主要介绍了SQL查询服务器下所有数据库,数据库的全部表,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • SQL Server表分区删除详情

    SQL Server表分区删除详情

    这篇文章主要介绍了SQL Server表分区删除,删除分区又称为合并分区,简单地讲就是将多个分区的数据进行合并。现以表Sales.SalesOrderHeader作为示例,演示如何进行表分区删除。下面就和小编一起进入文章学习该内容吧
    2021-10-10
  • 配置 SQL Server 2005 以允许远程连接的方法

    配置 SQL Server 2005 以允许远程连接的方法

    在尝试从远程计算机连接到 Microsoft SQL Server 2005 实例时,可能会接收到错误消息。在使用任何程序连接到 SQL Server 时都可能会发生此问题。
    2011-01-01
  • 深入理解Sql Server中的表扫描

    深入理解Sql Server中的表扫描

    这篇文章主要介绍了深入理解Sql Server中的表扫描,本文讲解了表扫描的相关知识、表扫描的运行原理等内容,需要的朋友可以参考下
    2015-02-02

最新评论