Вы находитесь на странице: 1из 8

STRUCTURED QUERY LANGUAGE  

Las sentencias SQL se clasifican a tres sublenguajes según su finalidad: 


- DDL permite definir,modificar o borrar tablas en las que se almacenan datos de las relaciones entre 
si. 
- DML recupera,actualiza, suprime y modifica datos previamente almacenados en las tablas. 
- DCL lenguaje que asegura y protege la integridad de la base de datos(en este apartado no nos 
extenderemos). 
Las sentencias SQL no se diferencian mayusculas de minusculas 

​LENGUAJE DDL 
Creación de una tabla: 
CREATE TABLE nombre_tabla  
( nombre_atributo tipo_de_dato(tamaño) NOT NULL,  
nombre_atributo tipo_de_dato(tamaño),  
… 
CONSTRAINT nombre_atributo_uk UNIQUE, 
CONSTRAINT nombre_atributo_ck 
CHECK (nombre_atributo BETWEEN a AND b), 
CONTRAINT nombre_atributo_pk PRIMARY KEY; 
CONTRAINT nombre_atributo_fk FOREIGN KEY (nombre_tabla_procedenciafk)  
... ); 
Para la eliminación/actualización de una clave externa: 
FOREIGN KEY (nombre_fk) REFERENCES nombre_tabla (atributos_forman_fk) 
[ON DELETE {CASCADE , SET NULL , SET DEFAULT}] 
 
FOREIGN KEY (nombre_fk) REFERENCES nombre_tabla (atributos_forman_fk) 
[ON UPDATE {CASCADE , SET NULL , SET DEFAULT}] 
 
 
CASCADE  Si se borra la clave referenciada, se borran las tuplas que la referencian. Si 
se actualiza la clave referenciada, se actualizan las tuplas que la 
referencian. 

SET NULL  Si se borra/actualiza la clave referenciada, se ponen a NULL los valores que 
la referencian (fk). 

SET DEFAULT  Si se borra/actualiza la clave referenciada, se ponen los valores que la 
referencian a su valor por defecto 
 
 
En la creación de la tabla debemos introducir los atributos de las tablas así como su tipo y su tamaño y además 
las restricciones. Las restricciones son condiciones que tienen que cumplir los valores de las columnas de la 
tabla. 
Una restricción sólo puede ser creada o borrada, no actualizada. 
 
Una restricción puede ser modificada: 
ALTER TABLE nombre_tabla 
ADD[CONSTRAINT nombre_clave] tipo_restriccion (nombre_atributo) 
REFERENCES nombre_tabla (nombre_atributo*); 
 
Una restricción puede ser borrada para un fk: 
ALTER TABLE nombre_tabla 
DROP CONSTRAINT nombre_clave; 
 
Una restricción de pk puede ser borrada: 
ALTER TABLE nombre_tabla 
DROP PRIMARY KEY CASCADE; 
De esta manera se elimina la clave primaria y todas las claves externas de esta presentes en otras tablas 
(CASCADE). 
 
Para asegurarnos que hemos creado la tabla correctamente ejecutamos la sentencia DESCRIBE que nos 
devolverá la descripción de la tabla: 
DESCRIBE nombre_tabla; 
 
Tipos de datos: 
- VARCHAR2 (size) para cadena de caracteres de longitud variable 
- CHAR (size) para cadena de caracteres de longitud fija 
- NUMBER(p,s) representa a los números donde p número de dígitos para la parte decimal y s número 
de dígitos para la parte entera 
- DATE fecha 
- LONG cadena de caracteres de longitud variable 
 
Tipos de restricciones: 
- NOT NULL el atributo no puede tener como valor null.​ Un valor nulo no es lo mismo que un 0 o un 
espacio en blanco. 
- UNIQUE Key no se permiten valores repetidos en la columna 
- PRIMARY Key restricción de clave primaria 
- FOREIGN Key restricción de clave externa 
- CHECK define una condición que debe cumplir los valores de la columna 
 
