第六周翻译

翻译 2018年04月16日 01:42:19

T-SQL DML级别1: 基本选择语句。

 

 

格雷戈里·拉森,2011/10/07

 

这一系列

这篇文章是Stairway系列的一部分:Stairway 到T-SQL DML。

通过使用SQLServer的Transact-SQL (T-SQL)方言,Stairway将为您提供对于如何使用SQL Server表数据的基本理解。DML是数据操纵语言,是处理数据的语言。它包括语句选择、插入、更新和删除。Stairway将提供一些SQL语言的历史和一些关于集合理论的一般概念。每个级别都将建立在之前的级别上,所以当您完成时,您将很好地理解如何从SQL Server中选择和修改数据。

 

这里是不同的等级,将在这个Stairway系列中涵盖:

级别1: 基本的SELECT语句。

级别2: 结构化查询语言的历史(SQL)

级别3: 关系数据库设计。

级别4: SQL的数学:第1部分。

级别5: SQL的数学:第2部分。

级别6: 使用ORDER BY子句排序数据的基础。

级别7: 使用简单的GROUP BY子句汇总数据。

级别8: 数据修改:更新。

级别9: 数据修改:删除。

级别1:基本的SELECT语句。

 

在SQL Server数据库中管理数据有很多不同的方面。在处理与管理应用程序数据相关的复杂管理问题之前,首先需要从表中检索数据。要从SQL Server表返回数据,需要使用SELECT语句。在这个级别中,我将介绍基本SELECT语句的组件,以及如何使用它从单个SQL Server表检索数据。

 

选择语句中的三个部分。

 

从单个表返回数据的基本选择语句包括三个不同的部分:列列表、from子句和WHERE子句。使用这些不同组件构造基本选择语句的语法如下所示:

SELECT <Column List>

FROM <table name>

WHERE <where criteria>;

“<ColumnList>”将包含一个你想要返回的查询中列的清单,“< table_name >”将包含被选中时表的数据,和“<where criteria> “确定将用于限制的从SELECT语句返回的搜索条件注意WHERE子句是可选的。

请注意,我在stairways上的所有示例将使用AdventureWorksSQL Server 2005数据库,该数据库可以在此位置获得:http://sqlserversamples.codeplex.com/。

让我们看一下下面非常简单的SELECT语句,它从AdventureWorks数据库中的表中选择一些数据。您可以使用SQL Server Management Studio中的查询窗口来运行本文中描述的每个查询语句,同时将数据库设置为AdventureWorks。

SELECT  ProductCategoryID ,

        Name

FROM    Production.ProductCategory

WHERE   ProductCategoryID <2 ;

在这里,我从ProductCategory表选择了两个不同的列,ProductCategoryID和Name。由于这个SELECT语句有一个WHERE子句,它将从表返回的行限制为只具有ProductCategoryID值小于2的行。

现在您已经了解了SELECT语句的基本思想,让我更详细地介绍SELECT语句的每个组件。

 

列清单

列列表遵循SELECT关键字的约束,并且是指定要从表中返回的列的位置。列通过指定列名来标识。如果列出多个列,则用逗号分隔。在以后的级别中,我们将研究从指定表中返回值以外的值的可能性,在第一级中,我们将坚持基础。在上面的例子中,让我们来看看列列表是什么样子的,如果它只选择一个列,或者一个表的所有列。

如果我只想返回ProductCategory表名称列。我的查询是这样的:

SELECT  Name

FROM   Production.ProductCategory

WHERE   ProductCategoryID <2 ;

在这里,您可以看到,我只在上述查询中的SELECT和FROM关键字之间指定了Name列。但是如果我想要指定ProductCategory表中的所有列。我将运行以下查询:

SELECT  ProductCategoryID ,

        Name ,

        rowguid ,

        ModifiedDate

FROM   Production.ProductCategory

WHERE   ProductCategoryID <2 ;

在这个SELECT语句中,您可以看到,我已经识别出了4个不同的列,每个列由一个逗号分隔。这些列可以在单行上一起列出,也可以在不同的行上以不同的方式进行分类,就像我所做的那样。还有一种方法可以从表中选择所有列,这是通过指定星号而不是指定单个列名。下面是使用星号说明的SELECT语句:

SELECT  *

FROM   Production.ProductCategory

