菲利普·伯顿

如果您是SQL的新功能,标准SQL和SQL语言(如T-SQL)的其他变体之间的差异可能会使您混淆。很少有专有的SQL语言严格遵循SQL标准。在本文中,我将遵守SQL和T-SQL之间的差异,也写为T-SQL。

什么是SQL和T-SQL?

SQL,结构化查询语言,最早创建于20世纪70年代。20世纪80年代,多家公司开始了自己的SQL程序。这些版本在不同方面与原版不同。

在20世纪80年代中期,两个组织,ISO和ANSI,发布了他们的SQL标准。这意味着其他人可以用它作为他们版本的起点。在本文中,我将ISO/ANSI版本称为“标准SQL”。

70-461,761:使用Transact-SQL查询Microsoft SQL Server

最后更新5月2021

畅销书
  • 277讲座
  • 初学者级
4.5 (7180)

从表中选择查询到高级SQL。SQL Server 2012,2014,2016,2017,2019,考试70-461和70-761 |由菲利普·伯顿

探索课程

SQL的一些主要现代方言是:

这些方言都没有完整实现ISO或ANSI SQL语言。有几个原因:

因此,尽管一些供应商已经非常接近标准SQL,但还没有实现完整的标准SQL。标准SQL更多的是一个概念,而不是一种实际实现的语言。同样,在现实世界中也没有“英语”这种东西。相反,有方言,如英国英语和美国英语。有些机构可能试图规范他们的英语方言。然而,方言随着实际使用情况的变化而发展。标准SQL也是如此,它每隔几年就会发展一次。

标准SQL无法恢复其创建者Cobb提出的标准。例如,虽然SET理论使用记录和字段,但标准SQL使用行和列。因此,即使SQL标准也不是原始SQL理论的完美实现。

那么标准SQL和MS SQL Server的SQL扩展之间的一些差异是什么?

引用名称中有空格的对象

有时表和其他对象的名称包括空格。您应该在编写SELECT语句时考虑此问题:

从我的桌子中选择*

在上面的示例中,SQL解释器不会理解表名的开始和结束。相反,它会抛出错误。

标准SQL使用双引号作为分隔符:

从“我的表”中选择*

在T-SQL中,您通常使用方括号。

从[我的表]中选择*

减少查询中返回的行数

选择查询的结果可能是数十万或数百万行。您可能希望将其限制为第一个(例如)5或10行。

在标准SQL中,您将使用:

SELECT * FROM“My Table”只取前10行

在T-SQL中,有一个变体,首先在SQL Server 2012中引入。

SELECT * FROM [My Table] ORDER BY SomeField OFFSET 0 ROWS ONLY FETCH FIRST 10 ROWS

但是,通常使用顶部限制T-SQL中行数的通常方法。这是2005年在SQL Server中引入的:

从[我的表]中选择Top 100 *

您可以使用它或没有括号:

从[我的表]中选择顶部(100)*

以上在T-SQL中非常精细。其他SQL Variants使用不同的方法来限制行数,例如:

选择*从[我的表]限制100;

你需要使用FROM子句吗?

在标准SQL中,您必须至少使用SELECT语句中的SELECT和CLAUSES。这意味着您无法轻易检索任何不需要表的计算结果,例如2 + 2。

Oracle SQL通过一个名为“双重”的特殊内置表来实现这一点,其中有一行和一列。所以

从双重选择2 + 2;

答案:4。

在Microsoft的SQL中,您不使用“双”表。您可以使用:

选择2 + 2

程序编程

标准SQL使用基于SET的逻辑查询数据。例如,可以在一个SELECT语句中查询表或视图的总体,检索数百万行。您不必指定SQL如何检索此数据。通过这种方式,标准SQL是一种声明性编程语言。这是因为您没有描述控制流程,但您想要的结果。

T-SQL包含允许您使用不同查询方式的扩展。例如:

开始尝试——我在这里犯了一个错误。END TRY BEGIN CATCH——我在这里处理错误。最终赶上

