Anda di halaman 1dari 62

Manual Intermedio de

SQL
Server 2016
GABRIELA PEÑALOZA I. 1
Disposiciones Generales
1.- Con la finalidad de optimizar el aprendizaje de nuestros estudiantes y prestar una mejor
atención, Edutecno dispuso de una serie de normas que todos los participantes deben respetar. Esto
asegurará una mejora continua tanto del desarrollo de nuestras clases como una optimización de los
conocimientos entregados a los alumnos.

 Apagar o poner en silencio el celular al momento de entrar a clases


 No se deben entrar líquidos ni comida al salón.
 Las clases comienzan puntualmente según el
horario establecido entre la Empresa y Edutecno.
 Las personas que lleguen después de los 10 primeros minutos de comenzada
la clase, serán considerados como atrasados.
 Ante cualquier reclamo se debe pedir el libro de sugerencias en recepción.
 Si el curso se realiza fuera de las oficinas de Edutecno, enviar sus sugerencias al mail
info@edutecno.cl

II.- Además ponemos en conocimiento de nuestros alumnos y encargados de capacitación los


requisitos que deben cumplir los estudiantes para aprobar un curso.

 La asistencia mínima para aprobar es de un 75 %.


 La nota final del alumno se obtendrá de una evaluación con nota en la última clase.
 Una vez finalizada la capacitación, Edutecno enviará a la empresa un certificado
con la nota final de la persona y porcentaje de asistencia.
 Los alumnos que falten a la evaluación final, deberán comunicarse directamente
con el encargado de capacitación de su empresa para justificar su inasistencia y
a través de él coordinar la rendición de la prueba pendiente. Este proceso debe
realizarse en un plazo no posterior a 1 semana después de finalizado el curso,
pasado este tiempo, el alumno será reprobado por nota.

GABRIELA PEÑALOZA I. 2
TABLA CONTENIDO

MODULO 1: INTRODUCCIÓN A SQL SERVER


 Que es SQL Server
 Historia
 Transact SQL
 Características de SQL
 Definición del lenguaje (DDL – DML)
 Donde descargar SQL Server (2012,2014)

MODULO 2: DISEÑO DE LA BASE DE DATOS


 Modelo E-R
o Entidad
o Relación
o Atributos
 Consideraciones de Diseño
 Modelado de elementos de datos
 Tablas
o Restricciones tablas
o Restricciones de Columnas
o Clave primaria
o Clave foránea

MODULO 3: CONSULTAS BÁSICAS


 Recuperando datos con SELECT
 Expresiones y operadores aritméticos
 Cambiando orden de columnas
 Clausula DISTINTC

MODULO 4: CONDICIONES DE BÚSQUEDA


 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

GABRIELA PEÑALOZA I. 3
 AVG
 GROUP BY descripción y características
 HAVING descripción y características

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
 Definición de Subconsulta
 Tipos de Subconsultas
o Subconsultas de una sola fila
o Subconsultas de múltiples filas

MODULO 8: MODIFICANDO DATOS


 Cláusula INSERT y UPDATE
 Cláusulas DELETE y TRUNCATE TABLE
 Sentencia MERGE
 BULK COPY

MODULO 9: PROGRAMACIÓN SQL


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

GABRIELA PEÑALOZA I. 4
o ROLLBACK y SAVE

MODULO 10: TRIGGERS Y PROCEDIMIENTOS


 Creación de TRIGGERS
 Restricciones
o AFTER, INSTEAD OF TRIGGERS
o INSERT, DELETE, UPDATE TRIGGER
 Definición de Procedimiento Almacenado
 Características y ventajas de los procedimientos
 Tipos de procedimientos
 Creación y llamadas a procedimientos
 Modificación y eliminación de procedimientos
 Procedimientos con parámetros

MODULO 11: FUNCIONES Y CURSORES


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

GABRIELA PEÑALOZA I. 5
SOBRE ESTE MANUAL
Este libro trata sobre el uso y estructura de sql, así como también al lenguaje de consulta para la gestión 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 podrán
entender y dominar las funcionalidades que permiten diseñar y construir una base de datos.

El objetivo que se persigue es mejorar el rendimiento y permitir la gestión de todos los datos de la
empresa con los que los usuarios trabajan habitualmente, así como también ampliar el conocimiento
básico de aquellos usuarios que han logrado instruirse de manera sutil en el mundo de las bases de datos.

GABRIELA PEÑALOZA I. 6
PARTE 1: INTRODUCCIÓN A SQL SERVER

HISTORIA SQL