Existen una gran cantidad de tipos de datos , los presentes son los más utilizados.  
 
Modificación de una tabla: 
ALTER TABLE nombre_tabla 
ADD/MODIFY ( nombre_atributo tipo_de_dato(tamaño), ...); 
Borrar una tabla: 
Si pretendemos solo eliminar los datos que están almacenados en la tabla: 
DELETE nombre_tabla; 
 
Si lo que queremos es eliminar la existencia de la tabla: 
DROP TABLE nombre_tabla CASCADE CONSTRAINT; 
 
Una vez borrado algo , ya no se puede volver a recuperar.  
 
LENGUAJE DML 
Añadir tuplas a una tabla: 
* Indicamos los atributos a modificar e introducimos los valores de los atributos correspondientes en el orden 
descrito en la primera línea de la sentencia. Los atributos no introducidos se valorarán con NULL. 
INSERT INTO nombre_tabla [(nombre_atributo1, nombre_atributo2, ...)] 
VALUES (valor_atributo1, valor_atributo2 ...); 
 
*No indicamos los atributos porque vamos a modificar todos los valores de los atributos de la tabla.El orden de 
la colocación de los valores debe regirse por el orden de los atributos en la declaración de la tabla: 
INSERT INTO nombre_tabla 
VALUES (valor_atributo1, valor_atributo 2, …) 
 
Los valores tipo carácter y fecha deben ir entre comillas simples.  
 
Modificar tuplas de una tabla: 
UPDATE nombre_tabla 
SET (nombre_atributo= nuevo_valor , nombre_atributo= nuevo_valor , ...) 
[ WHERE condición para actualizar cada una de las tuplas] ; 
 
Si no aparece la cláusula WHERE se modificara el valor del atributo en todas las tuplas de la tabla 
correspondiente. 
 
Eliminar tuplas de una tabla: 
DELETE [FROM] nombre_tabla 
[WHERE condicion para eliminar una tupla]; 
 
Como en el caso anterior si no aparece la cláusula WHERE se borraran todas las tuplas de la tabla 
correspondiente. En caso de tener la cláusula solo se borrará aquellas que cumplen la condición. 
 
No puedes borrar una fila que contenga una clave primaria que sea usada por una clave externa de otra tabla. 
Si alguna de estas operaciones viola alguna restricción, la sentencia no se ejecuta. 
Para modificar/borrar filas de una tabla basándose en valores de otra tabla se usan subconsultas.   
 
CONSULTAS EN SQL 
 
Obtener una tabla con una serie de atributos en cuyo caso podemos darle un alias (al igual que el nombre de la 
tabla)indicando la tabla de donde procede, el * significa seleccionar todas los atributos de la tabla. 
SELECT [DISTINCT] {*, nombre_atributo [alias] , ...} 
FROM nombre_tabla [alias]; 
 
La cláusula DISTINCT eliminar todos los resultados duplicados, por defecto aparecen las filas duplicadas. Es un 
filtrado en columna. 
 
Obtener una tabla con una serie de atributos y cuyas tuplas cumplen una/s ciertas condiciones: 
SELECT [DISTINCT] {*, nombre_atributo [alias] , ...} 
FROM nombre_tabla 
WHERE condición/es; 
 
Este caso es un filtrado en fila o tupla. La condición de la cláusula WHERE puede dividirse en clases según su 
gramática: 
- Operaciones aritméticas (<,>,=, <=,>=, <> (distinto)) 
Las expresiones aritméticas que contienen un valor nulo se evalúan como nulas introduciendolas en el 
resultado de la consulta. La sentencia: 
NVL (nombre_atributo, valor_nuevo); 
asigna el nuevo valor al atributo si el valor de la columna es nulo. 
- Operadores de comparación: 
 
BETWEEN … AND ...  Entre dos valores , estos ​incluidos 

IN (lista)  Coincide con un valor de la lista 