这些扩展使T-SQL成为一个必要的以及程序编程语言。命令编程允许用户指定要进行的命令。T-SQL是一种程序语言,因为您可以在过程或功能中编写代码。

功能

T-SQL函数可以不同于标准SQL函数。例如,标准SQL中的SUBSTRING函数采用如下形式:

SUBSTRING(name_of_string FROM first_character FOR number_of_characters)。

在T-SQL中,可以使用逗号分隔的参数,而不是SQL语句:

SUBSTRING (name_of_string first_character number_of_characters)

此外,在T-SQL中,您可以添加其他功能。标准SQL CAST函数将一个列或字段从一个数据类型转换为另一个数据类型。但是,如果您无法转换它,它会导致错误。在SQL Server 2012开始,Microsoft介绍了Try_cast函数,如果出现错误,则返回null。这使得更容易编程。

扩展了DDL和DML语句

DDL或数据定义语言允许您创建,更改和删除表和视图等对象。DML是数据操作命令。用于标准SQL和T-SQL,它们是插入,更新和删除。

T-SQL允许扩展的DDL和DML语句。在T-SQL中,您可以在DML命令中使用连接,允许您在使用这些DML命令时将表连接在一起。标准SQL将要求您为此功能使用子查询。

数据类型

SQL是一种强类型语言。这意味着列中的数据必须是指定的类型,例如字符串、文本或基于日期的类型。

标准SQL包括广泛的数据类型选择。T-SQL扩展了这个选择。

例如:

如果SmallDateTime数据类型为您提供所需的全部,则可以使用它节省一半存储空间。

结论

你能得出什么结论?首先,SQL方言并不相同。例如,如果您使用Oracle SQL,您的SELECT语句将必须以分号结束。在T-SQL中,它通常是可选的。这意味着SQL语句可能需要修改才能从一种方言转换到另一种方言。

然而,由于不同的方言来源于相同的标准SQL,超过90%的代码无需修改就可以工作。如果您修改了许多SELECT语句,您会发现调整变得重复。一个更改将为更改数百个SELECT语句提供基础。

其次,您可以通过了解您学习的大多数语法的知识来学习任何SQL方言,将可移植到其他版本中。例如,如果您在Oracle SQL培训并希望使用T-SQL,则需要一些修改,但底层理论和大多数语法保持不变。

如何学习T-SQL

我希望你享受了这篇文章。如果您想学习T-SQL,为什么不加入我的课程“查询Microsoft SQL Server?“在本课程中,我们将详细介绍T-SQL,因此您可以将数据库选择语句带到全新的水平。

或者,如果你想学习Oracle SQL,请加入我我的Oracle SQL课程

非常感谢您阅读这一点,请看看我的其他博客(见下文)。保持学习!

特色课程

轻松学习微软T-SQL

2018年8月的最后更新

  • 2小时
  • 27日讲座
  • 初学者级
4.7 (33)

在T-SQL中获得强大的基础By Brad Hill.

探索课程

T-SQL学生还学习

让你的团队。领导行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求演示

菲利普伯顿的课程

Session 3:查询Microsoft SQL Server (T-SQL)
菲利普·伯顿
4.3 (458)
70-461,761:使用Transact-SQL查询Microsoft SQL Server
菲利普·伯顿
4.5 (7180)
畅销书
Session 6:查询Microsoft SQL Server (SQL代码)
菲利普·伯顿
4.4 (273)
Microsoft SQL Server Reporting Services (SSRS)
菲利普·伯顿
4.5 (2,153)
畅销书
Microsoft Word 1:9小时到专家(中级)水平
菲利普·伯顿
4.4 (300)
SAP水晶报告2016 -简介
菲利普·伯顿
4.3 (339)
畅销书
SQL Server Integration Services(SSIS) - 介绍
菲利普·伯顿
4.5 (3,517)
畅销书

菲利普伯顿的课程