Empieza con la primera versión, que fue desarrollada en los laboratorios de IBM por Andrew Richardson,
Donald C. Messerly y Raymond F. Boyce, a comienzos de los años 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 versión le llamaron SEQUEL, Structured English QUEry Language, y fue diseñada 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 revisión del lenguaje (SEQUEL/2), que a partir de ese momento
cambió de nombre por motivos legales, convirtiéndose 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 todavía comercializado, también
otras compañías empezaron a desarrollar sus productos relacionales basados en SQL.

Fue en 1986, cuando el ANSI (American National Estándar Institute) adoptó SQL como estándar para los
lenguajes relacionales, que en 1987 se transformó en estándar ISO.

¿QUÉ ES UNA BASE DE DATOS?

Una base de datos está constituida por un conjunto de información relevante para una empresa o
entidad incluyendo los procedimientos para almacenar, controlar, gestionar y administrar esa
información. Además, la información contenida en una base de datos cumple una serie de
requisitos o características:

 Los datos están interrelacionados, sin redundancias innecesarias.


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

¿QUÉ ES UN SGBD O SISTEMA DE GESTIÓN DE BASE DE DATOS?

Un Sistema de Gestión de Bases de Datos (SGBD) es una aplicación 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 información.
• Proporcionar control de la privacidad y seguridad de los datos en la Base de Datos, permitiendo
sólo el acceso a los mismos a los usuarios autorizados.

GABRIELA PEÑALOZA I. 7
La herramienta más difundida para realizar todas estas tareas es el lenguaje SQL.
Algunos de los productos comerciales más 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 manipulación de datos),
las cuales se utilizan para:
 Recuperar información. (SELECT)
 Actualizar la información:
 Añadir filas (INSERT)
 Eliminar filas (DELETE)
 Modificar filas (UPDATE)

Así como también se mostrara las sentencias DDL (Sentencias de definición 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)

GABRIELA PEÑALOZA I. 8
PARTE 2: DISEÑO DE LA BASE DE DATOS

El carácter formal del modelo relacional hace relativamente sencilla su representación y gestión
por medio de herramientas informáticas. No es casual, pues, que haya sido elegido como
referencia para la construcción de la gran mayoría de los Sistemas de Gestión de Bases de Datos
comerciales disponibles en el mercado.

El modelo relacional se basa en el concepto matemático de relación. En este modelo, la


información se representa en forma de “tablas” o relaciones, donde cada fila de la tabla se
interpreta como una relación 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 lógica de la organización de los datos (tablas, vistas,
índices…), independiente de la estructura física (archivos, etc.). Cada SGBDR debe proporcionar
una vista lógica al usuario, que garantice un almacenamiento físico de la información.

Esta restricción es, al mismo tiempo, la fortaleza de los SGBDR, ya que la gestión de los datos
desde un punto de vista lógico, 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 continuación se muestra una tabla que compara la terminología
utilizada en las bases de datos relacionales y sus alternativas, que permiten entender fácilmente
sus componentes.

Tablas: Las tablas, también llamada relaciones, son los pilares esenciales de cualquier base de datos, ya que
almacenan los datos. Una base de datos debería tener una tabla distinta para cada asunto principal, como
registros de empleados, pedidos de clientes, métodos de entrega, proveedores, etc.
No deben duplicarse los datos en varias tablas. Esto es un error común fácil de evitar si se estructuran bien
las tablas.
Todas las tablas están organizadas en Filas, y columnas, tal como se muestra en la siguiente imagen, en la
cual se crea una tabla vacía, que permite guardar los datos de un paciente.

GABRIELA PEÑALOZA I. 9
Registros (tuplas): Una tupla o registro es un conjunto de hechos acerca de una persona, de un evento o de
cualquier otro elemento de interés. Por ejemplo el Cliente Daniel Berrios y su dirección 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 más registros que contengan exactamente la misma información.
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, cómo 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 número, texto, moneda (dinero), fecha, hora, etc. El tipo de
datos limita y describe la clase de información del campo. También 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.

GABRIELA PEÑALOZA I. 10
Para eso daremos click derecho y seleccionaremos New databases.

GABRIELA PEÑALOZA I. 11
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 clínica.

GABRIELA PEÑALOZA I. 12
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 creación de la base de datos para una clínica, procederemos a crear una tabla
para el registro de pacientes, en la cual lo dejaremos de la siguiente manera:

GABRIELA PEÑALOZA I. 13
*Para este caso, es posible utilizar el rut como PK, sin embargo, por un tema de orden en la creación 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 mínimo de atributos cuyos valores le dan una identificación única a la tupla en
la relación.
3.- Una clave es una referencia que se utiliza para identificar los registros de forma única y está formada
por uno o más 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 relación 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 características:
o Deberá seleccionarse la que ocupe un menor espacio de almacenamiento.
o Tener una codificación 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 fácilmente recordables por el usuario. Por ejemplo, si se tiene una tabla con
2500 procedimientos de una clínica, podríamos 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

