菲利普·伯顿

如果您是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

最后更新:2021年5月

畅销书
  • 277课
  • 初学者水平
4.5 (7320)

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

探索课程

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

这些方言都没有完全实现ISO或ANSI SQL语言。原因有以下几点:

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

标准SQL并不完全复制它的创建者Cobb提出的标准。例如,set理论使用记录和字段,而Standard SQL使用行和列。因此,即使是SQL标准也不是原始SQL理论的完美实现。

那么标准SQL和MS SQL Server的SQL扩展之间有什么区别呢?

引用名称中有空格的对象

有时表和其他对象的名称包含一个空间。在写SELECT语句时,你应该考虑这一点:

SELECT * FROM My Table

在上面的示例中,SQL解释器无法理解表名的开始和结束位置。相反,它将抛出一个错误。

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

SELECT * FROM“My Table”

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

SELECT * FROM [My Table]

减少查询中返回的行数

SELECT查询的结果可能有数十万或数百万行。您可能希望将其限制在第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中限制行数的通常方法是使用TOP。这是在2005年SQL Server首次引入的:

SELECT TOP 100 * FROM My Table

你可以使用括号或不使用括号:

SELECT TOP (100) * FROM My Table

上面的内容在T-SQL中非常好。其他SQL变体使用不同的方法来限制行数,例如:

SELECT * FROM [My Table] LIMIT 100;

你需要使用FROM子句吗?

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

Oracle SQL使用一个特殊的内置表“dual”来解决这个问题,它有一行和一列。所以

SELECT 2+2 FROM dual;

答案:4。

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

选择2 + 2

过程式编程

标准SQL使用基于集的逻辑查询数据。例如,可以在一个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中,您可以添加其他函数。Standard SQL CAST函数将一列或字段从一种数据类型转换为另一种数据类型。但是,如果不能转换它,就会导致错误。在SQL Server 2012之后,微软引入了TRY_CAST函数,如果出现错误,该函数将返回NULL。这使得编程更加容易。

扩展DDL和DML语句

DDL,即数据定义语言,允许您创建、ALTER和DROP对象,如表和视图。DML是数据操作命令。在标准SQL和T-SQL中都使用,它们是INSERT、UPDATE和DELETE。

T-SQL允许扩展DDL和DML语句。在T-SQL中,可以在DML命令中使用join,允许在使用这些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,这样您就可以将数据库SELECT语句提升到一个全新的水平。

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

SQL Server的顶级课程

掌握SQL Server 2016集成服务(SSIS)-第二部分
Kameswara Sarma Uppuluri
4.5 (153)
SQL Server数据库管理(DBA)
菲利普·伯顿
4.5 (2934)
畅销书
SQL Server报表服务第1部分(SSRS)
拉斐尔Asghar
4.5 (1518)
畅销书
完整的SQL Server初学者
Ahmad Mohey
4.3 (445)
SQL Server迁移和升级流程
拉斐尔Asghar
4.3 (305)
数据库开发人员-SQL Server/T-SQL/数据库迁移
Bluelime学习方案
4.4 (84)
SQL Server性能调优第2部分
拉斐尔Asghar
4.4 (639)
SQL初学者与微软SQL Server数据库
阿尼尔•巴特拉
4.6 (140)
畅销书
SQL Server性能调优第1部分
拉斐尔Asghar
4.4 (1671)
畅销书

更多SQL Server课程

SQL Server的学生也在学习

让你的团队。领导行业。

通过Udemy for Business订阅您组织的在线课程和数字学习工具图书馆。

请求一个演示

菲利普·伯顿课程

Session 3:查询Microsoft SQL Server (T-SQL)
菲利普·伯顿
4.3 (464)
70- 461,761:使用Transact-SQL查询Microsoft SQL Server
菲利普·伯顿
4.5 (7320)
畅销书
Session 4:查询Microsoft SQL Server (T-SQL)
菲利普·伯顿
4.5 (399)
Microsoft SQL Server Reporting Services (SSRS)
菲利普·伯顿
4.5 (2180)
畅销书
Microsoft Word 1:9小时到专家(中级)水平
菲利普·伯顿
4.6 (305)
评价最高
SAP水晶报告2016 -简介
菲利普·伯顿
4.3 (346)
畅销书
SQL Server集成服务(SSIS)简介
菲利普·伯顿
4.5 (3587)
畅销书
微软Excel 4中的Excel: Excel的VBA宏-介绍
菲利普·伯顿
4.7 (48)

菲利普·伯顿课程