You are on page 1of 61

Documento de apoyo al mdulo de Base de datos Relacional

Manual de SQL
Server 2016

DOCENTE: GABRIELA PEALOZA I. 1


Documento de apoyo al mdulo de Base de datos Relacional

TABLA CONTENIDO
MODULO 1: INTRODUCCIN A SQL SERVER
Que es SQL Server
Historia
Transact SQL
Caractersticas de SQL
Definicin del lenguaje (DDL DML)
Donde descargar SQL Server (2012,2014)

MODULO 2: DISEO DE LA BASE DE DATOS


Modelo E-R
o Entidad
o Relacin
o Atributos
Consideraciones de Diseo
Modelado de elementos de datos
Tablas
o Restricciones tablas
o Restricciones de Columnas
o Clave primaria
o Clave fornea

MODULO 3: CONSULTAS BSICAS


Recuperando datos con SELECT
Expresiones y operadores aritmticos
Cambiando orden de columnas
Clausula DISTINTC

MODULO 4: CONDICIONES DE BSQUEDA


Filtrando Datos
o WHERE
o BETWEEN
o IN
o LIKE
o VALORES NULL
o Operadores AND OR
Ordenamiento De Datos

MODULO5: AGRUPANDO Y RESUMIENDO DATOS


Funciones de Agregado
COUNT
MIN
MAX
SUM

DOCENTE: GABRIELA PEALOZA I. 2


Documento de apoyo al mdulo de Base de datos Relacional
AVG
GROUP BY descripcin y caractersticas
HAVING descripcin y caractersticas

MODULO 6: RELACIONANDO DATOS CON MULTIPLES TABLAS


Uso de JOINS
o INNER JOINS
o OUTER JOINS
o LEFT OUTER JOINS
o RIGHT JOINS
o FULL JOINS
o CROSS JOINS
o SELF JOINS
o UNION

MODULO 7: SUBCONSULTAS
Definicin de Subconsulta
Tipos de Subconsultas
o Subconsultas de una sola fila
o Subconsultas de mltiples filas

MODULO 8: MODIFICANDO DATOS


Clusula INSERT y UPDATE
Clusulas DELETE y TRUNCATE TABLE
Sentencia MERGE
BULK COPY

MODULO 9: PROGRAMACIN SQL


Batchs y scripts
Comando GO
Variables en SQL y su declaracin
o Tipos de variables
Control de Flujo
o Bloque BEGIN END
o Bloque IF
o WHILE, BREAK,
o CONTINUE
o GOTO
o Instruccin EXCECUTE
o Bloque CASE
Manejo de errores
o TRY CATCH
o RAISERROR
o PRINT
o Transacciones
o Tipos o Errores dentro de la Transaccin

DOCENTE: GABRIELA PEALOZA I. 3


Documento de apoyo al mdulo de Base de datos Relacional

o ROLLBACK y SAVE

MODULO 10: TRIGGERS Y PROCEDIMIENTOS


Creacin de TRIGGERS
Restricciones
o AFTER, INSTEAD OF TRIGGERS
o INSERT, DELETE, UPDATE TRIGGER
Definicin de Procedimiento Almacenado
Caractersticas y ventajas de los procedimientos
Tipos de procedimientos
Creacin y llamadas a procedimientos
Modificacin y eliminacin de procedimientos
Procedimientos con parmetros

MODULO 11: FUNCIONES Y CURSORES


Funciones Escalares
Funciones Tabulares
Cursores
Sentencias OPEN y FETCH
NEXT
PRIOR
FIRST
LAST
CLOSE
DEALLOCATE

DOCENTE: GABRIELA PEALOZA I. 4


Documento de apoyo al mdulo de Base de datos Relacional

SOBRE ESTE MANUAL


Este libro trata sobre el uso y administracin de SQL Server 2016, as como tambin al lenguaje de
consulta para la gestin de la base de datos. Se encuentra dirigido a estudiantes que deseen aprender SQL
con SQL Server, o a aquellos que requieran actualizar sus competencias sobre SQL Server 2016. De esta
manera podrn entender y dominar las funcionalidades que permiten disear y construir una base de
datos.

El objetivo que se persigue es mejorar el rendimiento y permitir la gestin de todos los datos de la
empresa con los que los usuarios trabajan habitualmente, as como tambin ampliar el conocimiento
bsico de aquellos usuarios que han logrado instruirse de manera sutil en el mundo de las bases de datos.

DOCENTE: GABRIELA PEALOZA I. 5


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 1: INTRODUCCIN A SQL SERVER

HISTORIA SQL

Empieza con la primera versin, que fue desarrollada en los laboratorios de IBM por Andrew Richardson,
Donald C. Messerly y Raymond F. Boyce, a comienzos de los aos 70, viendo la luz en 1974. Se basaron en
el modelo relacional de datos para grandes bancos de datos compartidos de Edgar Frank Cood.
A esta versin le llamaron SEQUEL, Structured English QUEry Language, y fue diseada para acceder y
manejar los datos de la base de datos System R de IBM. Las experimentaciones con este prototipo
condujeron, entre 1976 y 1977, a una revisin del lenguaje (SEQUEL/2), que a partir de ese momento
cambi de nombre por motivos legales, convirtindose en SQL.

El prototipo (System R), basado en este lenguaje, se utiliz internamente en IBM y lo adoptaron algunos
de sus clientes elegidos. Gracias al xito de este sistema, que no estaba todava comercializado, tambin
otras compaas empezaron a desarrollar sus productos relacionales basados en SQL.

Fue en 1986, cuando el ANSI (American National Estndar Institute) adopt SQL como estndar para los
lenguajes relacionales, que en 1987 se transform en estndar ISO.

QU ES UNA BASE DE DATOS?

Una base de datos est constituida por un conjunto de informacin relevante para una empresa o
entidad incluyendo los procedimientos para almacenar, controlar, gestionar y administrar esa
informacin. Adems, la informacin contenida en una base de datos cumple una serie de
requisitos o caractersticas:

Los datos estn interrelacionados, sin redundancias innecesarias.


Los datos son independientes de los programas que los usan.
Se emplean mtodos determinados para incluir datos nuevos y para borrar, modificar o recuperar
los datos almacenados.

QU ES UN SGBD O SISTEMA DE GESTIN DE BASE DE DATOS?

Un Sistema de Gestin de Bases de Datos (SGBD) es una aplicacin comercial que permite construir
y gestionar bases de datos, proporcionando al usuario de la Base de Datos las herramientas
necesarias para realizar, al menos, las siguientes tareas:

Definir las estructuras de los datos.


Manipular los datos. Es decir, insertar nuevos datos, as como modificar, borrar y consultar los
datos existentes.
Mantener la integridad de la informacin.
Proporcionar control de la privacidad y seguridad de los datos en la Base de Datos, permitiendo
slo el acceso a los mismos a los usuarios autorizados.

DOCENTE: GABRIELA PEALOZA I. 6


Documento de apoyo al mdulo de Base de datos Relacional

La herramienta ms difundida para realizar todas estas tareas es el lenguaje SQL.


Algunos de los productos comerciales ms difundidos son:
ORACLE de Oracle Corporation.
DB2 de I.B.M. Corporation
SYBASE de Sybase Inc.
Informix de Informix Software Inc.
SQL Server de Microsoft Corporation.

USO DEL LENGUAJE

En este manual se dar a conocer el uso del lenguaje DML (Sentencias de manipulacin de datos),
las cuales se utilizan para:
Recuperar informacin. (SELECT)
Actualizar la informacin:
Aadir filas (INSERT)
Eliminar filas (DELETE)
Modificar filas (UPDATE)

