SQL 中的子句、命令、语句和查询有什么区别?

Mal*_*yum 2 sql rdbms

Sql Clause、Command 和 Statement,我看到这些词可以互换使用。但它们在语法上是不同的。

在这里阅读了一些差异。已经有人问过了。还是我不清楚。

建议的问题仅给出语句和子句之间的区别。和`SELECT foo FROM bar JOIN quux WHERE x = y;' 被提及为 Statement 是该问题的答案。我想问一下 Query 和 Statement 之间有什么区别。

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

Dam*_*ver 7

我将为您提供与 SQL Server 一起使用的术语。其中一些(当然是您问题中的那些)在所有数据库系统中都非常普遍,有些可能是特定于系统的。

从高到低:

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

  • 批。批处理是将工作提交到服务器的单位。在 SQL Server 中,每个批处理(通常)由GO. 将脚本分成批处理是由客户端工具执行的一项工作。一个 Batch 可能包含多个语句。

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

  • 2条。子句是语句的子单元 - 但是,请注意,某些语句可能仅包含一个子句,这可能会显得有些混乱。例如,某些数据库系统将接受SELECT 10;作为查询。这是一个SELECT仅由SELECT子句组成的语句。多个语句类型可以使用相同的子句类型。例如,两个SELECTDELETE语句都可以包含一个WHERE子句。此外,大多数语句都有一个共享相同名称的子句。

  • 表达式2。表达式是产生标量值的东西(请注意,在大多数情况下,这被理解为“每行一个标量值”,而不是“总共一个标量值”)

    • 谓词。布尔表达式,最常出现在WHERE子句、WHEN子句和CHECK约束中。之所以特别提到这些,是因为并非所有数据库系统都支持用户可见的布尔数据类型,因此它们并不总是与其他表达式一样对待。

1许多客户端库将公开某种命令对象,用于向数据库系统提交查询。然而,为了进一步混淆水域,其中许多将接受一批。尽管如此,command 似乎与 statement 具有相似的含义,这可能是因为在绝大多数情况下,command 对象不会一次用于多个语句。

2请注意,在某种程度上,这些共享同一级别。一个SELECT子句可能包含一个CASE表达式,该表达式由多个WHENandTHEN子句组成。