全部产品

查询和子查询概述

更新时间:2020-03-31 10:10:49

查询是数据库用来获取数据的方式,它可搭配条件限制的子句(如 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 数据库执行连接。 查询的选择列表可以从其中任何表中选择任何列。 如果这两个表都有一个列名,那么您必须用表名限定查询过程中对这些列的所有引用。本节主要讲了以下连接:

连接类型 表示 说明
等值连接 EQUI-JOIN 包含等式运算符连接条件的连接。
自连接 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 子句中的子查询也称为嵌套子查询。您可以看 嵌套子查询的展开 和分布式查询。