Instru????o SELECT

A instru????o SELECT consiste de uma consulta com uma Cl??usula ORDER BY opcional, e uma Cl??usula FOR UPDATE opcional. A instru????o SELECT possui este nome porque tipicamente a primeira palavra da constru????o da consulta ?? SELECT (A consulta inclui a express??o VALUES, as express??es UNION, INTERSECT e EXCEPT, al??m de express??es SELECT).

A Cl??usula ORDER BY garante a ordem do ResultSet. A Cl??usula FOR UPDATE torna o resultado um cursor atualiz??vel. A instru????o SELECT suporta a cl??usula FOR FETCH ONLY. A cl??usula FOR FETCH ONLY ?? sin??nimo da cl??usula FOR READ ONLY.

Lembre-se: Para se obter um ResultSet atualiz??vel, deve ser inclu??da a cl??usula FOR UPDATE com a cl??usula SELECT.

Sintaxe

Consulta
[Cl??usula ORDER BY]
[Cl??usula FOR UPDATE]
WITH {RR|RS|CS|UR}

Pode ser definido o n??vel de isolamento da instru????o SELECT utilizando a sintaxe WITH {RR|RS|CS|UR}.

-- listar o nome da express??o SAL??RIO+B??NUS+COMISS
-- como PAGAMENTO_TOTAL,
-- e ordenar pelo novo nome PAGAMENTO_TOTAL
SELECT PRIMEIRO_NOME, SAL??RIO+B??NUS+COMISS AS PAGAMENTO_TOTAL
FROM EMPREGADOS
ORDER BY PAGAMENTO_TOTAL;

-- criar um cursor atualiz??vel atrav??s da cl??usula FOR UPDATE
-- para atualizar as colunas data de in??cio (PROJ_DATA_IN??CIO) e
-- data de t??rmino (PROJ_DATA_FIM) da tabela PROJETO
SELECT NUM_PROJ, PROJ_DATA_IN??CIO, PROJ_DATA_FIM
FROM PROJETO
FOR UPDATE OF PROJ_DATA_IN??CIO, PROJ_DATA_FIM;

-- definir o n??vel de isolamento como RR apenas para esta instru????o
SELECT *
FROM V??OS
WHERE ID_V??O BETWEEN 'AA1111' AND 'AA1112'
WITH RR;
A instru????o SELECT retorna um ResultSet. O cursor ?? um ponteiro para uma linha espec??fica do ResultSet. Nos aplicativos Java, todos os ResultSets s??o cursores. O cursor ?? atualiz??vel, ou seja, podem ser atualizadas e exclu??das linhas ao se caminhar atrav??s do ResultSet, se a instru????o SELECT que gerou o cursor e sua consulta subjacente atenderem aos requisitos de poder ser atualiz??vel, conforme detalhado abaixo. Deve ser utilizada a cl??usula FOR UPDATE quando se deseja gerar um cursor atualiz??vel.
Nota: A cl??usula ORDER BY permite ordenar os resultados do SELECT. Sem a cl??usula ORDER BY, os resultados s??o retornados em ordem aleat??ria.

Se a instru????o SELECT atender aos requisitos listados abaixo, os cursores ser??o atualiz??veis apenas se for especificado FOR UPDATE na cl??usula FOR (consulte a Cl??usula FOR UPDATE).

Requisitos para cursores atualiz??veis e ResultSets atualiz??veis

Somente os cursores simples, com SELECT em uma ??nica tabela, e os ResultSets FORWARD_ONLY, podem ser atualiz??veis. A instru????o SELECT para ResultSet atualiz??vel possui a mesma sintaxe que a instru????o SELECT para cursor atualiz??vel. Para gerar cursores atualiz??veis:
  • A instru????o SELECT n??o pode incluir a cl??usula ORDER BY.
  • A Consulta subjacente deve ser uma Express??oSele????o.
  • A Express??oSele????o da Consulta subjacente n??o pode incluir:
    • DISTINCT
    • Agrega????es
    • Cl??usula GROUP BY
    • Cl??usula HAVING
  • A cl??usula FROM na Consulta subjacente n??o pode ter:
    • mais de uma tabela
    • qualquer outra coisa al??m de um nome de tabela
    • Express??oSele????o
    • subconsultas

N??o existe instru????o na linguagem SQL para atribuir nome a um cursor. Em vez disso, deve ser utilizada a API do JDBC para atribuir nomes a cursores ou obter os nomes gerados pelo sistema. Para obter mais informa????es, deve ser consultado "Atribuir nome ou acessar o nome do cursor" no cap??tulo 5 do Guia do Desenvolvedor do Derby.

Os cursores s??o apenas-de-leitura por padr??o. Para um cursor ser atualiz??vel, deve ser especificado FOR UPDATE na cl??usula FOR (consulte a Cl??usula FOR UPDATE).

Sistema de depend??ncia de instru????o

A instru????o SELECT depende de todas as tabelas e vis??es especificadas na consulta, e dos conglomerados (unidades de armazenamento, como heaps e ??ndices) escolhidos como caminho de acesso para estas tabelas. A instru????o CREATE INDEX n??o invalida a instru????o SELECT preparada. A instru????o DROP INDEX invalida a instru????o SELECT preparada, se o ??ndice for um caminho de acesso na instru????o. Quando o SELECT inclui vis??es, tamb??m depende dos objetos do dicion??rio dos quais as vis??es dependem (consulte a Instru????o CREATE VIEW).

Toda instru????o UPDATE WHERE CURRENT ou DELETE WHERE CURRENT preparada sobre cursor de SELECT depende do SELECT. A remo????o do SELECT atrav??s de uma instru????o java.sql.Statement.close invalida UPDATE WHERE CURRENT e DELETE WHERE CURRENT.

O SELECT depende de todos os aliases utilizados na consulta. Remover um ali??s invalida a instru????o SELECT preparada, se a instru????o utilizar o ali??s.

Conceitos relacionados
Intera????o com o sistema de depend??ncias
Instru????es CREATE
Instru????es DROP
Instru????es RENAME
Instru????es SET
Refer??ncias relacionadas
Instru????o ALTER TABLE
CALL (PROCEDIMENTO)
Cl??usula CONSTRAINT
Instru????o DECLARE GLOBAL TEMPORARY TABLE
Instru????o DELETE
Cl??usula FOR UPDATE
Cl??usula FROM
Cl??usula GROUP BY
Cl??usula HAVING
INNER JOIN
Instru????o INSERT
Opera????o JOIN
LEFT OUTER JOIN
Instru????o LOCK TABLE
Cl??usula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
Express??oSele????o
Express??oTabela
SubconsultaTabela
Instru????o UPDATE
VALUES Express??o
Cl??usula WHERE
Cl??usula WHERE CURRENT OF