As como tambin se mostrara las sentencias DDL (Sentencias de definicin de datos, las cuales se
utilizan para:

Crear objetos de base de datos (CREATE)


Eliminar objetos de base de datos (DROP)
Modificar objetos de base de datos (ALTER)

DOCENTE: GABRIELA PEALOZA I. 7


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 2: DISEO DE LA BASE DE DATOS

El carcter formal del modelo relacional hace relativamente sencilla su representacin y gestin
por medio de herramientas informticas. No es casual, pues, que haya sido elegido como
referencia para la construccin de la gran mayora de los Sistemas de Gestin de Bases de Datos
comerciales disponibles en el mercado.

El modelo relacional se basa en el concepto matemtico de relacin. En este modelo, la


informacin se representa en forma de tablas o relaciones, donde cada fila de la tabla se
interpreta como una relacin ordenada de valores (un conjunto de valores relacionados entre
s).

El hecho de que los SGBDR (Sistemas gestores de base de datos) respeten el modelo relacional
permite trabajar con una estructura lgica de la organizacin de los datos (tablas, vistas,
ndices), independiente de la estructura fsica (archivos, etc.). Cada SGBDR debe proporcionar
una vista lgica al usuario, que garantice un almacenamiento fsico de la informacin.

Esta restriccin es, al mismo tiempo, la fortaleza de los SGBDR, ya que la gestin de los datos
desde un punto de vista lgico, simplifica mucho su uso. De esta manera, los usuarios poco o
nada acostumbrados a desarrollar aplicaciones se pueden iniciar sin problemas en SQL.

COMPONENTES.

Como dijimos anteriormente, el modelo relacional de base de datos organiza y representa los
datos mediante entidades. A continuacin se muestra una tabla que compara la terminologa
utilizada en las bases de datos relacionales y sus alternativas, que permiten entender fcilmente
sus componentes.

Tablas: Las tablas, tambin llamada relaciones, son los pilares esenciales de cualquier base de datos, ya que
almacenan los datos. Una base de datos debera tener una tabla distinta para cada asunto principal, como
registros de empleados, pedidos de clientes, mtodos de entrega, proveedores, etc.
No deben duplicarse los datos en varias tablas. Esto es un error comn fcil de evitar si se estructuran bien
las tablas.
Todas las tablas estn organizadas en Filas, y columnas, tal como se muestra en la siguiente imagen, en la
cual se crea una tabla vaca, que permite guardar los datos de un paciente.

DOCENTE: GABRIELA PEALOZA I. 8


Documento de apoyo al mdulo de Base de datos Relacional

Registros (tuplas): Una tupla o registro es un conjunto de hechos acerca de una persona, de un evento o de
cualquier otro elemento de inters. Por ejemplo el Cliente Daniel Berrios y su direccin y fecha de
nacimiento. Cada tupla o registro contiene los valores que toma cada uno de los campos de un elemento
de la tabla. En una base de datos bien estructurada, cada tupla o registro debe ser nico. Es decir, no deben
existir dos o ms registros que contengan exactamente la misma informacin.
En la siguiente imagen, se muestra enmarcado el registro de un paciente.

Campos (atributos): Los campos de la base de datos tienen valores que determinan el tipo de datos que
pueden almacenar, cmo se muestran los datos y qu se puede hacer con ellos. Un valor importante para
los campos es el tipo de datos, que puede ser nmero, texto, moneda (dinero), fecha, hora, etc. El tipo de
datos limita y describe la clase de informacin del campo. Tambin determina las acciones que se pueden
realizar en el campo y la cantidad de memoria que utilizan los datos.

CREAR TABLAS.

En el men del costado, se encuentran las carpetas que permiten que el sistema de base de dato funcione.
En la carpeta databases (Base de datos), se encuentran aquellas creadas por defecto y las que
procederemos a generar.

DOCENTE: GABRIELA PEALOZA I. 9


Documento de apoyo al mdulo de Base de datos Relacional

Para eso daremos click derecho y seleccionaremos New databases.

DOCENTE: GABRIELA PEALOZA I. 10


Documento de apoyo al mdulo de Base de datos Relacional

Luego, le daremos un nombre relacionado al contenido de nuestra base de datos.


Para el ejemplo, crearemos una base de datos que permita el almacenado de datos de una clnica.

DOCENTE: GABRIELA PEALOZA I. 11


Documento de apoyo al mdulo de Base de datos Relacional

Como veremos, se han creado todas las carpetas necesarias para el buen funcionamiento de la BD, las
cuales van a ser vistas, a medida que sean requeridas para este manual.
Para comenzar a realizar las tablas, se debe ir a la carpeta tables (tablas) ubicada en la lista del costado, y
daremos click derecho y seleccionaremos new, y luego table.
Al abrir la tabla se nos desplegar una ventana que permite el ingreso de las columnas de una tabla.
Siguiendo el ejemplo de la creacin de la base de datos para una clnica, procederemos a crear una tabla
para el registro de pacientes, en la cual lo dejaremos de la siguiente manera:

DOCENTE: GABRIELA PEALOZA I. 12


Documento de apoyo al mdulo de Base de datos Relacional

*Para este caso, es posible utilizar el rut como PK, sin embargo, por un tema de orden en la creacin de
tablas, dejaremos la PK como id_nombreDeTabla.

TIPOS DE CLAVES
Se puede considerar de una clave:
1-. Es un atributo o conjunto de atributos cuyos valores distinguen a un registro en una tabla.
2.- Una clave es el conjunto mnimo de atributos cuyos valores le dan una identificacin nica a la tupla en
la relacin.
3.- Una clave es una referencia que se utiliza para identificar los registros de forma nica y est formada
por uno o ms campos de los registros.

Clave primaria o principal.- Es un identificador nico para cada registro. No puede contener
entradas nulas. Para cada registro de una relacin se utiliza un identificador nico, denominado
clave primaria o clave principal. Para elegir un campo de una tabla como clave primaria debe
cumplir con las siguientes caractersticas:
o Deber seleccionarse la que ocupe un menor espacio de almacenamiento.
o Tener una codificacin sencilla.
o El contenido de sus valores deben ser conocido y no variar.
o No debe tener valores nulos.
o Podr utilizarse en otras tablas para construir interrelaciones.
o Deben ser fcilmente recordables por el usuario. Por ejemplo, si se tiene una tabla con
2500 procedimientos de una clnica, podramos poner un id_procedimiento como clave
principal. Esto significa que si proporcionamos la clave principal la base de datos puede
encontrar al registro que contenga la clave proporcionada. Cada procedimiento tiene un

DOCENTE: GABRIELA PEALOZA I. 13


Documento de apoyo al mdulo de Base de datos Relacional
identificador nico, as como cada ciudadano tiene un RUT nico, diferente del de todos
los dems. La clave principal debe ser una informacin que no cambie con frecuencia.
En la imagen anterior, se puede apreciar que se identific la Primary key como id_paciente,
la cual se agrega haciendo click derecho en la columna en vista diseo, y luego dando click
en set primary key, (establecer clave principal).

Clave externa: Define una columna o combinacin de columnas cuyos valores coinciden con la clave
principal de la misma u otra tabla. Permite la declaracin de la llave fornea.

DOCENTE: GABRIELA PEALOZA I. 14


Documento de apoyo al mdulo de Base de datos Relacional

TIPOS DE DATOS
En SQL Server, cada columna, variable local, expresin y parmetro tiene un tipo de datos relacionado. Un
tipo de datos es un atributo que especifica el tipo de datos que el objeto puede contener: datos de
enteros, datos de caracteres, datos de moneda, datos de fecha y hora, cadenas binarias, etc.
Los tipos de datos en SQL Server estn organizados en las siguientes categoras:

Numricos exactos Cadenas de caracteres Unicode

Numricos aproximados Cadenas binarias

Fecha y hora Otros tipos de datos

Cadenas de caracteres

TIPO DE DATO DE CARCTER

Tipo de datos
Datos de caracteres de longitud fija hasta un mximo
Char(n) de 8,000 caracteres. Longitud definida de 1 byte
Nchar(n) Datos de caracteres Unicode de longitud fija. Longitud definida 2 bytes
Dato de caracteres de longitud variable hasta un
VarChar(n) mximo de 8,000 caracteres. 1 byte por caracter
Datos de caracteres de longitud variable hasta un
VarChar(max) mximo de 2gb 1 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(n) hasta un mximo de 8,000 caracteres 2 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(max) hasta un mximo de 2GB. 2 byte por caracter
Text Datos de caracteres de longitud variable 1 byte por caracter
nText Datos de caracteres Unicode de longitud variable 2 byte por caracter
Tipo de dato usado para nombre de tablas o
Sysname columnas equivale a nvarchar(128) 2 byte por caracter

DOCENTE: GABRIELA PEALOZA I. 15


Documento de apoyo al mdulo de Base de datos Relacional

TIPO DE DATO NUMERICO

Tipo de datos
Bit Datos enteros con valor 1 0 1 bit
Tinyint Enteros desde 0 a 255 1 byte
Smallint Enteros desde -32,768 a 32,767 2 byte
Int Enteros desde -2,147,483,648 a 2,147,483,647 4 byte
Bigint Enteros desde -2 63 a 2 63-1 8 byte
Varia acorde con el
Decimal or Numeric Nmeros de precisin exacta hasta -10 38 + 1 tamao
Money Nmeros desde -2 63 a 2 63, 8 byte
SmallMoney Nmeros desde -214,748.3648 a +214,748.3647 4 byte
Nmeros con precisin de coma flotante desde -1.79E + 308 a
Float 1.79E + 308, dependiendo del bit de precisin . 4 o 8 bytes
Real Flotante con 24-bit de precisin 4 byte

TIPO DE DATO FECHA

Ajuste
Tamao de
de
Tipo de datos Formato Intervalo almacenamiento
zona
(bytes)
horaria

De 00:00:00.0000000 a
Time hh:mm:ss[.nnnnnnn] 23:59:59.9999999 De 3 a 5 No
Date AAAA-MM-DD De 0001-01-01 a 9999-12-31 3 No
Smalldatetime AAAA-MM-DD hh:mm:ss De 1900-01-01 a 2079-06-06 4 No
AAAA-MM-DD
Datetime hh:mm:ss[. nnn] De 1753-01-01 a 9999-12-31 8 No
AAAA-MM-DD De 0001-01-01 00:00:00.0000000 a
datetime2 hh:mm:ss[.nnnnnnn] 9999-12-31 23:59:59.9999999 De 6 a 8 No
AAAA-MM-DD
hh:mm:ss[.nnnnnnn] [+|- De 0001-01-01 00:00:00.0000000 a
Datetimeoffset ]hh:mm 9999-12-31 23:59:59.9999999 (en UTC) De 8 a 10 Si

DOCENTE: GABRIELA PEALOZA I. 16


Documento de apoyo al mdulo de Base de datos Relacional

Los tipos de datos son definidos al momento de crear la tabla y agregar las columnas, tal como se muestra
en la imagen.

Tipo de datos

DOCENTE: GABRIELA PEALOZA I. 17


Documento de apoyo al mdulo de Base de datos Relacional

EJERCICIOS MODULO 2
Para la base de datos creada en los ejemplos, genere los siguientes ejercicios que permitirn
almacenar ms informacin importante para la clnica. Se muestran imgenes para que usted sepa
cmo debera quedar su BD.
1) Genere tablas que permitan guardar los datos de ficha_clinica, personal, tipos de personal
(considerando que un paciente puede ser atendido por mdicos, enfermeras, tec, en
enfermera, auxiliares, etc.).
2) Verifique su clave primaria para cada tabla, as como tambin las secundarias. Cada
columna debe contar con el tipo de datos correspondiente, y as permitir el correcto
ingreso de los datos.

