SELECT (para recuperar linhas)
Use o comando SELECT para recuperar linhas de uma tabela ou visualização. Ele retorna as linhas que satisfazem os critérios que você especifica, incluindo a condição WHERE. Se você omitir a condição WHERE, o comando SELECT escolherá a partir de todas as linhas.
- É possível incluir * na lista de saída como uma forma taquigráfica de indicar todas as colunas de linhas selecionadas. Também é possível indicar
<table>.*como taquigrafia para as colunas que vêm de uma tabela específica. Consultar uma tabela descreve as funções que você pode usar em um comando SELECT. - É possível usar a palavra-chave distinct para eliminar as linhas duplicadas do resultado. A palavra-chave all (o padrão) retorna todas as linhas candidatas, incluindo duplicatas.
Sintaxe
SELECT [ DISTINCT | ALL ] [ * | <col> [ AS <output_name> ]
<expression> [ AS <output_name> ] [,<expression> [ AS <output_name> ]…]
[ FROM <from_item>[,<from_item>…] ]
[ WHERE <condition> ]
[ GROUP BY <expression>[,<expression>…] ]
[ HAVING <condition>[,<condition>…] ]
[ { UNION | INTERSECT | EXCEPT | MINUS }[ DISTINCT | ALL ]
SELECT
[ ORDER BY <expression> [ ASC | DESC | USING <operator>
[NULLS {FIRST | LAST}][, …] ]
[ LIMIT { <count> | ALL } ]<table>
[ [ AS ] <alias> [ ( <column_alias_list> ) ] ] |
( <select> ) [ AS ] <alias> [ ( <column_alias_list> ) ] |
<from_item> [ NATURAL ] <join_type> <from_item>
[ ON <join_condition> | USING ( <join_column_list> ) ]Entradas
O comando SELECT usa as entradas a seguir:
| Entrada | Descrição |
|---|---|
| alias | Especifica um nome substituto para o nome da tabela anterior. Use um alias para ser breve ou para eliminar ambiguidades para autojunções (em que a mesma tabela é digitalizada várias vezes). Se você gravar um alias, também será possível gravar uma lista de alias de coluna para fornecer nomes substitutos para uma ou mais colunas da tabela. |
| <col> | O nome de uma coluna. |
| <output_name> | O nome da coluna deve ser fornecido na saída. Normalmente se usa esse nome para rotular uma coluna para exibição. Também é possível usá-lo para referir-se ao valor da coluna em cláusulas ORDER BY e GROUP BY. Não é possível usar esse nome nas cláusulas WHERE ou HAVING; grave a expressão. |
| <expression> | O nome de uma coluna da tabela ou uma expressão. |
| De | A cláusula FROM especifica uma ou mais tabelas de origem para o comando SELECT. Se você especificar várias origens, o resultado será o produto Cartesiano de todas as linhas em todas as origens. No entanto, geralmente você inclui condições de qualificação para restringir as linhas que o sistema retorna para o produto Cartesiano. É possível inserir parênteses em um comando de subseleção dentro de uma cláusula FROM. O uso de um comando de subseleção é a única maneira de obter vários níveis de agrupamento, agregação ou classificação em uma única consulta. Deve-se especificar um alias para o comando de subseleção. Um item FROM pode ser uma cláusula de junção que combina dois itens FROM mais simples. Use parênteses, se necessário, para determinar a ordem de aninhamento. |
| <from_item> | Uma referência de tabela, subseleção ou cláusula de junção. |
| WHERE | Esta cláusula tem a seguinte forma geral:A parte boolean_expr da cláusula pode consistir em qualquer expressão que produz um valor Booleano. Em muitos casos, você utiliza a expressão da seguinte forma:
em que:
|
| AGRUPAR POR | Use esta cláusula para dividir uma tabela em grupos de linhas que correspondam a um ou mais valores. A cláusula especifica uma tabela agrupada que é derivada aplicando-se a cláusula:A cláusula GROUP BY condensa, em uma única linha, todas as linhas selecionadas que compartilham valores para as colunas agrupadas. O sistema calcula as funções agregadas em todas as linhas que constituem cada grupo, produzindo um valor separado para cada grupo (enquanto sem GROUP BY, uma agregação produz um valor único que é calculado em todas as linhas selecionadas). Quando se inclui a cláusula GROUP BY, a expressão ou expressões de saída do comando SELECT não podem se referir a colunas não agrupadas, exceto dentro de funções agregadas, pois haveria mais de um valor possível para retornar para uma coluna não agrupada. Um grupo por valor pode ser:
|
| HAVING | A cláusula HAVING opcional tem o formato geral:em que boolean_expr é o mesmo que o especificado para a cláusula where.A cláusula HAVING especifica uma tabela agrupada que é derivada pela eliminação de linhas que não satisfazem boolean_expr. A cláusula HAVING é diferente da cláusula WHERE:
Cada coluna que é referenciada em boolean_expr ambígua deve fazer referência de forma não ambígua a uma coluna de agrupamento, a menos que a referência seja exibida dentro de uma função agregada. Em uma seleção de agrupamento, a cláusula HAVING só pode referenciar expressões que têm valor único em um grupo. Ou seja, só é possível referenciar campos de grupos, agregações ou expressões de valor único que sejam derivados dos campos de grupo ou agregações (o que deve incluir constantes). Por exemplo, para retornar grp e contagens de grp com mais de quatro membros:
Em uma seleção de não agrupamento em que a seleção é conceitualmente agrupada por campos de grupo zero, só é possível referenciar agregações ou expressões que tenham um único valor. Por exemplo, para não retornar nenhuma linha se houver quatro ou menos funcionários em emp, ou uma linha com a contagem se houver mais que quatro funcionários em emp:
|
| <condition> | Uma expressão booleana que fornece um resultado de true ou false. |
| UNIÃO | Operador faz com que o sistema calcule a coleção de linhas que são retornadas pelas consultas. Elimina linhas duplicadas, a menos que você especifique a palavra-chave ALL.em que table_query especifica qualquer expressão de seleção sem uma cláusula ORDER BY, FOR UPDATE ou LIMIT.Se você colocar uma subexpressão entre parênteses, é possível incluir as cláusulas ORDER BY e LIMIT. Se você não incluir parênteses, as cláusulas serão usadas para aplicação no resultado da junção, e não na expressão de entrada direita. O operador UNION calcula a coleção (união de conjunto) das linhas que são retornadas pelas consultas envolvidas. As duas seleções que representam os operandos direto da união devem produzir o mesmo número de colunas, e as colunas correspondentes devem ser de tipos de dados compatíveis. O resultado de UNION não conterá nenhuma linha duplicada, a menos que você especifique a opção ALL. A opção ALL evita eliminação de duplicatas. Vários operadores UNION no mesmo comando SELECT são avaliados da esquerda para a direita, a menos que você indique o contrário usando parênteses. |
| INTERSECTAR | Combina os resultados de duas consultas em um único resultado que inclui todas as linhas comuns a ambas as consultas. Para obter mais informações, consulte Operação INTERSECT. |
| EXCEPT ou MINUS | Localiza a diferença entre as duas consultas e o resultado contém as linhas que pertencem apenas à primeira consulta. Para obter mais informações, consulte Operação EXCEPT. |
| SOLICITADO POR | Use esta cláusula para classificar as linhas retornadas na ordem que você especificar. Uma cláusula ORDER BY pode ser:
Uma limitação desse recurso é que uma cláusula ORDER BY que se aplica ao resultado de uma consulta de união pode especificar apenas um nome ou número de coluna de saída, não uma expressão. Se uma cláusula ORDER BY for um nome simples que corresponde tanto a um nome de coluna de resultados quanto a um nome de coluna de entrada, ORDER BY interpretará isso como o nome da coluna de resultados. Isso é o oposto da opção que a cláusula GROUP BY faz na mesma situação. É possível especificar uma ordem de classificação crescente ou decrescente:
É possível especificar uma ordem de classificação para dados nulos:
|
| LIMIT | Retornar um subconjunto das linhas que são produzidas por sua consulta:
Quando você especificar o parâmetro LIMIT, especifique também o parâmetro ORDER BY. Caso contrário, o subconjunto de linhas retornado será indeterminado. |
| <join_column_list> | Uma lista de colunas de junção. Por exemplo, especificar USING (a,b) é equivalente a especificar
ON left_table.a = right_table.a e ON
left_table.b = right_table.b. |
| <join_condition> | Uma condição de qualificação. Essa condição é semelhante à condição WHERE, exceto que se aplica apenas às duas from_items sendo unidas nessa cláusula join. |
| <join_type> | Um dos seguintes tipos de junção:
|
| <select> | Um comando SELECT. Deve-se colocar a subseleção entre parênteses e fornecer um alias para ela. Quando se inclui uma subseleção na cláusula FROM, a subseleção age como se sua saída fosse criada como uma tabela temporária durante esse comando de seleção única. |
| <table> | Em uma cláusula FROM, o nome de uma tabela ou visualização. |
| CROSS JOIN e INNER JOIN | Produz um produto Cartesiano simples, o mesmo que você obteria se listasse os dois itens no nível superior de FROM. Os tipos junção cruzada e junção interna (true) são equivalentes; nenhuma linha é removida por qualificação. Esses tipos de junção são apenas uma conveniência notacional. É possível obter os mesmos resultados usando as cláusulas FROM e WHERE. |
| JUNÇÃO EXTERNA ESQUERDA | Retorna todas as linhas no produto Cartesiano qualificado (ou seja, todas as linhas combinadas aprovadas na condição), mais
uma cópia de cada linha na tabela esquerda para a qual não havia uma linha direita aprovada na condição. O sistema considera apenas a própria condição on ou using da junção para determinar as linhas que têm correspondências. Isso aplica as condições OUTER ON ou WHERE posteriormente. |
| RIGHT OUTER JOIN | Retorna todas as linhas unidas, mais uma linha para cada linha não correspondente à direita (estendida com nulos à esquerda). Isso é apenas uma conveniência notacional. É possível converter isso em uma junção externa esquerda alternando as entradas esquerda e direita. |
| FULL OUTER JOIN | Retorna todas as linhas unidas, mais uma linha para cada linha correspondente à esquerda (estendida com nulos à direita), mais uma linha para cada linha não correspondente à direita (estendida com nulos à esquerda). Para todos os tipos de junção, exceto cruzada, deve-se gravar exatamente uma das opções a seguir:
|
Saídas
O comando SELECT possui as seguintes saídas:
| Saída | Descrição |
|---|---|
| ROWS | Retorna o conjunto completo de linhas que resultam da consulta. |
| COUNT | Retorna o número de linhas que são retornadas pela consulta. |
Privilégios
Você deve ser o usuário administrador, proprietário da tabela, proprietário do banco de dados ou esquema em que a tabela está definida, ou sua conta deve ter privilégios Selecionar na tabela ou classe de objeto Tabela. Deve-se ter o privilégio Selecionar para que uma tabela leia seus valores. A partir da Liberação 4.0, para selecionar dados de uma tabela externa, deve-se ter o privilégio Selecionar para a classe Tabela Externa.
Para obter mais informações sobre privilégios de objeto e classes de objeto, consulte o Guia do Administrador do SistemaIBM Netezza.
Uso
- Junte a tabela
filmscom a tabeladistributors:MYDB.SCH1(USER)=> SELECT f.title, f.did, d.name, f.date_prod, f.kind FROM distributors d, films f WHERE f.did = d.did; title |did |name |date_prod |kind --------------------------+-----+------------------+-----------+------- The Third Man |101 |British Lion |1949-12-23 |Drama The African Queen |101 |British Lion |1951-08-11 |Romantic Une Femme est une Femme |102 |Jean Luc Godard |1961-03-12 |Romantic Vertigo |103 |Paramount |1958-11-14 |Action Becket |103 |Paramount |1964-02-03 |Drama 48 Hours |103 |Paramount |1982-10-22 |Action War and Peace |104 |Mosfilm |1967-02-12 |Drama West Side Story |105 |United Artists |1961-01-03 |Musical Bananas |105 |United Artists |1971-07-13 |Comedy Yojimbo |106 |Toho |1961-06-16 |Drama There's a Girl in my Soup |107 |Columbia |1970-06-11 |Comedy Taxi Driver |107 |Columbia |1975-05-15 |Action Absence of Malice |107 |Columbia |1981-11-15 |Action Storia di una donna |108 |Westward |1970-08-15 |Romantic The King and I |109 |20th Century Fox |1956-08-11 |Musical Das Boot |110 |Bavaria Atelier |1981-11-11 |Drama - Some a coluna
lende todos os filmes e agrupe os resultados por tipo:MYDB.SCH1(USER)=> SELECT kind, SUM(len) AS total FROM films GROUP BY kind; kind |total ---------+------- Action |07:34 Comedy |02:58 Drama |14:28 Musical |06:42 Romantic |04:38 - Some a coluna
lende todos os filmes, agrupe os resultados por tipo e exiba os totais dos grupos que são inferiores a 5 horas:MYDB.SCH1(USER)=> SELECT kind, SUM(len) AS total FROM films GROUP BY kind HAVING SUM(len) < INTERVAL '5 HOUR'; kind | total ---------+------ Comedy | 02:58 Romantic | 04:38 - Classifique o conteúdo da tabela
distributorsde acordo com o conteúdo da segunda coluna (name):MYDB.SCH1(USER)=> SELECT * FROM distributors ORDER BY name; or MYDB.SCH1(USER)=> SELECT * FROM distributors ORDER BY 2; did | name ------+----------------- 109 | 20th Century Fox 110 | Bavaria Atelier 101 | British Lion 107 | Columbia 102 | Jean Luc Godard 113 | Luso Films 104 | Mosfilm 103 | Paramount 106 | Toho 105 | United Artists 111 | Walt Disney 112 | Warner Bros. 108 | Westward - Obtenha a união das tabelas
distributorseactorse restrinja os resultados para aqueles que começam com a letra W:MYDB.SCH1(USER)=> SELECT distributors.name FROM distributors WHERE distributors.name LIKE 'W%'; UNION SELECT actors.name FROM actors WHERE actors.name LIKE 'W%'; Walt Disney Walter Matthau Warner Bros. Warren Beatty Westward Woody Allen
Como apenas linhas distintas são desejadas, a palavra-chave ALL é omitida.