SQL中clause、command、statement和query之间有什么区别?

7

Sql Clause(从句)、Command(命令)和Statement(语句),我看到这些词被交替使用。但它们在语法上是不同的。

我在这里读到了一些差异,已经有人提出了这个问题。但我还是不太清楚。

建议的问题只给出了语句和从句之间的区别。那么' SELECT foo FROM bar JOIN quux WHERE x = y;'被提及为语句是该问题的答案。那么查询(Query)和语句之间的区别是什么呢?

所以我想知道它们之间到底有什么区别?或者我可以随波逐流吗?谢谢。


https://dev59.com/gmUo5IYBdhLWcg3w9jZ4 - rory.ap
可能是SQL语句和子句的区别的重复问题。 - Ken White
我已阅读了你们提到的那个问题。不幸的是,我的评级不足以在该问题上添加评论以进一步澄清事情。 - MakesReal
1
根据我的经验,这两个词可以互换使用,它们之间没有明显的区别。 - Nick.McDermaid
1
个人而言,当需要检索数据(SELECT)时,我倾向于使用查询(query),而对于其他“活动”(CREATE、INSERT等),我也会使用语句(statement)。我不确定这是否只是个人偏好...此外,当涉及多个语句时,我使用“脚本”(script),同样不确定这是否只是我的个人习惯。 - HoneyBadger
显示剩余2条评论
1个回答

12

我会给你介绍SQL Server中使用的术语。其中一些(当然包括你问题中的)在所有数据库系统中都非常常见,而其他一些则是特定于系统的。

从最高级别到最低级别:

  • 脚本。 包含SQL代码的单个文件。 可能包含多个批次

  • 批次。 批处理是提交给服务器的工作单位。 在SQL Server中,每个批次(通常)由GO分隔。将脚本拆分为批次是由客户端工具执行的任务。 一个批次可以包含多个语句。

  • 语句(也称为命令1或查询)。 这是服务器处理的最小单元。 即,每个语句都是“完整”的一些内容,这将导致服务器执行一些工作,并可能导致数据被修改和/或结果集被返回。 通常,服务器会独立编译每个语句(但可能会在执行它们之前为批次中的每个语句执行每个编译)。

  • 第二款。Clause(子句)是语句的子单元 - 但请注意,某些语句可能仅包含一个Clause,这可能会使情况变得有些混乱。例如,一些数据库系统将SELECT 10;视为查询。这是一个仅包含SELECT Clause的SELECT语句。多个语句类型可以使用相同的Clause类型。例如,SELECTDELETE语句都可以包含WHERE Clause。此外,大多数语句都将具有共享相同名称的Clause。

  • 第二款。Expression(表达式)是产生标量值的东西(尽管在大多数情况下,这被理解为“每行一个标量值”,而不是“总共一个标量值”)

    • Predicate(谓词)。布尔表达式,最常见于WHERE子句、WHEN子句和CHECK 约束中。这些特别指出,因为并非所有的数据库系统都支持用户可见的布尔数据类型,因此它们并不总是像其他表达式那样被处理。
  • 1许多客户端库将公开某种命令对象,用于向数据库系统提交查询。然而,更加混淆的是,其中许多将接受一批。尽管如此,“命令”似乎已经成为与“语句”具有相似含义的术语,可能是因为在绝大多数情况下,命令对象并不用于一次执行多个语句。

    2请注意,某种程度上,它们具有相同的级别。SELECT子句可以包含一个CASE表达式,其中包括多个WHEN和THEN子句。


    1
    很多事情现在都变得清晰了。感谢您提供如此精彩的答案。 - MakesReal

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