DOCENTE: GABRIELA PEALOZA I. 18


Documento de apoyo al mdulo de Base de datos Relacional

3) Inserte datos para cada tabla (al menos 5 filas) por tabla.

DOCENTE: GABRIELA PEALOZA I. 19


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 3: CONSULTAS BSICAS


Las peticiones para actuar sobre los datos se expresan mediante sentencias. stas deben escribirse de
acuerdo con las reglas sintcticas y semnticas del lenguaje.
Permiten enunciar operaciones sobre tablas. Existen varios tipos segn el tipo de operacin que expresan,
por lo que a continuacin se aprecia un cuadro con las categoras de consultas.

Sentencias que permiten realizar consultas y


DML Lenguaje de Manipulacin de
actualizaciones de datos (insercin, borrado y
Datos (Data Manipulation
modificacin de filas): SELECT, INSERT, UPDATE,
Language)
DELETE.

DDL Lenguaje de Definicin de Sentencias que permiten definir nuevos objetos


Datos (Data Definition Language) (tablas, ndices, claves, etc) o destruir los ya
existentes: CREATE, DROP, ALTER. o DCL.

Sentencias de Control de Datos Sentencias que permiten controlar aspectos varios,


(Data Control Language) como, por ejemplo, la autorizacin de acceso a los
datos: GRANT, REVOKE.

ACCEDER AL EDITOR DE CONSULTAS


Para generar consultas en nuestra Base de datos, se debe abrir un editor de consultas, el cual permitir
ejecutar las acciones que se requieran. Para ello, en el men superior, se selecciona new query (nueva
consulta).

DOCENTE: GABRIELA PEALOZA I. 20


Documento de apoyo al mdulo de Base de datos Relacional

Tambin es posible abrirlo desde las carpetas del costado, dando click derecho sobre la BD creada y
seleccionando new query (nueva consulta).

Otros botones:

Ejecuta la consulta realizada.

Muestra la base de datos sobre la cual se realizan las consultas.

Permite guardar la consulta

DOCENTE: GABRIELA PEALOZA I. 21


Documento de apoyo al mdulo de Base de datos Relacional

Permite abrir otras consultas

SELECT
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases
de datos. Esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en una
nueva tabla.
La sintaxis ms sencilla de una consulta de seleccin es la siguiente:

SELECT columna1, columna2, columna3 FROM nombre de tabla

En este caso extrae la informacin de la columna 1,2 y 3 de la tabla.


Por ejemplo, la consulta SELECT Nombre, Telfono FROM Clientes; devuelve una tabla temporal con los
campos nombre y telfono de la tabla clientes.
Utilizando nuestra tabla de paciente de la BD clnica creada, extraeremos el nombre mediante la consulta
select.

Si lo que se requiere es mostrar todas las columnas existentes en una tabla, entonces, reemplazaremos el
nombre de las columnas por el smbolo asterisco, como se muestra en la sintaxis:

SELECT * FROM nombre


de tabla

Utilizando el ejemplo anterior, nuestra consulta quedara SELECT * FROM PACIENTE.

DOCENTE: GABRIELA PEALOZA I. 22


Documento de apoyo al mdulo de Base de datos Relacional

ORDER BY
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas
mediante la clusula ORDER BY. Su sintaxis sera:

ORDER BY
lista_de_columnas

Donde Lista-campos representa los campos a ordenar. Por ejemplo, la consulta:


SELECT Nombre, edad FROM paceinte ORDER BY Nombre.
Devuelve los campos Nombre y edad de la tabla paciente ordenados por el campo Nombre. Se pueden
ordenar los registros por ms de un campo.
Por ejemplo:
SELECT Nombre, edad FROM Clientes ORDER BY Nombre, edad;
Incluso se puede especificar el orden de los registros: ascendente mediante la clusula ASC (valor por
defecto) o descendente DESC. Por ejemplo:
SELECT Nombre, edad FROM paciente ORDER BY nombre DESC;

CONSULTAS CON PREDICADO (ALL, TOP, DISTINCT)


En cuanto al conjunto de registros seleccionados, estos modificadores, que se incluyen entre SELECT y el
primer nombre del campo a recuperar, provocan las siguientes acciones:
ALL: Devuelve todos los campos de la tabla (valor por defecto).
TOP Devuelve un determinado nmero de registros de la tabla.

DISTINCT Omite repeticiones de registros cuyos campos seleccionados coincidan totalmente.


DISTINCTROW Omite repeticiones de registros basndose en la totalidad del registro y no slo en
los campos seleccionados.
ALL Es el valor por defecto. El Motor de base de datos selecciona todos los registros que cumplen las
condiciones de la instruccin SQL. No es conveniente abusar de este predicado ya que obligamos al motor
de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho
ms rpido indicar el listado de campos deseados. Se suele sustituir por el smbolo * .
Por ejemplo:
SELECT ALL FROM paciente;