GABRIELA PEÑALOZA I. 14
identificador único, así como cada ciudadano tiene un RUT único, diferente del de todos
los demás. La clave principal debe ser una información 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 diseño, y luego dando click
en set primary key, (establecer clave principal).

 Clave externa: Define una columna o combinación de columnas cuyos valores coinciden con la clave
principal de la misma u otra tabla. Permite la declaración de la llave foránea.

GABRIELA PEÑALOZA I. 15
TIPOS DE DATOS
En SQL Server, cada columna, variable local, expresión y parámetro 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 están organizados en las siguientes categorías:

Numéricos exactos Cadenas de caracteres Unicode

Numéricos aproximados Cadenas binarias

Fecha y hora Otros tipos de datos

Cadenas de caracteres

TIPO DE DATO DE CARÁCTER

Tipo de datos
Datos de caracteres de longitud fija hasta un máximo
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) máximo de 8,000 caracteres. 1 byte por caracter
Datos de caracteres de longitud variable hasta un
VarChar(max) máximo de 2gb 1 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(n) hasta un máximo de 8,000 caracteres 2 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(max) hasta un máximo 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

GABRIELA PEÑALOZA I. 16
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 Números de precisión exacta hasta -10 ˆ 38 + 1 tamaño
Money Números desde -2 ˆ 63 a 2 ˆ 63, 8 byte
SmallMoney Números desde -214,748.3648 a +214,748.3647 4 byte
Números con precisión de coma flotante desde -1.79E + 308 a
Float 1.79E + 308, dependiendo del bit de precisión . 4 o 8 bytes
Real Flotante con 24-bit de precisión 4 byte

TIPO DE DATO FECHA

Ajuste
Tamaño 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

GABRIELA PEÑALOZA I. 17
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

GABRIELA PEÑALOZA I. 18
EJERCICIOS MODULO 2
Para la base de datos creada en los ejemplos, genere los siguientes ejercicios que permitirán
almacenar más información importante para la clínica. Se muestran imágenes para que usted sepa
cómo debería 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 médicos, enfermeras, tec, en
enfermería, auxiliares, etc.).
2) Verifique su clave primaria para cada tabla, así como también las secundarias. Cada
columna debe contar con el tipo de datos correspondiente, y así permitir el correcto
ingreso de los datos.

GABRIELA PEÑALOZA I. 19
3) Inserte datos para cada tabla (al menos 5 filas) por tabla.

GABRIELA PEÑALOZA I. 20
PARTE 3: CONSULTAS BÁSICAS
Las peticiones para actuar sobre los datos se expresan mediante sentencias. Éstas deben escribirse de
acuerdo con las reglas sintácticas y semánticas del lenguaje.
Permiten enunciar operaciones sobre tablas. Existen varios tipos según el tipo de operación que expresan,
por lo que a continuación se aprecia un cuadro con las categorías de consultas.

Sentencias que permiten realizar consultas y


DML Lenguaje de Manipulación de
actualizaciones de datos (inserción, borrado y
Datos (Data Manipulation
modificación de filas): SELECT, INSERT, UPDATE,
Language)
DELETE.

DDL Lenguaje de Definición 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 autorización 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).

GABRIELA PEÑALOZA I. 21
También 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

Permite abrir otras consultas

GABRIELA PEÑALOZA I. 22
SELECT
Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases
de datos. Esta información es devuelta en forma de conjunto de registros que se pueden almacenar en una
nueva tabla.
La sintaxis más sencilla de una consulta de selección es la siguiente:

SELECT columna1, columna2, columna3 FROM nombre de tabla

En este caso extrae la información de la columna 1,2 y 3 de la tabla.


Por ejemplo, la consulta SELECT Nombre, Teléfono FROM Clientes; devuelve una tabla temporal con los
campos nombre y teléfono de la tabla clientes.
Utilizando nuestra tabla de paciente de la BD clínica 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 símbolo asterisco, como se muestra en la sintaxis:

SELECT * FROM nombre


de tabla

Utilizando el ejemplo anterior, nuestra consulta quedaría SELECT * FROM PACIENTE.

GABRIELA PEÑALOZA I. 23
ORDER BY
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas
mediante la cláusula ORDER BY. Su sintaxis sería:

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 más 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 cláusula 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 número de registros de la tabla.

 DISTINCT Omite repeticiones de registros cuyos campos seleccionados coincidan totalmente.


 DISTINCTROW Omite repeticiones de registros basándose en la totalidad del registro y no sólo 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 instrucción 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
más rápido indicar el listado de campos deseados. Se suele sustituir por el símbolo * .
Por ejemplo:
SELECT ALL FROM paciente;
TOP Devuelve un cierto número de registros que corresponden al principio o al final de un rango
especificado por una cláusula ORDER BY. Por ejemplo, supongamos que queremos recuperar los nombres
de los 25 paciente con menor edad.
Para ello, emplearemos la consulta:

GABRIELA PEÑALOZA I. 24
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. (Nótese que para la BD dato ejemplo sólo de
cuentan con 5 registros, por lo tanto esa es la cantidad máxima 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 instrucción SQL devuelve un único registro:
SELECT DISTINCT edad FROM paciente;

GABRIELA PEÑALOZA I. 25
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.

GABRIELA PEÑALOZA I. 26
EJERCICIOS MODULO 3

1) Listar todos los pacientes.


select * from paciente

2) Mostrar sólo los nombres y enfermedades importantes de pacientes.


select nombre, [Enfermedades previas] from paciente

3) Mostrar sólo 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 años.


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

GABRIELA PEÑALOZA I. 27
PARTE 4: CONDICIONES DE BUSQUEDA

CRITERIOS DE SELECCIÓN
Los métodos empleados hasta el momento para de recuperar un conjunto de registros de una tabla
devuelven todos los registros de la tabla. A continuación, se estudiarán 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 condición referida a un campo de texto la condición de búsqueda
debe ir encerrada entre comillas simples.
Las fechas se deben escribir siempre encerrada entre almohadillas comilla simple. Por ejemplo, si deseamos
referirnos al día 3 de septiembre de 1995 debemos escribir: ‘03/09/1995’ ó ‘1995/09/03’. A continuación,
un ejemplo con la fecha para ambas escrituras de fecha.

FILTRAR DATOS

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

expresión1 operador expresión2

En donde expresión1 y expresión2 son las condiciones que evaluar, el resultado de la operación varía en
función del operador lógico. Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT
el resultado de la operación será el contrario al devuelto sin el operador NOT.

Por ejemplo, considérense las consultas:

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

GABRIELA PEÑALOZA I. 28
SELECT * FROM paciente WHERE (Edad > 25 AND Edad < 50) OR nombre = ‘Gabriela Peñaloza’

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

campo BETWEEN valor1 And valor2

En este caso la consulta devolvería los registros que contengan en "campo" un valor incluido en el intervalo
valor1, valor2 (ambos inclusive). Si anteponemos la condición 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 años.

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

GABRIELA PEÑALOZA I. 29
LIKE
El operador like Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su
sintaxis es:

Expresión LIKE dato_buscado

Donde expresión es un campo, y dato_buscado es un patrón contra el que se compara la expresión. 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 Peñaloza’), 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:

expresión [NOT] IN (valor1, valor2, . . .)

Por ejemplo:

SELECT * FROM paciente WHERE edad IN (23);

GABRIELA PEÑALOZA I. 30
PARTE 5: AGRUPANDO Y RESUMIENDO DATOS

Transact SQL pone a nuestra disposición múltiples funciones agregadas, las más comunes que usaremos
son:

COUNT
Calcula el número 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 función (la cual puede ser intrínseca 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 número de registros sin tener en cuenta qué valores se
almacenan en los registros. La función Count no cuenta los registros que tienen campos null a menos que
el campo sea el carácter comodín asterisco (*).

Ejemplo:

SELECT COUNT(edad) FROM paciente.

SELECT COUNT(*) FROM paciente.

GABRIELA PEÑALOZA I. 31
MAX Y MIN

Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico de una


consulta. Su sintaxis es:

Min(expresión) Max(expresión)

En donde expresión es el campo sobre el que se desea realizar el cálculo. expresión pueden incluir el
nombre de un campo de una tabla, una constante o una función (la cual puede ser intrinseca o definida por
el usuario pero no otras de las funciones agregadas de SQL).

Ejemplo:

SELECT Min(edad) AS Mínimo FROM paciente

Devuelve cuál es la edad mínima de los pacientes de la clínica.

GABRIELA PEÑALOZA I. 32
SELECT Max(edad) AS Maximo FROM paciente

Devuelve cuál es la edad mínima de los pacientes de la clínica.

SUM

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

Su sintaxis es:

SUM(expresion)

En donde expresión representa el nombre del campo que contiene los datos que desean sumarse o una
expresión que realiza un cálculo utilizando los datos de dichos campos.

Ejemplo:

SELECT SUM(edad) FROM paciente.

GABRIELA PEÑALOZA I. 33
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(expresión)

En donde expresión representa el campo que contiene los datos numéricos para los que se desea calcular
el promedio. La funci6n Avg no incluye ningún campo Null en el cáIculo.
Ejemplo:
SELECT AVG(edad) FROM paciente
Esta consulta obtiene como resultado el promedio de todas las edades de la tabla paciente.

GABRIELA PEÑALOZA I. 34
PARTE 6: RELACIONANDO DATOS CON MULTIPLES TABLAS
Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas
siempre que haya concordancia de valores en un campo común.

INNER JOIN

Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación por
equivalencia, conocida también como unión interna. Las combinaciones equivalentes son las más comunes;
éstas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo común
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 numéricos, 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 comparación relacional: =, <,<>, <=, =>, ó >.

En nuestra base de datos de clínica, supongamos que necesitamos unir las tablas de paciente y atención.
Para ello realizaremos la siguiente consulta:

SELECT paciente.nombre, Atencion.Fecha_atenciòn from paciente inner join Atencion on


paciente.id_paciente= Atencion.id_paciente

GABRIELA PEÑALOZA I. 35
OUTER JOIN

una operación 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.

Una operación outer join sigue la misma sintaxis que una operación inner join, sólo 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.

GABRIELA PEÑALOZA I. 36
CROSS JOIN

SQL soporta otro tipo de operación llamada cross join. Esta operación es prácticamente idéntica a la
operación 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 instrucción que se
utilizó anteriormente y modifiquémosla reemplazándola con las palabras clave CROSS JOIN:

GABRIELA PEÑALOZA I. 37
UNION.

La cláusula UNION permite unir dos o más conjuntos de resultados en uno detrás del otro como si se tratase
de una única tabla. De este modo podemos obtener los registros de más de una tabla "unidos".

 Para utilizar la cláusula UNION debemos cumplir una serie de normas.

 Las consultas por unir deben tener el mismo número campos, y además los campos deben ser del
mismo tipo.

 Sólo puede haber una única clausula ORDER BY al final de la sentencia SELECT.

GABRIELA PEÑALOZA I. 38
PARTE 7: SUBCONSULTAS
L as subconsultas, al igual que las operaciones join, proporcionan una forma de acceder a datos en múltiples
tablas con una sola consulta. Una subconsulta puede agregarse a una instrucción SELECT, INSERT, UPDATE
o DELETE para permitir a esa instrucción utilizar los resultados de la consulta arrojados por la subconsulta.
La subconsulta es esencialmente una instrucción SELECT incrustada que actúa como una puerta de entrada
a los datos en una segunda tabla. Los datos arrojados por la subconsulta se utilizan como la instrucción
primaria para cumplir cualquier condición que haya sido definida en la instrucción. En este capítulo se
discutirá cómo se utilizan las subconsultas en diferentes instrucciones, particularmente en instrucciones
SELECT, y se proporcionarán ejemplos que demuestren cómo crear subconsultas y qué tipo de resultados
de consulta esperar.

Se pueden dividir las subconsultas de una cláusula WHERE en dos categorías generales: aquellas que
pueden arrojar múltiples filas y aquellas que pueden arrojar solamente un valor. En esta sección se analizará
la primera de estas categorías. En la siguiente sección, “Crear subconsultas que arrojan un solo valor”, se
analizará la segunda categoría. Mientras se expande cada tema, sin duda usted reconocerá los formatos de
instrucción desde la discusión de los predicados. A pesar de que esta información 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 también para proporcionar una perspectiva diferente. En otras
palabras, en lugar de mirar las subconsultas a través 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 instrucción SELECT. Como ejemplo:

GABRIELA PEÑALOZA I. 39
Como se ve en el ejemplo anterior, se extraen las atenciones realizadas a un paciente en específico,
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 términos de cumplir con la condición de
un predicado. En este caso, se puede utilizar un predicado EXISTS para definir la subconsulta. El predicado
EXISTS se evalúa como verdadero si una o más filas son arrojadas por la subconsulta; de otra manera, se
evalúa como falso. Para que un predicado EXISTS sea de utilidad, la subconsulta asociada deberá incluir una
condición de búsqueda que haga coincidir los valores en las dos tablas que están siendo vinculadas a través
de la subconsulta.

En la instrucción, cada fila arrojada por la instrucción SELECT principal se evalúa con la subconsulta. Si la
condición 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 condición especificada es verdadera, eso significa
que al menos una fila ha sido arrojada por la subconsulta.

SUBCONULTA PARA MODIFICAR DATOS.


Una instrucción INSERT, como sin duda recordará, permite agregar datos a una tabla existente. Se pueden
agregar esos datos directamente a la tabla o a través de una vista que permita insertar datos a la tabla
subyacente. Si se utiliza una subconsulta en una instrucción INSERT, debe ser incluido como uno de los
valores definidos en la cláusula VALUES.

INSERT INTO Atencion VALUES

(‘12/05/2016',( SELECT id_paciente FROM paciente WHERE nombre = 'Gabriela Peñaloza' ),2 );

GABRIELA PEÑALOZA I. 40
En la sentencia anterior, se utilizó una subconsulta para extraer el identificador de un nombre de paciente
en específico y de esa manera, poder insertarlo en la tabla Atención.

GABRIELA PEÑALOZA I. 41
PARTE 8: MODIFICANDO DATOS.
INSERT
la instrucción INSERT permite agregar datos a las diferentes tablas en una base de datos. Se presenta la
sintaxis básica en esta. La sintaxis de una instrucción INSERT básica es relativamente sencilla:

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

En la sintaxis, sólo son obligatorias la primera y la última línea. La segunda línea es opcional. Tanto la
primera como la segunda línea son parte de la cláusula INSERT INTO. En esta cláusula se debe identificar el
nombre de la tabla (o vista) en la cual se agregarán los datos. El nombre de la tabla sigue a las palabras
clave INSERT INTO. Entonces el usuario tiene la opción de identificar los nombres de la columna en la tabla
que recibirán los datos. Éste es el propósito de la segunda línea en la sintaxis. Es posible especificar una o
más columnas, y todas ellas deberán estar dentro de paréntesis. Si se especifican más columnas, éstas
deberán estar separadas por comas.

 En la tercera línea de la sintaxis, que se refiere a la cláusula VALUES, se deben especificar uno o más
valores que serán ingresados en la tabla. La lista de valores deberá estar encerrada en paréntesis
y, si se especifica más de uno, deberán estar separados utilizando comas. Asimismo, los valores
deben cumplir los siguientes requisitos:

 Si los nombres de columna no se especifican en la cláusula INSERT INTO, entonces deberá haber un
valor por cada columna en la tabla y los valores deberán estar en el mismo orden en el que están
definidos en la tabla.

 Si los nombres de columna se especifican en la cláusula INSERT INTO, entonces deberá haber
exactamente un valor por cada columna especificada y esos valores deberán estar en el mismo
orden en el que están definidos en la cláusula INSERT INTO.

Sin embargo, los nombres y valores de columna no tienen que estar en el mismo orden que las columnas
en la definición 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 carácter
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 cláusula VALUES para asignar un valor nulo a cualquier
columna que permita valores nulos.

GABRIELA PEÑALOZA I. 42
Si se intenta ejecutar una instrucción 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 algún 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 cláusula
VALUES de la instrucción INSERT.

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

UPDATE <nombre de la tabla> SET <determinar expresión de la cláusula> [ {, <determinar expresión de


la cláusula> }... ] [ WHERE <condición de búsqueda> ]

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

GABRIELA PEÑALOZA I. 43
Se debe especificar una condición o conjunto de condiciones que actúa como un filtro para las filas que se
están 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 cláusulas, y una sola de ellas es obligatoria. La siguiente sintaxis muestra qué tan
básica es la instrucción DELETE:

DELETE FROM [ WHERE]

Como se puede ver, la cláusula DELETE FROM requiere que se especifique el nombre de la tabla (o vista) de
la cual se quieren eliminar filas. La cláusula WHERE, la cual es similar a la cláusula WHERE en una instrucción
SELECT y en una instrucción UPDATE, requiere que se especifique una condición de búsqueda. Si no se
incluye una cláusula WHERE en la instrucción DELETE, todas las filas serán eliminadas de la tabla
especificada. Es importante comprender que la instrucción DELETE no elimina la tabla en sí, sino solamente
filas en la table.

Ejemplo:

DELETE FROM paciente WHERE id_paciente=1

GABRIELA PEÑALOZA I. 44
TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia
TRUNCATE, mucho más rápida que DELETE. Es decir, todos los registros que se encuentren en la tabla serán
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;

GABRIELA PEÑALOZA I. 45
PARTE 9: PROGRAMACION SQL
PROCEDIMIENTO Y FUNCIONES.

La forma más sencilla de distinguir entre los procedimientos y funciones invocados por SQL es considerar
un procedimiento como un conjunto de una o más instrucciones SQL almacenadas, similar a cómo una vista
almacena una instrucción SELECT, y considerar una función como un tipo de operación 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 más básico,
la instrucción CREATE PROCEDURE luce de la siguiente manera:

CREATE PROCEDURE nombre_proc ( [ <declaración de parametros[ { , declaración de parametros } ... ] ] )


[ característica de rutinas... ] Cuerpo de rutinas

Como se puede ver, debe proporcionarse un nombre para el procedimiento (en la cláusula CREATE
PROCEDURE) seguido por cero o más declaraciones de parámetro, que van encerradas en paréntesis. Se
deben proporcionar los paréntesis incluso si no se define ninguna declaración. Después de las declaraciones
de parámetro se tiene la opción de definir una o más características 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 instrucción utilizada para crear una función invocada por SQL. Como se puede
ver en la siguiente sintaxis, una función contiene unos cuantos elementos más que un procedimiento:

CREATE FUNCTION nombre_func( [ <declaración de parametros[ { , declaración de parametros } ... ] ]


)RETURNS tipo_datos

VARIABLES LOCALES

Además de permitir pasar los parámetros a un procedimiento, SQL también proporciona una forma para
crear variables locales en la definición del procedimiento que puedan ser utilizadas dentro del cuerpo del
procedimiento. Una variable local puede ser considerada como un tipo de marcador de posición que
mantiene un valor en la memoria durante la ejecución 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

GABRIELA PEÑALOZA I. 46
Siguiendo este mismo ejemplo, vamos a crear la variable resultado para una posterior operación.

En este caso aplicaríamos lo siguiente:

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

) y ambos son CD de New Age. En una definición de procedimiento no se está limitado solamente a una
variable. Se puede crear una instrucción DECLARE para cada variable que se quiera incluir. También es
posible incluir múltiples variables en una instrucción, si esas variables están asignadas al mismo tipo de
datos.

GABRIELA PEÑALOZA I. 47
INSTRUCCIONES CONDICIONALES.

IF

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

WHILE

la cláusula WHILE finaliza la repetición automáticamente cuando la condición se evalúa como falsa.

Nótese 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 repetición WHILE.
Un punto más en el que hay que poner atención es dónde se evalúa la condición en la lógica de repetición.
Algunas implementaciones evalúan la condición al principio de la repetición. Otras la evalúan al final de la
repetición, lo que significa que las instrucciones en la repetición siempre se ejecutarán por lo menos una
vez, incluso si la condición se evalúa como falsa la primera vez que se inicia la repetición.

Como se muestra en la imagen, se utiliza un ciclo while, el cual repite 100 veces “Hola soy el numero ” + el
conteo especifico.

GABRIELA PEÑALOZA I. 48
EXECUTE

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

Siguiendo el ejemplo anterior, para ejecutar esta instrucción deberá incluir:

EXECUTE mayoría_edad

GABRIELA PEÑALOZA I. 49
CASE

Una expresión de valor CASE permite determinar una serie de condiciones que modifican valores
específicos arrojados por la instrucción 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 condición especificada dentro de
la expresión CASE. Una expresión de valor incluye la palabra clave CASE y una lista de condiciones. La última
condición proporciona una condición por defecto si ninguna de las condiciones anteriores ha sido cumplida.
Entonces la expresión de valor se cierra utilizando la palabra clave END.

GABRIELA PEÑALOZA I. 50
MANEJO DE ERRORES

Cuando se incrusten instrucciones SQL en el lenguaje host, se deberá proporcionar una forma de tomar
acciones específicas si se recibe un mensaje de error o de advertencia cuando se intenta acceder a los datos.
SQL proporciona un método 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 transacción es completar los cambios hechos por las instrucciones
en esa transacción, no hay duda de que existirán ocasiones cuando se quiera reinvertir esos cambios. Para
poder controlar estas reinversiones, se debe utilizar una instrucción ROLLBACK para deshacer los cambios
y eliminar la transacción, o para regresar los cambios a un punto de recuperación específico. La siguiente
sintaxis muestra los diferentes elementos que pueden ser incluidos en una instrucción ROLLBACK:

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


<nombre del punto de recuperación> ]

