Consulta

A consulta cria uma tabela virtual baseada em tabelas existentes ou constantes transformadas em tabelas.

Sintaxe

{
    ( Consulta ) |
    Consulta INTERSECT [ ALL | DISTINCT ] Consulta |
    Consulta EXCEPT [ ALL | DISTINCT ] Consulta |
    Consulta UNION [ ALL | DISTINCT ] Consulta |
    Express??oSele????o | VALUES Express??o
}

Pode-se colocar par??nteses arbitrariamente em torno das consultas, ou utilizar par??nteses para controlar a ordem de avalia????o das opera????es INTERSECT, EXCEPT e UNION. Estas opera????es s??o avaliadas da esquerda para a direita quando n??o existem par??nteses presentes, com exce????o das opera????es INTERSECT, que s??o avaliadas antes das opera????es de UNION e EXCEPT.

Linhas duplicadas nos resultados de UNION, INTERSECT e EXCEPT ALL

As palavras chave ALL e DISTINCT determinam se as linhas duplicadas s??o eliminadas do resultado da opera????o. Se for especificada a palavra chave DISTINCT, ent??o o resultado n??o ter?? linhas duplicadas. Se for especificada a palavra chave ALL, ent??o poder??o existir linhas duplicadas no resultado, dependendo da exist??ncia de linhas duplicadas na entrada. DISTINCT ?? o padr??o, portanto se n??o for especificado nem ALL nem DISTINCT as linhas duplicadas ser??o eliminadas. Por exemplo, UNION constr??i um ResultSet intermedi??rio com todas as linhas das duas consultas, e elimina as linhas duplicadas antes de retornar as linhas remanescentes. UNION ALL retorna todas as linhas das duas consultas como resultado.

Dependendo da opera????o especificada, se o n??mero de c??pias de uma determinada linha na tabela ?? esquerda for L, e o n??mero de c??pias desta linha na tabela ?? direita for R, ent??o o n??mero de linhas duplicadas desta determinada linha contidas na tabela de sa??da ser?? (assumindo que a palavra chave ALL foi especificada):
  • UNION: ( L + R ).
  • EXCEPT: o maior entre ( L ??? R ) e 0 (zero).
  • INTERSECT: o menor entre L e R.

Exemplos

-- Uma express??o de sele????o
SELECT *
FROM ORG;

-- uma subconsulta
SELECT *
FROM (SELECT COD_CLASSE FROM CLASSE_AGENDA) AS CS;

-- uma subconsulta
SELECT *
FROM (SELECT COD_CLASSE FROM CLASSE_AGENDA) AS CS (COD_CLASSE);

-- uma uni??o
-- retornar todas as linhas das colunas NUM_DEP e GERENTE
-- da tabela ORG
-- e (1,2) e (3,4)
-- NUM_DEP e GERENTE s??o colunas do tipo SMALLINT.
SELECT NUM_DEP, GERENTE
FROM ORG
UNION ALL
VALUES (1,2), (3,4);

-- uma express??o de valores
VALUES (1,2,3);

-- Listar os n??meros dos empregados (NUM_EMP)
-- de todos os empregados na tabela EMPREGADOS
-- cujo n??mero do departamento (DEP_TRAB) come??a por 'E', ou
-- quem est?? alocado a projetos na tabela ATIV_EMP
-- cujo n??mero do projetor (NUM_PROJ) ?? igual a
-- 'MA2100', 'MA2110' ou 'MA2112'.
SELECT NUM_EMP
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');

-- Realizar a mesma consulta do exemplo anterior
-- e "marcar" as linhas da tabela EMPREGADOS com 'emp' e
-- as linhas da tabela ATIV_EMP com 'ativ_emp'.
-- Diferentemente do resultado do exemplo anterior,
-- esta consulta pode retornar o mesmo NUM_EMP mais de uma vez,
-- identificando de que tabela veio pela "marca" associada.
SELECT NUM_EMP, 'emp'
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP, 'ativ_emp'
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');

-- Realizar a mesma consulta do exemplo anterior,
-- por??m utilizando UNION ALL para que as linhas
-- duplicadas n??o sejam eliminadas.
SELECT NUM_EMP
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION ALL
SELECT NUM_EMP
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');

-- Realizar a mesma consulta do exemplo anterior,
-- incluindo dois empregados adicionais que no
-- momento n??o se encontram em nenhuma tabela,
-- e marcar estas linhas como "nova".
SELECT NUM_EMP, 'emp'
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP, 'ativ_emp'
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112')
UNION
VALUES ('NEWAAA', 'nova'), ('NEWBBB', 'nova');
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
RIGHT OUTER JOIN
SubconsultaEscalar
Express??oSele????o
Instru????o SELECT
Express??oTabela
SubconsultaTabela
Instru????o UPDATE
VALUES Express??o
Cl??usula WHERE
Cl??usula WHERE CURRENT OF