热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer的InnerJoin及OuterJoin

当然Join如何将不同的数据库的材料联合,还要看你如何应用它,一共有四种不同的Join的方法,在这篇文章中我们将为你先容InnerJoin及OuterJoin以及其利用。在一个正规化的数据库环

当然 Join 如何将不同的数据库的材料联合, 还要看你如何应用它, 一共有四种不同的 Join 的方法, 在这篇文章中我们将为你先容 Inner Join 及 Outer Join 以及其利用。


在一个正规化的数据库环境中, 我们常会碰到这款情况: 所需的材料并不是放在同一个材料表中, 在这个时候, 你就要用到 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 这项产品竟然找不到供货商的材料!




推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
author-avatar
zh1234之歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有