SQL、PL-SQL和T-SQL有什么区别?

389

SQL、PL-SQL和T-SQL之间有什么区别?

这三者之间的区别是什么,并能提供各自适用的场景吗?


1
Microsoft SQL Server使用的查询语言是ANSI标准结构化查询语言(SQL)的一种变体。SQL Server的变体称为Transact-SQL。 - user287599
1
SQL是一种面向数据的语言,用于选择和操作数据集。PL/SQL是一种过程化语言,用于创建应用程序。 - user610835
SQL是结构化查询语言,PL/SQL是扩展到SQL的过程性语言,它由Oracle开发。T-SQL是由Microsoft开发的。 - user782314
6个回答

412
SQL是一种操作关系数据(表、视图、结果集等)的声明性语言。
它基本上是标准化的,并且几乎所有的关系数据库管理系统都使用它,如SQL Server、Oracle、MySQL、PostgreSQL、DB2、Informix等。
大多数数据库引擎还支持过程性语言(与SQL相对)。它们具有变量、循环、条件运算符和明确控制的执行流程,而这些是SQL所缺乏的。通常它们被设计为与SQL紧密集成。
它们主要用于编写存储过程:存储在服务器上的代码片段,用于实现难以或不可能通过纯基于集合的操作来实现的复杂业务规则。
  • PL/SQL是Oracle使用的专有过程性语言。
  • PL/pgSQL是PostgreSQL使用的过程性语言。
  • TSQL是Microsoft在SQL Server中使用的专有过程性语言。

15
TSQL 也被 Sybase 使用;至少在 Oracle 中,PL/SQL 程序可以做的不仅限于管理“业务规则”,还可以访问网站、发送电子邮件等。 - Erich Kitzmueller
3
PL/SQL 不仅仅存在于数据库中,例如 Oracle Forms 中包含了客户端实现的 PL/SQL。 - Erich Kitzmueller
2
请注意,每个数据库都有自己的SQL实现(其中T-SQL和PL/SQL是比较常见的两种),当使用多个后端时通常会使用ANSII标准SQL,但并不是所有数据库都使用所有ANSII SQL功能。而且,特定于数据库的SQL实现往往是为该数据库提供最佳性能的实现方式 - 毕竟,他们必须给你一个使用他们的数据库的理由,对吧? - HLGEM
2
更正:SQL是一种操作表格的语言,SQL本身提供了定义。SQL标准避免使用“集合”和“关系”及其派生词。SQL表格不是集合。 - onedaywhen
1
拥有一种可以在Oracle和SQL Server上运行的SQL过程语言肯定是非常好的。 - RayLoveless
显示剩余4条评论

124

SQL

SQL被用于与数据库通讯,是关系型数据库管理系统的标准语言。

具体来说,Structured Query Language (结构化查询语言)是一种专门用于管理关系型数据库管理系统(RDBMS)中数据或在关系数据流管理系统(RDSMS)中进行流处理的编程语言。

SQL最初基于关系代数和元组关系演算,包括数据定义语言和数据操作语言。SQL的范围包括数据插入、查询、更新和删除,模式创建和修改以及数据访问控制。尽管SQL通常被描述为(并且在很大程度上是)申明式语言(4GL),但它也包括过程性元素。

PL/SQL

PL/SQL是SQL与编程语言的过程性特点相结合的组合。它是由Oracle Corporation开发的。

PL/SQL的特点

  • 完全可移植的高性能事务处理语言。
  • 提供了内置的解释器和操作系统无关的编程环境。
  • 可以直接从命令行SQL*Plus界面调用。
  • 也可以从外部编程语言调用到数据库。
  • 一般语法基于ADA和Pascal编程语言。
  • 除了Oracle,它还可以在TimesTen内存数据库和IBM DB2中使用。

T-SQL

Transaction-SQL (事务性SQL)是SQL的扩展形式,增加了声明变量、事务控制、错误和异常处理以及对行的处理。

结构化查询语言(SQL)是一种专注于管理关系型数据库的编程语言。SQL有其自身的限制,这促使软件巨头微软开发了自己的扩展来增强SQL的功能。

