OceanBase 查询和子查询概述
查询是指数据库中用来获取数据的方式,它可搭配条件限制的子句(如 WHERE
),排列顺序的子句(如 ORDER BY
)等语句来获取查询结果。子查询是指嵌套在一个上层查询中的查询。上层的查询一般被称为父查询或外部查询。子查询的结果作为输入传递回父查询或外部查询。父查询将这个值结合到计算中,以便确定最后的输出。SQL 语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。同时,子查询可以出现在 SQL 语句中的各种子句中,比如 SELECT
语句、FROM
语句和 WHERE
语句等。下列为
SQL 语句中常见的查询:
- 简单查询
- 层次查询
- 集合
- 连接
- 子查询
简单查询(Simple Queries)
简单查询指从 OceanBase 一个或多个选择列表或视图中检索一个或多个列数据的操作,列的数量以及它们的数据类型和长度由选择列表的元素确定。而选择列表指的是 SELECT
关键字之后和 FROM
子句之前的表达式列表。
层次查询(Hierarchical Query)
层次查询是一种具有特殊功能的查询语句,通过它能够将分层数据按照层次关系展示出来。分层数据是指关系表中的数据之间具有层次关系。
集合
您可以使用集合运算符 UNION
、UNION ALL
、INTERSECT
和 MINUS
来组合多个查询。 所有集合运算符都具有相同的优先级。如果 SQL
语句包含多个集合运算符,则 OceanBase 从左到右对它们进行判断,除非括号中指定了顺序。本节主要讲了以下集合运算符:
运算符 |
说明 |
---|---|
UNION |
返回两个结果集的并集,并且不重复。 |
UNION ALL |
返回两个结果集的并集,并且可以重复。 |
INTERSECT |
返回两个结果集的交集。 |
MINUS |
返回两个结果集的差集。 |
连接 (Join)
连接(Join)是将来自两个或多个表、视图或实例视图的行组合在一起的查询。 每当查询的 FROM
子句中出现多个表时,OceanBase 数据库执行连接。 查询的选择列表可以从其中任何表中选择任何列。 如果这两个表都有一个列名,那么您必须用表名限定查询过程中对这些列的所有引用。本节主要讲了以下连接:
连接类型 |
表示 |
说明 |
---|---|---|
等值连接 |
Equijoins |
包含等式运算符连接条件的连接。 |
自连接 |
SELF-JOIN |
表与其自身的连接。 |
内连接 |
INNER JOIN |
内连接,结果为两个连接表中的匹配行的连接。 |
左(外)连接 |
LEFT [OUTER] JOIN |
结果包括左表(出现在 |
右(外)连接 |
RIGHT [OUTER] JOIN |
结果包括右表(出现在 |
全(外)连接 |
FULL [OUTER] JOIN |
结果包括所有连接中的所有行,不论他们是否匹配。 |
SEMI 连接 |
SEMI-JOIN |
SEMI-JOIN 只能通过子查询展开得到。 |
ANTI 连接 |
ANTI-JOIN |
ANTI-JOIN 也只能通过子查询展开得到。 |
笛卡儿积 |
Cartesian Products |
当两个表没有连接操作时,对这两个表进行查询得到的数据是这两个表的笛卡儿积。 |
子查询
子查询指的是 SELECT
查询语句中嵌套了另一个或者多个 SELECT
语句,可以返回单行结果、多行结果或不返回结果。SELECT
语句的 FROM
子句中的子查询也称为内联视图。您可以在嵌入式视图中嵌套任意数量的子查询。SELECT
语句的 WHERE
子句中的子查询也称为嵌套子查询。