LIKE  Coincide con un patrón de caracteres 

IS NULL  Es un valor nulo 


 
El LIKE puede presentar % indica uno o más caracteres , _ indica un solo carácter. Ej: ‘S%’ 
carácter que empieza por S. 
- Operaciones lógicas (AND, OR, NOT(negación)) 
 
Reglas de preferencia: 
1. Operadores de comparación 
2. NOT 
3. AND 
4. OR 
 
En caso de querer ordenar las tuplas: 
SELECT [DISTINCT] {*, nombre_atributo [alias] , ...} 
FROM nombre_tabla 
[ WHERE condición/es]  
[ ORDER BY nombre_atributo [ASC, DESC] ]; 
 
Se ordenara las tuplas de la tabla en función del atributo y de forma ascendente(ASC=default) o descendente 
(DESC). Se puede especificar más de un atributo para la ordenación: primero se ordenan las tuplas según el 
primer atributo y en caso de que algunas de ellas sean iguales se ordenan con el criterio del segundo atributo y 
así sucesivamente. ​La cláusula ORDER BY siempre se pone al final de una sentencia SELECT. 
   
Funciones sobre una tupla: 
- Conversión para cadena de caracteres 
LOWER (‘serie de caracteres’) convierte la cadena de caracteres en minúscula. 
UPPER(‘cadena de caracteres’) convierte la cadena de caracteres en mayúscula. 
- Funciones numéricas 
ROUND (numero_decimal, numero_de_decimales) FROM DUAL* ; redondeo del número decimal. 
TRUNC (numero_decimal, numero_de_decimales) FROM DUAL*; truncamiento del número decimal. 
MOD (numerador, denominador) devuelve el resto de la división. 
 
Composición 
Cuando queremos recuperar datos de más de una tabla, utilizamos una condición de composición que se introduce 
en la cláusula WHERE: 
SELECT nombre_atributo1, nombre_atributo2 
FROM nombre_tabla1 , nombre_tabla2 
WHERE atributo1 (+) = atributo2 
 
La condición WHERE es necesaria pues relaciona las dos tablas y normalmente es fk y pk, en caso de no 
introducirla o que la condición sea errónea se obtendrá un producto cartesiano. 
 
Encontramos diversos tipos de composición: 
- Composición por igualdad: se refiere a que el atributo1 es igual que el atributo2 (fk,pk) 
- θ-Composición la condición de composición no es una igualdad 
SELECT nombre_atributos  
FROM nombre_tablas 
WHERE nombre_atributo  
BETWEEN … AND … ; 
- Composición externa: consiste en una composición de igualdad pero con el símbolo + del lado donde se 
produce composición externa , se usa para ver filas que no se ven con la composición. 
- Composición de una tabla consigo misma: para este tipo de composición los alias son necesarios. 
 
 
Subconsultas:  
La subconsulta o consulta interna se ejecuta antes de la consulta principal o consulta externa. 
- Subconsulta de una tupla 
Devuelve una única tupla y se usan operadores aritméticos como =, >, <. 
- Subconsulta de múltiples tuplas 
Devuelven más de una tupla y se usan operadores aritméticos IN, ANY o ALL. 
- Subconsultas correlacionadas 
Se utilizan para procesamiento tupla a tupla. ​La subconsulta referencia a un atributo de una tabla de 
la consulta padre.​ Estas subconsultas son muy importantes puesto que permiten actualizar las filas de 
una tabla basadas en filas de otra tabla así como en la eliminación de sólo aquellas tuplas que solo 
existen en otra tabla. 
 
UPDATE tabla1 alias1 
SET atributo = (SELECT expresion 
FROM tabla2 alias2 
WHERE alias1.atributo = alias2.atributo) ; 
 
DELETE FROM tabla1 alias1 
WHERE atributo = (SELECT expresion 
FROM tabla2 alias2 
WHERE alias1.atributo = alias2.atributo) ; 
 