DOCENTE: GABRIELA PEALOZA I. 23


Documento de apoyo al mdulo de Base de datos Relacional
TOP Devuelve un cierto nmero de registros que corresponden al principio o al final de un rango
especificado por una clusula ORDER BY. Por ejemplo, supongamos que queremos recuperar los nombres
de los 25 paciente con menor edad.
Para ello, emplearemos la consulta:

SELECT TOP 25 Nombre, edad FROM paciente ORDER BY edad DESC;

El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la edad de Gabriela y Pedro son
iguales, la consulta devolver 26 registros en lugar de 25. (Ntese que para la BD dato ejemplo slo de
cuentan con 5 registros, por lo tanto esa es la cantidad mxima de registros a mostrar).
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Por ejemplo, varios
pacientes listados en la tabla paciente pueden tener la misma edad. Si dos registros contienen 23 en el
campo edad, la siguiente instruccin SQL devuelve un nico registro:
SELECT DISTINCT edad FROM paciente;

DOCENTE: GABRIELA PEALOZA I. 24


Documento de apoyo al mdulo de Base de datos Relacional

AS
En determinadas circunstancias es necesario asignar un nombre nuevo a alguna columna determinada de
un conjunto de registros devuelto por una consulta. Para ello, usaremos la palabra reservada AS, que se
encarga de asignar el nombre que deseamos a la columna deseada.
En este ejemplo, asignamos el nombre edad_paciente a la columna de edad con AS.

DOCENTE: GABRIELA PEALOZA I. 25


Documento de apoyo al mdulo de Base de datos Relacional

EJERCICIOS MODULO 3

1) Listar todos los pacientes.


select * from paciente

2) Mostrar slo los nombres y enfermedades importantes de pacientes.


select nombre, [Enfermedades previas] from paciente

3) Mostrar slo los pacientes que tienen sangre de tipo AB positivo.


select nombre from paciente

where Tipo_sangre= 'AB positivo'

4) Mostrar los nombres y edades de pacientes que sean mayores de 18 aos.


select nombre, edad from paciente

where edad> 18

5) Hallar el promedio de las edades de los pacientes.


select avg(edad) from paciente

6) Mostrar el nombre y edad de pacientes, ordenados por edades.


select nombre, edad from paciente
order by edad

DOCENTE: GABRIELA PEALOZA I. 26


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 4: CONDICIONES DE BUSQUEDA

CRITERIOS DE SELECCIN
Los mtodos empleados hasta el momento para de recuperar un conjunto de registros de una tabla
devuelven todos los registros de la tabla. A continuacin, se estudiarn las posibilidades de filtrar los
registros con el fin de recuperar solamente aquellos que cumplan ciertas condiciones preestablecidas.
Antes de comenzar debemos tener presente que:
Cada vez que se desee establecer una condicin referida a un campo de texto la condicin de bsqueda
debe ir encerrada entre comillas simples.
Las fechas se deben escribir siempre encerrada entre almohadillas comilla simple. Por ejemplo, si deseamos
referirnos al da 3 de septiembre de 1995 debemos escribir: 03/09/1995 1995/09/03. A continuacin,
un ejemplo con la fecha para ambas escrituras de fecha.

FILTRAR DATOS

Algunos operadores lgicos soportados por SQL son: AND, OR y NOT. Los dos primeros poseen la sintaxis:

expresin1 operador expresin2

En donde expresin1 y expresin2 son las condiciones que evaluar, el resultado de la operacin vara en
funcin del operador lgico. Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT
el resultado de la operacin ser el contrario al devuelto sin el operador NOT.

Por ejemplo, considrense las consultas:

SELECT * FROM paciente WHERE Edad > 25 AND Edad < 50;

DOCENTE: GABRIELA PEALOZA I. 27


Documento de apoyo al mdulo de Base de datos Relacional

SELECT * FROM paciente WHERE (Edad > 25 AND Edad < 50) OR nombre = Gabriela Pealoza

El operador BETWEEN se utiliza para indicar que deseamos recuperar los registros segn el intervalo de
valores de un campo. Su sintaxis es:

campo BETWEEN valor1 And valor2

En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo
valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos
en el intervalo.

Por ejemplo:

SELECT * FROM paciente WHERE edad BETWEEN 15 AND 23;

(Devuelve los pacientes cuya edad esta entre 15 y 23 aos.

SELECT * FROM paciente WHERE edad NOT BETWEEN 15 AND 23;

DOCENTE: GABRIELA PEALOZA I. 28


Documento de apoyo al mdulo de Base de datos Relacional

LIKE
El operador like Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su
sintaxis es:

Expresin LIKE dato_buscado

Donde expresin es un campo, y dato_buscado es un patrn contra el que se compara la expresin. Se


puede utilizar el operador LIKE para encontrar valores en los campos que coincidan con el modelo
especificado. Como dato_buscado, se puede especificar un valor completo (Gabriela Pealoza), o bien se
pueden utilizar caracteres comodines como los reconocidos por el sistema operativo para encontrar un
rango de valores (por ejemplo, LIKE Ga%).

Ejemplo:

SELECT * FROM paciente where nombre LIKE Ga%

IN

EL operador in devuelve los registros cuyo campo indicado coincide con alguno de los dados en una lista.
Su sintaxis es:

expresin [NOT] IN (valor1, valor2, . . .)

Por ejemplo:

SELECT * FROM paciente WHERE edad IN (23);

DOCENTE: GABRIELA PEALOZA I. 29


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 5: AGRUPANDO Y RESUMIENDO DATOS

Transact SQL pone a nuestra disposicin mltiples funciones agregadas, las ms comunes que usaremos
son:

COUNT
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente:

COUNT(campos)

En donde campos contiene el nombre del campo que desea contar. Los operandos de campos pueden
incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o
definida por el usuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de
datos incluso texto. Count simplemente cuenta el nmero de registros sin tener en cuenta qu valores se
almacenan en los registros. La funcin Count no cuenta los registros que tienen campos null a menos que
el campo sea el carcter comodn asterisco (*).

Ejemplo:

SELECT COUNT(edad) FROM paciente.

SELECT COUNT(*) FROM paciente.

DOCENTE: GABRIELA PEALOZA I. 30


Documento de apoyo al mdulo de Base de datos Relacional

MAX Y MIN

Devuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especifico de una


consulta. Su sintaxis es:

Min(expresin) Max(expresin)

En donde expresin es el campo sobre el que se desea realizar el clculo. expresin pueden incluir el
nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrinseca o definida por
el usuario pero no otras de las funciones agregadas de SQL).

Ejemplo:

SELECT Min(edad) AS Mnimo FROM paciente

Devuelve cul es la edad mnima de los pacientes de la clnica.

DOCENTE: GABRIELA PEALOZA I. 31


Documento de apoyo al mdulo de Base de datos Relacional

SELECT Max(edad) AS Maximo FROM paciente

Devuelve cul es la edad mnima de los pacientes de la clnica.

SUM

Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta.

Su sintaxis es:

SUM(expresion)

En donde expresin representa el nombre del campo que contiene los datos que desean sumarse o una
expresin que realiza un clculo utilizando los datos de dichos campos.

Ejemplo:

SELECT SUM(edad) FROM paciente.

DOCENTE: GABRIELA PEALOZA I. 32


Documento de apoyo al mdulo de Base de datos Relacional

Se realiza la suma de todas las edades ingresadas.

AVG
Calcula el promedio de un conjunto de valores contenidos en un campo especificado de una consulta. Su
sintaxis es:

Avg(expresin)

En donde expresin representa el campo que contiene los datos numricos para los que se desea calcular
el promedio. La funci6n Avg no incluye ningn campo Null en el cIculo.
Ejemplo:
SELECT AVG(edad) FROM paciente
Esta consulta obtiene como resultado el promedio de todas las edades de la tabla paciente.

DOCENTE: GABRIELA PEALOZA I. 33


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 6: RELACIONANDO DATOS CON MULTIPLES TABLAS


Las vinculaciones entre tablas se realizan mediante la clusula INNER que combina registros de dos tablas
siempre que haya concordancia de valores en un campo comn.

