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

时间:2018-10-16 12:42:15

标签: sql rdbms

Sql子句,命令和语句,我看到这些词可以互换使用。但是它们在语法上是不同的。

我读了一些差异here。已经有人问过了。 还是我不清楚。

建议的问题仅给出语句和子句之间的区别。和“ SELECT foo FROM bar JOIN quux WHERE x = y;”被提及为声明是该问题的答案。我想问问查询和语句之间有什么区别。

所以我想知道它们之间到底有什么区别?还是我可以顺其自然?谢谢

1 个答案:

答案 0 :(得分:3)

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

从最高级别到最低级别:

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

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

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

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

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

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

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

2 请注意,它们在某种程度上共享相同的级别。 SELECT子句可以包含一个CASE表达式,该表达式由多个WHENTHEN子句组成。