Sie sind auf Seite 1von 66

v: 6.0 Jos Fco.

Ortiz
1. DEFINICIN

SQL (Structured Query Language, en espaol Lenguaje de Consulta Estructurada) es un lenguaje de programacin diseado
para almacenar, manipular y recuperar datos almacenados en bases de datos relacionales. La primera encarnacin de SQL
apareci en 1974, cuando un grupo de IBM desarroll el primer prototipo de una base de datos relacional. Relational
Software (luego se convirti en Oracle) lanz la primera base de datos relacional comercial.

SQL pas a ser el estndar del Instituto Americano Nacional de estndares en 1986 y de la Organizacin Internacional para
estandarizar en 1987. Desde entonces, el estndar ha sido revisado para incluir ms caractersticas.

SQL integra los siguientes elementos:


Lenguaje de definicin de datos DDL (en ingls Data Definition Language): Es el que se encarga de la modificacin de la
estructura de los objetos de la base de datos. Incluye rdenes para modificar, borrar o definir las tablas en las que se
almacenan los datos de la base de datos.
Lenguaje de manipulacin de datos DML (en ingls Data Manipulation Language): Es un lenguaje proporcionado por el
sistema de gestin de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulacin de los
datos, organizados por el modelo de datos adecuado.

SQL 2
2. TIPOS DE DATOS

TIPOS DE DATOS

BINARY 1 byte Para consultas sobre tabla adjunta de productos de bases de datos que definen un tipo de
datos Binario.
BIT 1 byte Valores Si/No True/False
BYTE 1 byte Un valor entero entre 0 y 255.
COUNTER 4 bytes Un nmero incrementado automticamente (de tipo Long)
CURRENCY 8 bytes Un entero escalable entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807.
DATETIME 8 bytes Un valor de fecha u hora entre los aos 100 y 9999.
SINGLE 4 bytes Un valor en punto flotante de precisin simple con un rango de - 3.402823*1038 a -
1.401298*10-45 para valores negativos, 1.401298*10- 45 a 3.402823*1038 para valores positivos, y 0.
DOUBLE 8 bytes Un valor en punto flotante de doble precisin con un rango de - 1.79769313486232*10308 a -
4.94065645841247*10-324 para valores negativos, 4.94065645841247*10-324 a 1.79769313486232*10308 para valores
positivos, y 0.
SHORT 2 bytes Un entero corto entre -32,768 y 32,767.
LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.
LONGTEXT 1 byte por carcter De cero a un mximo de 1.2 gigabytes.
LONGBINARY Segn se necesite De cero 1 gigabyte. Utilizado para objetos OLE.
TEXT 1 byte por carcter

SQL 3
3. DDL Lenguaje de Definicin de Datos

CREATE TABLE: Instruccin para crear tablas en la BBDD.

SINTAXIS:
CREATE TABLE nombre_tabla
(columna1 tipo_columna_1,
columna2 tipo_columna_2,
... );

EJEMPLO:
CREATE TABLE CLIENTE
(nombre CHAR(50),
apellido CHAR(50),
direccion CHAR(50),
ciudad CHAR(50),
pais CHAR(25),
fecha_nacimiento DATE);

SQL 4
3. DDL Lenguaje de Definicin de Datos

CREATE TABLE (CONSTRAIT): Restricciones o limitaciones que especifican reglas para los datos de una tabla.

SINTAXIS:
- NOT NULL: Para no permitir un valor NULL en una columna.
- UNIQUE: Si se desea que un valor de una columna sea nico.
- CHECK: Asegura que todos los valores en una columna cumplan ciertas condiciones.
- PRIMARY KEY: Para definir una clave primaria. Es una combinacin de un NOT NULL y UNIQUE.
- FOREIGN KEY (clave ajena) REFERENCES nombre_tabla (clave primaria) (clave ajena) REFERENCES (clave primaria): Para
definer una clave externa que se relacione con otra clave primaria de otra tabla
- DEFAULT - Especifica un valor por defecto para una columna

EJEMPLO:
CREATE TABLE ALUMNO (nombre CHAR(50), apellido CHAR(50), direccion CHAR(50) NOT NULL,
ciudad CHAR(50) default Barcelona, nota INT CHECK (nota>10),
PRIMARY KEY (nombre),
FOREIGN KEY (apellido) REFERENCES CENSO (apellido_censo));

SQL 5
3. DDL Lenguaje de Definicin de Datos

CREATE INDEX: Para crear ndices en las tablas. Un ndice puede ser creado en una tabla para encontrar datos ms rpida y
eficientemente. Los usuarios no pueden ver los ndices. La actualizacin de una tabla con ndices lleva ms tiempo que sin
ellos, por lo tanto, slo se debe crear ndices en tablas que utilizan columnas para bsquedas frecuentes.

SINTAXIS:
CREATE INDEX nombre_indice ON nombre_tabla (columna);

EJEMPLO:
CREATE INDEX IDX_cliente
ON CLIENTES (ciudad, pais);

SQL 6
3. DDL Lenguaje de Definicin de Datos

ALTER TABLE: Para cambiar la estructura de la tabla. Por ejemplo, agregar una columna, eliminarla, cambiar su nombre,
cambiar su tipo de datos, cambiar la especificacin de la clave primaria, agregar una restriccin, etc.

SINTAXIS:
ALTER TABLE nombre_tabla [modificar especificacin];

EJEMPLO:
ALTER TABLE CLIENTE ADD genero CHAR(1); Aadimos la columna genero

ALTER TABLE CLIENTE CHANGE direccion ubicacion CHAR(50); Cambiamos el nombre de la columna direccion

ALTER TABLE CLIENTE MODIFY direccion CHAR(30); Modificamos el tipo de la columna direccion

ALTER TABLE CLIENTE DROP genero; Eliminamos la columna genero

SQL 7
3. DDL Lenguaje de Definicin de Datos

DROP TABLE: Para eliminar una tabla.

SINTAXIS:
DROP TABLE nombre_tabla;

EJEMPLO:
DROP TABLE CLIENTE ;

DROP DATABASE: Para eliminar una BBDD.

SINTAXIS:
DROP DATABASE nombre_basededatos;

EJEMPLO:
DROP DATABASE BBDD_DAM ;

SQL 8
3. DDL Lenguaje de Definicin de Datos

DROP INDEX: Para eliminar un ndice.

SINTAXIS:
DROP INDEX nombre_ndice ON nombre_tabla;

EJEMPLO:
DROP INDEX IDX_cliente ON CLIENTES ;

TRUNCATE TABLE: Para eliminar el contenido de una tabla, pero no su estructura.

SINTAXIS:
TRUNCATE TABLE nombre_tabla;

EJEMPLO:
TRUNCATE TABLE ALUMNOS;

SQL 9
3. DDL Lenguaje de Definicin de Datos

INSERT INTO: Para insertar informacin en las tablas.

SINTAXIS:
INSERT INTO nombre_tabla (columna1, columna2, )
VALUES (valor1, valor2, );

EJEMPLO:
INSERT INTO ALUMNO (nombre, apellido)
VALUES (Juan, Fernndez);

SQL 10
3. DDL Lenguaje de Definicin de Datos

UPDATE: Para modificar informacin en las tablas.

SINTAXIS:
UPDATE nombre_tabla
SET columna1= [nuevo valor]
WHERE condicin;

EJEMPLO:
UPDATE ALUMNO
SET nombre=Luis
WHERE apellido=Fernndez;

UPDATE ALUMNO
SET nombre=Luis, apellido=Fernndez
WHERE dni=43657622J;

SQL 11
3. DDL Lenguaje de Definicin de Datos

DELETE FROM: Para eliminar registros de una tabla.

SINTAXIS:
DELETE FROM nombre_tabla
WHERE condicin;

EJEMPLO:
DELETE FROM ALUMNO
WHERE apellido=Fernndez;

DELETE FROM ALUMNO


WHERE apellido=Fernndez AND nombre=Juan;

DELETE FROM ALUMNO; (Eliminara todos los registros, dejando intacta la estructura e ndices de la table.)

SQL 12
3. DDL Lenguaje de Definicin de Datos

AND & OR: Operadores lgicos para concatenar condiciones.

SINTAXIS:
condicin1 AND condicin2; Para que se realice una sentencia, se han de cumplir las dos condiciones.

condicin1 OR condicin2; Para que se realice una sentencia, se han de cumplir una de las dos condiciones como mnimo.

EJEMPLO:
DELETE FROM ALUMNO
WHERE apellido=Fernndez
AND (nombre=Juan OR nombre =Pedro);

SQL 13
3. DDL Lenguaje de Definicin de Datos

COMENTARIOS: En SQL se pueden insertar comentarios que se ignoran al ejecutarse las sentencias.

SINTAXIS:
-- comentarios Comentarios de una sola lnea

/* comentarios */ Comentarios de un prrafo

EJEMPLO:
/* Ejemplo de eliminacin de registros
que cumplan una serie de condiciones
de la tabla ALUMNO */
DELETE FROM ALUMNO
WHERE apellido=Fernndez -- condicin de que el apellido sea Fernndez
AND (nombre=Juan OR nombre =Pedro);

SQL 14
3. DDL Lenguaje de Definicin de Datos

COMODINES: Son caracteres que sustituyen a otros caracteres en una cadena.

SINTAXIS:
% : Sustituye 0 o ms caracteres.
- : Sustituye 1 carcter
[lista de caracteres] : Sustituye una lista especfica de caracteres. En positivo
[^lista de caracteres] : Sustituye una lista especfica de caracteres. En negativo
[!lista de caracteres] : Sustituye una lista especfica de caracteres. En negativo

EJEMPLO:
WHERE ciudad LIKE Bar%'; Cualquier ciudad que comience con Bar: Barcelona, Baracaldo, etc.
WHERE ciudad LIKE '%en%'; Cualquier ciudad que contenga la cadena en: Valencia, Palencia, etc.
WHERE ciudad LIKE '_i_a'; Cualquier ciudad que contenga 1 carcter cualquiera en la posicin _: Pisa, Niza, etc.
WHERE ciudad LIKE '[BSP]%'; Cualquier ciudad que comience por B, S P: Barcelona, Sevilla, Pamplona, etc.
WHERE ciudad LIKE '[A-C]%'; Cualquier ciudad que comience por A, B C: Almera, Barcelona, Crdoba, etc.
WHERE ciudad LIKE '[^BSP]%'; Cualquier ciudad que no comience por B, S P: Valencia, Mlaga, etc.
WHERE ciudad LIKE '[!BSP]%'; Cualquier ciudad que no comience por B, S P: Valencia, Mlaga, etc.

SQL 15
4. DML Lenguaje de Manipulacin de Datos

SELECT: Su uso comn es la seleccin de datos desde tablas ubicadas en


una base de datos.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla;
SELECT * FROM nombre de tabla;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT almacen FROM INFOALMACEN;

almacen
almacen ventas fecha Los ngeles
San Diego
Los ngeles 1500 05-ENE-2017 Los ngeles
San Diego 250 07-ENE-2017 Boston
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017

SQL 16
4. DML Lenguaje de Manipulacin de Datos

ALIAS: Se utilizan para dar a una tabla de base de datos, o una columna de
una tabla, un nombre temporal.
Bsicamente, los alias se crean para que los nombres de columnas sean
ms legibles.

SINTAXIS:
SELECT nombre de columna AS alias de columna FROM nombre de tabla;
SELECT nombre de columna FROM nombre de tabla AS alias de tabla;

EJEMPLO:
SELECT almacen AS ALMACN FROM INFOALMACEN; RESULTADO DE LA EJECUCIN:

almacen ventas fecha


ALMACN
Los ngeles 1500 05-ENE-2017
Los ngeles
San Diego 250 07-ENE-2017 San Diego
Los ngeles 300 08-ENE-2017 Los ngeles
Boston
Boston 700 08-ENE-2017

SQL 17
4. DML Lenguaje de Manipulacin de Datos

SELECT DISTINCT: Permite la seleccin de datos distintos, evitando


redundancias.

SINTAXIS:
SELECT DISTINCT nombres de columnas FROM nombre de tabla;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT DISTINCT almacen FROM INFOALMACEN;

almacen
Los ngeles
almacen ventas fecha
San Diego
Los ngeles 1500 05-ENE-2017 Boston
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017

SQL 18
4. DML Lenguaje de Manipulacin de Datos

WHERE: Se utiliza para extraer slo aquellos registros que cumplen un


criterio especificado.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE condicin;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT almacen FROM INFOALMACEN WHERE ventas>1000;
almacen
Los ngeles
almacen ventas fecha
Los ngeles 1500 05-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017

SQL 19
4. DML Lenguaje de Manipulacin de Datos

WHERE IN: Se utiliza para extraer slo aquellos registros que cumplen un
criterio especificado, indicando los valores de una columna.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE nombre de
columna IN (valor1, valor2, etc.);

EJEMPLO:
SELECT * FROM INFOALMACEN WHERE almacen IN (San Diego, Boston); RESULTADO DE LA EJECUCIN:

almacen ventas fecha


almacen ventas fecha
San Diego 250 07-ENE-2017
Los ngeles 1500 05-ENE-2017 Boston 700 08-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017

SQL 20
4. DML Lenguaje de Manipulacin de Datos

WHERE BETWEEN: Se utiliza para extraer slo aquellos registros que


cumplen un criterio especificado, indicando el rango de valores de una
columna.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE nombre de
columna BETWEEN valor1 AND valor2;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT * FROM INFOALMACEN WHERE fecha BETWEEN 06-ENE-2017
AND 10-ENE-2017; almacen ventas fecha
San Diego 250 07-ENE-2017
almacen ventas fecha Los ngeles 300 08-ENE-2017
Los ngeles 1500 05-ENE-2017 Boston 700 08-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017

SQL 21
4. DML Lenguaje de Manipulacin de Datos

WHERE LIKE: Se utiliza para extraer slo aquellos registros que cumplen un
criterio especificado, indicando un patrn de bsqueda.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE nombre de
columna LIKE patrn;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT * FROM INFOALMACEN WHERE almacen LIKE San%;
almacen ventas fecha
almacen ventas fecha San Diego 250 07-ENE-2017
San Francisco 750 09-ENE-2017
Los ngeles 1500 05-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 750 09-ENE-2017

SQL 22
4. DML Lenguaje de Manipulacin de Datos

FUNCIONES: Se utiliza para realizar operaciones matemticas.

SINTAXIS:
SELECT nombre de funcin( nombre de columna) FROM nombre de tabla;

EJEMPLOS: RESULTADOS DE LA EJECUCIN:


SELECT SUM(ventas) FROM INFOALMACEN;
SUM(ventas)
SELECT COUNT(DISTINCT almacen) FROM INFOALMACEN; 3500

almacen ventas fecha COUNT (DISTINCT almacen)


4
Los ngeles 1500 05-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 750 09-ENE-2017

SQL 23
4. DML Lenguaje de Manipulacin de Datos

FUNCIONES ARITMTICAS:

SUM: Devuelve la suma


AVG: Devuelve la media
COUNT: Devuelve el nmero de filas
FIRST: Devuelve el primer valor
LAST: Devuelve el ltimo valor
MAX: Devuelve el mximo valor
MIN: Devuelve el mnimo valor
ROUND: Devuelve el valor redondeado a un nmero de decimales

SELECT TOP: Se utiliza para especificar el nmero de registros a devolver.

SINTAXIS:
SELECT TOP nmero nombres de columnas FROM nombre de tabla WHERE
condicin;

EJEMPLO:
SELECT TOP 3 * FROM INFOALMACEN WHERE ventas > 124;

SQL 24
4. DML Lenguaje de Manipulacin de Datos

ORDER BY: Se utiliza para presentar la informacin en un orden particular. ASC


indicara orden ascendente y DESC descendente. Se ordenar por el valor de
una o varias columnas. stas se indicarn por el nombre o posicin que ocupa.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla [WHERE condicin]
ORDER BY nombre de columnas [ASC, DESC];

EJEMPLO:
SELECT * FROM INFOALMACEN WHERE almacen LIKE San% ORDER BY RESULTADO DE LA EJECUCIN:
ventas DESC;
almacen ventas fecha
almacen ventas fecha San Francisco 750 09-ENE-2017
Los ngeles 1500 05-ENE-2017 San Diego 250 07-ENE-2017
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 750 09-ENE-2017
SQL 25
4. DML Lenguaje de Manipulacin de Datos

GROUP BY: Se utiliza para agrupar el conjunto de resultados de una o ms


columnas cuando aparece al menos una instruccin de agregado (COUNT,
MAX, MIN, SUM, AVG) en la instruccin SELECT.

SINTAXIS:
SELECT nombres de columnas, FUNCION(nombre de columna) FROM nombre
de tabla GROUP BY nombre de columna;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT almacen, SUM(ventas) FROM INFOALMACEN GROUP BY almacen;
almacen SUM(ventas)
Los ngeles 1800
almacen ventas fecha San Diego 250
Los ngeles 1500 05-ENE-2017 Boston 700
San Francisco 750
San Diego 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 750 09-ENE-2017
SQL 26
4. DML Lenguaje de Manipulacin de Datos

HAVING: Se utiliza en lugar de la clusula WHERE cuando hay funciones de


agregado (COUNT, MAX, MIN, SUM, AVG) en la instruccin SELECT. Con ella
filtramos el resultado con una condicin. Se colocar al final de la instruccin.

SINTAXIS:
SELECT nombres de columnas, FUNCION(nombre de columna) FROM nombre
de tabla [GROUP BY nombre de columna] HAVING condicin;

EJEMPLO: RESULTADO DE LA EJECUCIN:


SELECT almacen, SUM(ventas) FROM INFOALMACEN GROUP BY almacen
HAVING SUM(ventas) > 1000; almacen SUM(ventas)
Los ngeles 1800
almacen ventas fecha San Francisco 1750
Los ngeles 1500 05-ENE-2017
Boston 250 07-ENE-2017
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 1750 09-ENE-2017
SQL 27
4. DML Lenguaje de Manipulacin de Datos

JOIN: Se utiliza para combinar filas a partir de dos o ms tablas, basado en una columna que se encuentra entre ellos.

Existen diferentes tipos de uniones en SQL:

INNER JOIN: Devuelve los registros que tienen valores coincidentes en ambas tablas

LEFT JOIN: devolver todos los registros de la tabla de la izquierda, y los registros coincidentes de la tabla derecha

RIGHT JOIN: devolver todos los registros de la tabla de la derecha, y los registros coincidentes de la tabla izquierda

FULL JOIN: devolver todos los registros cuando hay un partido en cualquiera de las tablas izquierda o hacia la derecha

INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN

Tabla 1 Tabla 2 Tabla 1 Tabla 2 Tabla 1 Tabla 2 Tabla 1 Tabla 2

SQL 28
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Luis Lpez Berln 12009 Alemania
7079 27 08-ENE-2017 51 Mara Ruiz Sevilla 24000 Espaa

EJEMPLO:
SELECT ORDENES.orden, CLIENTES.nombre
FROM ORDENES INNER JOIN CLIENTES ON ORDENES.cliente = CLIENTES.cliente;

RESULTADO DE LA EJECUCIN:
orden nombre
7078 Juan Prez

SQL 29
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Mara Ruiz Berln 12009 Alemania
7079 27 08-ENE-2017 51 Luis Lpez Sevilla 24000 Espaa

EJEMPLO:
SELECT CLIENTES.nombre, ORDENES.orden
FROM CLIENTES LEFT JOIN ORDENES ON CLIENTES.cliente = ORDENES.cliente ORDER BY CLIENTES.nombre;

RESULTADO DE LA EJECUCIN:
nombre orden
Juan Prez 7078
Luis Lpez
Mara Ruiz

SQL 30
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Mara Ruiz Berln 12009 Alemania
7079 27 08-ENE-2017 51 Luis Lpez Sevilla 24000 Espaa

EJEMPLO:
SELECT ORDENES.orden, CLIENTES.nombre,
FROM ORDENES RIGHT JOIN CLIENTES ON ORDEN.cliente = CLIENTES.cliente ORDER BY ORDENES.orden;

RESULTADO DE LA EJECUCIN:
orden nombre
7078 Juan Prez
Mara Ruiz
Luis Lpez

SQL 31
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Mara Ruiz Berln 12009 Alemania
7079 27 08-ENE-2017 51 Luis Lpez Sevilla 24000 Espaa

EJEMPLO:
SELECT CLIENTES.nombre, ORDENES.orden
FROM CLIENTES FULL JOIN ORDENES ON CLIENTES.cliente = ORDENES.cliente ORDER BY CLIENTES.nombre;

RESULTADO DE LA EJECUCIN:
nombre orden
Juan Prez 7078
Luis Lpez
Mara Ruiz
7077
7079

SQL 32
4. DML Lenguaje de Manipulacin de Datos

UNION: Se utiliza para combinar el conjunto de resultados de dos o ms instrucciones SELECT. Se tiene que tener en cuenta
las siguientes condiciones:

Cada instruccin SELECT dentro de la unin debe tener el mismo nmero de columnas
Las columnas tambin deben tener tipos de datos similares
Las columnas de cada instruccin SELECT tambin deben estar en el mismo orden

El operador UNION slo selecciona valores distintos de forma predeterminada. Para permitir valores duplicados, se utilizar
UNION ALL.

Los nombres de columnas del conjunto de resultados suelen ser iguales a los nombres de las columnas en la primera
instruccin SELECT de la UNION.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla 1
UNION [ALL]
SELECT nombres de columnas FROM nombre de tabla 2;

SQL 33
4. DML Lenguaje de Manipulacin de Datos

SUBCONSULTA: Es posible incorporar una instruccin SQL dentro de otra. Cuando esto se hace en las
instrucciones WHERE o HAVING, tenemos una construccin de subconsulta.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla 1
WHERE nombres de columna OPERADOR
(SELECT nombre de columna FROM nombre de tabla 2 WHERE condicin);

SQL 34
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Mara Ruiz Berln 12009 Alemania
7079 27 07-ENE-2017 51 Luis Lpez Sevilla 24000 Espaa

EJEMPLO SUBCONSULTA:
SELECT nombre, pais FROM CLIENTES WHERE cliente IN
(SELECT cliente FROM ORDENES WHERE fecha = 07-ENE-2017);

RESULTADO DE LA EJECUCIN:
nombre pais
Juan Prez Italia

SQL 35
4. DML Lenguaje de Manipulacin de Datos

EXISTS: El operador EXISTS se utiliza para comprobar la existencia de cualquier registro en una subconsulta. Devuelve
verdadero si la subconsulta devuelve uno o ms registros. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de
la instruccin SQL no arroja nada.

SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla 1
WHERE EXISTS
(SELECT nombre de columna FROM nombre de tabla 2 WHERE condicin);

SQL 36
4. DML Lenguaje de Manipulacin de Datos

ORDENES CLIENTES
orden cliente fecha cliente nombre ciudad CP pais
7077 50 05-ENE-2017 2 Juan Prez Roma 30001 Italia
7078 2 07-ENE-2017 9 Mara Ruiz Berln 12009 Alemania
7079 27 07-ENE-2017 51 Luis Lpez Sevilla 24000 Espaa

EJEMPLO EXISTS:
SELECT nombre, pais FROM CLIENTES WHERE EXISTS
(SELECT cliente FROM ORDENES WHERE cliente > 49);

RESULTADO DE LA EJECUCIN:
nombre pais
Juan Prez Italia
Mara Ruiz Alemania
Luis Lpez Espaa

SQL 37
4. DML Lenguaje de Manipulacin de Datos

SELECT INTO: Se utiliza para copiar datos de una tabla en una tabla nueva.

SINTAXIS:
SELECT nombre de columnas INTO nueva tabla FROM antigua tabla WHERE condicion;

EJEMPLOS:
SELECT almacen, ventas INTO VENTAS FROM INFOALMACEN WHERE fecha = 08-ENE-2017;

INFOALMACEN VENTAS
almacen ventas fecha almacen ventas
Los ngeles 1500 05-ENE-2017 Los ngeles 300
San Diego 250 07-ENE-2017 Boston 700
Los ngeles 300 08-ENE-2017
Boston 700 08-ENE-2017
San Francisco 750 09-ENE-2017

SQL 38
4. DML Lenguaje de Manipulacin de Datos

INSERT INTO SELECT: Copia datos de una tabla y lo inserta en otra tabla. Se requiere que los tipos de datos en las tablas de
origen y destino coincidan y que los registros existentes en la tabla de destino no se vean afectados.

SINTAXIS:
INSERT INTO tabla destino (columnas) SELECT columnas FROM tabla origen WHERE condicion;

EJEMPLOS:
INSERT INTO VENTAS (almacen, ventas) SELECT almacen, ventas FROM INFOALMACEN WHERE fecha <> 08-ENE-2017;

INFOALMACEN VENTAS
almacen ventas fecha almacen ventas
Los ngeles 1500 05-ENE-2017 Los ngeles 300
San Diego 250 07-ENE-2017 Boston 700
Los ngeles 300 08-ENE-2017 Los ngeles 1500
Boston 700 08-ENE-2017 San Diego 250
San Francisco 750 09-ENE-2017 San Francisco 750

SQL 39
5. PROGRAMACIN Transact SQL

Transact SQL es el lenguaje de programacin que proporciona Microsoft SQL Server para extender el SQL estndar con otro
tipo de instrucciones y elementos propios de los lenguajes de programacin.

Este lenguaje se compone de:

Instrucciones secuenciales: Son las instrucciones que se ejecutan una a continuacin de otra.

Instrucciones selectivas: Son las instrucciones que se ejecutan segn el valor lgico de una variable.

Instrucciones repetitivas: Son las instrucciones se ejecutan en forma repetida segn una condicin lgica llamada bucle.

Procedimientos almacenados: Son un grupo de una o varias instrucciones Transact-SQL.

Funciones: Son un grupo de una o varias instrucciones Transact-SQL que devuelven un valor.

Triggers

SQL 40
5. PROGRAMACIN Transact SQL. Instrucciones

IF: La estructura IF evala una condicin lgica y en funcin del resultado booleano (true o false) se realiza una u otra
expresin.

SINTAXIS:
IF <Condicin_Lgica>
<BEGIN>
<Expresiones_CondicinTrue>
<END>
ELSE
<BEGIN>
< Expresiones_CondicinFalse>
<END>

SQL 41
5. PROGRAMACIN Transact SQL. Instrucciones

EJEMPLO:
Cdigo que permite insertar un nuevo registro en la tabla INFOALMACEN. Si hay duplicidad en el nombre de un almacen
se muestra el mensaje de Almacn ya registrado, en caso contrario, se inserta dicho registro y se muestra el mensaje de
Almacn registrado correctamente.
INFOALMACEN
DECLARE @ventas INT=11,
@almacen VARCHAR(30)='Argelia,
@fecha DATE=03-FEB-2017

IF EXISTS(SELECT * FORM INFOALMACEN WHERE almacen=@almacen)


BEGIN
print Almacn ya registrado'
END
ELSE
BEGIN
INSERT INTO INFOALMACEN
VALUES (@almacen, @ventas, @fecha)
PRINT Almacn'
END
GO
SQL 42
5. PROGRAMACIN Transact SQL. Instrucciones

CASE: La estructura CASE evala una expresin que podr tomar N valores distintos. Segn se elija uno de estos valores se
tomar N posibles acciones

SINTAXIS:
CASE <Columna>
WHEN Expresin THEN Expresin_Resultado
[n]
[
ELSE Expresin_Falsa
]
END

SQL 43
5. PROGRAMACIN Transact SQL. Instrucciones

EJEMPLO:
Cdigo que permite mostrar abreviado el nombre de almacn de la tabla INFOALMACEN.

SELECT
CASE almacen
INFOALMACEN
WHEN Los Angeles' THEN LA'
WHEN San Diego' THEN SD
WHEN Boston THEN BT'
WHEN San Francisco' THEN SF'
ELSE
NINGUNO'
END
FROM INFOALMACEN
GO

SQL 44
5. PROGRAMACIN Transact SQL. Instrucciones

WHILE: La estructura WHILE hace repetir un nmero determinado de veces un conjunto de instrucciones en secuencia,
mientras la condicin por la cual se rige sea verdadera. Si en algn momento es falsa, el bucle se termina.

SINTAXIS:
WHILE condicin
BEGIN
<expresin repetida>
[BREAK]
<expression repetida>
[CONTINUE]
<expression repetida>
END

SQL 45
5. PROGRAMACIN Transact SQL. Instrucciones

EJEMPLO:
Cdigo que permite mostrar los 100 primeros nmero pares.

DECLARE @N INT=0

WHILE (@N<100)
BEGIN
SET @N=@N+2
PRINT 'Valor N: ' + CAST(@N AS CHAR(3))
END
GO

SQL 46
5. PROGRAMACIN Transact SQL. Procedimientos

PROCEDIMIENTOS ALMACENADOS:
Son un grupo de una o varias instrucciones Transact-SQL.
Los procedimientos se asemejan a las construcciones de otros lenguajes de programacin, porque pueden:
Aceptar parmetros de entrada y devolver varios valores en forma de parmetros de salida al programa que realiza la
llamada.
Contener instrucciones de programacin que realicen operaciones en la base de datos. Entre otras, pueden contener
llamadas a otros procedimientos.
Devolver un valor de estado a un programa que realiza una llamada para indicar si la operacin se ha realizado
correctamente o se han producido errores, y el motivo de stos.

Existen:

Procedimientos Definidos del sistema (comienzan con el prefijo sp_)


Procedimientos Definidos por el usuario.

SQL 47
5. PROGRAMACIN Transact SQL. Procedimientos

SINTAXIS:
CREATE PROCEDURE Nombre_Procedimiento EXEC Nombre_Procedimiento
@parmetro1 [tipo dato],
@parmetroN [tipo dato]
AS
INFOALMACEN
<Instrucciones>

EJEMPLO 1:
Procedimiento que muestra el total de registros por almacn en
la tabla INFOALMACEN.

CREATE PROCEDURE PROALMACEN


AS
SELECT alamcen, count(*) as Total Almacenes
FROM INFOALMACEN
GROUP BY almacen
GO
--Ejecutamos el procedimiento almacenado
EXEC PROALMACEN

SQL 48
5. PROGRAMACIN Transact SQL. Procedimientos

EJEMPLO 2:
Procedimiento que muestra el total de registros del almacn pasado
por parmetro en la tabla INFOALMACEN.

CREATE PROCEDURE PROALMACEN @alma


INFOALMACEN
AS
SELECT almacen, count(*) as Total Almacenes
FROM INFOALMACEN WHERE almacen=@alma
GROUP BY almacen
GO
--Ejecutamos el procedimiento almacenado
EXEC PROALMACEN San Diego

SQL 49
5. PROGRAMACIN Transact SQL. Procedimientos

EJEMPLO 3:
Procedimiento que devuelve el total de registros del almacn pasado
por parmetro en la tabla INFOALMACEN.

CREATE PROCEDURE PROALMACEN @alma, @totalalma OUTPUT


INFOALMACEN
INFOALMACEN
AS
SELECT @totalalma=count(*)
FROM INFOALMACEN WHERE almacen=@alma
GROUP BY almacen
GO
--Ejecutamos el procedimiento almacenado
DECLARE @tot INT=0
EXEC PROALMACEN San Diego, @tot INT OUTPUT
PRINT @tot

SQL 50
5. PROGRAMACIN Transact SQL. Funciones

FUNCIONES:
Al igual que las funciones de los lenguajes de programacin, las funciones definidas por el usuario son rutinas que aceptan
parmetros, realizan una accin, como un clculo complejo, y devuelven el resultado de esa accin como un valor. El valor
devuelto puede ser un valor escalar nico o un conjunto de resultados.

Existen:

Funciones Definidas por el sistema (SUM, AVG, etc.)


Funciones Definidas por el usuario. Una funcin definida por el usuario tiene de cero a varios parmetros de entrada y
devuelve un valor escalar o una tabla. Una funcin puede tener un mximo de 1024 parmetros de entrada, pero no
admiten parmetros de salida.

SQL 51
5. PROGRAMACIN Transact SQL. Funciones

SINTAXIS:
CREATE FUNCTION Nombre_Funcin dbo. Nombre_Funcion
(@parmetro1 as [Tipo Dato] = [ValorxDefecto],
@parmetroN as [Tipo Dato] = [ValorxDefecto])
RETURNS TipoDato_Returnado
AS
BEGIN
<Instrucciones>
RETURN Expresin_salida
END

SQL 52
5. PROGRAMACIN Transact SQL. Funciones

EJEMPLO 1:
Funcin que devuelve el promedio de dos nmeros ingresados por
el usuario.
CREATE FUNCTION calcularpromedio
(@valor1 as DECIMAL(10,2),@valor2 DECIMAL(10,2))
RETURNS DECIMAL(10,2)
AS
BEGIN
DECLARE @resultado DECIMAL(10,2)
SET @resultado=(@valor1+@valor2)/2
RETURN @resultado
END
GO

--Ejecutamos la funcin con un print y le enviamos


--los dos parmetros de entrada
PRINT 'Promedio: ' + cast(dbo.calcularpromedio(12,13) as Char(10))

SQL 53
5. PROGRAMACIN Transact SQL. Funciones

EJEMPLO 2:
Funcin de tabla que devuelve los registros de la tabla INFOALMACEN del almacn pasado por parmetro.

CREATE FUNCTION ffalma (@alma AS VARCHAR(30))


RETURNS TABLE
INFOALMACEN
AS
RETURN (SELECT almacen, ventas, fecha
FROM INFOALMACEN
WHERE almacen=@alma)
GO

--Ejecutamos la funcin con un select,


SELECT * FROM dbo.ffalma(Boston')
GO

SQL 54
5. PROGRAMACIN Transact SQL. Triggers

TRIGGERS:
Un trigger (disparador o desencadenador) es un tipo de procedimiento almacenado que se ejecuta automticamente
cuando se cumple una determinada condicin al realizar una operacin de insercin (INSERT), actualizacin (UPDATE) o
borrado (DELETE) en una tabla.
Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas.

La diferencia con los procedimientos almacenados del sistema es que, los triggers:

- No pueden ser invocados directamente


- No reciben y retornan parmetros
- Son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas

Los disparadores pueden hacer referencia a campos de otras tablas. Por ejemplo, puede crearse un trigger de insercin en
la tabla "ventas" que compruebe el campo "stock" de un artculo en la tabla "articulos.
Los disparadores se ejecutan DESPUES de la ejecucin de una instruccin "insert", "update" o "delete" en la tabla en la que
fueron definidos. Las restricciones se comprueban ANTES de la ejecucin de una instruccin "insert", "update" o "delete".
Por lo tanto, las restricciones se comprueban primero, si se infringe alguna restriccin, el desencadenador no llega a
ejecutarse.
Las siguientes instrucciones no estn permitidas en un desencadenador: create database, alter database, drop database.

SQL 55
5. PROGRAMACIN Transact SQL. Triggers

SINTAXIS:
CREATE TRIGGER Nombre_Trigger
ON Nombre-Tabla
FOR AFTER | INSTEAD OF
[INSERT] [,] [UPDATE] [,] [DELETE]
AS
<Instrucciones>

AFTER especifica que el desencadenador solo se activa cuando todas las operaciones especificadas en la instruccin SQL
desencadenadora se han ejecutado correctamente. Todas las acciones referenciales en cascada y las comprobaciones de
restricciones tambin deben ser correctas para que este desencadenador se activa. AFTER es el valor predeterminado
cuando solo se especifica la palabra clave FOR.

INSTEAD OF especifica que el desencadenador se ejecuta en lugar de la instruccin SQL desencadenadora, por lo tanto, el
reemplazo de las acciones de las instrucciones desencadenadoras.

SQL 56
5. PROGRAMACIN Transact SQL. Triggers

EJEMPLO 1:
Trigger que permite mostrar un mensaje cada vez que se inserte o actualice un registro en la tabla INFOALMACEN.

CREATE TRIGGER trmensaje_INFOALMACEN


ON INFOALMACEN
FOR INSERT, UPDATE
AS

PRINT Almacn actualizado correctamente'

GO
___________

UPDATE INFOALMACEN set almacen=Chicago'


WHERE ventas > 100000
GO

SQL 57
5. PROGRAMACIN Transact SQL. Triggers

EJEMPLO 2:
Trigger que permite crear una rplica de los registros insertados en la tabla INFOALMACEN mediante una nueva tabla
llamada INFOALMACEN_bak.

CREATE TRIGGER trreplica_INFOALMACEN


ON INFOALMACEN
FOR AFTER INSERT
AS

INSERT INFOALMACEN_bak SELECT * FROM INSERTED

GO
___________

INSERT INTO INFOALMACEN values (Texas',345,08-MAR-2017)

SQL 58
5. PROGRAMACIN Transact SQL. Triggers

EJEMPLO 3:
Trigger que permite controlar el registro de una venta. Se deber evaluar que el monto a registrar sea mayor que cero en
la columna ventas de la tabla INFOALMACEN.

CREATE TRIGGER trvalidaventa_INFOALMACEN


ON INFOALMACEN
FOR INSERT
AS
IF (SELECT ventas FROM INSERTED)<=0
BEGIN
ROLLBACK TRANSACTION
PRINT 'No puede registrar ventas Cero'
END
ELSE
PRINT Ventas registradas correctamente'
GO
___________

INSERT INTO INFOALMACEN values (Texas',345,08-MAR-2017)

SQL 59
5. PROGRAMACIN Transact SQL. Cursores

CURSORES:
Un cursor es un elemento que representar a un conjunto de datos determinado por una consulta SQL. El cursor permitir
recorrer fila a fila, leer y eventualmente modificar dicho conjunto de resultados.

La creacin y utilizacin de un cursor estar compuesta, por una serie de instrucciones SQL, las cuales podrn separarse en
grupos bien diferenciados: Declaracin, Apertura, Acceso a datos, Cierre y Desalojo.

DECLARACIN
Aqu se indica, junto con el nombre del cursor, la consulta que el mismo representar y algunas otras caractersticas.

SINTAXIS:
DECLARE Nombre_Cursor CURSOR
FOR SELECT campos FROM nombre_de_tabla

SQL 60
5. PROGRAMACIN Transact SQL. Cursores

APERTURA
La apertura del cursor ejecutar la consulta definida en el paso previo y cargar los datos en el mismo.

SINTAXIS:
OPEN Nombre_Cursor

ACCESO A DATOS (RECORRIDO)


Este paso constar de recorrer los resultados del cursor. Cada instruccin FETCH leer una fila. Las filas ledas podrn
copiarse a variables mediante la instruccin INTO.
En la sentencia el mapeo entre columnas del cursor y variables se realizar implcitamente, asignndose la primera columna
a la primera variable, la segunda columna a la segunda variable y as sucesivamente. Esto implica que debern crearse
tantas variables como columnas se definan en la declaracin del cursor y las mismas debern ubicarse en el mismo orden
que se encuentran definidas las columnas en la sentencia SELECT de la declaracin.

SINTAXIS:
FETCH NEXT FROM Nombre_Cursor INTO @variable

SQL 61
5. PROGRAMACIN Transact SQL. Cursores

Como cada sentencia FETCH leer un registro, para saber si existe un prximo o previo registro, o si hemos llegado al lmite,
ya sea superior o inferior, se utilizar una variable de SQL llamada @@FETCH_STATUS que tomar el valor 0 si la lectura del
registro ha sido correcta.

CIERRE DEL CURSOR


Con el cierre del cursor se liberarn los registros tomados por el mismo. Una vez que el cursor es cerrado ya no podr
recorrerse el conjunto de resultados hasta que el mismo sea reabierto.

SINTAXIS:
CLOSE Nombre_Cursor

DESALOJO DEL CURSOR


Este paso eliminar la referencia al cursor definido previamente, por lo que ya no ser posible realizar una reapertura del
mismo.

SINTAXIS:
DEALLOCATE Nombre_Cursor

SQL 62
5. PROGRAMACIN Transact SQL. Cursores

EJEMPLO 1:
Utilizacin de un cursor mediante el cual se recorrer la tabla PRODUCCION y mostrar por pantalla el valor del registro
Descripcion despus que el mismo ha sido copiado a la variable @Descripcion.

DECLARE @Descripcion AS nvarchar(400)


DECLARE Cursor_1 CURSOR FOR SELECT descripcion FROM PRODUCCION
OPEN Cursor_1
FETCH NEXT FROM Cursor_1 INTO @Descripcion
WHILE @@fetch_status = 0
BEGIN
DECLARE
PRINT ProdInfo CURSOR STATIC
@Descripcion DYNAMICFORFORSELECT..
SELECT.
FETCH NEXT FROM Cursor_1 INTO @Descripcion
END
CLOSE Cursor_1
DEALLOCATE Cursor_1

SQL 63
5. PROGRAMACIN Transact SQL. Cursores

Si mientras recorremos un cursor se actualiza la BBDD, los cambios se tomarn en cuenta o se ignorarn.
Este comportamiento depender del tipo de cursor a crearse y se determinar en el momento de su definicin.
Si queremos que automticamente asuma los cambios se definir como cursor dinmico. Si queremos que la actualizacin
(tanto como las inserciones y eliminaciones de registros) externas sean ignoradas hasta que el cursor sea reabierto,
definiremos el cursor como esttico.

SINTAXIS:

DECLARE Nombre_Cursor CURSOR DYNAMIC


FOR SELECT campos FROM nombre_de_tabla

DECLARE Nombre_Cursor CURSOR STATIC


FOR SELECT campos FROM nombre_de_tabla

SQL 64
5. PROGRAMACIN Transact SQL. Cursores

Existe la posibilidad de recorrer el cursor, no solo hacia adelante, sino tambin retroceder el cursor para acceder la fila
anterior a la actual.
Las sentencias FIRST, PRIOR, NEXT y LAST (en combinacin con la sentencia FETCH) perimirn acceder a la primera, previa,
prxima y ltima fila respectivamente. Por otra parte las opciones ABSOLUTE y RELATIVE permitirn avanzar o retroceder
una cantidad determinada de registros (en forma absoluta o relativa al registro actual) pudindose utilizar, adems de
constantes, variables del tipo smallint, tinyint o int para indicar la magnitud del desplazamiento.

SINTAXIS:

DECLARE @num AS INT = 2

DECLARE Nombre_Cursor CURSOR

FETCH NEXT FROM Cursor_1 INTO @Descripcion


FETCH PRIOR FROM Cursor_1 INTO @Descripcion
FETCH FIRST FROM Cursor_1 INTO @Descripcion
FETCH LAST FROM Cursor_1 INTO @Descripcion
FETCH RELATIVE -1 FROM Cursor_1 INTO @Descripcion
FETCH RELATIVE @num FROM Cursor_1 INTO @Descripcion

SQL 65
Jos Fco. Ortiz

SQL 66

Das könnte Ihnen auch gefallen