INNER JOIN

Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin por
equivalencia, conocida tambin como unin interna. Las combinaciones equivalentes son las ms comunes;
stas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo comn
a ambas tablas.

Su sintaxis es:

SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2

Tabla1 y tabla2 son los nombres de las tablas desde las que se combinan los registros. Campo1 y campo2
Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser del mismo
tipo de datos y contener el mismo tipo de datos, pero no es necesario que posean el mismo nombre. Comp
es cualquier operador de comparacin relacional: =, <,<>, <=, =>, >.

En nuestra base de datos de clnica, supongamos que necesitamos unir las tablas de paciente y atencin.
Para ello realizaremos la siguiente consulta:

DOCENTE: GABRIELA PEALOZA I. 34


Documento de apoyo al mdulo de Base de datos Relacional
SELECT paciente.nombre, Atencion.Fecha_atencin from paciente inner join Atencion on
paciente.id_paciente= Atencion.id_paciente

OUTER JOIN

una operacin outer join arroja todas las filas coincidentes y alguna o todas las filas no coincidentes,
dependiendo del tipo de outer join que se cree. SQL soporta tres tipos de outer joins:

Left Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la izquierda (la
tabla a la izquierda de la palabra clave JOIN).

Right Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la derecha (la
tabla a la derecha de la palabra clave JOIN).

Full Arroja todas las filas coincidentes y todas las filas no coincidentes de ambas tablas.

DOCENTE: GABRIELA PEALOZA I. 35


Documento de apoyo al mdulo de Base de datos Relacional
Una operacin outer join sigue la misma sintaxis que una operacin inner join, slo que en lugar de utilizar
las palabras clave INNER JOIN (o solamente la palabra clave JOIN), se aplica LEFT OUTER JOIN, RIGHT OUTER
JOIN o FULL OUTER JOIN. Observe que la palabra clave OUTER es opcional. Por ejemplo, se puede especificar
LEFT JOIN en lugar de LEFT OUTER JOIN.

CROSS JOIN

DOCENTE: GABRIELA PEALOZA I. 36


Documento de apoyo al mdulo de Base de datos Relacional
SQL soporta otro tipo de operacin llamada cross join. Esta operacin es prcticamente idntica a la
operacin join separada por comas. La nica diferencia es que, en lugar de separar los nombres de columna
con una coma, se utilizan las palabras clave CROSS JOIN. Por ejemplo, tomemos una instruccin que se
utiliz anteriormente y modifiqumosla reemplazndola con las palabras clave CROSS JOIN:

DOCENTE: GABRIELA PEALOZA I. 37


Documento de apoyo al mdulo de Base de datos Relacional

UNION.

La clusula UNION permite unir dos o ms conjuntos de resultados en uno detrs del otro como si se tratase
de una nica tabla. De este modo podemos obtener los registros de ms de una tabla "unidos".

Para utilizar la clusula UNION debemos cumplir una serie de normas.

Las consultas por unir deben tener el mismo nmero campos, y adems los campos deben ser del
mismo tipo.

Slo puede haber una nica clausula ORDER BY al final de la sentencia SELECT.

DOCENTE: GABRIELA PEALOZA I. 38


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 7: SUBCONSULTAS
L as subconsultas, al igual que las operaciones join, proporcionan una forma de acceder a datos en mltiples
tablas con una sola consulta. Una subconsulta puede agregarse a una instruccin SELECT, INSERT, UPDATE
o DELETE para permitir a esa instruccin utilizar los resultados de la consulta arrojados por la subconsulta.
La subconsulta es esencialmente una instruccin SELECT incrustada que acta como una puerta de entrada
a los datos en una segunda tabla. Los datos arrojados por la subconsulta se utilizan como la instruccin
primaria para cumplir cualquier condicin que haya sido definida en la instruccin. En este captulo se
discutir cmo se utilizan las subconsultas en diferentes instrucciones, particularmente en instrucciones
SELECT, y se proporcionarn ejemplos que demuestren cmo crear subconsultas y qu tipo de resultados
de consulta esperar.

Se pueden dividir las subconsultas de una clusula WHERE en dos categoras generales: aquellas que
pueden arrojar mltiples filas y aquellas que pueden arrojar solamente un valor. En esta seccin se analizar
la primera de estas categoras. En la siguiente seccin, Crear subconsultas que arrojan un solo valor, se
analizar la segunda categora. Mientras se expande cada tema, sin duda usted reconocer los formatos de
instruccin desde la discusin de los predicados. A pesar de que esta informacin pudiera parecer un poco
repetitiva (es por eso que se tocar de manera breve), se presenta aqu no solamente para proporcionar
un repaso cohesivo de las subconsultas, sino tambin para proporcionar una perspectiva diferente. En otras
palabras, en lugar de mirar las subconsultas a travs de la perspectiva del predicado, miraremos
directamente a la subconsulta en s.

UTILIZANDO IN
El predicado IN compara valores de una columna en la tabla primaria con valores arrojados por la
subconsulta. Si el valor de la columna se encuentra en los resultados de la subconsulta, esa fila (de la tabla
primaria) se arroja en los resultados de la consulta de la instruccin SELECT. Como ejemplo:

DOCENTE: GABRIELA PEALOZA I. 39


Documento de apoyo al mdulo de Base de datos Relacional

Como se ve en el ejemplo anterior, se extraen las atenciones realizadas a un paciente en especfico,


buscando por el nombre (dato que por supuesto, no se encuentra en la tabla atenciones.)

EXISTS

En algunas circunstancias se puede requerir que la subconsulta arroje solamente un valor de verdadero o
falso. El contenido de los datos en s mismo no es importante, en trminos de cumplir con la condicin de
un predicado. En este caso, se puede utilizar un predicado EXISTS para definir la subconsulta. El predicado
EXISTS se evala como verdadero si una o ms filas son arrojadas por la subconsulta; de otra manera, se
evala como falso. Para que un predicado EXISTS sea de utilidad, la subconsulta asociada deber incluir una
condicin de bsqueda que haga coincidir los valores en las dos tablas que estn siendo vinculadas a travs
de la subconsulta.

En la instruccin, cada fila arrojada por la instruccin SELECT principal se evala con la subconsulta. Si la
condicin especificada en el predicado EXISTS es verdadera, la fila se incluye en los resultados de la
consulta; de otra manera, la fila es omitida. Cuando la condicin especificada es verdadera, eso significa
que al menos una fila ha sido arrojada por la subconsulta.

SUBCONULTA PARA MODIFICAR DATOS.


Una instruccin INSERT, como sin duda recordar, permite agregar datos a una tabla existente. Se pueden
agregar esos datos directamente a la tabla o a travs de una vista que permita insertar datos a la tabla
subyacente. Si se utiliza una subconsulta en una instruccin INSERT, debe ser incluido como uno de los
valores definidos en la clusula VALUES.

INSERT INTO Atencion VALUES

(12/05/2016',( SELECT id_paciente FROM paciente WHERE nombre = 'Gabriela Pealoza' ),2 );

DOCENTE: GABRIELA PEALOZA I. 40


Documento de apoyo al mdulo de Base de datos Relacional

En la sentencia anterior, se utiliz una subconsulta para extraer el identificador de un nombre de paciente
en especfico y de esa manera, poder insertarlo en la tabla Atencin.

DOCENTE: GABRIELA PEALOZA I. 41


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 8: MODIFICANDO DATOS.


INSERT
la instruccin INSERT permite agregar datos a las diferentes tablas en una base de datos. Se presenta la
sintaxis bsica en esta. La sintaxis de una instruccin INSERT bsica es relativamente sencilla:

INSERT INTO [ ( ) [ { , }... ] ) ] VALUES ( [ { , }... ] )

En la sintaxis, slo son obligatorias la primera y la ltima lnea. La segunda lnea es opcional. Tanto la
primera como la segunda lnea son parte de la clusula INSERT INTO. En esta clusula se debe identificar el
nombre de la tabla (o vista) en la cual se agregarn los datos. El nombre de la tabla sigue a las palabras
clave INSERT INTO. Entonces el usuario tiene la opcin de identificar los nombres de la columna en la tabla
que recibirn los datos. ste es el propsito de la segunda lnea en la sintaxis. Es posible especificar una o
ms columnas, y todas ellas debern estar dentro de parntesis. Si se especifican ms columnas, stas
debern estar separadas por comas.