微软在SQL中添加了代码并称其为Transact-SQL或T-SQL。需要记住的是,T-SQL是专有的,并受微软控制,而SQL虽然由IBM开发,但已成为开放格式。

T-SQL添加了一些在SQL中不可用的功能。

这包括过程化编程元素和本地变量,以提供更灵活的控制应用程序流程。还添加了许多函数到T-SQL中,使其更加强大;包括数学运算、字符串操作、日期和时间处理等函数。这些添加使得T-SQL符合图灵完整性测试,该测试确定计算语言的普适性。SQL不是图灵完整的,并且在其所能实现的范围内非常有限。

T-SQL和SQL之间的另一个重要区别是对SQL中已有的DELETE和UPDATE命令所做的更改。使用T-SQL,DELETE和UPDATE命令都允许包含FROM子句,这允许使用JOINs。这简化了筛选记录以轻松挑选符合特定条件的条目,而与SQL相比可能会更加复杂。

在T-SQL和SQL之间进行选择取决于用户。 不过,在处理Microsoft SQL Server安装时,使用T-SQL仍然更好。这是因为T-SQL也来自微软,使用两者可以最大限度地提高兼容性。SQL适用于具有多个后端的用户。

参考资料:维基百科,Tutorial Points: www.differencebetween.com


4
在我看来,这是目前最好的答案(不过,Manoj的回答和博客文章也值得一读)。 - salcoin
1
T-SQL不是和Sybase一起被收购的吗?他们买了第一个SQL服务器版本所需的数据库代码。至少T-SQL也可以在Sybase上运行,所以我认为有一些“共同的代码”。 - phil_w
实际上,微软和赛博(Sybase)共同开发了OS2的SQL Server。因此,两家公司共同致力于开发T-SQL。这就是为什么两个数据库都可以使用T-SQL,尽管两种T-SQL变体之间存在显着差异的原因。 - alaniane
1
将PL/SQL称为“SQL与编程语言的过程性特征的结合体”可能会给人一种它是SQL的扩展方言的印象,但实际上它是一种在数据库中编译的编程语言,可以嵌入SQL。技术论坛上常见的一个恼人问题是,当人们说他们有一个PL/SQL问题时,实际上他们有一个Oracle SQL问题。 - William Robertson

45
  • SQL是一种用来与数据库交互的语言,它允许你选择数据、更改数据库对象(如表格、视图等)和修改数据库设置。
  • PL-SQL是一种嵌入SQL的过程化编程语言。
  • T-SQL是SQL Server使用的过程化扩展语言。

应该使用SPL(存储过程语言),PL太通用了(例如,C语言)。 - samus

34

1. SQL 或结构化查询语言是由IBM为他们的产品“System R”开发的。后来,ANSI将其作为标准,所有查询语言都基于这一标准,并扩展了自己的数据库查询语言套件。第一个标准是SQL-86,最新的是SQL:2016

2. T-SQL 或 Transact-SQL 是由 Sybase 开发的,后来由 Microsoft SQL Server 共同拥有。

3. PL/SQL 或过程化语言/SQL 是 Oracle 数据库开发的,当时称为“关系软件”。

我在我的博客文章中记录了这些内容。


3
这个答案比批准的答案更详细,而且这篇博客文章很棒。 - salcoin

7

结构化查询语言 - SQL: 是一种由全球几乎所有SGBD供应商使用的ANSI标准。基本上,SQL是一种用于定义和操作数据[DDL和DML]的语言。

PL/SQL是由Oracle宇宙创建的一种语言。 PL/SQL组合了编程过程指令,并允许创建直接在数据库场景上运行的程序。

T-SQL是微软产品,与SQL模式对齐,具有某些特殊性。因此,请随意测试您的极限。


1

SQL是一种标准语言,许多数据库供应商如Microsoft、Oracle等都使用自己的专有语言来实现这个标准。

Microsoft使用T-SQL来实现与数据的交互,而Oracle使用PL/SQL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接