DATABASE SYSTEM CONCEPTS4.15

 楼梯到T-SQLDML级别1:基本SELECT语句格雷戈里·拉森著,2011/10/07系列本文是楼梯系列的一部分:从楼梯到T-SQLDML的楼梯。此阶梯将为您提供如何使用SQLServer的Transact-SQL(T-SQL)方言处理来自SQLServer表的数据的基本理解。DML是一种数据操作语言,是处理数据的语言的一个方面。它包括SELECT、INSERT、UPDATE和DELETE语句。这个阶梯也将提供一些SQL语言的历史和一些关于集合论的一般概念。每个级别都将建立在以前的级别之上,所以当您完成时,您将很好地了解如何从SQLServer中选择和修改数据。以下是在这一系列楼梯中将涵盖的不同级别:第1级:基本SELECT语句第2级:结构化查询语言(SQL)的历史第3级:关系数据库设计第4级:SQL的数学:第1部分第5级:SQL的数学:第2部分第6级:使用ORDERBY子句对数据进行排序的基本原理第7级:根据子句使用简单组汇总数据第8级:数据修改:更新第9级:数据修改:删除第1级:基本SELECT语句SQLServer数据库中的数据管理有很多不同的方面。在进入与管理应用程序数据相关的复杂管理问题之前,您需要从从表中检索数据的基础开始。若要从SQLServer表返回数据,请使用SELECT语句。在这个级别上,我将介绍基本SELECT语句的组件以及如何使用它从单个SQLServer表检索数据。SELECT语句中的三个部分从单个表返回数据的基本SELECT语句由三个不同的部分组成:列列表、FROM子句和WHERE子句。使用这些不同组件构造基本SELECT语句的语法如下所示:选择<列列表>来自<表名称>其中<WHERE标准>;“<Column list>”将包含您希望从查询中返回的列列表,“<table_name>”将包含从中选择数据的表,而“<WHERWERS>>”很好地标识将用于约束SELECT语句返回的行的搜索条件。注意,WHERE子句是可选的。请注意,我在这个阶梯中的所有示例都将使用AdventureWorksSQLServer 2005数据库,该数据库可以从CodePlex获得,这个位置是:http://sqlserverspreses.codeplex.com/。让我们看看以下非常简单的SELECT语句,它从AdventureWorks数据库中的表中选择一些数据。接下来可以使用SQLServerManagementStudio中的查询窗口运行本文中描述的每个查询语句,同时将数据库设置为AdventureWorks。选择ProductCatoryID,姓名产品类别其中ProductCatoryID<2;在这里,我从Production.ProductClass表中选择了两个不同的列,ProductCatoryID和Name。由于SELECT语句有WHERE子句,所以它将从表返回的行限制为只有那些ProductCatoryID值小于2的行。现在您已经了解了SELECT语句的基本概念,让我更详细地研究SELECT语句的每个组件。列列表列列表在SELECT关键字之后,是指定要从表返回的列的位置。通过指定列名来标识这些列。如果列出多个列,则用逗号分隔。在以后的级别中,我们将研究从指定的表返回列以外的值的可能性,在第一个级别中,我们将坚持基本操作。在上面的示例的基础上,让我们探索一下,如果一个列列表只选择一个列,或者一个表的所有列,那么它会是什么样的。如果我只想返回Production.ProductClass表的Name列,那么我的查询将如下所示:选择名称产品类别其中ProductCatoryID<2;在这里,您可以看到,在上面的查询中,我只在SELECT和FROM关键字之间指定了Name列。但是,如果我想指定Production.ProductClass表中的所有列,我将运行以下查询:选择ProductCatoryID,名字,罗吉德修正Date产品类别其中ProductCatoryID<2;在这个SELECT语句中,您可以看到我已经识别了4个不同的列,每个列用逗号分隔。这些列都可以在一行上列出,也可以在不同的行上分隔,以提高可读性,就像我所做的那样。还有一种从表中选择所有列的方法,即指定星号,而不是指定单独的列名。下面是使用星号规范的SELECT语句:选择*产品类别其中ProductCatoryID<2;在应用程序中使用星号(通常称为“星星”)时要小心。由于星号将返回表中的所有列,如果您碰巧更改了一个表以包含一个额外的列,那么将返回附加列而不修改实际的SELECT语句。但是,如果您已按名称指定了所有列,则添加新列时将不会返回该列,除非将其添加到列列表中。使用星号进行测试是可以接受的,但是如果您想遵循最佳实践,请不要在应用程序代码中使用它。这是最佳实践,因为大多数应用程序期望从给定的SELECT语句返回固定数量的列。当将列添加到表中,并且使用星号方法标识表列时,返回的附加列会破坏未编码以处理这些额外数据的应用程序。来自条款在FROM子句中,标识要从中选择数据的表。在这个级别上,我们只讨论从FROM子句中的单个表中选择数据。请注意,随着您对SQL的了解不断加深,FROM子句可以标识要从中选择数据的多个表。有许多不同的方法来标识要在其中选择数据的表。事实上,有四种不同的方式,其中三种我将在本文中介绍,第四种我只会提到。第一种方法是通过标识表名和表所属的架构来指定表。到目前为止,我在所有示例中都是这样标识我的所有表名的。在我的每个例子中,我都说表名是Production.ProductClass。实际的表名只是ProductClass,它包含在生产模式中。识别FROM子句中的表的第二种方法是只声明表名。当FROM子句仅包含表名时,SQLServer将假定该表包含在数据库用户的默认架构下或DBO模式下。让我更详细地解释一下这个概念。当您向仅标识表名的SQLServer提交查询时,SQLServer将需要解析该表所处的架构。这是因为在给定的数据库中可以有多个同名的表,只要它们在不同的模式中。要确定一个表驻留在SQLServer中的架构,需要经过两个步骤。第一步是对提交查询的数据库用户使用默认架构,并附加他们的默认架构表名,然后查找该表。如果SQLServer使用用户默认架构找到表,则不执行步骤二。如果SQLServer没有使用用户默认架构找到表,则SQLServer将检查DBO架构以查找表。无论您的数据库是否包含单个模式,最好的做法是习惯于使用模式名称后面的表名来标识FROM子句中的表。通过这样做,您可以减少SQLServer解析表名和促进计划缓存重新使用所需的工作量。识别表的第三种方法是使用三个部件名,其中最后两个部分是模式和表名,第一部分是数据库名。下面是一个SELECT语句,类似于我以前的SELECT语句,它使用了三个部分的名称:选择*来自AdventureWorks.Production.ProductClass其中ProductCatoryID<2;在这里,您可以看到,我将数据库名AdventureWorks附加到在FROM子句中标识的Production.ProductClass表中。通过使用FROM子句中表的三部分命名约定,可以将SQLServerManagementStudio中查询窗口的数据库上下文设置为任何数据库,而且数据库引擎仍将知道用于查询的数据库、架构和表。当构建需要从实例中的多个数据库检索数据的应用程序时,使用三个部件名称有助于从单个应用程序中的多个数据库检索数据。最后一种方法是使用四部分的名称,第四部分(在数据库名称之前)标识链接服务器的名称。由于链接服务器超出了本阶梯的范围,我将不再进一步讨论这个主题。如果您应该跨包含4个部分的表名运行,您将知道该表与链接服务器相关联。何地条款SELECT语句的WHERE子句是可选的。WHERE子句用于约束SELECT语句返回的行。数据库引擎根据WHERE子句计算每一行,然后只返回符合WHERE子句中标识的搜索条件的行。当您编写更多SELECT语句时,您会发现大多数SELECT语句可能包含WHERE子句。简单WHERE子句将包含单个搜索条件,而更复杂的WHERE子句可能包含许多条件。当在WHERE子句中使用多个条件时,它们将通过使用AND和OR逻辑运算符逻辑地组合在一起。

翻译自《DATABASE SYSTEM CONCEPTS》  Abraham Silberschatz   Henry F.Korth   S.Sudarshan

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值