`

MSSQL基础教程:多表格查询

阅读更多

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

  JOIN声明和子查询

  对于JOINS的更详细的阐述和有关的理念,请参阅 掌握连接的一些概念。关于子查询的更多内容,请参阅使用SQL子选择来合并查询。

分享到:
评论

相关推荐

    MySQL 基础教程:从零开始掌握数据库操作技能

    内容概要:这份 MySQL 入门教程涵盖 MySQL 的安装配置流程介绍及其核心 SQL 命令详解,具体涉及数据库和表格创建、数据增删改查以及数据库与表单管理等多项数据库相关功能的应用技巧;除此之外还提到了图形化管理...

    MySQL.rar_mysql基础教程_mysql教程

    本教程面向初学者,旨在帮助你系统地学习MySQL的基础知识,掌握数据存储、查询及管理的基本技能。 **1. MySQL简介** MySQL是一个开源、免费的SQL数据库,由Oracle公司维护。它以其高效性能、易用性和可靠性而受到...

    MySQL数据库基础与实例教程所有资源

    本教程将全面介绍MySQL的基础知识,并通过实例帮助你掌握其核心操作。 首先,我们来了解一下MySQL的基本概念。MySQL基于SQL(结构化查询语言),它是用于管理关系数据库的标准语言。在MySQL中,数据存储在表格中,...

    php与mysql基础教程

    《PHP与MySQL基础教程》是一本专为初学者设计的编程指南,主要涵盖了PHP和MySQL的基础知识和应用技巧。PHP是一种广泛使用的服务器端脚本语言,尤其在网页开发领域,而MySQL则是世界上最流行的开源关系型数据库管理...

    MySQL的基础教程 数据库

    ### MySQL的基础教程 数据库 #### 1. MySQL概述 ##### 1.1 数据库相关概念 **数据库**:数据库(Database,简称DB)是长期存储在计算机内的、有组织的、可共享的数据集合。它能够有效地对存储在其中的数据进行...

    21 分钟 MySQL 入门教程

    ### 21 分钟 MySQL 入门教程 #### MySQL 相关概念介绍 MySQL 是一种广泛使用的开源关系型数据库管理系统(RDBMS),它利用结构化查询语言(SQL)来进行数据库管理和操作。对于初学者来说,理解 MySQL 的基本概念...

    MySQL基础教程.rar

    这个“MySQL基础教程”旨在为初学者提供一个全面的入门指南,帮助他们理解和掌握MySQL的基础知识。 首先,我们需要理解数据库的基本概念。数据库是一种组织、存储和检索数据的系统,它提供了一种结构化的方式来管理...

    mysql的基础教程

    MySQL是世界上最受欢迎的关系型数据库...通过阅读《MySQL基础教程.doc》和参考《mysql dos命令.txt》,你可以更深入地理解这些概念,并开始在实践中应用。记住,实践是最好的老师,不断练习将使你逐渐熟练掌握MySQL。

    Mysql系统学习教程

    MySQL系统学习教程主要涵盖数据库的基础概念、安装与配置、数据类型、SQL语句、表的操作、索引、视图、存储过程与函数、事务处理、备份与恢复、性能优化等多个方面。以下是对这些知识点的详细解释: 1. **数据库...

    MySql基础教程(新手必备)

    以上就是MySQL基础知识的概述,通过深入学习并实践这些内容,你将能够有效地管理和维护MySQL数据库,为开发和运维工作打下坚实基础。在“MySQL的学习”这个压缩包文件中,可能包含了相关的教程、示例脚本和练习,...

    mysql经典教程,MySQL教程

    1. **MySQL基础** - 数据库与表的概念:MySQL中数据存储在数据库中,而数据则组织成表格形式。 - SQL语言:SQL(结构化查询语言)是用于管理关系数据库的标准语言,包括SELECT、INSERT、UPDATE、DELETE等基本操作...

    mysql基础教程-mysql的基本curd操作

    在本教程中,我们将深入探讨MySQL的基础CURD操作,即创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 首先,了解数据库在软件中的角色至关重要。数据库是实际存储用户数据的地方,它可以被...

    mysql经典教程+mysql存储过程讲解

    本教程结合"mysql经典教程+mysql存储过程讲解"的主题,将深入探讨MySQL的基础知识以及核心特性——存储过程。 首先,我们需要理解什么是数据库。数据库是一个组织和存储数据的系统,允许用户以结构化方式访问和管理...

    Mysql初级教程(收集整理)

    本教程集合了MySQL的基础知识,旨在帮助初学者快速入门。以下是你需要了解的关键知识点: 1. **MySQL概述**:MySQL是一种客户端-服务器模型的数据库系统,支持SQL(结构化查询语言),用于存储、管理和检索数据。它...

    MYSQL基础教程总和.pdf

    首先,MySQL基础教程涉及到了数据库的创建。通过SQL命令“CREATE DATABASE”可以创建一个新的数据库实例。例如,命令“CREATE DATABASE test1;”会创建一个名为test1的数据库。如果指定的数据库已经存在,MySQL会...

    MySQL基础与实例教程练习题参考答案.doc.doc

    此外,数据库表支持更复杂的查询和约束,如主键、外键等,这些都是电子表格不具备的。 数据库设计辅助工具有很多,如数据模型(如ER模型和类图)、数据建模工具(如ERwin、PowerDesigner、Visio)以及关系数据库...

    MySQL基础教程-绝对推荐.ppt

    【MySQL基础教程】这篇PPT主要涵盖了MySQL数据库的基础知识,包括数据库的概念、关系数据库管理系统(RDBMS)、MySQL的流行原因、关系模型的理解以及结构化查询语言SQL的介绍。以下是详细的内容摘要: 1. **数据库...

Global site tag (gtag.js) - Google Analytics