SELECT (del inglés select - “select”) es un operador de consulta ( DML / DQL ) en lenguaje SQL que devuelve un conjunto de datos (selección) de la base de datos .
El operador devuelve cero o más filas. La lista de columnas a devolver se especifica en la parte de la declaración denominada cláusula SELECT. Dado que SQL es un lenguaje declarativo, la consulta SELECT solo define los requisitos para el conjunto de datos devuelto y no es una instrucción precisa sobre cómo calcularlos. El DBMS traduce la consulta SELECT en un plan de ejecución interno ("plan de consulta"), que puede diferir incluso para consultas sintácticamente idénticas de un DBMS específico.
La instrucción SELECT consta de varias cláusulas (secciones):
La instrucción SELECT tiene la siguiente estructura:
SELECCIONE [ DISTINTO | DISTINTO | ALL ] select_expression ,... FROM table_references [ WHERE where_definition ] [ GROUP BY { unsigned_integer | nombre_col | fórmula } ] [ TENIENDO donde_definición ] [ ORDENAR POR { unsigned_integer | nombre_col | fórmula } [ ASC | DESC ], ...]La SELECTcláusula del operador SELECTestá destinada a definir el conjunto de resultados de columnas que se obtiene después de que la expresión de la tabla en la cláusula se haya evaluado FROMy agrupado en el resultado GROUP BY(si corresponde). La cláusula SELECTimplementa una operación de proyección, es decir, especifica un subconjunto de columnas de tablas de una expresión de tabla, así como una operación de cambio de nombre de columnas y una operación de adición de nuevas columnas computables.
La cláusula FROMse usa para evaluar la expresión de la tabla base, que luego es utilizada por el resto de las cláusulas del operador SELECT.
La cláusula [[WHERE (SQL)|WHERE]] se utiliza para determinar qué filas deben seleccionarse de la expresión de la tabla en la cláusula FROM.
[[GROUP BY (SQL)|GROUP BY]] — una cláusula de operador opcional SELECT, para agrupar filas en función de los resultados de funciones agregadas ( MAX, SUM, AVG, …).
SELECTEs necesario que solo las columnas requeridas en el flujo de salida, enumeradas en GROUP BYy/o valores agregados , se especifiquen en la oración . Un error común es incluir una SELECTcolumna en una oración que falta en el GROUP BY.
HAVING es una sugerencia de operador opcional SELECTpara seleccionar grupos resultantes de GROUP BY.
Cuando se especifica , HAVING <условия>puede especificar condiciones en las columnas especificadas en GROUP BYy en los valores de las funciones agregadas calculadas para cada grupo formado por GROUP BY.
ORDER BY es una cláusula opcional de los operadores SELECTy UNION, lo que significa que los operadores SELECT, UNIONdevuelven un conjunto de filas ordenadas por los valores de una o más columnas. Se puede aplicar tanto a columnas numéricas como a cadenas. En este último caso, la ordenación se realizará alfabéticamente .
El uso de una cláusula ORDER BYes la única forma de ordenar el conjunto de filas resultante. Sin esta cláusula, el DBMS puede devolver las filas en cualquier orden. Si se necesita ordenar, ORDER BYdebe estar presente en SELECT, UNION.
La clasificación se puede hacer en orden ascendente o descendente.
mesa "T" | Solicitud | Resultado | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
SELECCIONE * DE T |
| ||||||||||||
|
SELECCIONE C1 DE T |
| ||||||||||||
|
SELECCIONE * DESDE T DONDE C1 = 1 |
| ||||||||||||
|
SELECCIONE * DESDE PEDIR POR C1 DESC _ |
|
Para la consulta de la tabla T
SELECCIONE * DE Tdevolverá todas las columnas de todas las filas de la tabla dada. Para la misma tabla, consulta
SELECCIONE C1 DE Tdevolverá los valores de la columna C1 de todas las filas de la tabla. En términos de álgebra relacional , podemos decir que se ha hecho una proyección . Para la misma tabla, consulta
SELECCIONE * DESDE T DONDE C1 = 1devolverá los valores de todas las columnas de todas las filas de la tabla para las que el valor del campo C1 sea igual a 1. En términos de álgebra relacional , podemos decir que se ha realizado una selección . Última petición
SELECCIONE * DESDE PEDIR POR C1 DESC _devolverá las mismas filas que la primera, sin embargo, el resultado se clasificará en orden inverso (ZA) debido al uso de la palabra clave ORDER BY con el campo C1 como campo de clasificación. Esta consulta no contiene la palabra clave WHERE, por lo que devolverá lo que esté en la tabla. Se pueden especificar varios elementos ORDER BY separados por comas [p. ej. ORDENAR POR C1 ASC, C2 DESC] para una clasificación más precisa.
Selecciona todas las filas donde el campo column_name es igual a uno de los valores enumerados value1, value2,…
Devuelve una lista de ID de departamentos cuyas ventas superaron las 1000 el 1 de enero de 2000, junto con los totales de ventas de ese día:
SELECCIONE DeptID , SUM ( SaleAmount ) FROM Ventas DONDE SaleDate = '01-Ene-2000' GRUPO POR DeptID TENIENDO SUM ( SaleAmount ) > 1000De acuerdo con ISO SQL: 2003, el conjunto de datos devuelto se puede limitar con:
Hay varias funciones de ventana . ROW_NUMBER() OVERse puede utilizar para simplemente limitar el número de filas devueltas. Por ejemplo, para devolver no más de diez filas:
SELECCIONE * DESDE ( SELECCIONE ROW_NUMBER () SOBRE ( ORDENAR POR tecla ASC ) COMO número de fila , columnas DESDE nombre de tabla ) COMO foo DONDE número de fila <= 10ROW_NUMBER puede ser no determinista: si la clave no es única, cada vez que se ejecuta la consulta, es posible asignar números diferentes a las filas que tienen la misma clave . Cuando la clave es única, cada línea siempre obtendrá un número de línea único.
La función RANK() OVERfunciona de manera muy similar a ROW_NUMBER, pero puede devolver más de n filas bajo ciertas condiciones. Por ejemplo, para obtener el top 10 de personas más jóvenes:
SELECCIONE * DESDE ( SELECCIONE RANGO () SOBRE ( ORDEN POR edad ASC ) AS clasificación , person_id , person_name , edad FROM persona ) AS foo WHERE clasificación <= 10Este código puede devolver más de 10 filas. Por ejemplo, si hay dos personas con la misma edad, devolverá 11 filas.
No todos los DBMS admiten las funciones de ventana anteriores. Al mismo tiempo, muchos tienen una sintaxis no estándar para resolver los mismos problemas. A continuación se muestran ejemplos de restricciones de muestreo simples para varios DBMS:
Proveedor/DBMS | Sintaxis de restricciones |
---|---|
DB2 | (Soporta estándar desde DB2 Versión 6) |
SELECCIONE * DESDE [ T ] OBTENER SOLO LAS PRIMERAS 10 FILAS | |
pájaro de fuego | SELECCIONE LOS PRIMEROS 10 * DE [ T ] |
Informix | SELECCIONE LOS PRIMEROS 10 * DE [ T ] |
interbase | SELECCIONE * DE [ T ] FILAS 10 |
microsoft | (Admite estándar desde SQL Server 2005) |
TambiénSELECCIONE LOS 10 PRINCIPALES [ PORCENTAJE ] * DE T ORDENAR POR col | |
mysql | SELECCIONE * DESDE T LÍMITE 10 |
SQLite | SELECCIONE * DESDE T LÍMITE 10 |
postgresql | (Admite estándar desde PostgreSQL 8.4) |
SELECCIONE * DESDE T LÍMITE 10 | |
Oráculo | (Admite estándar desde Oracle8i) |
TambiénSELECCIONE * DESDE T DONDE ROWNUM <= 10 |
sql | |
---|---|
Versiones |
|
Palabras clave | |
Artículos relacionados | |
Partes de ISO/IEC SQL |
|
Base de datos | |
---|---|
Conceptos | |
Objetos |
|
Llaves | |
sql |
|
Componentes |