Microsoft SQL Server 2014
Microsoft SQL Server 2014
Procedimientos Almacenados
Son aplicaciones que permiten la administracin de los datos almacenados en una o varias
Bases de datos.
Independencia de los datos y los programas
Minimizacin de la Redundancia
Registro: Representa el Conjunto de valores por cada campo de una misma fila.
3. Ejercicio Propuesto
Se desea implementar un sistema web para gestionar la reserva de vuelos; que permita al
usuario registrar sus reservas de vuelos y hacer consultas, adems de poder comprar los
boletos de viaje de manera remota, sin la necesidad de recurrir a una agencia de viaje.
El sistema web debe de mostrar una interfaz describiendo los servicios ofrecidos junto con la
opcin para registrarse si es la primera vez que accede a ella, o si ya se encuentra registrado
acceder por medio de su usuario (email) y su clave.
Una vez registrado el usuario este podr acceder a los siguientes procesos:
Consulta de Vuelos
Informacin de Vuelos
Reserva de Vuelos
4.
Relaciones
El modo de relacionar registros entre tablas es por tanto mediante referencias, para lo cual se
usan los identificadores definidos como claves primarias y forneas.
Clave primaria
En el diseo de bases de datos relacionales, se llama clave primaria (Primary Key) a un campo
o a una combinacin de campos que identifica de forma nica a cada fila de una tabla. Una
clave primaria comprende de esta manera una columna o conjunto de columnas. No puede
haber dos filas en una tabla que tengan la misma clave primaria.
Una clave primaria debe identificar a todas las posibles filas de una tabla y no nicamente a las
filas que se encuentran en un momento determinado. Ejemplos de claves primarias son DNI
(asociado a una persona) o ISBN (asociado a un libro). Las guas telefnicas y diccionarios no
pueden usar nombres o palabras o nmeros del sistema decimal de Dewey como claves
candidatas, porque no identifican unvocamente nmeros de telfono o palabras.
Clave fornea
En el contexto de bases de datos relacionales, una clave fornea o clave ajena (o Foreign Key
FK) es una limitacin referencial entre dos tablas. La clave fornea identifica una columna o
grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo
de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo
deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla
referenciada. As, una fila en la tabla referendo no puede contener valores que no existen en la
tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar
informacin. Esto es una parte esencial de la normalizacin de base de datos. Mltiples filas en
la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla
referenciada. Mayormente esto se ve reflejado en una relacin uno (tabla maestra o
referenciada) a muchos (tabla hija o referendo).
Diagrama Relacional Base de Datos en Sql Server 2014
Dentro de las opciones que nos ofrece nuestra base de datos, encontramos la opcin Diagrama
de la Base de Datos, que nos permite realizar las relaciones de las tablas en forma Grfica.
Para acceder a esta opcin le damos click derecho y crearemos un nuevo Diagrama de Base
de Datos.
5. Lenguaje SQL
El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de
agregados. Estos elementos se Combinan en las instrucciones para crear, actualizar y
Manipular las base de datos.
Existen 2 tipos de Comandos SQL:
Lenguaje de Definicin de Datos (DDL), comandos para crear y definir nuevas base de
datos, tablas, campos e ndices.
Lenguaje de Manipulacin de Datos (DML), comandos para insertar, modificar y eliminar
registros, as como ordenar, filtrar y extraer informacin de la base de datos.
1. Lenguaje de Definicin de Datos
SENTENCIA CREATE (Comando de Creacin de Objetos de la Base de Datos): Permite crear
base de datos, tablas, desencadenadores, procedimientos, funciones, vistas e ndices de una
base de Datos.
FILEGROWTH=10%
)
GO
--ACTIVAMOS LA BASE DE DATOS PARA EMPEZAR A TRABAJAR CON ELLA
USE DBRESERVAM
GO
6. Tipos de Datos en Sql Server 2014
Tipo de Datos Carcter
Char: Los datos deben de tener una longitud fija hasta 8Kb. Ejemplo: Si queremos almacenar
categoras por ejemplo A, B, C Utilizaremos Char(1)
Varchar: Puede variar en el nmero de carcteres, es decir el valor asignado no es fijo, aqu
SQL administra los espacios en blanco y los optimiza.
Ejemplo en un Varchar(15) ocupar menos espacio el dato Ana que Juan Carlos.
Tipo de Datos Enteros
Int: Nmeros enteros desde
-2 31 (-2 147 483 648) a 2 31-1 (2 147 483 647).
Tipos de Datos Fecha
Date: Tipo de dato que muestra la fecha en el siguiente formato 07-07-2014.
Tipo de Datos Decimal
Decimal: Tipo de datos que se utiliza para almacenar nmeros decimales que pueden tener
hasta 38 dgitos.
Tipo de Datos Monetario
Money: Cantidad monetaria positiva o negativa.
Propiedades de Datos
Propiedad NULL: Hay dos formas de expresar el trmino NULL, al implementarlo como NULL
estamos indicando que el contenido de dicha columna no es obligatorio, si se necesita
especificar que el campo es obligatorio se implementar con NOT NULL.
Propiedad IDENTITY: Propiedad slo aplicada a campos numricos, ya que define un
autoincremento automtico de valores.
Implementando las tablas Utilizando Lenguaje de Definicin de Datos DDL
--ACTIVAMOS LA BASE DE DATOS PARA EMPEZAR A TRABAJAR CON ELLA
USE DBRESERVAM
GO
--IMPLEMENTANDO LAS TABLAS DE LA BASE DATOS
--TABLA PAS
CREATE TABLE pais (
idpais char(4) not null primary key,
nombre varchar(30) not null unique
)
go
--TABLA PASAJERO
CREATE TABLE pasajero (
idpasajero char(8) not null primary key,
nombre varchar(20) not null,
apaterno varchar(20) not null,
amaterno varchar(20) not null,
tipo_documento varchar(30) not null,
num_documento varchar (12) not null,
fecha_nacimiento date not null,
idpais char(4) not null,
telefono varchar(15) null,
email varchar(50) not null unique,
clave varchar(20) not null
)
go
--TABLA AEROPUERTO
CREATE TABLE aeropuerto (
idaeropuerto char(5) not null,
nombre varchar(50) not null,
idpais char(4) not null
)
go
--TAMBIEN SE PUEDE AGREGAR LA LLAVE PRIMARIA DESPUES DE CREAR LA
TABLA
ALTER TABLE aeropuerto
ADD CONSTRAINT pk_aeropuerto_idaeropuerto
PRIMARY KEY NONCLUSTERED (IDAEROPUERTO)
GO
--TAMBIEN VOY A CREAR EL CONSTRAINT DE CAMPO NICO
ALTER TABLE aeropuerto
ADD CONSTRAINT uq_aeropuerto_nombre
UNIQUE(idaeropuerto)
GO
--TABLA AEROLNEA
CREATE TABLE aerolinea (
idaerolinea int not null primary key,
ruc char(11) not null unique,
nombre varchar(40) not null unique
)
go
--TABLA AVIN
CREATE TABLE avion (
idavion char(5) not null primary key,
idaerolinea int not null,
fabricante varchar(40) null,
tipo varchar(30) null,
capacidad int not null
)
go
Check: Permite restringir el rango de valores que pueden estar permitidos ingresar en una o
ms columnas de una tabla.
Default: Permite registrar un dato en un campo por defecto cuando el usuario no ingresa
ningn valor, la propiedad del campo de la tabla necesariamente tiene que ser Null.
Ejemplo se puede Utilizar para los campos de tipo Date (fecha), cuando el usuario no ingresa
ninguna fecha que se asigne la fecha actual.
Implementado las tablas faltantes de nuestro ejercicio Propuesto Dbreserva
e implementando las restricciones
8.
Relaciones
El modo de relacionar registros entre tablas es por tanto mediante referencias, para lo cual se
usan los identificadores definidos como claves primarias y forneas.
Clave primaria
En el diseo de bases de datos relacionales, se llama clave primaria (Primary Key) a un campo
o a una combinacin de campos que identifica de forma nica a cada fila de una tabla. Una
clave primaria comprende de esta manera una columna o conjunto de columnas. No puede
haber dos filas en una tabla que tengan la misma clave primaria.
Una clave primaria debe identificar a todas las posibles filas de una tabla y no nicamente a las
filas que se encuentran en un momento determinado. Ejemplos de claves primarias son DNI
(asociado a una persona) o ISBN (asociado a un libro). Las guas telefnicas y diccionarios no
pueden usar nombres o palabras o nmeros del sistema decimal de Dewey como claves
candidatas, porque no identifican unvocamente nmeros de telfono o palabras.
Clave fornea
En el contexto de bases de datos relacionales, una clave fornea o clave ajena (o Foreign Key
FK) es una limitacin referencial entre dos tablas. La clave fornea identifica una columna o
grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo
de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo
deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla
referenciada. As, una fila en la tabla referendo no puede contener valores que no existen en la
tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar
informacin. Esto es una parte esencial de la normalizacin de base de datos. Mltiples filas en
la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla
referenciada. Mayormente esto se ve reflejado en una relacin uno (tabla maestra o
referenciada) a muchos (tabla hija o referendo).
Diagrama Relacional Base de Datos en Sql Server 2014
En el vdeo mostrado a continuacin, se describe cmo crear relaciones de clave externa en
SQL Server 2014 mediante cdigo Transact-SQL. Cuando se asocian filas de una tabla con
filas de otra tabla, se crea una relacin entre las dos tablas.
Cdigo que permite crear el diagrama entidad relacin de nuestra base de datos
Propuesta
--IMPLEMENTADO LAS LLAVES FORNEAS
--Relacin Entre la tabla pasajero y pas
ALTER TABLE pasajero
ADD CONSTRAINT FK_pasajero_pais
FOREIGN KEY (idpais) REFERENCES pais (idpais)
go
--Relacin entre la tabla aeropuerto pas
ALTER TABLE aeropuerto
ADD CONSTRAINT FK_aeropuerto_pais
FOREIGN KEY(idpais) REFERENCES pais (idpais)
go
Para poder cambiar de ubicacin fsica o modificar el nombre de la Base de Datos, el Motor
propone algunas polticas de gestin proporcionando funciones, sentencias e intrucciones para
dicho control.
Separar Base de Datos DETACH
Procedimiento Almacenado SP_DETACH_DB (Permite separar una Base de Datos del Servidor
Actual):
use master
SP_DETACH_DB @DBNAME=DBRESERVA
GO
Adjuntar Base de Datos
Utilizaremos el Asistente de Microsoft SQL Server Management Studio.
Lo veremos en el vdeo mostrado a continuacin.
10. Lenguaje SQL
El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de
agregados. Estos elementos se Combinan en las instrucciones para crear, actualizar y
Manipular las base de datos.
Existen 2 tipos de Comandos SQL:
Lenguaje de Definicin de Datos (DDL), comandos para crear y definir nuevas base de
datos, tablas, campos e ndices.
Lenguaje de Manipulacin de Datos (DML), comandos para insertar, modificar y eliminar
registros, as como ordenar, filtrar y extraer informacin de la base de datos.
2. Lenguaje de Manipulacin de Datos (DML)
El lenguaje de Manipulacin de Datos (DML) es un trmino usado para recuperar y trabajar con
datos en Sql Server, incluye instrucciones para agregar, modificar, consultar o quitar datos de
una base de Datos en Sql Server.
UPDATE
DELETE
SELECT
MERGE
BULK INSERT
Pas
Pasajero
Reserva
Pago
Tarifa
Aeropuerto
SENTENCIA INSERT
Ejemplos: Insertar Registros en las Tablas
Aerolnea
Pas
Pasajero
Reserva
Pago
Tarifa
Aeropuerto
Tabla Aeropuerto
--Insertar tarifa
insert into tarifa
values ('1','Supervip',1200,12),
('2','Vip',1000,12),
('3','Nacional',800,12),
('4','Econmica',500,0)
go
--Verificando registros insertados en la tabla tarifa
select * from tarifa
update tarifa
set impuesto=11
go
2. Actualizar los valores de la columna impuesto aumentado en 2 a todos los registros de la
tabla TARIFA.
update tarifa
set impuesto=impuesto + 2
go
3. Asignar el impuesto a cero slo a los registros cuya clase sea Econmico de la tabla tarifa.
update tarifa
set impuesto=0
where clase='Econmica'
go
4. Actualizar los costos de la tabla RESERVA disminuyendo en 50 a los registros cuyo ingreso
se realiz el ao 2013, utilizar variables.
Tabla Reserva
update reserva
set costo=costo - 50
where year(fecha)=2013
go
4. Asignar el texto SIN FONO en el campo telfono de los pasajeros que sean de Per
update pasajero
set telefono = 'Sin Fono'
where idpais= (select idpais from pais where nombre='Per')
go
13. SENTENCIA DELETE (Eliminacin de Registros de una tabla): Permite eliminar todos los
registros especficados en una determinada tabla.
DELETE
[TOP { Expresin } ]
FROM TABLE
[WHERE <Search_Condition>]
Ejemplos
1. Eliminar todos los registros de la Tabla AEROLNEA.
Tabla Aerolnea
go
2. Eliminar el registro de la tabla Pasajero cuyo idpasajero sea P0000004.
Tabla Pasajero
go
5. Eliminar los registros de la tabla PAGO, que se han efectuado en el ao 2012 2013.
Tabla Pago
Recuperar los datos de los sistemas informticos de una catstrofe informtica, natural
o ataque.
[<GROUP BY>]
[HAVING <Condicin> ]
[ORDER BY columna [ASC-DESC]]
Clusulas Principales
ALL: Especifica el conjunto de filas devueltas por la consulta.
DISTINCT: Sentencia utilizada para mostrar filas nicas no repetidas.
TOP: Para mostrar solo un nmero o porcentaje indicado de filas obtenidas.
FROM: Permite indicar las filas que estn involucradas.
WHERE: Clusula que permite condicionar el resultado de una consulta.
GROUP BY: Permite agrupar un conjunto de registros en forma de resumen.
HAVING: Permite condicionar el resultado despus de haber agrupado los registros.
ORDER BY: Permite ordenar los registros de acuerdo a una columna espcfica.
Ejemplos
Ejemplo 1:
Mostrar los registros de la tabla PASAJERO , ordenarlos de manera ascendente por su apellido
paterno.
Tabla Pasajero
Clusula TOP:
Especfica que el conjunto de filas devueltas por la consulta puede ser controlado en un
nmero y en porcentaje. Considere que la muestra de registros devueltas siempre ser el
primer conjunto de filas especificadas. Para especificar el porcentaje slo agregar la palabra
PERCENT.
Ejemplo 2:
Mostrar los 3 primeros registros de la tabla PASAJERO ordenados por su apellido paterno .
select top 3 idpasajero as ID, nombre as Nombre, apaterno as ApellidoP,
amaterno as ApellidoM from pasajero
order by apaterno asc
go
Ejemplo 3:
Mostrar los 3 ltimos registros de la tabla PASAJERO ordenados por ambos apellidos.
select top 3 idpasajero as ID, nombre as Nombre, apaterno as ApellidoP,
amaterno as ApellidoM from pasajero
order by apaterno desc, amaterno desc
go
Ejemplo 4:
Mostrar el 30% de registros de la tabla RESERVA.
Tabla Reserva
Ejemplo 2:
Mostrar los pagos que se han realizado la fecha 27-01-2013.
Tabla Pago
go
Ejemplo 3:
Mostrar los pagos realizados en el mes de mayo del ao 2014.
select fecha,idpasajero,monto from pago
where month(fecha)='5'
and year(fecha)='2014'
go
Ejemplo 4:
Mostrar los Pasajeros que no tienen asignado un telfono.
Ejemplo 5:
Implementar un Script que permita mostrar los PASAJEROS con su correspondiente pas de
residencia.
Aritmticos
Asignacin
Lgicos
A) Operadores Aritmticos
+ Sumar : Operador de Suma Nmerica y concatenacin de Columnas.
- Restar : Operador de resta Nmerica y tambin representa a nmeros negativos.
* Multiplicar : Operador de Multiplicacin.
/ Dividir : Operador de Divisin entera y fraccionaria.
% Mdulo : Operador que Devuelve el resto de una divisin.
B) Operador de Asignacin
Sql server solo cuenta con un operador para la asignacin de valores.
El operador = se tendr que colocar en cualquier expresin que necesite asignar un valor de
cualquier tipo.
Ejemplos:
Ejemplo 1:
Script que permita mostrar el resultado de la expresin 2*(10+15) - (8/3), utilizar la sentencia
SELECT para mostrar el resultado.
Ejemplo 2:
Script que permita mostrar el resultado de la expresin Celsius=(Fharenheit-32)*5/9, usar la
sentencia Select.
(100-32)*5/9 as Celsius
go
Ejemplo 3:
Calcular el rea de un Crculo, almacenando el valor del radio y de PI en sus variables
respectivas.
Ejemplo 4:
Script que permita capturar en una variable el correo electrnico del pasajero con cdigo
P0000005, usar variables Transact-SQL y sentencia Select para mostrar el email.
Igualdad de Expresiones
!= Diferencia de Expresiones
>=
Mayor / Mayor o Igual
<=
Menor / Menor o Igual
Ejemplos
Ejemplo 1:
Script para Mostrar las reservas que sean del ao 2014 y no superen los $ 500.
Tabla Reserva
Ejemplo 2:
Script que permita mostrar las reservas cuyo costo se encuentre desde $400 hasta $700.
Ejemplo 3:
Script que permita mostrar los pasajeros cuya letra inicial de su apellido paterno se
encuentre entre A y C.
Tabla Pasajero
Ejemplo 4:
Script que permita mostrar los pasajeros cuya letra inicial de su apellido paterno No se
encuentre entre A y C.
Ejemplo 5:
Script que permita mostrar las reservas cuya fecha se encuentra en el ao 2013.
go
Ejemplo 3:
Mostrar los pasajeros que tienen una cuenta de correo GMAIL
INNER JOIN
JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
CROSS JOIN
INNER JOIN
El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas
de distintas tablas de forma ms eficiente que con el producto cartesiano
cuando una de las columnas de emparejamiento est indexada.
Ejemplo
1. Implementar un Script que permita mostrar los pasajeros con su
correspondiente pas de residencia (Inner Join).
Tabla Pasajero-Pas
2. Implementar un Script que permita mostrar los pasajeros con las siguientes
columnas idpasajero,
nombre, apaterno, amaterno, pas, fecha de pago,
monto de pago (Inner Join).
Tabla Pas-Pasajero-Pago
Ejemplos:
1. Implementar un Script que permita mostrar los pasajeros que no han realizado ningn pago
(Left Join).
Tabla Pas-Pasajero-Pago
RIGHT JOIN
Se devuelven todas las filas de la tabla de la derecha. Cada vez que una fila de la tabla de
la derecha no tenga correspondencia en la tabla de la izquierda, se devuelven valores
NULL para la tabla de la izquierda.
El operador de combinacin RIGHT JOIN, indica que todas las filas de la segunda tabla se
deben incluir en los resultados, con independencia si hay datos coincidentes en la primera
tabla.
2. Implementar un Script que permita mostrar todos los registros de la tabla pasajero y pas
(Right Join).
Tabla Pasajero-Pas
on pas.idpais=pai.idpais
go
FULL JOIN
Una combinacin externa completa devuelve todas las filas de las tablas de la izquierda y la
derecha. Cada vez que una fila no tenga coincidencia en la otra tabla, las columnas de la lista
de seleccin de la otra tabla contendrn valores NULL. Cuando haya una coincidencia entre las
tablas, la fila completa del conjunto de resultados contendr los valores de datos
de las tablas base.
CROSS JOIN
Las combinaciones cruzadas presentan el producto cartesiano de todos los registros de las dos
tablas. Se emplea el CROSS JOIN cuando se quiere combinar todos los registros de una tabla
con cada registro de otra tabla.
3. Implementar un Script que permita mostrar las registros de la tabla pasajero y pago de tal
forma que se aplique un producto cartesiano entre sus filas (Cross Join).
--Utilizando Group By
select p.idpais from pasajero p
group by p.idpais
go
--Utilizando Group By
Select aer.nombre,count(avi.idavion) as Total_Aviones
from aerolinea aer inner join avion avi
on avi.idaerolinea=aer.idaerolinea
group by aer.nombre
having count(avi.idavion)>1
go
Ejemplo 2:
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla
pago por cada ao, considere el ao de la columna fecha. Use la Funcin SUM y la clusula
Group By.
--Utilizando SUM y Group By
select year(fecha) as [Ao], sum(monto) as [Total Pago]
from pago
group by year(fecha)
go
Ejemplo 3:
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla
pago por cada ao, y mes, considere el ao de la columna fecha. Use la Funcin SUM y la
clusula Group By.
--Utilizando SUM y Group By
select year(fecha) as [Ao],month(fecha) as Mes, sum(monto) as [Total
Pago] from pago
group by year(fecha),month(fecha)
go
Ejemplo 2:
Implementar un Script que permita determinar el total de pasajeros registrados agrupados por
su pas, tener en cuenta las columnas a mostrar Nombre del pas, Total Pasajeros. Use la
Funcin agregada COUNT y la clusula Group By e Inner Join.
Tabla Pasajero-Pas
T
--Usando la Funcin agregada COUNT y la clusula Group By e Inner Join.
select pai.nombre as [Pas],count(pas.idpasajero) as
[Total Pasajeros] from pasajero pas inner join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
go
Ejemplos:
Ejemplo 1:
Implementar un Script que permita mostrar el monto ms alto y ms bajo registrado en la tabla
PAGO (Funcin MAX y MIN).
Tabla Pago
Ejemplo 2:
Implementar un Script que permita mostrar los montos ms altos y ms bajos por ao de la
tabla pago, ordenados de forma descendente.
Ejemplo 3:
Implementar un Script que permita mostrar los datos del pasajero que registra el mayor monto
desde la tabla PAGO.
Tabla Tarifa
Ejemplo 2:
Implementar un Script que permita mostrar el monto promedio de pagos agrupado por pases.
(Funcin AVG).
Tabla Pas-Pasajero-Pago
Ejemplo 2:
Implementar un Script que permita mostrar el total de registros de las tablas Pasajero, Pas,
Pago desde una misma consulta.
Tabla Pas-Pasajero-Pago
go
--Estructura Condicional IF
declare @idpais char(4)='0011',
@nombre varchar(30)='Argelia'
if exists(select * from pais where nombre=@nombre)
begin
print 'Pas ya Registrado'
end
else
begin
insert into pais
values (@idpais,@nombre)
print 'Pas Registrado Correctamente'
end
go
Ejemplo 2:
Implementar un Script que permita Mostrar el mensaje de No hay Pasajeros en este pas, solo
cuando el total de pasajeros asignados a un determinado Pas no tenga registros en la tabla
pasajero. Caso contrarios determinar cuntos pasajeros tiene dicho pas.
Tabla Pas-Pasajero
end
go
Ejemplo 2:
Implementar un Script que permita mostrar el nmero total de pasajeros por pas y el
mensaje NO CUENTA solo a los pases cuyo nmero de pasajeros sea cero.
Tabla Pas-Pasajero