SENTENCIA de selección – SELECT
La selección sobre una tabla consiste en elegir un subconjunto de filas que cumplan (o no) algunas condiciones determinadas. La sintaxis de una sentencia de este tipo es la siguiente:
SELECT */ <columna1, columna2,....>
FROM <nombre-tabla>
[WHERE <condición>?
[GROUP BY <columna1, columna2....> ?
[HAVING <condición-selección-grupos> ?
[ORDER BY <columna1 [DESC?, columna2 [DESC?...> ?
* / <columna1, columna2,....>
Si se escribe *, selecciona todas las columnas. Si se desea seleccionar sólo algunas
columnas de la tabla, se debe poner los nombres de cada una de ellas, separadas
por una coma.
<nombre-tabla>
Nombre de la(s) tabla(s) de la(s) cual(es) se van a seleccionar los valores.
• WHERE <condición>
Cláusula opcional que se utiliza cuando se desea establecer una o varias condiciones
para la sentencia “Select”.
Las condiciones podrán tener:
- operadores aritméticos: =,<>,>,>=,<,<=
- operadores booleanos: AND, OR, NOT
- operadores especiales como:
• BETWEEN, que permite obtener todas las filas
que se encuentran en un intervalo de valores.
Formato: nombre-columna BETWEEN limite-inferior AND limite-superior
• IN, que permite obtener todas las filas que
sean iguales a alguno de los valores descritos por extensión.
Formato: nombre-columna IN (valor1, valor2, .....)
• LIKE, que permite imponer condiciones sobre
series de caracteres o parte de ellos.
- El símbolo “%” se utiliza como carácter de sustitución para indicar un número
indeterminado de caracteres. Depende de la base de datos en la que se esté trabajando.
- El símbolo “_” se utiliza como carácter de sustitución para indicar un carácter
en una determinada posición. Depende de la base de datos en la que se esté trabajando.
(Los caracteres % y _ pueden combinarse)
Formato: nombre-columna LIKE ‘A%’
• NOT, todas las condiciones que se pueden utilizar, pueden negarse anteponiendo la partícula NOT delante de los operadores especiales: IN, LIKE, BETWEEN.
• IS NULL, obtiene todas las filas que contengan
un valor nulo en una determinada columna.
Formato: nombre-columna IS NULL. También se puede negar con la partícula NOT, IS
NOT NULL
Una sentencia “Select” puede tener una o más condiciones unidas por un operador booleano.
• GROUP BY <columna1, columna2....>
Se utiliza para agrupar resultados por una determinada columna, específicamente
cuando se utilizan funciones de columna y los resultados se desean obtener por grupos
(SQL lanza un sort para generar los grupos).
• HAVING <condición-selección-grupos>
Se utiliza con la cláusula “GROUP BY”, cuando se quiere poner condiciones al resultado
de un grupo.
• ORDER BY <colum1 [DESC?, colum2 [DESC...>
Sirve para ordenar el resultado. Todas las columnas por las que se desee realizar
el orden tienen que encontrarse en la sentencia “Select” de la consulta.
El orden de las columnas puede ser ascendente, (por omisión, ASC), o descendente,
(DESC).
SENTENCIA SELECT (JOIN)
Consiste en la unión de campos de dos o más tablas. Dichas tablas
tendrán por lo menos una columna común que sirva de nexo del join.
SELECT <columna1, columna2,...>
FROM <nombre-tabla1>, <nombre-tabla2>
<columna1, columna2,...>
Para diferenciar las columnas con el mismo nombre se antepondrá el nombre de la
tabla a la que pertenecen, utilizando el punto como separador.
Por ejemplo:
SELECT Tabla1.Columna2, Tabla2.Columna2, Columna3.....
FROM Tabla1, Tabla2
WHERE Tabla1.Columna1 = Tabla2.Columna1
La Columna1 de cada una de las tablas respectivas son las columnas de nexo o columnas
de join.
SENTENCIA SELECT DISTINCT
Recupera las filas de una tabla eliminando los valores de la columna duplicados.
SELECT DISTINCT <columna1>, <columna2,....>
FROM <nombre-tabla1>, <nombre-tabla2>
[GROUP BY <columna1, columna2....> ?
[HAVING <condición-selección-grupos>?
[ORDER BY <columna1 [DESC?, columna2 [DESC?...>?
SENTENCIA SELECT TOP N FILAS DE UNA TABLA
En Oracle8i podemos usar la sintaxis siguiente, con una cláusula ORDER BY, para elegir filas con los valores máximos o mínimos de un campo:SELECT
*
FROM (SELECT * FROM my_table ORDER BY col_name_1 DESC)
WHERE ROWNUM < 10;
FUNCIONES SOBRE COLUMNAS
• COUNT. Indica el número de filas que cumplen
una determinada condición, o el número de valores diferentes que posee una columna.
Formato: COUNT(*) o COUNT(DISTINCT <columna>)
• SUM. Suma los valores de una columna.
Formato: SUM(<columna>)
• AVG. Entrega la media de los valores de una
columna.
Formato: AVG(<columna>)
• MIN. Entrega el valor mínimo de una columna.
Formato: MIN(<columna>)
• MAX. Entrega el valor máximo de una columna.
Formato: MAX(<columna>)
SUBSELECTS
Permite realizar comparaciones con valores obtenidos en otra sentencia
select anidada, a la que se denomina “Subselect” o “Subselect interna”.
SELECT <columna1>, <columna2,....>
FROM <nombre-tabla1>, <nombre-tabla2>
WHERE <columna1> = (SELECT <columna1>
FROM <nombre-tabla1>, <nombre-tabla2>
WHERE <condición>)
(Cuando en la condición se pone el operador =, la subselect deberá recuperar un sólo registro).
CLÁUSULA UNION
Mezcla los resultados de dos o más consultas individuales en una única tabla resultado, eliminando las filas duplicadas, si existieran.
SELECT <columna1>, <columna2,....>
FROM <nombre-tabla1>, <nombre-tabla2>
WHERE <condición>
UNION [ALL?
SELECT <columna1>, <columna2,...>
FROM <nombre-tabla1>, <nombre-tabla2>
WHERE <condición>
• ALL
Si se especifica ALL, el resultado de la consulta no elimina las filas duplicadas,
si existieran.
Primero realiza cada una de las Select escritas, generando una tabla resultado por
cada una de las consultas. Luego, une las dos tablas en una. Las columnas de la
tabla resultado poseen los nombres de las columnas de la primera sentencia “Select”
que se ejecute.
SENTENCIA INSERT
Añade filas a una tabla. Posee varios formatos posibles:
• INSERT INTO <nombre-tabla> VALUES (<serie de valores>)
El orden en el que se asignen los valores en la cláusula VALUES tiene que coincidir con el orden en que se definieron las columnas en la creación del objeto tabla, dado que los valores se asignan por posicionamiento relativo.
• INSERT INTO <nombre-tabla> (<columna1>, <columna2>.....) VALUES (<valor1>, <valor2>....)
En este caso los valores se asignarán a cada una de las columnas mencionadas por posicionamiento relativo, siendo necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos en la tabla.
SENTENCIA INSERT CON MÚLTIPLES FILAS
Para insertar un subconjunto de filas de una tabla en otra se escribe una sentencia INSERT con una SUBSELECT interna. Los formatos posibles son:
• INSERT INTO <nombre-tabla> (<columna1>, <columna2>.....) SELECT (<sentencia Select>)
Asigna a las columnas los valores recuperados en la sentencia Select. Inserta en la tabla todas las filas que se recuperen en la Select.
• INSERT
INTO <nombre-tabla> SELECT * FROM <nombre-tabla-fuente>
En este caso las estructuras de las tablas tienen que ser iguales.
SENTENCIA UPDATE
Actualiza valores de una o más columnas para un subconjunto de filas de una tabla.
UPDATE
<nombre-tabla>
SET <columna1> = valor1 [, <columna2> = valor2 ...?
[WHERE <condición>?
Actualiza los campos
correspondientes junto con los valores que se le asignen, en el subconjunto de filas
que cumplan la condición de selección. Si no se pone condición de selección, la
actualización se da en todas las filas de la tabla.
Si se desea actualizar a nulos, se asignará el valor NULL.
SENTENCIA DELETE
Borra una o más filas
de una tabla. La sintaxis es la siguiente:
DELETE FROM <nombre-tabla>
[WHERE <condición>?
Si no se pone condición de selección, borra todas las filas de la tabla.