En la tercera lnea de la sintaxis, que se refiere a la clusula VALUES, se deben especificar uno o ms
valores que sern ingresados en la tabla. La lista de valores deber estar encerrada en parntesis
y, si se especifica ms de uno, debern estar separados utilizando comas. Asimismo, los valores
deben cumplir los siguientes requisitos:

Si los nombres de columna no se especifican en la clusula INSERT INTO, entonces deber haber un
valor por cada columna en la tabla y los valores debern estar en el mismo orden en el que estn
definidos en la tabla.

Si los nombres de columna se especifican en la clusula INSERT INTO, entonces deber haber
exactamente un valor por cada columna especificada y esos valores debern estar en el mismo
orden en el que estn definidos en la clusula INSERT INTO.

Sin embargo, los nombres y valores de columna no tienen que estar en el mismo orden que las columnas
en la definicin de la tabla. Se debe proporcionar un valor por cada columna en la tabla excepto para las
columnas que permiten valores nulos o que tienen un valor definido por defecto. Cada valor con un carcter
del tipo de datos de cadena debe estar encerrado en comillas sencillas. Se puede utilizar la palabra clave
NULL (o null) como el valor de los datos en la clusula VALUES para asignar un valor nulo a cualquier
columna que permita valores nulos.

DOCENTE: GABRIELA PEALOZA I. 42


Documento de apoyo al mdulo de Base de datos Relacional

Si se intenta ejecutar una instruccin INSERT omitiendo una columna que no permita valores nulos y que
no tenga un valor por defecto definido, se arrojar como resultado un error. Cuando se inserta una nueva
fila, el RDBMS debe obtener un valor para cada columna desde algn lado, por lo que si no se permiten los
valores nulos, entonces el valor debe venir ya sea de un valor por defecto (si est definido) o de la clusula
VALUES de la instruccin INSERT.

UPDATE
Como su nombre lo indica, la instruccin UPDATE permite actualizar los datos en una base de datos SQL.
Con la instruccin UPDATE se pueden modificar datos en una o ms filas para una o ms columnas. La
sintaxis para la instruccin UPDATE se puede mostrar de la manera siguiente:

UPDATE <nombre de la tabla> SET <determinar expresin de la clusula> [ {, <determinar expresin de


la clusula> }... ] [ WHERE <condicin de bsqueda> ]

Como se puede ver, la clusula UPDATE y la clusula SET son obligatorias, mientras que la clusula WHERE
es opcional. En la clusula UPDATE se debe especificar el nombre de la tabla (o vista) que se est
actualizando. En la clusula SET se debe especificar una o ms expresiones de clusula.

DOCENTE: GABRIELA PEALOZA I. 43


Documento de apoyo al mdulo de Base de datos Relacional

Se debe especificar una condicin o conjunto de condiciones que acta como un filtro para las filas que se
estn actualizando. Solamente las filas que cumplen con estas condiciones son actualizadas. En otras
palabras, solamente las filas cuyo resultado es verdadero son actualizadas.

Ejemplo:

UPDATE Paciente SET edad = 27 WHERE id_paciente = 1;

Se realizar el cambio de la edad del paciente que tenga id 1.

DELETE
Contiene solamente dos clusulas, y una sola de ellas es obligatoria. La siguiente sintaxis muestra qu tan
bsica es la instruccin DELETE:

DELETE FROM [ WHERE]

Como se puede ver, la clusula DELETE FROM requiere que se especifique el nombre de la tabla (o vista) de
la cual se quieren eliminar filas. La clusula WHERE, la cual es similar a la clusula WHERE en una instruccin
SELECT y en una instruccin UPDATE, requiere que se especifique una condicin de bsqueda. Si no se
incluye una clusula WHERE en la instruccin DELETE, todas las filas sern eliminadas de la tabla
especificada. Es importante comprender que la instruccin DELETE no elimina la tabla en s, sino solamente
filas en la table.

Ejemplo:

DELETE FROM paciente WHERE id_paciente=1

DOCENTE: GABRIELA PEALOZA I. 44


Documento de apoyo al mdulo de Base de datos Relacional

TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia
TRUNCATE, mucho ms rpida que DELETE. Es decir, todos los registros que se encuentren en la tabla sern
eliminados.

La sintaxis de la sentencia TRUNCATE es la siguiente:

TRUNCATE TABLE <nombre_tabla>

Como ejemplo, Podemos elimiar todos los datos de atencion:

TRUNCATE TABLE Atencion;

DOCENTE: GABRIELA PEALOZA I. 45


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 9: PROGRAMACION SQL


PROCEDIMIENTO Y FUNCIONES.

La forma ms sencilla de distinguir entre los procedimientos y funciones invocados por SQL es considerar
un procedimiento como un conjunto de una o ms instrucciones SQL almacenadas, similar a cmo una vista
almacena una instruccin SELECT, y considerar una funcin como un tipo de operacin que arroja un valor,
similar a las funciones SET como SUM o AVG.

CREATE PROCEDURE

La primera sintaxis que veremos es aquella que sirve para crear un procedimiento. En su nivel ms bsico,
la instruccin CREATE PROCEDURE luce de la siguiente manera:

CREATE PROCEDURE nombre_proc ( [ <declaracin de parametros[ { , declaracin de parametros } ... ] ] )


[ caracterstica de rutinas... ] Cuerpo de rutinas

Como se puede ver, debe proporcionarse un nombre para el procedimiento (en la clusula CREATE
PROCEDURE) seguido por cero o ms declaraciones de parmetro, que van encerradas en parntesis. Se
deben proporcionar los parntesis incluso si no se define ninguna declaracin. Despus de las declaraciones
de parmetro se tiene la opcin de definir una o ms caractersticas de la rutina. Por ejemplo, se puede
especificar si una rutina es SQL o una escrita en otro lenguaje, por ejemplo, C o Java.

CREATE FUNCTION

Ahora demos un vistazo a la instruccin utilizada para crear una funcin invocada por SQL. Como se puede
ver en la siguiente sintaxis, una funcin contiene unos cuantos elementos ms que un procedimiento:

CREATE FUNCTION nombre_func( [ <declaracin de parametros[ { , declaracin de parametros } ... ] ]


)RETURNS tipo_datos

VARIABLES LOCALES

Adems de permitir pasar los parmetros a un procedimiento, SQL tambin proporciona una forma para
crear variables locales en la definicin del procedimiento que puedan ser utilizadas dentro del cuerpo del
procedimiento. Una variable local puede ser considerada como un tipo de marcador de posicin que
mantiene un valor en la memoria durante la ejecucin de las instrucciones en el cuerpo de la rutina. Una
vez que las instrucciones han sido ejecutadas, la variable deja de existir.

Sintaxis:

DECLARE @nombre_variable tipo_datos

DOCENTE: GABRIELA PEALOZA I. 46


Documento de apoyo al mdulo de Base de datos Relacional

Siguiendo este mismo ejemplo, vamos a crear la variable resultado para una posterior operacin.

En este caso aplicaramos lo siguiente:

Una vez que se ha declarado la variable, debe asignrsele un valor antes de que pueda ser referenciada.
(Sin embargo, algunas implementaciones asignan automticamente un valor nulo a las variables en el
momento de ser definidas.) Se puede utilizar la instruccin SET para asignar un valor a una variable
utilizando la siguiente sintaxis:

) y ambos son CD de New Age. En una definicin de procedimiento no se est limitado solamente a una
variable. Se puede crear una instruccin DECLARE para cada variable que se quiera incluir. Tambin es
posible incluir mltiples variables en una instruccin, si esas variables estn asignadas al mismo tipo de
datos.

DOCENTE: GABRIELA PEALOZA I. 47


Documento de apoyo al mdulo de Base de datos Relacional

INSTRUCCIONES CONDICIONALES.

IF

