开发者社区> 问答> 正文

如何使用SELECT数据操作语言


该语句用于查询表中的内容。

基本查询


格式 SELECT
   [ALL | DISTINCT]
   selectexpr [AS othername] [, selectexpr ...]
   [FROM table_references]
   [WHERE where_conditions]
   [GROUP BY group_by_list]
   [HAVING search_confitions]
   [ORDER BY order_list]
   [LIMIT {[offset,] rowcount | rowcount OFFSET offset}]
   [FOR UPDATE];


SELECT子句说明如下所示。

子句说明
ALL | DISTINCT在数据库表中,可能会包含重复值。指定“DISTINCT”,则在查询结果中相同的行只显示一行;指定“ALL”,则列出所有的行;不指定时,默认为“ALL”。
select_expr列出要查询的列名,用“,”隔开。也可以用“*”表示所有列。
AS other_name为输出字段重新命名。
FROM table_references指名了从哪个表或哪些表中读取数据。(支持多表查询)
WHERE where_conditions可选项,WHERE子句用来设置一个筛选条件,查询结果中仅包含满足条件的数据。where_conditions为表达式。
GROUP BY group_by_list用于进行分类汇总。
HAVING search_confitionsHAVING子句与WHERE子句类似,但是HAVING子句可以使用累计函数(如SUM,AVG等)。
ORDER BY order_list [ASC | DESC]用来按升序(ASC)或者降序(DESC)显示查询结果。不指定ASC或者DESC时,默认为ASC。
[LIMIT {[offset,] row_count |row_count OFFSET offset}]强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。 如果只给定一个参数,它表示返回记录行的最大数目,偏移量为0。
FOR UPDATE对查询结果所有行上排他锁,以阻止其他事务的并发修改,或阻止在某些事务隔离级别时的并发读取。


JOIN句法


JOIN连接分为内连接和外连接。外连接又分为左连接、右连接和全连接。两个表连接后,可以使用ON指定条件进行筛选。
OceanBase1.0版本里JOIN可以支持USING子句,JOIN的连接条件中必须至少有一个等值连接条件。
内连接:结果中只包含两个表中同时满足条件的行。
左连接:结果中包含位于关键字LEFT [OUTER] JOIN左侧的表中的所有行,以及该关键字右侧的表中满足条件的行。
右连接:结果中包含位与关键字[RIGHT] [OUTER] JOIN右侧的表中的所有行,以及该关键字左侧的表中满足条件的行。
全连接:结果中包含两个表中的所有行。

集合操作


OceanBase中的集合操作主要包括UNION、EXCEPT和INTERSECT。

UNION句法


UNION用于合并两个或多个SELECT语句的结果集。使用UNION需要注意以下几点:

  • UNION内部的SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。

  • 默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。

  • UNION 结果集中的列名总是等于UNION中第一个SELECT语句中的列名。

UNION指令的目的是将两个或多个SELECT语句的结果合并起来。从这个角度来看,UNION跟JOIN有些类似,因为这两个指令都可以由多个表格中撷取资料。但是UNION只是将两个结果联结起来一起显示,并不是联结两个表。

EXCEPT句法


EXCEPT用于查询第一个集合中存在,但是不存在于第二个集合中的数据。

INTERSECT句法


INTERSECT用于查询在两个集合中都存在的数据。

DUAL虚拟表


DUAL是一个虚拟的表,可以视为一个一行零列的表。当我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过SELECT完成时,就要借助一个对象,这个对象就是DUAL。一般可以使用这种特殊的SELECT语法获得用户变量或系统变量的值。
当SELECT语句没有FROM子句的时候,语义上相当于FROM DUAL,此时,表达式中只能是常量表达式。
格式 SELECT
    [ALL | DISTINCT]
    select_list
    [FROM DUAL [WHERE where_condition]]
    [LIMIT {[offset,] rowcount | rowcount OFFSET offset}];



SELECT…FOR UPDATE句法


格式 SELECT ... FOR UPDATE [WAIT n| NOWAIT];

其中:

  • WAIT子句指定等待其他用户释放锁的秒数,防止无限期的等待。

  • NOWAIT不等待行锁释放。

SELECT … FOR UPDATE可以用来对查询结果所有行上排他锁,以阻止其他事务的并发修改,或阻止在某些事务隔离级别时的并发读取。即使用FOR UPDATE语句将锁住查询结果中的元组,这些元组将不能被其他事务的UPDATE,DELETE和FOR UPDATE操作,直到本事务提交。
注意,目前OceanBase实现有如下限制:必须是单表查询。
例如: SELECT * FROM a FOR UPDATE;


IN和OR


OceanBase支持逻辑运算“IN”和“OR”。

展开
收起
云栖大讲堂 2017-11-01 15:56:00 1814 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Cassandra CQL语法以及功能介绍 立即下载
JavaScript 语言在引擎级别的执行过程 立即下载
Blink SQL关键技术及实现原理 立即下载