Select (SQL)
La declaración SELECT en SQL devuelve como resultado un conjunto de registros de una o mas tablas.
Es utilizado para rotornar cero o mas renglones de una o mas tablas, tablas temporales, o vistas en una base de datos. En la mayoría de las aplicaciones, SELECT es el comando mas utilizada, o también llamado Lenguaje de manipulación de datos (DML, Data Manipulation Language). El usuario especifica una descripción de l grupo de resultados que se desean, pero no especifica que operaciones físicas se nesecitan ejecutar para producir dicho resultado.
Comandos relacionados con SELECT mas utilizados:
WHERE - Usado para identificar que renglones se van a retornar o aplicado a GROUP BY.
GROUP BY- usado para combinar renglones con valores relacionados dentro de elementos de un grupo de renglones mas pequeño.
HAVING-
usado para identificar cual renglón,
seguido de GROUP BY, van a ser regresados.
ORDER
BY- usado para identificar en que columnas se van a ordenar los
datos.
EJEMPLOS:
|
Table "T" |
Query |
Result |
|---|
|
|
C1 |
C2 |
|
SELECT * FROM T; |
C1 |
C2 |
||
|
|
1 |
a |
|
|
1 |
a |
||
|
|
2 |
b |
|
|
2 |
b |
||
|
|
|
|
||||||
|
|
C1 |
C2 |
|
SELECT C1 FROM T; |
|
C1 |
|
|
|
|
1 |
a |
|
|
|
1 |
|
|
|
|
2 |
b |
|
|
|
2 |
|
|
|
|
|
|
||||||
|
|
C1 |
C2 |
|
SELECT * FROM T WHERE C1 = 1; |
C1 |
C2 |
||
|
|
1 |
a |
|
|
1 |
a |
||
|
|
2 |
b |
|
|
|
|||
|
|
|
|
||||||
|
|
C1 |
C2 |
|
SELECT * FROM T ORDER BY C1 DESC; |
C1 |
C2 |
||
|
|
1 |
a |
|
|
2 |
b |
||
|
|
2 |
b |
|
|
1 |
a |
||
|
|
|
|
||||||
Dada una tabla T, el comando SELECT * FROM T, el resultado sera todos los elementos de todos los renglones de la tabla que se muestra.
Con la misma tabla, el comando SELECT C1 FROM T, el resultado serán todos los datos de de la columna C1 de todos los renglones de la tabla mostrada.
Con la misma tabla, el comando SELECT * FROM T WHERE C1 = 1, el resultado sera todos los elementos de de todos los renglones de donde el valor de la columna C1 es '1'.
El ultimo comando SELECT * FROM T ORDER BYC1 DESC, mostrara los mismos resultados que el primer comando, sin embargo los resultados serán ordenados de Z-A en la columna C1 gracias a la orden ORDER BY. Este comando no tiene la orden WHERE, así que todos los valores serán mostrados. Se pueden especificar multiples expresiones con esta orden (separadas por comas (ej. ORDER BY C1 ASC, C2 DESC).
Regularmente es conveniente indicar un numero máximo de renglones que serán mostrados. Esto puede ser utilizado para probar o prevenir consumir recursos excesivamente si el comando regresa mas información de la esperada. La forma aproximada de hacer esto varía.
En ISO SQL 2003, el grupo de resultados puede ser limitado a usar:
Cursores, o
Introducir funciones de la ventana en la declaración SELECT.
ROW_NUMBER() función de ventana
Existen Algunas funciones de ventanas. ROW_NUMBER() OVER podría ser usado para establecer un limite de los renglones que serán mostrados. Ejemplo, para retornar no mas de diez renglones:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY llave ASC) AS row_number,
columnas
FROM nombredetabla
) AS foo
WHERE row_number <= 10
ROW_NUMBER() podría no ser determinante: si la llave no es única cada vez que se corra el comando es posible obtener diferentes numeros de renglones correspondientes a cualquier renglón donde la llave es la misma. Donde la llave es única, cada renglón obtendrá un único numero de renglón
RANK() window function
La función de ventana RANK() OVER actúa como ROW_NUMBER, pero podría regresar mas de n renglones en caso de una condición igual. Ejemplo, para regresar las 10 personas mas jóvenes.
SELECT * FROM (
SELECT
RANK() OVER (ORDER BY age ASC) AS ranking,
person_id,
person_name,
age
FROM person
) AS foo
WHERE ranking <= 10
El código de arriba podría retornar mas de 10 renglones si hay dos personas que tienen la misma edad, podría regresar 11 renglones.
Where (SQL)
La palabra WHERE en SQL representa que una declaración en SQL debería afectar únicamente a los renglones que llenan un cierto criterio. Los criterios se expresan en forma de predicados. El comando WHERE no es obligatorio de las declaraciones de SQL DML, pero debería ser utilizado para limitar el numero de renglones afectados por una declaración de SQL DML. WHERE es una palabra reservada enSQL.
El comando WHERE es usado en conjunto con las declaraciones de SQL DMLy toma la siguiente forma general:
SQL-DML-Declaracion
FROM nombre_tabla
WHERE predicado
Todos los renglones donde el predicado en el comando WHERE es verdadero son afectados (o regresados) por la declaración de SQL DML. Renglones en los cuales el predicado evalúa lo falso o desconocido (NULL) no son afectados por por la declaración DML.
EJEMPLOS
El siguiente código regresa únicamente aquellos renglones de la Tabla mytabla donde el valor en la columna micol es mayor de 100.
SELECT *
FROM mitabla
WHERE micol > 100
La siguiente declaración DELETE remueve únicamente aquellos renglones de la tabla mitabla donde la columna micol es nula (NULL) o tiene un valor de 100.
DELETE
FROM mitabla
WHERE micol IS NULL OR micol = 100
PREDICADOS
Los predicados no solamente tienen que ser simple comparaciones sino pueden ser una combinación de multiples predicados. Las palabras clave AND y OR pueden ser usados para combinar dos predicados en uno nuevo. Si son aplicadas múltiples combinaciones, los paréntesis pueden servir para agrupar las combinaciones, Sin el paréntesis, el operador AND tiene un (binding) mas fuerte que OR.
El siguiente ejemplo borra renglones de la tabla mitabla donde el valor de la columna micol es mayor a 100, y el valor de objeto es igual a la cadena 'Hammer".
DELETE
FROM mitabla
WHERE micol > 100 AND objeto = 'Hammer'