GABRIELA PEÑALOZA I. 51
PARTE 10: TRIGGERS

Existe un número de similitudes entre SGDB (por ejemplo, el uso de la instrucción CREATE TRIGGER para
crear un activador), y las implementaciones de activadores en varios productos comparten algunas
características básicas, particularmente aquellas que hacen posible dispararlo automáticamente para
realizar una acción secundaria relacionada con la acción primaria que invocó el activador.

Un Triggers es creado para generar una instrucción que se gatilla, cuando es invocada una acción
primaria.

Por ejemplo, supongamos que no se permite la eliminación de algún usuario previa autorización,
entonces se genera un trigger que desencadenará un mensaje de advertencia indicando que no pueden
ser borrados los datos en la tabla en específico y evitará dicha acción.

Si sintaxis sería:

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. Sólo 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 modificación de datos que activan el
desencadenador cuando se intenta ejecutarlas en esta tabla o vista. Se debe especificar al menos una
opción. En la definición del desencadenador se permite cualquier combinación de estas opciones, en
cualquier orden.

A pesar de que el estándar SQL no soporta ninguna clase de instrucción que permite alterar un activador,
sí soporta una forma de eliminar un activador, que se logra utilizando la instrucción DROP TRIGGER. Como
se puede ver en la siguiente sintaxis, esta instrucción es muy básica:

DROP TRIGGER <nombre>

GABRIELA PEÑALOZA I. 52
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 médico.

Para usar un trigger, pueden ser utilizado 3 metodos:

AFTER indica que el desencadenador sólo se activa cuando todas las operaciones especificadas en la
instrucción SQL desencadenadora se han ejecutado correctamente. Además, 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 serán ejecutadas después.

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

Como máximo, se puede definir un desencadenador INSTEAD OF por cada instrucción 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.

GABRIELA PEÑALOZA I. 53
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 través de los resultados de la
consulta para encontrar la información que se necesita. Si el tamaño de los resultados es demasiado
extenso para desplazarse fácilmente, es posible hacer más preciso el enfoque de la expresión de búsqueda
para arrojar un conjunto de resultados más manejable. Sin embargo, la mayoría de los accesos de datos se
hace a través de medios diferentes a la invocación directa (a pesar del hecho de que accedemos a los datos
de forma interactiva a través de todo el libro). Uno de los métodos más comunes, el SQL incrustado, accede
a los datos a través de instrucciones SQL incrustadas en un programa de aplicación. Los elementos de datos
arrojados por las instrucciones SQL son utilizados por un lenguaje de programación externo (el lenguaje
host) para soportar procesos de aplicación específicos.

La mayoría de los lenguajes de programación de aplicación soportan el uso de cursores para recuperar
datos de una base de datos SQL. El lenguaje del cursor está incrustado en el código de programación de
una forma muy parecida a la que se incrustaría cualquier instrucción SQL. Cuando se utiliza un cursor en un
lenguaje de programación, primero se debe declarar el cursor (similar a como se declararía una variable) y
luego utilizar el nombre de la instrucción (el nombre que se le asignó al cursor) en otras instrucciones SQL
incrustadas para abrir el cursor, recuperar filas individuales a través 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