Puede presentarse subconsultas en FROM cuyo objetivo es crear una tabla en cuyos atributos queremos 
visualizar, subconsultas multicolumna donde se compara varios atributos,, subconsultas con emparejamiento 
múltiple se compara con varios valores que deben obtenerse de otras tablas y por supuesto las subconsultas con 
emparejamiento individual. 
 
Recomendaciones para la construcción de subconsultas: 
- Encerrar las subconsultas en paréntesis 
- Colocar las subconsultas a la derecha del operador de comparación 
- No añadir una cláusula GROUP BY a una subconsulta 
- Usar operadores de una fila con subconsultas de una fila 
- Usar operadores de múltiples filas con subconsultas de múltiples filas 
- Cuidado con que la subconsulta no devuelve nada. 
 
Operador EXISTS : 
SELECT …. 
FROM ... 
WHERE EXISTS/ NOT EXISTS (SELECT ‘1’ o ... 
FROM …. 
WHERE …..); 
 
Si aparece entre comillas simples un 1 la consulta no devolverá nada solo TRUE o FALSE a diferencia de si 
ponemos una sentencia común en SELECT. 
 
Si se encuentra el valor en una fila de una subconsulta: 
- La búsqueda no continúa en la consulta interna 
- La condición es puesta a TRUE 
 
Si no se encuentra el valor en una fila de una subconsulta: 
- La condición es puesta a FALSE 
- La búsqueda continúa en la consulta interna 
 
Funciones de agregación: 
 
- AVG 
- COUNT (*) devuelve el número total de tuplas , COUNT (expr) devuelve el número de tuplas no nulas 
- MAX 
- MIN 
- STDDEV desviación estándar de una variable 
- SUM 
- VARIANCE 
 
Las funciones de agregación ​no contemplan los valores nulos, para ello se utiliza la función NVL ​(mencionada 
anteriormente). Se puede presentar la ocasión de realizar un ​anidamiento de funciones de agregación​ por 
ejemplo el máximo de una media. 
 
Si queremos agrupar la tabla en subtablas: 
SELECT nombre_atributo 
FROM nombre_tabla 
[WHERE condicion] 
[GROUP BY expresion_de_agrupacion / nombre_atributo] 
[ORDER BY nombre_atributo]; 
 
Todas los atributos de la lista SELECT que no están en funciones de agregación deben estar en la cláusula 
GROUP BY. Sin embargo, no todas los atributos de GROUP BY deben estar en la cláusula SELECT. 
 
En caso de querer restringir los grupos: 
SELECT nombre_atributo 
FROM nombre_tabla 
[WHERE condicion] 
[GROUP BY expresion_de_agrupacion / nombre_atributo] 
[HAVING condicion_agrupacion] 
[ORDER BY nombre_atributo]; 
 
Vistas 
Una vista no contiene datos por si misma, pero es como una ventana a través de la cual se pueden ver y 
modificar los datos de otras tablas, se utilizan para evitar que consultas muy complejas se evalúan más de una 
vez. Si tenemos conocimiento de qué consultas se realizan frecuentemente, podemos materializar el resultado de 
la consulta mediante una vista. De esta forma, la siguiente vez que se evalúe la consulta se accedera a la vista 
como si fuese una tabla, evitando el coste de componer las tablas una y otra vez. 
 
Para crear o modificar la vista: 
CREATE [OR REPLACE ]VIEW nombre_vista ( atributo1 , atributo2 , ...) 
AS subconsulta; 
 
La subconsulta no puede contener una cláusula ORDER BY. ​Los alias de columna en la cláusula CREATE VIEW 
se listan en el mismo orden que las columnas en las subconsultas. 
 
Para eliminar la vista: 
DROP VIEW nombre_vista; 
 
Esta sentencia elimina la vista, no los datos de las tablas de la base de datos. 
 
Para acceder a una vista: 
SELECT * FROM nombre_vista; 

Вам также может понравиться