SQL语法是什么?

来源:TechTMT.Com  作者:整理  日期:2022-02-21 22:30:09

SQL编程语言的语法由 ISO / IEC SC 32 定义和维护,作为 ISO / IEC 9075 的一部分。该标准不是免费提供的。 尽管存在标准,但 SQL 代码在不经过调整的情况下不能在不同的数据库系统之间完全移植。

SQL

语言元素

SQL 语言细分为几个语言元素,包括:

1、子句,是语句和查询的组成部分。

2、表达式,可以生成标量值,也可以生成由列和行数据组成的表。

3、谓词,指定可以评估为 SQL 三值逻辑(3VL)(真/假/未知)或布尔真值的条件,用于限制语句和查询的效果,或用于更改程序流。

4、查询,根据特定条件检索数据。这是 SQL 的一个重要元素。

语句可能对架构和数据产生持久影响,或者可能控制事务,程序流,连接,会话或诊断。

SQL 语句还包括分号(“;”)语句终止符。虽然并非每个平台都需要,但它被定义为 SQL 语法的标准部分。在 SQL 语句和查询中通常会忽略无关紧要的空格,从而可以更轻松地格式化 SQL 代码以提高可读性。

操作

有时建议或实施其他运营商,例如天际线运营商(仅用于查找那些不比其他运营商“更糟糕”的记录)。

SQL 具有 case / when / then / else / end 表达式,它是在 SQL-92 中引入的。 在其最常见的形式中,在 SQL 标准中称为“搜索案例”:

SQL 测试条件按顺序出现在源中。 如果源未指定 ELSE 表达式,则 SQL 默认为 ELSE NULL。 SQL 标准镜像 switch 语句中的缩写语法 – 称为“简单大小写”:

此语法使用隐式相等比较,通常需要注意与 NULL 进行比较。特殊 CASE 表达式有两种简短形式:COALESCE 和 NULLIF。

COALESCE 表达式返回通过从左到右工作找到的第一个非 NULL 操作数的值,如果所有操作数都等于 NULL,则返回 NULL。

相当于:

NULLIF 表达式有两个操作数,如果操作数具有相同的值,则返回 NULL,否则它具有第一个操作数的值。

相当于:

查询

SQL 中最常见的操作(查询)使用声明性 SELECT 语句。 SELECT 从一个或多个表或表达式中检索数据。标准 SELECT 语句对数据库没有持久影响。 SELECT 的一些非标准实现可以具有持久性效果,例如某些数据库中提供的 SELECT INTO 语法。

查询允许用户描述所需的数据,让数据库管理系统(DBMS)执行计划,优化和执行生成所选结果所必需的物理操作。

查询包括要包含在最终结果中的列的列表,通常紧跟在 SELECT 关键字之后。星号(“*”)可用于指定查询应返回查询表的所有列。 SELECT 是 SQL 中最复杂的语句,可选的关键字和子句包括:

FROM 子句,指示从中检索数据的表。 FROM 子句可以包含可选的 JOIN 子子句,以指定连接表的规则。

WHERE 子句包含比较谓词,它限制查询返回的行。 WHERE 子句从结果集中删除比较谓词未计算为 True 的所有行。

GROUP BY 子句将具有公共值的行投影到较小的行集中。 GROUP BY 通常与 SQL 聚合函数结合使用,或者从结果集中消除重复的行。 WHERE 子句在 GROUP BY 子句之前应用。

HAVING 子句包含用于过滤 GROUP BY 子句产生的行的谓词。因为它作用于 GROUP BY 子句的结果,所以可以在 HAVING 子句谓词中使用聚合函数。

ORDER BY 子句标识用于对结果数据进行排序的列,以及对它们进行排序的方向(升序或降序)。如果没有 ORDER BY 子句,则 SQL 查询返回的行的顺序是未定义的。

DISTINCT 关键字消除了重复数据。

LIMIT 子句指定要返回的记录数。请注意,所有 SQL 数据库都不支持此子句。

查询的子句具有特定的执行顺序,由右侧的数字表示。它如下:

SELECT <columns> ………………………………….. 5

FROM <table> ………………………………………. 1

WHERE <行上的谓词> ……………………… 2

GROUP BY <columns> …………………………………… 3

HAVING<关于群体的谓词> ………………….. 4

ORDER BY <columns> ………………………………….. 6

以下 SELECT 查询示例返回昂贵的书籍列表。该查询从 Book 表中检索 price 列包含大于 100.00 的值的所有行。结果按标题按升序排序。选择列表中的星号(*)表示 Book 表的所有列都应包含在结果集中。

子查询

可以嵌套查询,以便可以通过关系运算符或聚合函数在另一个查询中使用一个查询的结果。 嵌套查询也称为子查询。 虽然连接和其他表操作在许多情况下提供计算上优越的(即更快的)替代方案,但子查询的使用在执行中引入了可能有用或必要的层次结构。 在以下示例中,聚合函数 AVG 接收子查询的结果作为输入:

子查询可以使用外部查询中的值,在这种情况下,它称为相关子查询。

自 1999 年以来,SQL 标准允许子查询的 WITH 子句,即命名子查询,通常称为公共表表达式(也称为子查询因子分解)。 CTE 也可以通过引用自己来递归;结果机制允许树或图遍历(当表示为关系时),更一般地说是固定点计算。

派生表

派生表是在 FROM 子句中引用 SQL 子查询的用法。实质上,派生表是可以从中选择或连接的子查询。派生表功能允许用户将子查询作为表引用。内联视图也称为内联视图或子选择。

在以下示例中,SQL 语句涉及从初始“Book”表到派生表“sales”的连接。此派生表使用 ISBN 连接到“Book”表来捕获相关的图书销售信息。因此,派生表提供的结果集包含其他列(销售的商品数量和销售图书的公司):

数据操作

数据操作语言(DML)是用于添加,更新和删除数据的 SQL 的子集:

INSERT 将行(正式元组)添加到现有表中,例如:

UPDATE 修改一组现有的表行,例如:

DELETE 从表中删除现有行,例如:

MERGE 用于组合多个表的数据。它结合了 INSERT 和 UPDATE 元素。它在 SQL:2003 标准中定义;在此之前,一些数据库通过不同的语法提供了类似的功能,有时称为“upsert”。

分类:资讯
标签:SQL是什么
编辑:tmt
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。文章版权归原作者所有,内容不代表本站立场!
免责声明: 阁下应知本站所提供的内容不能做为操作依据。本站作为信息内容发布平台,不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考! 如文中内容影响到您的合法权益(含文章中文字、图片等),请及时联系本站,我们会及时删除处理。