GABRIELA PEÑALOZA I. 54
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 destruído

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 operación
donde necesitamos modificar alguna información 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 ejecución.

GABRIELA PEÑALOZA I. 55
PARTE 12: CONVERSION DE DATOS

Convierten una expresión de un tipo de datos en otro de forma explícita. CAST y CONVERT proporcionan
funciones similares. Su sintaxis para ambas consultas se muestra a continuación:

CAST (expresión AS tipo_dato [ (longitud)])

CONVERT (tipo_dato [ (longitud)] , expresión [ , estilo ] )

expresión Es cualquier expresión válida. 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 parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Para CONVERT, si no se ha especificado el parámetro 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 también es NULL.

En las conversiones money a carácter los estilos utilizados son:

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

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

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

Ejemplo:

GABRIELA PEÑALOZA I. 56
PARSE Y TRY_PARSE
La función PARSE permite convertir una cadena de texto a un valor numérico o de fecha/hora, y produce
un error en caso de no poder realizar la conversión. Es importante tener en cuenta, que la función 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.

Además, la función PARSE también permite realizar la conversión teniendo en cuenta la información de un
idioma especificado como parámetro.

Para complementar a la función PARSE, desde SQL Server 2012 también tenemos disponible a la función
TRY_PARSE, que es equivalente a PARSE, excepto que devuelve NULL (en lugar de generar una excepción)
cuando no puede realizar la conversión.

FORMAT

La función 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 específico.

Su sintaxis es:

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

El parámetro “valor” es el valor que quieres formatear, debe ser un dato compatible con la función. El
formato es precisamente como queremos nuestro resultado (ej. “C”, “D”, “g”, “dd/MM/yyyy”).

A continuación, se muestra un ejemplo extrayendo los datos de fecha de atención de la tabla atención. Se
puede apreciar que la fecha se encuentra en formato año-mes-día.

GABRIELA PEÑALOZA I. 57
Veremos cómo podríamos cambiar el formato, dejando la fecha día, mes, año.

En variable fecha, estamos guardando la fecha de atención 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 información acerca de la fecha y la hora actuales.
Cada función arroja un valor basado en la fecha u hora (o ambos) tal como están configurados en el
sistema operativo.

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

select getdate();

GABRIELA PEÑALOZA I. 58
datepart(): retorna la parte específica de una fecha, el año, trimestre, día, hora, etc. Los valores para
"partedefecha" pueden ser: year (año), 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 número de mes actual.

 select datepart(day,getdate()); retorna el día actual.

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

Datename: Retorna el nombre de una parte específica 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;

GABRIELA PEÑALOZA I. 59
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 parámetro, tantas veces
como lo indica el segundo parámetro. Los valores para el primer argumento pueden ser: year (año), 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 serían:

 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 (según 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 (días).

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

GABRIELA PEÑALOZA I. 60
GABRIELA PEÑALOZA I. 61
TEXTOS UTILIZADOS

Ing. Herik Robles Huerta, Julio 2010, TUTORIAL SQL

Fundamentos de SQL Tercera edición, Andy Oppel Robert Sheldon, 2010.

GABRIELA PEÑALOZA I. 62

Anda mungkin juga menyukai