La instruccin utiliza las palabras clave IF, THEN y ELSE para establecer las condiciones y definir las acciones
a tomar: si (if ) se cumple la condicin, entonces (then) se ejecuta la instruccin SQL, o se toma alguna otra
(else) accin.

WHILE

la clusula WHILE finaliza la repeticin automticamente cuando la condicin se evala como falsa.

Ntese que muchas implementaciones, incluyendo Oracle y SQL Server, utilizan un bloque BEGIN en lugar
de la palabra clave DO para encerrar las instrucciones que se van a repetir por el bucle de repeticin WHILE.
Un punto ms en el que hay que poner atencin es dnde se evala la condicin en la lgica de repeticin.
Algunas implementaciones evalan la condicin al principio de la repeticin. Otras la evalan al final de la
repeticin, lo que significa que las instrucciones en la repeticin siempre se ejecutarn por lo menos una
vez, incluso si la condicin se evala como falsa la primera vez que se inicia la repeticin.

EXECUTE

Una vez que se ha preparado la instruccin, puede entonces utilizarse la funcin Execute( ) para ejecutar la
instruccin. La funcin Execute( ) solamente ocupa un argumento (el indicador de instruccin que contiene
la instruccin preparada.

Siguiendo el ejemplo anterior, para ejecutar esta instruccin deber incluir:

EXECUTE mayora_edad

DOCENTE: GABRIELA PEALOZA I. 48


Documento de apoyo al mdulo de Base de datos Relacional

CASE

Una expresin de valor CASE permite determinar una serie de condiciones que modifican valores
especficos arrojados por la instruccin SQL. Se puede cambiar la forma en que un valor est representado
o se calcula un nuevo valor. Cada valor es modificado de acuerdo con la condicin especificada dentro de
la expresin CASE. Una expresin de valor incluye la palabra clave CASE y una lista de condiciones. La ltima
condicin proporciona una condicin por defecto si ninguna de las condiciones anteriores ha sido cumplida.
Entonces la expresin de valor se cierra utilizando la palabra clave END.

DOCENTE: GABRIELA PEALOZA I. 49


Documento de apoyo al mdulo de Base de datos Relacional

MANEJO DE ERRORES

Cuando se incrusten instrucciones SQL en el lenguaje host, se deber proporcionar una forma de tomar
acciones especficas si se recibe un mensaje de error o de advertencia cuando se intenta acceder a los datos.
SQL proporciona un mtodo relativamente sencillo que puede utilizarse para monitorear los errores y
advertencias y tomar acciones dependiendo de los resultados de ese monitoreo.

ROLLBACK

A pesar de que el objetivo de cualquier transaccin es completar los cambios hechos por las instrucciones
en esa transaccin, no hay duda de que existirn ocasiones cuando se quiera reinvertir esos cambios. Para
poder controlar estas reinversiones, se debe utilizar una instruccin ROLLBACK para deshacer los cambios
y eliminar la transaccin, o para regresar los cambios a un punto de recuperacin especfico. La siguiente
sintaxis muestra los diferentes elementos que pueden ser incluidos en una instruccin ROLLBACK:

ROLLBACK [WORK] [ AND [NO] CHAIN ] [ TO SAVEPOINT


<nombre del punto de recuperacin> ]

DOCENTE: GABRIELA PEALOZA I. 50


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 10: TRIGGERS

Existe un nmero de similitudes entre SGDB (por ejemplo, el uso de la instruccin CREATE TRIGGER para
crear un activador), y las implementaciones de activadores en varios productos comparten algunas
caractersticas bsicas, particularmente aquellas que hacen posible dispararlo automticamente para
realizar una accin secundaria relacionada con la accin primaria que invoc el activador.

Un Triggers es creado para generar una instruccin que se gatilla, cuando es invocada una accin
primaria.

Por ejemplo, supongamos que no se permite la eliminacin de algn usuario previa autorizacin,
entonces se genera un trigger que desencadenar un mensaje de advertencia indicando que no pueden
ser borrados los datos en la tabla en especfico y evitar dicha accin.

Si sintaxis sera:

CREATE TRIGGER [NombreEsquema.]NombreTrigger ON {tabla | vista } [,...n] ]

{FOR|AFTER|INSTEAD OF} {[INSERT][,] [UPDATE][,][DELETE]} AS sentencia_sql [;] [,...n ]

NombreTrigger es el nombre que le queremos dar al desencadenador.

Tabla | vista es el nombre de la tabla o vista en la que se ejecuta el desencadenador. Slo se puede hacer
referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir desencadenadores
DML en tablas temporales locales o globales.

DELETE INSERT UPDATE Especifica las instrucciones de modificacin de datos que activan el
desencadenador cuando se intenta ejecutarlas en esta tabla o vista. Se debe especificar al menos una
opcin. En la definicin del desencadenador se permite cualquier combinacin de estas opciones, en
cualquier orden.

A pesar de que el estndar SQL no soporta ninguna clase de instruccin que permite alterar un activador,
s soporta una forma de eliminar un activador, que se logra utilizando la instruccin DROP TRIGGER. Como
se puede ver en la siguiente sintaxis, esta instruccin es muy bsica:

DROP TRIGGER <nombre>

DOCENTE: GABRIELA PEALOZA I. 51


Documento de apoyo al mdulo de Base de datos Relacional
Ejemplo:

Como se ve en la imagen, se crea un triggers que no permite el borrado de datos.

Procederemos a intentar el borrado de datos de la tabla mdico.

Para usar un trigger, pueden ser utilizado 3 metodos:

AFTER indica que el desencadenador slo se activa cuando todas las operaciones especificadas en la
instruccin SQL desencadenadora se han ejecutado correctamente. Adems, todas las acciones
referenciales en cascada y las comprobaciones de restricciones deben ser correctas para que este
desencadenador se ejecute. BEFORE indica que las sentencias sern ejecutadas despus.

INSTEAD OF indica que se ejecuta el desencadenador en vez de la instruccin SQL desencadenadora, por lo
que se suplantan las acciones de las instrucciones desencadenadoras.

Como mximo, se puede definir un desencadenador INSTEAD OF por cada instruccin INSERT, UPDATE o
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio
desencadenador INSTEAD OF.

DOCENTE: GABRIELA PEALOZA I. 52


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 10: FUNCIONES Y CURSORES.

Cuando se trabaja con los datos SQL de forma interactiva, tener los datos arrojados en conjuntos raramente
representa un problema debido a que normalmente es posible desplazarse a travs de los resultados de la
consulta para encontrar la informacin que se necesita. Si el tamao de los resultados es demasiado
extenso para desplazarse fcilmente, es posible hacer ms preciso el enfoque de la expresin de bsqueda
para arrojar un conjunto de resultados ms manejable. Sin embargo, la mayora de los accesos de datos se
hace a travs de medios diferentes a la invocacin directa (a pesar del hecho de que accedemos a los datos
de forma interactiva a travs de todo el libro). Uno de los mtodos ms comunes, el SQL incrustado, accede
a los datos a travs de instrucciones SQL incrustadas en un programa de aplicacin. Los elementos de datos
arrojados por las instrucciones SQL son utilizados por un lenguaje de programacin externo (el lenguaje
host) para soportar procesos de aplicacin especficos.

La mayora de los lenguajes de programacin de aplicacin soportan el uso de cursores para recuperar
datos de una base de datos SQL. El lenguaje del cursor est incrustado en el cdigo de programacin de
una forma muy parecida a la que se incrustara cualquier instruccin SQL. Cuando se utiliza un cursor en un
lenguaje de programacin, primero se debe declarar el cursor (similar a como se declarara una variable) y
luego utilizar el nombre de la instruccin (el nombre que se le asign al cursor) en otras instrucciones SQL
incrustadas para abrir el cursor, recuperar filas individuales a travs del cursor y cerrar el cursor.

Para poder trabajar con Cursores debemos realizar los siguientes pasos:

declare cursor prueba _ cursor for

select nombres apellidos , from persona

/* :*/ ahora declaramos las variables con las que vamos a recorrer el cursor

declare @ nombres varchar(25)

declare @ apellidos varchar(25)

