| VB 源码 | VC 源码 | ASP源码 | JSP源码 | PHP源码 | CGI源码 | FLASH源码 | 素材模板 | C 源程序 | 站长工具 | 站长教程 |

服务器

网站运营
网络应用
服务器
搜索优化

本类阅读TOP10

·如何在D版安装和激活xp sp2方法
·解开被锁注册表的四种方法
·Windows系统会自行关闭硬盘DMA模式
·加密三部曲—拒绝电脑数据泄露全攻略
·电脑初学者必备之Windows进程大全
·清除无用项目 给你的“打开方式”减肥
·Windows虚拟内存加速密籍
·CMOS密码破解全攻略
·FDISK使用介绍
·解析七大Windows系统故障

站内搜索

SQL Server的Inner Join及Outer Join

  在一个正规化的数据库环境中, 我们常会碰到这款情形: 所需的资料并不是放在同一个资料表中, 在这个时候, 你就要用到 Join

  当然 Join 如何将不同的数据库的资料结合, 还要看你如何使用它, 一共有四种不同的 Join 的方式, 在这篇文章中我们将为你介绍 Inner Join 及 Outer Join 以及其应用

  Inner Join

  Inner Join 应该是最常用的 Join 方式, 它只会传回符合 Join 规则的纪录, 还是先来看看语法

  Select <要选择的字段> From <主要资料表>

  <Join 方式> <次要资料表> [On <Join 规则>]

  现在我们利用 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 <Left 资料表>

  <Left | Right> [Outer] Join <Right 资料表> On <Join 规则>

  语法中的 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 这项产品竟然找不到供货商的资料!

  出处:learnASP




相关文章
  • 微软五大Web服务
  • Hyper-V和VMware的区别
  • 从MSN中断服务谈国家安全
  • 微软推全球搜索品牌Bing中文名定为必应
  • 微软今晚正式发布IE8浏览器,包括简体中文版
  • 浅谈企业ERP项目实施过程中的几个误区
  • 大数据量下快速获取 SQL Server 数据库表记录数的方法
  • 三种数据库利用SQL语句进行高效果分页
  • 使用SQL Server 2000索引视图提高性能
  • 如何避免ASP的SQL的执行效率低
  • 关于SQL Server的若干注意事项
  • SQL Server存储过程编程经验技巧
  • Visual Basic开发应用程序答疑
  • 最大骗局?揭露2G MSN邮箱真相
  • 2003年微软10大险招
  • 微软将于12月31日停止对Win95的技术支持
  • 相关软件

  • 使用微软本地化工具包创建一个多语言支持  
  • 微软用于Microsoft Access  
  • 微软SQL数据库支援控件  
  • 微软公司开发的文本文件拼写检查软件  
  • 利用微软的语音引擎使你的程序会朗读  
  • 微软的扫雷精简版  
  • 利用微软的语音引擎使你的程序会朗读  
  • 一定要用微软的数据引擎吗?  
  • 输入用户名和序列号,你也可像微软那样  



  • 月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
    电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
    音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

    月光软件站·版权所有