热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

在对跨多个表格的数据进行组合时,有时很难搞明白要应用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方法进行论述。在这篇文章中的样本查询符合SQ

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




推荐阅读
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • Oracle中NULL、空字符串和空格的处理与区别
    本文探讨了在Oracle数据库中使用NULL、空字符串('')和空格('_')时可能遇到的问题及解决方案。重点解释了它们之间的区别,以及在查询和函数中的行为。 ... [详细]
  • Oracle 数据导出为 SQL 脚本的详细步骤
    本文介绍如何使用 PL/SQL Developer 工具将 Oracle 数据库中的数据导出为 SQL 脚本,包括详细的步骤和注意事项。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 1.介绍有时候我们需要一些模拟数据来进行测试,今天简单记录下如何用存储过程生成一些随机数据。2.建表我们新建一张学生表和教师表如下:CREATETABLEstudent(idINT ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 本文详细介绍了MySQL数据库中的Bin Log和Redo Log,阐述了它们在日志记录机制、应用场景以及数据恢复方面的区别。通过对比分析,帮助读者更好地理解这两种日志文件的作用和特性。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
  • 本文介绍了在 SQL Server 2012 客户端中格式化 SQL 查询语句的多种方法,包括内置功能和第三方工具,帮助用户提高代码可读性和维护性。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
author-avatar
健健22010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有