多个表格查询合并至单一声明的常用方式

在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个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声明可以以较少的滞后时间提供出相同的信息。

时间: 2024-11-10 01:05:36

多个表格查询合并至单一声明的常用方式的相关文章

jquery插入复杂表格,合并行列

原文:jquery插入复杂表格,合并行列 此方法为个人测试所写,针对各种兼容性问题还未测试,初写的目的是easyui复杂表头有些缺陷,比如某个表头合并两列,   在easyui中这样操作无法绑定两个值 或者说我没找到 再或者 可以做个隐藏 数据列 ,不过闲来无事 自己写了写jquery,下面进入正题   先展示下效果 指标性选择为 表头的隐藏用 (客户要求可自定义表头,在extjs中表单自带这个功能,不过复杂表头好像也不支持,单行表头判断条件少的多,比较好实现) 从图片中 可以看到 复杂表头,数

在Word 2007表格中合并单元格

在Word2007文档表格中,通过使用"合并单元格"功能可以将两 个或两个以上的单元格合并成一个单元格,从而制作出多种形式.多种功能的 Word表格.用户可以在Word2007文档表格中通过三种方式合并单元格,分别简述 如下. 方式1:打开Word2007文档窗口,选中准备合并的两个或两个以上的单元格. 右键单击被选中的单元格,在打开的快捷菜单中选择"合并单元格" 命令,如图2009011304所示. 图2009011304 选择"合并单元格"命

WPS表格中合并居中功能键的使用

  我们知道在完成表格数据的输入后,会发现有些单元格的内容相同,为了表格的美观,可以将两者或者多个单元格合并起来.今天小编为大家介绍一下wps表格怎么合并拆分单元格,下面一起来看看具体操作吧. 一.合并单元格 首先选中你想要合并的单元格,点击"开始"菜单下的"合并居中"按钮,如下图所示. 合并居中 点击"合并居中"按钮后就可以将四个单元格合并成一个单元格. 二.拆分单元格 选中刚合并的单元格,再次点击"合并居中"按钮,就可以将

WPS文字中对表格进行合并或拆分的技巧

  在WPS文字中插入并编写了表格后,发现有些内容是可以整合在一起,看起来也更加整齐,那么就要对表格进行合并和拆分.下面小编就向大家介绍下在WPS文字中对表格进行合并和拆分的好方法. 一.合并单元格 要将单元格1和单元格2进行合并,选择"表格工具"-"合并单元格". 合并单元格 二.拆分单元格 要将单元格1.2进行拆分,选择"表格工具"-"拆分单元格".在弹出的拆分单元格窗口中根据拆分要求填写单元格要拆分为的行和列. 以上就是

wps表格怎么合并拆分单元格

  今天小编为大家介绍一下wps表格怎么合并拆分单元格,下面一起来看看具体操作吧. 一.合并单元格 首先选中你想要合并的单元格,点击"开始"菜单下的"合并居中"按钮,如下图所示. 点击"合并居中"按钮后就可以将四个单元格合并成一个单元格,如下图所示. 二.拆分单元格 选中刚合并的单元格,再次点击"合并居中"按钮,就可以将单元格拆分开了.

java itext pdf 导出复杂表格,合并单元格问题

问题描述 java itext pdf 导出复杂表格,合并单元格问题 PdfPTable bTable = new PdfPTable(7); PdfPCell cell = null; cell = new PdfPCell(new PdfPCell(new Paragraph("日期",font2))); cell = new Cell(new Cell(new Paragraph("日期",font2))); cell.setRowspan(2); cell

ASP.NET中GridView 重复表格列合并的实现方法_实用技巧

这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下GridView 和 Repeater 关于重复数据合并的方法. 效果图如下: GridView : 前台代码 : <div> <asp:GridView ID="gvIncome" runat="server" AutoGenerateColumns="False"> <Columns> <asp:TemplateFie

Sybase ASA中查询元信息的几个常用SQL函数

Sybase ASA中查询元信息的几个常用SQL函数: sp_column_privileges Unsupported sp_columns table-name [, table-owner ] [, table-qualifier] [, column-name] 返回指定列的数据类型 sp_databases Unsupported sp_datatype_info Unsupported sp_fkeys pktable_name [, pktable-owner][, pktable

查询json的数据结构的8种方式介绍

 你有没有对"在复杂的JSON数据结构中查找匹配内容"而烦恼,这篇文章介绍了查询json的数据结构的8种方式,总有一个适合你项目使用的方法 查询json的数据结构的8种方式:   JsonSQL   JsonSQL实现了使用SQL select语句在json数据结构中查询的功能.主页:http://www.trentrichardson.com/jsonsql/   例子:    代码如下: jsonsql.query("select * from json.channel.