4D v16

SELECT

Inicio

 
4D v16
SELECT

SELECT  


 

 

SELECT [ALL | DISTINCT]

{* | select_elemento, ..., select_elemento}

FROM ref_tabla, ..., ref_tabla

[WHERE criterio_búsqueda]

[ORDER BY lista_orden]

[GROUP BY lista_orden]

[HAVING criterio_búsqueda]

[LIMIT {ref_lenguaje_4d|número_entero | ALL}]

[OFFSET ref_lenguaje_4d|número_entero]

[INTO {ref_lenguaje_4d, ..., ref_lenguaje_4d}]

[FOR UPDATE]

El comando SELECT se utiliza para recuperar datos de una o más tablas.
Si pasa *, se devuelven todas las columnas, de lo contrario puede pasar uno o más argumentos de tipo select_elemento para especificar individualmente cada columna a recuperar (separados por comas). Si agrega la palabra clave opcional DISTINCT a la instrucción SELECT, los valores duplicados no se devolverán.
No es posible ejecutar búsquedas que contengan a la vez "*" y campos explícitos. Por ejemplo, la siguiente instrucción:

SELECT *, SALES, TARGET FROM OFFICES

... no se permite, mientras que:

SELECT * FROM OFFICES

...se permite.

La cláusula FROM se utiliza para especificar uno o más argumentos de tipo ref_tabla para la o las tabla(s) de las cuales los datos se van a recuperar. Puede pasar un nombre SQL estándar o una cadena. No es posible pasar una expresión de tipo búsqueda en lugar de un nombre de tabla. También puede pasar la palabra clave opcional AS para asignar un alias a la columna. Si se pasa esta palabra clave, debe estar seguida por el nombre del alias que también puede ser un nombre SQL o una cadena.

Nota: este comando no soporta campos 4D de tipo Objeto.

La cláusula opcional WHERE establece las condiciones que los datos deben cumplir para ser seleccionados. Esto se hace pasando una condición_búsqueda que se aplica a los datos recuperados por la cláusula FROM. La expresión condición_búsqueda siempre devuelve un valor de tipo booleano.

La cláusula opcional ORDER BY se puede utilizar para aplicar un criterio lista_orden a los datos seleccionados. También puede agregar la palabra clave ASC o DESC para especificar si desea ordenar de forma ascendente o descendente. Por defecto, se aplica el orden ascendente.

La cláusula opcional GROUP BY se puede utilizar para agrupar datos idénticos en función de los criterios pasados en lista_orden. Puede pasar varias columnas de grupo. Esta cláusula se puede utilizar para evitar redundancias o calcular una función de adición (SUM, COUNT, MIN o MAX) que se aplicarán a estos grupos. También puede agregar la palabra clave ASC o DESC como con la cláusula ORDER BY.

La cláusula opcional HAVING se puede utilizar para aplicar un criterio_búsqueda a uno de los grupos. La cláusula HAVING se puede pasar sin una cláusula GROUP BY.

La cláusula LIMIT opcional permite restringir el número de datos devueltos a la cantidad definida por la variable ref_lenguaje_4d o el número_entero.

La cláusula opcional OFFSET permite definir un número (variable ref_lenguaje_4d o número_entero) de valores a ignorar antes de comenzar a contar para la aplicación de la cláusula LIMIT.

La cláusula INTO permite indicar las variables ref_lenguaje_4d a las cuales los datos se asignarán.

Un comando SELECT que especifica una cláusula FOR UPDATE intenta bloquear para escritura todos los registros seleccionados. Si al menos un registro no puede bloquearse, todo el comando falla y se devuelve un error. Sin embargo, si todos los registros seleccionados estaban bloqueados, entonces se mantendrán bloqueados hasta que la transacción actual se confirme o se cancele.

Suponga que tiene una base de datos de películas con una tabla que contiene los títulos de las películas, el año en que fueron lanzadas y los boletos vendidos.
Nos gustaría obtener los años a partir de 1979 y la cantidad de entradas vendidas para las películas que vendieron en total menos de 10 millones de boletas. Queremos saltarnos los primeros 5 años y mostrar sólo 10 años, ordenados por año.

 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 ejemplo utiliza una combinación de criterios de búsqueda:

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 la tabla VENDEDORES donde QUOTA es la cantidad de ventas esperada para un representante de ventas y VENTAS la cantidad de ventas efectivamente realizadas.

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

Este ejemplo busca todos los actores que nacieron en una ciudad 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 también 

criterio_búsqueda
lista_orden
ref_lenguaje_4d
ref_tabla
select_elemento
sub_consulta

 
PROPIEDADES 

Producto: 4D
Tema: Comandos SQL

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)