ORACLE - Sentencias SQL

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.