查询是指数据库中用来获取数据的方式,它可搭配条件限制的子句(如 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 | 结果包括左表(出现在 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
子句中的子查询也称为嵌套子查询。