WHERE   ProductCategoryID <2 ;

在应用程序中使用星号(通常称为“星号”)时需要注意。由于星号将返回表中的所有列,如果您更改了一个表以包含额外的列,那么将在不修改实际SELECT语句的情况下返回额外的列。然而,如果您已经指定了所有列的名称,那么当添加一个新列时,它将不会返回,除非您将它添加到列列表中。使用星号可以接受测试,但是如果您想遵循最佳实践,请不要在应用程序代码中使用它。这是最佳实践的原因是大多数应用程序期望从给定的SELECT语句返回固定数量的列。

FROM子句

在FROM子句,你可以识别你要选择数据的表格,在这个级别中,我们只讨论从FROM子句中的单个表中选择的数据,请注意,随着您对SQL知识的进步,FROM子句可以识别要选择数据的多个表。

有多种不同的方式可以识别你要在其中选择数据的表。 实际上有四种不同的方式,我将在本文中介绍其中的三种方法,第四种方法我仅仅提及一下。

第一种方法是通过标识表名和它所属的模式来指定表。 这是我迄今在所有示例中标识所有表名的方式。 在我的每个例子中,我说表名是Production.ProductCategory。 实际的表名只是ProductCategory,它包含在Production模式中。

在FROM子句中标识表的第二种方法是只声明表名。 当FROM子句仅包含表名时,SQLServer将假定该表包含在数据库用户的默认模式下或在dbo模式下。让我更详细地解释这个概念。

当您向SQL Server提交一个只能标识表名的查询时,SQL Server将需要解析该表所在的模式。这是因为在给定的数据库中可以有多个具有相同名称的表,只要它们处于不同的模式中即可。要确定表中驻留的SQL Server的架构需要经过两个步骤。第一步是为提交查询的数据库用户使用默认模式,并将其默认模式添加到表名中,然后查找该表。如果SQL Server使用用户默认模式查找表,则不执行第二步。如果SQL Server未使用用户默认模式找到该表,则SQL Server检入dbo模式以查找该表。无论您的数据库是否包含单个模式,最好练习一下,通过使用模式名称和表名称来养成在FROM子句中标识表的习惯。通过这样做,您可以减少SQL Server解决表名称和促进计划缓存重用的工作量.

识别表的第三种方法是使用三部分名称,第一部分是数据库名称,最后两部分是模式和表名。这是一个SELECT语句,与我以前使用三部分名称的SELECT语句相似:

在这里,您可以看到我将数据库名称AdventureWorks附加到FROM子句中标识的Production.ProductCategory表中。

通过对FROM子句中的表使用三部分命名约定,可以将SQL Server Management Studio中查询窗口的数据库上下文设置为任何数据库,并且数据库引擎仍将知道用于查询的数据库,模式和表。在构建需要从实例中的多个数据库检索数据的应用程序时,使用三部分名称有助于在单个应用程序中从多个数据库检索数据。

最后一种方法是使用四部分名称,第四部分(数据库名称前面)标识链接服务器的名称。由于链接服务器不在本阶段的范围之内,因此我不会进一步讨论这个主题。如果您应该运行包含4个部分的表名称,则您将知道该表与链接的服务器关联。

WHERE子句

SELECT语句的WHERE子句是可选的。 WHERE子句用于约束从SELECT语句返回的行。数据库引擎根据WHERE子句评估每行,然后只在符合WHERE子句中标识的搜索条件或条件时才返回行。在编写更多SELECT语句时,您会发现大部分SELECT语句可能包含WHERE子句。

一个简单的WHERE子句将包含单个搜索条件,而更复杂的WHERE子句可能包含许多条件。当在WHERE子句中使用多个条件时,它们将通过使用AND和OR逻辑运算符在逻辑上组合在一起。 SELECT语句中可能包含的不同条件的数量没有限制。在我到目前为止的例子中,我只使用了一个条件。让我们来回顾一些有更复杂的WHERE子句的例子。

这是一个SELECT语句,它有两种不同的搜索条件:

在这个语句中,第一个条件检查该行在颜色列中是否具有值Blue。第二个条件检查ProductId列中的值是否大于900.因为使用AND运算符,所以这两个条件都必须为true,以便从该查询返回一行。

让我们看看更复杂的WHERE子句:

此示例返回Production.Product行,其中ProductID值大于900,Color列中的值为蓝色或绿色。 通过查看这个查询,你可以看到我已经在两个不同的Color列条件下放置了括号。这设置了条件相互评估的顺序,就像您在数学表达式中所做的一样。通过使用括号,在评估AND运算符之前,将评估两种颜色条件之间的或运算。当没有括号使用AND和OR时,这些逻辑运算符是进程的顺序是基于逻辑运算符优先级的规则。优先规则规定如果不包括括号,则在OR操作之前执行AND操作。

让我通过添加一个NOT运算符来构建我之前的WHERE子句:

我在AND操作之后添加了NOT运算符,以表明我想要的产品不是蓝色或绿色。 当我对我的AdventureWorks数据库运行这个查询时,我得到的是Silver,Yellow和Black的产品。

有关搜索条件的所有不同可能性的完整列表,请参阅书籍

Online:http://msdn.microsoft.com/en-us/library/ms173545.aspx,有关逻辑运算符优先级的更多信息,请阅读以下主题:http://msdn.microsoft.com/en-us/library/ ms190276.aspx。

2008061023_CC_第六周作业

  • 2011年04月04日 09:53
  • 168KB
  • 下载

coursera机器学习课程第六周——课程笔记

本周的内容主要分为两部分,第一部分:主要内容是偏差、方差以及学习曲线相关的诊断方法,为改善机器学习算法的决策提供依据;第二部分:主要内容是机器学习算法的错误分析以及数值评估标准:准确率(交叉验证集的误...
  • ccblogger
  • ccblogger
  • 2017-11-27 17:47:21
  • 304

machine-learning第六周 上机作业

1、如何评估算法好坏:高偏差与高方差的问题; 2、当某个集合中,一个类别远小于另一个类别的时候(如患癌),如何评估在面对偏斜类(Skewed classes)的算法好坏:查准率和召回率; 3、如何选择...
  • dialoal
  • dialoal
  • 2016-02-02 16:21:28
  • 1506

Coursera机器学习-第六周-Advice for Applying Machine Learning

Evaluating a Learning Algorithm Desciding What to Try Next Evaluating a Hypothesis Model...
  • dingchenxixi
  • dingchenxixi
  • 2016-06-01 07:58:34
  • 2169

coursera Machine Learning 第六周 测验quiz1答案解析 Advice for Applying Machine Learning

1.选择B 解析:通过看学习曲线,结合课上所讲就是高方差的表现。 2.选择BC 解析:题意是做图片分类,结果对测试集效果不好,但是能很好地符合训练集,如何才能改善算法。明显是过拟合的结果,即高方差...
  • sinat_39805237
  • sinat_39805237
  • 2017-12-12 20:43:18
  • 270

coursera 机器学习第六周

本周的内容主要分为两部分,第一部分:主要内容是偏差、方差以及学习曲线相关的诊断方法,为改善机器学习算法的决策提供依据;第二部分:主要内容是机器学习算法的错误分析以及数值评估标准:准确率(交叉验证集的误...
  • qq_23960265
  • qq_23960265
  • 2017-12-05 13:47:20
  • 118

Coursera—machine learning(Andrew Ng)第六周编程作业

linearRegCostFunction.m function [J, grad] = linearRegCostFunction(X, y, theta, lambda) %LINEARREGC...
  • ccblogger
  • ccblogger
  • 2017-11-24 15:33:57
  • 584

Coursera-吴恩达-机器学习-(第6周笔记)应用机器学习的建议和机器学习系统设计

此系列为 Coursera 网站Andrew Ng机器学习课程个人学习笔记(仅供参考) 课程网址:https://www.coursera.org/learn/machine-learning ...
  • malele4th
  • malele4th
  • 2018-01-15 21:18:12
  • 162

coursera Machine Learning 第六周 测验quiz2答案解析 Machine Learning System Design

1.0.85 2.ab错的 3.c 4.abc 5ce
  • sinat_39805237
  • sinat_39805237
  • 2017-12-14 10:31:54
  • 143

Coursera吴恩达ML 第六周编程week6 Regularized Linear Regression and BiasVariance编程注释选做

  • 2017年12月13日 20:01
  • 224KB
  • 下载
收藏助手
不良信息举报
您举报文章:第六周翻译
举报原因:
原因补充:

(最多只允许输入30个字)