/* */ Abrimos el cursor para iniciar el recorrido del mismo

open cursor prueba _

/* Se mueve al siguiente registro dentro del cursor y los asignamos a las variables antes

declaradas*/

fetch next from cursor prueba _

into @ , nombres apellidos

/* , 0 Retorna el estatus del ltimo registro recorrido en el cursor cuando es igual a encontr

registro pendientes de recorrer */

while @@ _ fetch status = 0

DOCENTE: GABRIELA PEALOZA I. 53


Documento de apoyo al mdulo de Base de datos Relacional

begin

print' : ' El Nombre de la persona es + @ + nombres ' : ' y sus apellidos + apellidos

/* */ Se mueve al siguiente registro dentro del cursor

fetch next from cursor prueba _

into @ , nombres apellidos

end

/* , Cuando concluimos con el recorrido del cursor este debe ser cerrado y luego destrudo

mediante las siguientes sentencias :*/

close cursor prueba _ -- . Cierra el cursor

Deallocate cursor prueba _ -- .

Los cursores son muy eficientes para utilizarlos en Job de las bases de datos que realiza alguna operacin
donde necesitamos modificar alguna informacin dentro de un bucle. Los cursores demandan mucho del
servidor de base datos por lo tanto no es recomendable abusar del mismo ya que necesitan bastantes
recursos para su ejecucin.

DOCENTE: GABRIELA PEALOZA I. 54


Documento de apoyo al mdulo de Base de datos Relacional

PARTE 12: CONVERSION DE DATOS

Convierten una expresin de un tipo de datos en otro de forma explcita. CAST y CONVERT proporcionan
funciones similares. Su sintaxis para ambas consultas se muestra a continuacin:

CAST (expresin AS tipo_dato [ (longitud)])

CONVERT (tipo_dato [ (longitud)] , expresin [ , estilo ] )

expresin Es cualquier expresin vlida. tipo_dato Es el tipo de datos de destino proporcionado por el
sistema. Incluye xml, bigint y sql_variant. No se pueden utilizar tipos de datos de alias.

Longitud es un parmetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Para CONVERT, si no se ha especificado el parmetro longitud, el valor predeterminado es 30 caracteres.

Es el estilo del formato de fecha usado para convertir datos de tipo datetime o smalldatetime en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o para convertir datos de
caracteres de formatos de fecha y hora conocidos en datos de tipo datetime o smalldatetime; o bien, el
formato de cadena usado para convertir datos de tipo float, real, money o smallmoney en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar). Cuando estilo es NULL, el
resultado devuelto tambin es NULL.

En las conversiones money a carcter los estilos utilizados son:

0 (predeterminado) Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y
dos dgitos a la derecha del separador decimal; por ejemplo, 4235,98.

1 Separadores de millar cada tres dgitos a la izquierda del separador decimal y dos dgitos a la derecha
del separador decimal; por ejemplo, 3.510,92.

2 Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y cuatro dgitos a la
derecha del separador decimal; por ejemplo, 4235,9819.

Ejemplo:

DOCENTE: GABRIELA PEALOZA I. 55


Documento de apoyo al mdulo de Base de datos Relacional

PARSE Y TRY_PARSE
La funcin PARSE permite convertir una cadena de texto a un valor numrico o de fecha/hora, y produce
un error en caso de no poder realizar la conversin. Es importante tener en cuenta, que la funcin PARSE
utiliza el motor (CLR) del NET Framework, ya que por ejemplo, mientras que la cadena 20130101 se puede
convertir a fecha con CAST y CONVERT, esta misma cadena no podr ser convertida a fecha con PARSE.

Adems, la funcin PARSE tambin permite realizar la conversin teniendo en cuenta la informacin de un
idioma especificado como parmetro.

Para complementar a la funcin PARSE, desde SQL Server 2012 tambin tenemos disponible a la funcin
TRY_PARSE, que es equivalente a PARSE, excepto que devuelve NULL (en lugar de generar una excepcin)
cuando no puede realizar la conversin.

FORMAT

La funcin Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente
indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como
varchar en un formato especfico.

Su sintaxis es:

FORMAT(valor, formato, [cultura (opcional)])

El parmetro valor es el valor que quieres formatear, debe ser un dato compatible con la funcin. El
formato es precisamente como queremos nuestro resultado (ej. C, D, g, dd/MM/yyyy).

A continuacin, se muestra un ejemplo extrayendo los datos de fecha de atencin de la tabla atencin. Se
puede apreciar que la fecha se encuentra en formato ao-mes-da.

DOCENTE: GABRIELA PEALOZA I. 56


Documento de apoyo al mdulo de Base de datos Relacional

Veremos cmo podramos cambiar el formato, dejando la fecha da, mes, ao.

En variable fecha, estamos guardando la fecha de atencin para id_atencion 1. Se utiliza esta variable para
utilizarla en la sentencia format.

MANEJO DE FECHAS

Las funciones de valor de fecha y hora proporcionan informacin acerca de la fecha y la hora actuales.
Cada funcin arroja un valor basado en la fecha u hora (o ambos) tal como estn configurados en el
sistema operativo.

getdate(): retorna la fecha y hora actuales. Ejemplo:

select getdate();

DOCENTE: GABRIELA PEALOZA I. 57


Documento de apoyo al mdulo de Base de datos Relacional

datepart(): retorna la parte especfica de una fecha, el ao, trimestre, da, hora, etc. Los valores para
"partedefecha" pueden ser: year (ao), quarter (cuarto), month (mes), day (dia), week (semana), hour
(hora), minute (minuto), second (segundo) y millisecond (milisegundo).

Su sintaxis es:

Select datepart(partedefecha,fecha)

Ejemplos:

select datepart(month,getdate()); retorna el nmero de mes actual.

select datepart(day,getdate()); retorna el da actual.

select datepart(hour,getdate()); retorna la hora actual.

Datename: Retorna el nombre de una parte especfica de una fecha. Los valores para "partedefecha"
pueden ser los mismos que se explicaron anteriormente. Ejemplos:

select datename(month,getdate());

retorna el nombre del mes actual;

DOCENTE: GABRIELA PEALOZA I. 58


Documento de apoyo al mdulo de Base de datos Relacional

dateadd: Agrega un intervalo a la fecha especificada, es decir, retorna una fecha adicionando a la fecha
enviada como tercer argumento, el intervalo de tiempo indicado por el primer parmetro, tantas veces
como lo indica el segundo parmetro. Los valores para el primer argumento pueden ser: year (ao), quarter
(cuarto), month (mes), day (dia), week (semana), hour (hora), minute (minuto), second (segundo) y
millisecond (milisegundo).

Su sintaxis es:

Select dateadd(partedelafecha,numero,fecha)

En la siguiente imagen se agrega 3 meses a la fecha mencionada.

Otros ejemplos seran:

select dateadd(hour,2,'1980/11/02'); retorna "1980/02/02 2:00:00", agrega 2


horas.

select dateadd(minute,16,'1980/11/02'); retorna "1980/02/02 00:16:00", agrega 16 minutos.

select dateadd(month,3,'1980/11/02'); retorna "1981/02/02", agrega 3


meses.

Datediff: Calcula el intervalo de tiempo (segn el primer argumento) entre las 2 fechas. El resultado es un
valor entero que corresponde a fecha2-fecha1. Los valores de "partedelafecha) pueden ser los mismos que
se especificaron anteriormente.

Ejemplos:

select datediff (day,'2005/10/28','2006/10/28'); retorna 365 (das).

select datediff(month,'2005/10/28','2006/11/29'); retorna 13 (meses).

DOCENTE: GABRIELA PEALOZA I. 59


Documento de apoyo al mdulo de Base de datos Relacional

DOCENTE: GABRIELA PEALOZA I. 60


Documento de apoyo al mdulo de Base de datos Relacional

TEXTOS UTILIZADOS

Ing. Herik Robles Huerta, Julio 2010, TUTORIAL SQL

Fundamentos de SQL Tercera edicin, Andy Oppel Robert Sheldon, 2010.

DOCENTE: GABRIELA PEALOZA I. 61

You might also like