实现跨多个表格的数据进行组合的SQL语句


  在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。

  在这篇文章中的样本查询符合SQL92 ISO标准。不是所有的数据库生产商都遵循这项标准,而且很多厂商采取的提升措施会带来一些意料不到的后果。如果你不确定你的数据库是不是支持这些标准,你可以参看生产厂商的有关资料。

  SELECT

  一个简单的SELECT声明就是查询多个表格的最基本的方式。你可以在FROM子句中调用多个表格来组合来自多个表格的结果。这里是一个它如何工作的实例:

以下为引用的内容:
  SELECT table1.column1, table2.column2 FROM table1,
  table2 WHERE table1.column1 = table2.column1;

  这个实例中,我使用点号(table1.column1)来指定专栏来自哪一个表格。如果所涉及的专栏只在一个参考的表格中出现,你就不需要加入完整的名称,但是加入完整名称会对可读性起到帮助。

  在FROM子句中表格之间由逗号来分隔,你可以加入所需的任意多的表格,尽管一些数据库有一个在引入正式的JOIN声明之前他们可以有效地处理的内容这方面的限制,这个将在下面谈到。

  这个句法是一个简单的INNER JOIN。一些数据库将它看成与一个外部的JOIN是等同的。WHERE子句告知数据库哪一个区域要做关联,而且它返回结果时,就像列出的表格在给定的条件下组合成一个单独的表格一样。值得注意的是,你的比较条件并不需要与你作为结果组返回的专栏相同。在上面的例子中,table1.column1和table2.column1用来组合表格,但是返回的却是table2.column2。

  你可以在WHERE子句中使用AND关键字来将这个功能扩展至多于两个的表格。你还可以使用这样的表格组合来限制你的结果而不用实际地从每个表格返回专栏。在下面的例子中,table3与table1匹配,但是我没有从table3返回任何东西来显示。我只是确保来自table1的有关专栏存在于table3之中。注意此例中table3需要在FROM子句中被引用。

以下为引用的内容:
  SELECT table1.column1, table2.column2 FROM table1,
  table2, table3 WHERE table1.column1 =
  table2.column1 AND table1.column1 = table3.column1;

  然而,要注意的是,这个查询多个表格的方式是一个暗指的JOIN。你的数据库可能对事物进行不同的处理,这取决于它所使用的优化引擎。而且,忽略对与WHERE子句的相关特性的定义将会给你带来不愿看到的结果,例如从余下的查询中返回与每一个可能的结果相关的专栏的rogue域,就像在CROSS JOIN之中一样。

  如果你习惯于你的数据库处理这种类型的声明的方式,且你只对两个或是少数几个表格进行组合,一个简单的SELECT声明就可以达到目的。

  JOIN

  JOIN的工作方式与SELECT声明是相同的,它从不同的表格中返回一个带有专栏的结果组。在暗含的JOIN之上使用外部JOIN的优势是对你的结果组的更好的控制,而且还可能在涉及很多个表格的情况下提升性能表现。

  JOIN的类型有几种:LEFT,RIGHT,FULL OUTER,INNER和CROSS。你所使用的类型是由你想要看到的结果所决定的。例如,使用LEFT OUTER JOIN将会从列出的第一个表格中返回所有有关的行,而同时如果没有信息与第一个表格相关的话将潜在地从所列出的第二个表格中加入行。

  在这里INNER JOIN和暗含的JOIN是不同的,INNER JOIN将只返回那些在两个表格中都有数据的行。

  对第一个SELECT查询使用如下JOIN声明:

以下为引用的内容:
  SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2
  ON table1.column1 = table2.column1;

  子查询

  子查询,或叫子选择声明,是在一个查询中将结果组作为资源使用的一个途径。他经常被用来对结果进行限制或定义,而不是运行多个查询或操纵应用软件之中的数据。有了子查询,你可以参考表格来决定数据的内含,或是在一些情况下,返回一个专栏,而这个专栏是一个子选择的结果。

  下面的例子中使用了两个表格。一个表格中包含了我想要返回的数据,而另一个表格则给出一个比较点来确定什么数据是我确实感兴趣的。

以下为引用的内容:
  SELECT column1 FROM table1 WHERE EXISTS
  ( SELECT column1 FROM table2
  WHERE table1.column1 = table2.column1 );

  子查询很重要的一个方面就是性能表现。便利性是有代价的,它取决于你所使用的表格和声明的大小,数量和复杂性,还有你可能会允许你的应用软件做处理工作。每一个查询在被主查询作为资源使用之前,都将被完整地单独处理。如果可能的话,创造性地使用JOIN声明可以以较少的滞后时间提供出相同的信息。



相关阅读:
IIS 配置JSP环境全攻略
PHP4之COOKIE支持详解
css图片切换效果代码[不用js]
javascript(js) join函数使用方法介绍
Discuz 6.0上传图片提示“无效的图片文件”解决方案
asp email邮箱地址验证正则表达式
jquery 事件执行检测代码
图片加密
jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码
SQL Server 2005最值得你升级的10个理由
深入浅出SQL系列教程之SQL语言简介
linux服务器搭建步骤层层剖析
SQL Server提示"选定的用户拥有对象,所以无法除去该用户”
JavaScript 拖拉缩放效果
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 德兰修女传 读后感 在我十三年的生涯700字作文 :未来的交通 忘记(夜泊) 大学生即兴英语演讲稿 我讨厌不讲文明的人 经典诗歌赏析50首 衣服越长越大 我最喜欢的一个人作文450字 《谁动了我的奶酪》读后感 2015年升学宴主持词 爱情短信大全:涅盘本欲赴真爱,化蝶只为恋花魂!爱你一万年 查不着 邂逅幸福作文150字 “孤独”空巢老人之殇 寂寞孤独伤心失落的国庆节 诉衷情(建康) 让生活变成你想要的样子 年终安全员工作总结 对不起,那个小女孩 感人励志故事:任何一个生命,必有它的存在价值 外商交际礼仪 雄心的一半要忍耐 成功的一半要等待 弟弟真有趣作文350字 一别一辈子 ——张爱玲 静于心,安于态 标准出纳实习报告范文 故人入我梦,明我长相忆 分家析产协议书范本 接天莲叶无穷碧下一句 会有天使替我爱你作文500字 你已听见,为何不回? 80后变老的20种表现 乐观与悲观不能失调 工艺实习周记 两颗糖果的世界作文100字 毕业留言祝福 如果我是老师 盛夏的阳光作文1400字 人生如梦——说理想价值 西楼漠漠青竹瘦 (语文教学论文)“坎坷”之坎坷???语文课堂上作文3000字 现代情诗19首,首首经典原创! 体验生命的每一分钟作文400字 富有激情的演讲稿 玉米棒子 大班音乐欣赏:苹果树找医生 这就是我----一个爱看书的女孩450字 2013年2月大学生入党申请书范文 公司员工离职证明

Copyright © 2016 phpStudy |