[音乐]
大家好，欢迎学习本课程，Microsoft 总部
位于 Bellevue/Redmond/Seattle 地区。 我们今天将要讲授
查询 Microsoft SQL Server2012 课程。
非常感谢各位莅临。我们希望
与您互动，从而能够向我们提供一些反馈，
因此，在您查看下几个小时的演示文稿时，
屏幕右侧有一个聊天界面，
您可以很方便地在这里回复或发送一些意见，
也可以在这里聊天、我们有众多的 SME（即
行业专家）在幕后与我们一起工作。我是
Brian Alderman，我将进行说明，
我们还将从演播室监视聊天情况。
很酷的是，如果您键入了一个真正好的问题，
这个问题将会发送给我们，我们将现场指出该问题
并且回答该问题。好像消息是您
不必全天都听我一个人说。我还在参加
演播室 Tobias。您最近怎么样？
不太糟，Brian。来到这里感到很开心。
很高兴看到您。感谢今天参加我们的课程。并且
我想要确保每个人都理解
今天讲述的内容。这更偏向于级别 300 课程。
并且我们将尽力满足想要学习
在 SQL Server 内进行某些高级 Transact-SQL
查询所需技能的群体。因此，您应该至少了解
关系数据库、了解
SSMS（即 SQL Server Management Studio），因为我们将要在
这方面用很多时间，并且掌握某些
Microsoft Windows 操作系统及其核心
功能的基本知识。我们来看看
今天全天将要讨论什么。或者是晚上，这取决于
您从其拨号的位置。我们开始时将要介绍
SQL Server 2012。我们会介绍一些模块，
并且保持水平相当，确保每个人都理解
全天中我们要处理的问题，
以及全天我们要处理或使用一些
术语和概念。然后，我们将进入下一模块，
看看一些高级的选择语句，例如
不同的子句、案例以及对数据进行联接、合并、
筛选和排序，以及如何处理这些 null 值。
我们将介绍数据类型。因为在
SQL Server 中生成新对象时，理解
适当的数据类型并且应用数据类型十分重要。
因此，我们将讨论数据类型的转换，
并且实际介绍一些 SQL Server 功能。
然后，我们将对数据进行分组和聚合。并且在该
方面中，我们将介绍通过使用子句进行分组。我们将
讨论子查询。我们将讨论不同视图、内联表、
有效的函数和派生表。我们还将讨论一些有关 分组和聚合数据的
更高级的..主题。
然后，我们将吃午餐。就餐时间大约是 60 分钟。
可能是 45 分钟、60 分钟或两小时。不，将不会
是两小时，我保证。但是，大致是 60 分钟的
午餐时间，具体时间视情况
而定。在午餐后，
我们将讨论
集运算符。
集运算符包括 Windows 函数，以及使用数据透视表、
多维数据集和汇总对集进行分组。我们将介绍这些
主题并且讨论它们。我们将讨论修改
数据，因为并不全都是与检索数据有关，我们需要
知道如何正确插入、更新和删除内容。
并且我们将看看如何使用约束、默认约束、
触发器，以便确保在我们添加数据时，
通过设置不同的默认值、约束和触发器，
强制实现数据完整性。我们将看看如何使用 T-SQL、Transact-SQL 进行编程。
我们将看看一些编程元素、一些错误处理，
并且在您的编程环境内理解和实现事务。
然后，我们将通过检索 SQL Server
元数据和改进 SQL Server 查询性能，圆满 完成今天的课程。因此，我们将看看
系统目录、动态管理视图
或 DMV 等方面。我们将讨论创建和执行存储过程，
然后全面了解
在进行查询时用来专门改进 SQL Server 性能的方法。
因此，下面我们就来看一看。正如我们所说的，我们
将开始介绍 Microsoft SQL Server。
此外，还可以方便地使用右侧的这个聊天界面。如果
您有任何疑问，请通过聊天界面告诉我们，
我们将会回答您的问题。..我们具有很多的
SME 可回答..您的问题。..这些 SME
在幕后与我们一起工作。并且 Tobias 和我
还将会在这些问题出现时提出一些现场问题。 我们现在
就开始介绍 Microsoft SQL Server。
并且这将是模块 1。并且还只是为了
打下基础并且保持
水平大致相当。我们将要谈论一些
不同类型的命令和语句
元素，并且看看一些基本的
选择语句。..
一些您可以执行的基本的选择语句。
因此，您可以在这里找到三种命令。我们具有
DML，即数据操作语言。本课程是查询
SQL Server，主要针对的是 DML，
特别是选择语句。..我们将要
讨论的是插入、更新和删除
命令，它们都属于语句的数据操作语言
类别。我们还将讨论 DDL、
如何创建对象、对象是数据库、表
还是存储过程。并且在创建后，我们可能需要 进行修改。
我们将介绍用于更改它的方法。并且最后， 我们可能会有
某个原因要删除它。现在，我的目标是将该 drop 命令更改为
toast 命令。因此，我试图让 Microsoft 将命令
从 drop 更改为 toast。我要与 Tobias
合作，尝试让 toast 命令代替 drop 命令。
是否有任何方法可让我们在本课程结束前完成该任务？
没有。
是的，没有。我以后将会想想办法。我不想
束手无策。因此，如果你们都赞成用 toast
命令代替 drop 命令，请让我们知道您的想法，
并且我想如果我们都对
SQL 开发团队施加足够影响，我们可能会在 下一版本中看到添加了 toast 命令。
我一直在努力告诉 Brian 有关此 NC 标准的情况，
我们已尽力接近标准，
但显然，它们尚未达到 toast 命令的水准。
好了，我想我们可以设置了。..您可以进行新
设置了。可能每个人都要从 drop 命令
更改到 toast 命令。这是个很酷的命令。
我们今天将会多次使用 toast。遗憾的是，
我要键入 drop，但在我键入 drop 时，我想的却是
toast 命令。
不。
但没有 drop 命令。..没有 toast 命令。
好了。我们还要谈谈数据控制语句。
这些数据控制语句控制对 SQL Server 数据库内
不同对象的访问。因此，它们是 DCL 命令。 我们也将要
了解它们。因此，我们将使用三种不同类别的
命令。
DML、DDL 和 DCL。现在，我们有一些将要 使用的 T-SQL 语言元素，
我们将要更深入地了解一下
这些元素。我先会介绍一下它们，然后让 Tobias
再多讲讲有关它们的情况。
我们将会介绍在编写 T-SQL 命令时我们会使用的
谓词和运算符，以及我们可能会调用的
不同函数。我们可能要重复使用存储过程之类的功能，
因此我们可能要传递变量。我们具有将能够使用的不同
表达式、用于具有批处理作业的方法并且
我们可以为此提供分隔符。我们想要控制该流程，
因此，我们可以使用 if/else 之类的语句。然后，
我们想要添加注释，因为我们始终认为给内容
加注释很不错，因此我们想要确保可以添加注释。并且我们
将要向您展示如何对此内容添加注释。因此，我将
请 Tobias 演练其中一些元素，
在我们使用 T-SQL 时可使用这些元素。
谢谢您，Brian。好。
因此，您看到的是您在任何编程语言
中都设想存在的标准事务，对吧？
我们具有谓词。这包括常见的运算符、常见的包括
like 在内的比较运算符，
like 是一种特殊的字符串类型的运算符。 我们有三种逻辑运算符：not、and
和 or。
并且我们在授课期间将深入探讨如何使用所有 这些运算符。
并且我考虑的我们关注的一件事就是
最佳实践、如何使用语言、
您应该考虑什么以及出于不同原因您要
避免什么。它们全都是上下文相关的，对吧？
因此，在正确时间使用正确内容显然会
对您有所帮助。
好，这些就是谓词。现在，我们也具有函数。
您看到我们有三个类别的函数。我们有字符串
函数，如果您想要提取字符串的某一
部分或者想要看看字符串的长度，则可以使用 字符串函数。我们有
日期和时间函数。如果我们想要获取系统日期，
或者如果我们想要查看一天中的某个时间段或 者添加一天中的某个时间段，
则可以使用日期和时间函数。然后，我们具有聚合函数。 如果我们想要了解某个特定销售人员的
平均销售额或者特定销售人员的总销售额， 可以使用聚合函数。
这些函数就属于聚合函数。因此我们可以使用 这三种函数。
并且我们将再次看看它们，我们今天的演示文 稿中会说明它们。
并且我们将看到它们的实际使用情况。现在， 非常想使用
变量，因为这使我们有机会
重复使用我们已创建的存储过程之类的项，
并且能够传递不同变量或具有这些变量的不同值。
因此，我们将看看如何声明变量。非常简单。
实际上，从 SQL Server 2008 开始， 我们现在不仅可以声明它，
还可以同时初始化它。
因此，我们将谈谈如何使用变量以及它们多么强大， 从而可以
使其更灵活和动态一些，
例如存储过程，如果我们重新尝试使用存储过程。 我们在这里有一些
表达式。我们重新执行选择，一年，
订单日期加 1，我们选择订单数量乘以单价。
因此，我们可以使用我们的选择语句得到了创 造性的结果。我们不必
从表名称中选择星号。
我们实际上可以创建和自定义
该结果集。并且我们将看看是否有一些机会，
可以通过使用可供我们使用的这些表达式
对结果集进行自定义。并且使用
批处理作业却是很强大，因为这允许我们
能够编写内容脚本，然后我们可以
计划在特定时间运行该内容。并且如果我们具有多个语句，
我们通常可能要分隔它们。我们最常做的就是
使用 go 语句。现在，go 并不是特定于 SQL
Server T-SQL 命令的。它允许我们
分隔不同的批处理作业或者一个批处理作业内的命令。
并且知道如何使用
SQL Server Management Studio 之类 的工具很重要。看起来它在
执行，
等待来自服务器的响应，然后我将发送其余内容，
并且在运行过程中执行此操作。因此，就像 Brian 提到的，SQL Server 本身
并不真的知道做什么。它是不同的
工具，可以使用不同的批处理分隔符。但是， 我们的所有工具都默认使用
批处理分隔符。
我们可以使用的其他一些元素是流控制。 我将要简短
谈谈它。If/else、while、begin end。 错误处理。
我们将要看看捕获错误的一些方法，
以及我们如何对这些错误作出响应。在今天的 后面我们将会
讲讲它们。并且，我们还将花一些时间来说说
事务，例如如何定义
在批处理内使用的事务、提交该事务
并且可能需要回滚该事务。
您会想要进行记录，特别是在开始
批处理作业时，您想要记录所发生的
情况。这使您有机会使用
注释代码块。这允许您设置注释。
您可以看到我们具有正斜杠加上星号。它们的
后面就是注释，注释后又是
正斜杠加上星号。这将结束该注释块。如果您只是
想要一行注释，我们可以使用两个短划线。然后将
不会..执行该行。因此，如果您是在
进行针对特定脚本的故障排除并且暂时不想运行
某些代码，则可以使用注释代码块或
或两个短划线注释掉不想运行的代码，
并且运行时将会暂时忽略这些代码。或者，如果您只是
想要在那里记录所做的事情，在批处理作业
正在运行时， 您实际上可以向该文档添加一些注释。
或者作为针对该脚本或该批处理作业的文档。
现在，该实际上执行查询了。..如果您
理解了选择语句，则可以使用 from、..
where、group by 或 order by。
通常我们会看看编写方式，并且考虑
实际执行它的方式。我们想要在这里向您展示的是
要处理的查询的逻辑顺序。因此，要进行的第一件事
就是跳出到 from。
我们要了解它们。..
因此，Brian，为什么我会关心？为什么
逻辑查询处理很重要？
因为您想要确保在您编写
此信息时理解了，并且如果您在进行故障排除和尝试
优化它，如果您理解了这些选项的顺序
或者这些要执行的语句，
您将有机会优化它并且使其运行更快一点。
是的，这很好。并且..知道逻辑
查询顺序也很重要，并且
这有助于您清楚地了解在背后需要什么。
因此，如果您不确切明白如何建立查询语言的结构，
则可能最终不会得到您想要的结果。
因此，..这并不意味着您键入的内容
恰恰是我们想要做的，
因为我们有了这个很棒的查询优化器，它会确定正确方式， 也就是用于向您提供结果的最佳方法。
但它意味着我们受到了约束，以便我们将始终
按此顺序在逻辑上执行。因此，理解
逻辑查询处理极其重要。
因此，实际上以 from 语句开始，
然后转到 where 子句。我只是提出它们让您看到，
它们在这里编号。Group by、having，
然后是 select。足够奇怪的是，我编写的第一个内容是
select，但实际上.在步骤 5 之前..
并未解决。并且如果有 order by，
这是最后执行的。因此，在您重新编写查询或 者在您尝试
优化查询时
理解处理顺序是很重要的，您可以看到
这些信息来自于哪里。
并且我们在后面将更详细地介绍逻辑
查询处理，因为除了我们在本幻灯片上
展示的元素之外，还有其他一些针对该语言的元素。
因此，这适用于这里的运算的逻辑顺序。
我们在这里已得到了这个语句，因此让我们从 顶部开始，使用
Adventure Works。我们还..标识了要使用的
数据库，并且因此我始终从一个语句开始，
从而确保我处于适当的数据库中。
然后我们将添加 from。
这实际上是 sales.salesorderheader。
其中，客户 ID 等于某个编号。按销售人员进行分组。
然后，我们必须获取订单日期的年份。
让计数大于 1。
然后执行，我们将具有所选部分。我们将不会
编写该语句，但这是
我们编写的将由 SQL Server 处理的语句。
并且最后以 order by 结尾。
对。我想要提到的一件事就是我们具有
与 SQL 有关的两个很棒的产品，不是吗？一个是
SQL Server 2012，这是我们的本地产品，
另一个是 Windows Azure SQL Database， 这是我们在
Azure 中的云产品。并且在 SQL
数据库中并不支持使用 use 语句本身，因为 我们所销售的与
SQL Server 不同。我们销售的是数据库， 而不是实例。
知道这一点很重要。如果您想要创建在这两个 平台上都能很好
运行的软件，则不应在您的程序内使用
use 语句。是的，您将非常频繁地在
SQL Server 中使用该语句调试或预测您的脚本，
但在您的软件或者您编写的应用程序中，您最好
避免使用 use 语句。这里的另一件有趣的事情是，
如果您对在我们的 Azure 平台以及
我们的本地平台上使用它感兴趣，则应该在这 两个平台上都
试用它。此外，如果您在针对 Windows Azure SQL DB 进行开发，则也将能够
在 SQL Server 上运行。
您是否在部署前建议他们对代码进行测试？
没有，
真的没有。好的。因为我不知道我们是否需 要做这件事。
因此，好的。我们来再次看看一些基本的
选择语句。其中一些语句可能更高级并且
您可能对它们很熟悉，但我们只是想要确保每个人都
在看相同的页面。因此，我们具有选择语句， 我们提供选择列表，
from、where、group by 和 order by。
我们将要看看其中的许多内容。
在这里我们看看从一个组中检索调用。
我们实际上只是使用从 sales.customer 选择 customerID、store ID。
因此，我们在该对象的架构中标识该对象。
这里介绍的只是一些基本知识。好的，我们可以
更高级一些。您可以将星号放置于列中将
列名替换掉，代替标识列。
这是您可以编写的最基本的选择语句。
从表名称中选择星号。我们实际上将它提示了一个
档次。..
我们可以使它更容易一些。
使它比这里的内容更容易？
是的。选择空间 1。
选择 space1。就是这个。..
这可能是您可以执行的最简单方法。
好的。好的，试试这个。如果您想要使用最 容易的语句，
您可以提交并
执行选择语句。..是什么，select space 1。
实际上不是这样。..它看起来没什么价值 并且有些蠢，
为什么您要这么做，但在您想要执行性能优化时
它是很有趣的，
如果您对 SQL Server 的性能感兴趣，例如
网络等方面，而对在数据库引擎中实际发生的
情况感兴趣，则 select1 很适合进行测试。
太棒了。当然。Select 1。
好的。使用计算，因此，正如您在这里看到的， 我们选择了
单价和订单数量，然后我们执行
计算，让单价乘以订单数量，
我们将要从销售订单详细信息表中取这个。 因此，我们实际上可以
使用这个。并且我们具有不同的计算。现在，我们在
这里执行乘法。但是，我们也可以执行加法、
除法和百分比计算。因此，我们具有这些不同的计算，
我们也可以采用标量计算。我们还可以执行
串联。我们可以将内容进行串联。我们将会看看
串联的一些例子。我们刚刚介绍了将会在今天
学习的一些主题。
好了。我们来看看这里的一些基本的语句。
因此，我将离开
PowerPoint 幻灯片并且跳转到这里的图像，
然后进入 SQL Management Studio。我们 再次利用 adventure
works 并且我们已在使用 adventure works。 因此，我们可以再次
执行选择。
1, 1, 1.
1.我将要首先执行它，以便每个人都可以看到
这是有效的。很酷的是，如果您对它不熟悉，
可以突出显示它并且执行它。
并且您没有列名称，但会返回一个。因此，
正如您所说的，Tobias，我们已经与
SQL Server 通信并且得到了响应。因此， 我们知道事情是奏效的。
我们能够进行通信。现在，您还可以再提升一下，
从 sales 中选择..
星号。..Intellisense 很酷，因为我无法
确切记得要去哪里，我可以转到销售或
表，订单标头，然后我们..将突出显示它并且
执行该命令。
并且它现在向我们提供许多信息。可能太多了，
因为现在我们获得了每一行，当我真的不是想要
每一行，对不起，..应该是每一列。 我只是想要与这里的行有关的
若干项。因此，我们可以再次更改它以便执行
选择。我们将获取销售订单 ID。
我们来实际进行销售。..
我们将执行它，..将它都拼写出来。
并且我们将再取一个。
我们将选取到期日期，因此我们留在这里。
到期日期。然后，我们将从销售中指定这个
sales.salesorderheader，并且我将双击
此处，省了几个键击操作。因此，我们将再次 突出显示它并且
执行
As sales。
抱歉，
您必须作为 salesfor。..您可以试一下。
我听不到您在说什么。很抱歉。
您必须指定表别名，因为您添加了它。..
您在使用 sales 加上点。
哦，用作 sales.明白了。
因为您添加了它。
From sales.sales.duedate, sales.orderheader.
As sales...并不真的想这么早做这个，
但我们还是要执行此操作。
我们继续。执行它。好了。因此，现在我们设 置了不同的内容。..
因此，我们获得了我们的销售订单 ID 以及 在那里设置的我们的到期日期。
好了。然后，我们添加了它。现在，..我们..
看到所有行。
我们来看看是否可以控制返回的行数。
我们如何来做？
我们使用 request 子句来实现该任务。因此，..
我将..重复使用它。我要在
这里做什么？我要向上
并且到达这里，我要让销售订单
ID 等于或者小于
等于 45,000。
我们来..看看，不错，..我们使用 44。
因此，现在我们删除了这些数目的行。我们删除了这些
数目的列。现在我们正删除这些数目的行。
现在您看到，如果我们真的很快向上跳到了消息，
您将会看到我们有 342 行。
现在，我们还是运行这个命令，但不像前面那 样使用 where 子句，
跳转到消息后，我们具有了 31,465 行。 因此，where 子句..
有助于减少返回给
您的行数，并且在您管理该类型的内容时给您 提供强大功能。
因此，我们还可以在这里变化一下。
我们还可以使用 order by。因此，我们针对..
销售订单 ID 使用 order by。
您想要销售订单 ID。
是的，就这么简单。我想要更好地使用数字。我认为
这就是整个过程。
因此，我们开始做这件事。我们将要执行它并且
现在它将按订单 ID 排序。
好了。
只用了在
SQL Server 内与执行选择语句有关的几个 基本的选择语句，并且会感到
很适合使用。..我们要在 SSMS 上用一些时间， 这样我们可以
把重点放在要执行的方面，并且在我们遇到这 些命令时在
我们的命令的基础上构建。
好了。回到这里的 PowerPoint。
我已经使用这里的幻灯片做了什么？我想我已经
打开了某个地方。找到了。
好了。现在快速演示一下如何编写基本的选择语句。
为了回顾一下，我们引入了三种不同的命令：
DML、DCL、DDL。我们今天将使用它们。
我们讨论了不同类型的元素，例如谓词、运算符、
函数、变量、注释、控制流。此外，
我们将要更细致地探讨它们。我们已经看到了
不同的元素以及处理它们的方式。我们从
from 开始，然后是 where、group by、having、select
以及 order by这是在您执行某一选择语句
时实际进行处理的顺序。第一个
部分到此就结束了，
我们将要继续提供与使用 SQL Server 的
基本元素有关的信息。