当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:22:00  来源:本站整理

<b>SQL Server的Inner Join及Outer Join</b>[MSSQL防范]

赞助商链接



  本文“<b>SQL Server的Inner Join及Outer Join</b>[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
  在一个正规化的数据库环境中, 我们常会碰到这款情形: 所需的资料并非放在同一个资料表中, 在这个时刻, 你就要用到 Join
  当然 Join 若何将差别的数据库的资料结合, 还要看你若何利用它, 一共有四种差别的 Join 的方法, 在这篇文章中我们将为你介绍 Inner Join 及 Outer Join 以及其利用

  Inner Join
  Inner Join 应当是最常用的 Join 方法, 它只会传回符合 Join 法则的记录, 还是先来看看语法
Select <要挑选的字段> From <主要资料表> <次要资料表> [On ]
  目前我们操纵 MS SQL 内建的北风数据库来实际操练一下! 想多理解 MS SQL 的内建数据库, 你可以看看 sql server 的内建数据库这篇文章
  请翻开 QA (Query Analyzer), 为了利用北风数据库, 请先履行 Use Northwind, 然后履行
Select ProductId, ProductName, SupplierId From Products
  从 Products 产品资料表中取出三个字段, 辨别是产品代码, 产品名称, 供货商朝码, 但查询出来的后果保证让你的老板很不称心, 因为供货商朝码关于人类实在是无什么意义, 这个时刻 Join 便可以帮上忙了, 藉由 Join Suppliers 这个资料表我们便可以查询到供货商名称
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Inner Join Suppliers
Products.Suppliers = Suppliers.SupplierId
  这款的查询后果是不是清楚呢! Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是讲 Join 法则不符合的资料就会被排撤除, 比方讲在 Product 中有一项产品的供货商朝码 (SupplierId), 没有呈目前 Suppliers 资料表中, 那么这笔记录便会被排撤除

  Outer Join
  这款的 Join 方法是常人对比罕用到的, 乃至有些 SQL 的管理者也从未用过, 这真是一件哀思的代志, 因为善用 Outer Join 是可以简化一些查询的工作的, 先来看看 Outer Join 的语法
Select <要查询的字段> From [Outer] Join On
  语法中的 Outer 是可以省略的, 比方你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包涵性吧! 差别于 Inner Join 的排他性, 因此在 Left Outer Join 的查询后果会包含全部 Left 资料表的资料, 倒置过来说, Right Outer Join 的查询就会包含全部 Right 资料表的资料, 接下来我们还是来做些实际操作, 仍旧是利用北风数据库, 但要先做一些小小的改正, 才能到达我们要的后果
  首先要拿掉 Products 资料表的 Foreign Key, 不然没有法度在 Products 资料表新增一笔 SupplierId 没有对映到 Suppliers 资料表的记录, 要知影一个资料表的 Constraint 你可以履行 SQL 内建的 sp_helpconstraint , 在 QA 履行
sp_helpconstraint Products
  接下来删除 FK_Products_Suppliers 这个 Foreign Key
Alter Table Products
Drop Constraint FK_Products_Suppliers
  再来新增一笔记录于 Products 资料表, SupplierId 利用 50 是因为它并没有对映到 Suppliers 资料表中的记录
Insert Into Products (ProductName,SupplierId,CategoryId)
values ('Test Product','50','1')
  目前我们再履行头前的查询, 只是将 Inner Join 改成 Left Outer Join
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Left Outer Join Suppliers
Products.Suppliers = Suppliers.SupplierId
  对比一下两种 Join 方法的查询后果, 你应当就会知影此中的差别!
  再来看看 Right Outer Join, 请新增下底这笔记录
Insert Into Suppliers (CompanyName)
values ('LearnASP')
  目前请利用 Right Out Join 来作查询, 对比看看查询的后果和 Inner Join 有什么差别!
  探求不符合记录
  这里我们来看看若何利用 Out Join 来找不符合记录, 大概是有子记录却没有父记录或是倒置过来
Select Suppliers.CompanyName From Products
Right Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Products.SupplierId is Null
  履行后果你会找到一笔资料为 LearnASP, 该笔供货商资料存在, 但基本上已经没有产品是来自这个供货商, 想象一下假如不用 Outer Join 你要怎么以一个 SQL 指令完成同一查询后果! 知道 Outer Join 的好用了吧! 再履行
Select Products.ProductName
From Products
Left Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Suppliers.SupplierId is Null
  这个查询后果你会发现 Test Product 这项产品竟然找不到供货商的资
  以上是“<b>SQL Server的Inner Join及Outer Join</b>[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .