Beruflich Dokumente
Kultur Dokumente
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 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
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
SQL 7
3. DDL Lenguaje de Definicin de Datos
SINTAXIS:
DROP TABLE nombre_tabla;
EJEMPLO:
DROP TABLE CLIENTE ;
SINTAXIS:
DROP DATABASE nombre_basededatos;
EJEMPLO:
DROP DATABASE BBDD_DAM ;
SQL 8
3. DDL Lenguaje de Definicin de Datos
SINTAXIS:
DROP INDEX nombre_ndice ON nombre_tabla;
EJEMPLO:
DROP INDEX IDX_cliente ON CLIENTES ;
SINTAXIS:
TRUNCATE TABLE nombre_tabla;
EJEMPLO:
TRUNCATE TABLE ALUMNOS;
SQL 9
3. DDL Lenguaje de Definicin de Datos
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
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
SINTAXIS:
DELETE FROM nombre_tabla
WHERE condicin;
EJEMPLO:
DELETE FROM ALUMNO
WHERE apellido=Fernndez;
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
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
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
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
SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla;
SELECT * FROM nombre de tabla;
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:
SQL 17
4. DML Lenguaje de Manipulacin de Datos
SINTAXIS:
SELECT DISTINCT nombres de columnas FROM nombre de tabla;
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
SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE condicin;
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:
SQL 20
4. DML Lenguaje de Manipulacin de Datos
SINTAXIS:
SELECT nombres de columnas FROM nombre de tabla WHERE nombre de
columna BETWEEN valor1 AND valor2;
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;
SQL 22
4. DML Lenguaje de Manipulacin de Datos
SINTAXIS:
SELECT nombre de funcin( nombre de columna) FROM nombre de tabla;
SQL 23
4. DML Lenguaje de Manipulacin de Datos
FUNCIONES ARITMTICAS:
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
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
SINTAXIS:
SELECT nombres de columnas, FUNCION(nombre de columna) FROM nombre
de tabla GROUP BY nombre de columna;
SINTAXIS:
SELECT nombres de columnas, FUNCION(nombre de columna) FROM nombre
de tabla [GROUP BY nombre de columna] HAVING condicin;
JOIN: Se utiliza para combinar filas a partir de dos o ms tablas, basado en una columna que se encuentra entre ellos.
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
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.
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.
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
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:
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.
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.
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.
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:
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
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.
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:
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.
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.
GO
___________
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.
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
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.
SINTAXIS:
CLOSE Nombre_Cursor
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.
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:
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:
SQL 65
Jos Fco. Ortiz
SQL 66