4D v16

SELECT

Página Inicial

 
4D v16
SELECT

SELECT  


 

 

SELECT [ALL | DISTINCT]

{* | select_elemento, ..., select_elemento}

FROM ref_tabela, ..., ref_tabela

[WHERE critério_pesquisa]

[ORDER BY lista_ordem]

[GROUP BY lista_ordem]

[HAVING critério_pesquisa]

[LIMIT {ref_linguagem_4d|número_inteiro | ALL}]

[OFFSET ref_linguagem_4d|número_inteiro]

[INTO {ref_linguagem_4d, ..., ref_linguagem_4d}]

[FOR UPDATE]

O comando SELECT se utiliza para recuperar dados de uma ou mais tabelas.
Se passar *, são devolvidas todas as colunas, caso contrário pode passar um ou mais argumentos de tipo select_elemento para especificar individualmente cada coluna a recuperar (separados por vírgulas). Se agregar a palavra chave opcional DISTINCT a instrução SELECT, os valores duplicados não serão devolvidos.
Não é possível executar pesquisas que contenham ao mesmo tempo "*" e campos explícitos. Por exemplo, a seguinte instrução:

SELECT *, SALES, TARGET FROM OFFICES

... não se permite, enquanto:

SELECT * FROM OFFICES

...se permite.

A cláusula FROM se utiliza para especificar um ou mais argumentos de tipo ref_tabela para a ou as tabela(s) das quais os dados vão ser recuperados. Pode passar um nome SQL estandarte ou uma cadeia. Não é possível passar uma expressão de tipo pesquisa no lugar de um nome de tabela. Também pode passar a palavra chave opcional AS para atribuir um alias a coluna. Se passar esta palavra chave, deve estar seguida pelo nome do alias que também pode ser um nome SQL ou uma cadeia.

Nota: este comando não é compatível com os campos 4D de tipo Objeto.

A cláusula opcional WHERE estabelece as condições que os dados devem cumprir para ser selecionados. Isto é feito passando uma condição_pequisa que é aplicada aos dados recuperados pela cláusula FROM. A expressão condição_pesquisa sempre devolve um valor de tipo booleano.

A cláusula opcional ORDER BY pode ser utilizada para aplicar um critério lista_ordem aos dados selecionados. Também pode adicionar a palavra chave ASC ou DESC para especificar se deseja ordenar de forma ascendente ou descendente. Por padrão, é aplicada a ordem ascendente.

A cláusula opcional GROUP BY pode ser utilizada para agrupar dados idênticos em função dos critérios passados em lista_ordem. Pode passar várias colunas de grupo. Esta cláusula pode ser utilizada para evitar redundâncias ou calcular uma função de adição (SUM, COUNT, MIN ou MAX) que serão aplicados a estes grupos. Também pode agregar a palavra chave ASC ou DESC como com a cláusula ORDER BY.

A cláusula opcional HAVING pode ser utilizado para aplicar um critério_pesquisa a um dos grupos. A cláusula HAVING pode ser passada sem uma cláusula GROUP BY.

A cláusula LIMIT opcional permite restringir o número de dados devolvidos a quantidade definida pela variável ref_linguagem_4d ou o número_inteiro.

A cláusula opcional OFFSET permite definir um número (variável ref_linguagem_4d ou número_inteiro) de valores a ignorar antes de começar a contar para a aplicação da cláusula LIMIT.

A cláusula INTO permite indicar as variáveis ref_linguagem_4d as quais os dados serão atribuídos.

Um comando SELECT que especifica uma cláusula FOR UPDATE tenta bloquear para escritura todos os registros selecionados. Se ao menos um registro não pode ser bloqueado, todo o comando falha e é devolvido um erro. No entanto, se todos os registros selecionados estavam bloqueados, então serão mantidos bloqueados até que a transação atual seja confirmada ou cancelada.

Vamos supor que tenha um banco de dados de filmes com uma tabela que contém os títulos dos filmes, o ano em que foram lançadas e os ingressos vendidos.
Gostaríamos de obter os anos a partir de 1979 e a quantidade de entradas vendidas pelos filmes que venderam no total menos de 10 milhões de ingressos. Queremos pular os primeiros 5 anos e mostrar só 10 anos, ordenados por ano.

 C_LONGINT($MovieYear;$MinTicketsSold;$StartYear;$EndYear)
 ARRAY INTEGER(aMovieYear;0)
 ARRAY LONGINT(aTicketsSold;0)
 $MovieYear:=1979
 $MinTicketsSold:=10000000
 $StartYear:=5
 $EndYear:=10
 
 Begin SQL
    SELECT Year_of_Movie, SUM(Tickets_Sold)
    FROM MOVIES
    WHERE Year_of_Movie >= :$MovieYear
    GROUP BY Year_of_Movie
    HAVING SUM(Tickets_Sold) < :$MinTicketsSold
    ORDER BY 1
    LIMIT :$EndYear
    OFFSET :$StartYear
    INTO :aMovieYear, :aTicketsSold;
 End SQL

Este exemplo utiliza uma combinação de critérios de pesquisa:

SELECT supplier_id
FROM suppliers
WHERE (name = 'CANON')
OR (name = 'Hewlett Packard' AND city = 'New York')
OR (name = 'Firewall' AND status = 'Closed' AND city = 'Chicago');

Dada a tabela VENDEDORES onde COTA é a quantidade de vendas esperada para um representante de vendas e VENDAS a quantidade de vendas efetivamente realizadas.

 ARRAY REAL(arrMin_Values;0)
 ARRAY REAL(arrMax_Values;0)
 ARRAY REAL(arrTotal_Values;0)
 Begin SQL
    SELECT MIN ( ( VENDAS * 100 ) / COTA ),
    MAX( (VENDAS * 100 ) / COTA ),
    SUM( COTA ) - SUM ( VENDAS )
    FROM VENDEDORES
    INTO :arrMin_Values, :arrMax_Values, :arrTotal_Values;
 End SQL

Este exemplo procura todos os atores que nasceram em uma cidade determinada:

 ARRAY TEXT(aActorName;0)
 ARRAY TEXT(aCityName;0)
 Begin SQL
    SELECT ACTORS.FirstName, CITIES.City_Name
    FROM ACTORS AS 'Act', CITIES AS 'Cit'
    WHERE Act.Birth_City_ID=Cit.City_ID
    ORDER BY 2 ASC
    INTO : aActorName, : aCityName;
 End SQL
 



Ver também 

criterio_pesquisa
lista_ordem
ref_linguagem_4d
ref_tabela
select_item
sub_consulta

 
PROPRIEDADES 

Produto: 4D
Tema: Comandos SQL

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)