查询是指数据库中用来获取数据的方式,它可搭配条件限制的子句(如 WHERE),排列顺序的子句(如 ORDER BY)等语句来获取查询结果。子查询是指嵌套在一个上层查询中的查询。上层的查询一般被称为父查询或外部查询。子查询的结果作为输入传递回父查询或外部查询。父查询将这个值结合到计算中,以便确定最后的输出。SQL 语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。同时,子查询可以出现在 SQL 语句中的各种子句中,比如 SELECT 语句、FROM 语句和 WHERE 语句等。下列为 SQL 语句中常见的查询:

  • 简单查询

  • 层次查询

  • 集合

  • 连接

  • 子查询

简单查询(Simple Queries)

简单查询指从 OceanBase 一个或多个选择列表或视图中检索一个或多个列数据的操作,列的数量以及它们的数据类型和长度由选择列表的元素确定。而选择列表指的是 SELECT 关键字之后和 FROM 子句之前的表达式列表。

层次查询(Hierarchical Query)

层次查询是一种具有特殊功能的查询语句,通过它能够将分层数据按照层次关系展示出来。分层数据是指关系表中的数据之间具有层次关系。

集合

您可以使用集合运算符 UNIONUNION ALLINTERSECTMINUS 来组合多个查询。 所有集合运算符都具有相同的优先级。如果 SQL 语句包含多个集合运算符,则 OceanBase 从左到右对它们进行判断,除非括号中指定了顺序。本节主要讲了以下集合运算符:

运算符

说明

UNION

返回两个结果集的并集,并且不重复。

UNION ALL

返回两个结果集的并集,并且可以重复。

INTERSECT

返回两个结果集的交集。

MINUS

返回两个结果集的差集。

连接 (Join)

连接(Join)是将来自两个或多个表、视图或实例视图的行组合在一起的查询。 每当查询的 FROM 子句中出现多个表时,OceanBase 数据库执行连接。 查询的选择列表可以从其中任何表中选择任何列。 如果这两个表都有一个列名,那么您必须用表名限定查询过程中对这些列的所有引用。本节主要讲了以下连接:

连接类型

表示

说明

等值连接

Equijoins

包含等式运算符连接条件的连接。

自连接

SELF-JOIN

表与其自身的连接。

内连接

INNER JOIN

内连接,结果为两个连接表中的匹配行的连接。

左(外)连接

LEFT [OUTER] JOIN

结果包括左表(出现在 JOIN 子句最左边)中的所有行,不包括右表中的不匹配行。

右(外)连接

RIGHT [OUTER] JOIN

结果包括右表(出现在 JOIN 子句最右边)中的所有行,不包括有左表中的不匹配的行。

全(外)连接

FULL [OUTER] JOIN

结果包括所有连接中的所有行,不论他们是否匹配。

SEMI 连接

SEMI-JOIN

SEMI-JOIN 只能通过子查询展开得到。

ANTI 连接

ANTI-JOIN

ANTI-JOIN 也只能通过子查询展开得到。

笛卡儿积

Cartesian Products

当两个表没有连接操作时,对这两个表进行查询得到的数据是这两个表的笛卡儿积。

子查询

子查询指的是 SELECT 查询语句中嵌套了另一个或者多个 SELECT 语句,可以返回单行结果、多行结果或不返回结果。SELECT 语句的 FROM 子句中的子查询也称为内联视图。您可以在嵌入式视图中嵌套任意数量的子查询。SELECT 语句的 WHERE 子句中的子查询也称为嵌套子查询。