Sei sulla pagina 1di 74

Instalacin y Configuracin de Sql server 2014 - Bases de Datos en Microsoft Sql Server 2014 (1-35)

Contenido del Curso de Bases de datos en Microsoft SQLServer 2014

Instalacin y Configuracin, Seguridad


Gestin de Base de Datos
Estructura de Una Base de datos
Archivos y Grupos Fsicos de Bases de Datos
Esquemas, Tablas, Campos, Tipos de datos
Relaciones, Llaves primarias y Forneas
Restricciones Unique, Check, Default
Separar y Adjuntar Base de Datos
Backup y Restauracin de Base de Datos
LDD Lenguaje de Manipulacin de Datos
Create, Alter, Drop
DML Lenguaje de Manipulacin de Datos
Insert Into, Update, Delete
Select, Group By, Having, Union
Programacin Transact SQL
Variables, Funciones Cast y Convert
Estructuras de Control Condicionales e Iterativas o repetitivas
Procedimientos Almacenados
Cursores, Triggers, Tablas de Referencia Cruzada
Qu es una Base de Datos?

Es un conjunto de Informacin relacionada sobre un tema en particular, organizada de alguna forma tal que
suministra una base o fundamento para procedimientos, como la recuperacin o consulta de la Informacin, la
elaboracin de conclusiones en base a la data y la toma de decisiones de una organizacin.

Se dice que cualquier conjunto de Informacin que sirva a lo nombrado anteriormente se le calificar como base de
Datos, aun cuando la informacin no est almacenada en algn medio Informtico.

Sistemas de Gestin de Base de Datos (SGBD)

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
Integracin y Sincronizacin de las Bases de Datos
Facilidad de Manipulacin y Recuperacin de la Informacin
Seguridad y Control Centralizado.
SQL Server 2014

Microsoft SQLServer es un Sistema para la Gestin de Base de Datos basado en el Modelo Relacional. Sus lenguajes
para consultas son Transact-SQL y Ansi SQL.

Presenta Un entorno grfico de administracin de los Objetos del motor de base de datos, que permite el uso de
comando DDL y DML grficamente.

Base de Datos en Sql Server

Al instalar SQLServer tambin se registran Bases de datos que administran diferentes aspectos del servidor de Base
de Datos.

MASTER: Es el ncleo y contiene Informacin vital de la Instancia de Sqlserver, informacin de la administracin de


las diferentes bases de datos.
TEMPDB: Base de datos temporal que brinda espacios para realizar algunas operaciones.
MODEL: Es una plantilla para todas las bases de datos creadas en el servidor, se implementa cuando se ejecuta el
comando CREATE DATABASE.
MSDB: Empleada por SQL Server Agent, guarda informacin de servicios de automatizacin, historial de copias de
seguridad, tareas, alertas, planes de mantenimiento entre otros registros.
Estructura de Base de Datos en Sql Server

Tablas: La tabla es el primer objeto de una base de datos y se organiza en filas y columnas, una fila equivale a un
registro y las columnas definen los campos del registro, los campos se definen sobre un tipo de datos.

Campos: Representa los Atributos de una entidad o tabla.


Campo Clave: Es el campo que representa un valor nico e identifica a un registro de la tabla.
Campo Forneo: Campo que une a otra entidad formando una extensin de la tabla fuente.
Registro: Representa el Conjunto de valores por cada campo de una misma fila.
Dato: Es un valor que no representa nada mientras no se une a otros datos.
Estructura de una Base de Datos en Sql Server

Estructura de una Tabla en Sql Server

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
Por Horarios de Vuelos
Por Tarifas de Vuelos
Informacin de Vuelos
Reserva de Vuelos
Compra de Boletos de viaje
Esquema de Archivos en Sql Server

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 caracteres, 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.

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.

Imagen 1: Diagrama relacional de la Base de datos del Curso.

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.

SENTENCIA ALTER (Comando de Modificacin de Objetos de la Base de Datos): Permite la modificacin de un objeto
asociado a una base de Datos, puede modificar archivos, grupo de archivos, cambiar atributos de un Objeto.

SENTENCIA DROP (Comando de Eliminacin de Objetos de la Base de Datos): Permite la eliminacin de un objeto
asociado a una Base de Datos.

Archivos de Base de Datos

Cdigo para Implementar la Base de Datos y los Archivos .MDF y .LDF

--Verificamos que la base de datos no este implementada para implementarla


IF DB_ID('DBRESERVAM') IS NOT NULL
BEGIN
USE MASTER
DROP DATABASE DBRESERVAM
END
--creamos la base de datos
CREATE DATABASE DBRESERVAM
ON PRIMARY (
NAME='DBRESERVA_MDF',
FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA.MDF',
SIZE=10MB,
MAXSIZE=40MB,
FILEGROWTH=5MB
),
(
NAME='DBRESERVA2_MDF',
FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA2.MDF',
SIZE=5MB,
MAXSIZE=30MB,
FILEGROWTH=5%
)
LOG ON (
NAME='DBRESERVA_LOG',
FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA2.LDF',
SIZE=4MB,
MAXSIZE=20MB,
FILEGROWTH=10%
)
GO

--ACTIVAMOS LA BASE DE DATOS PARA EMPEZAR A TRABAJAR CON ELLA


USE DBRESERVAM
GO

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

Restricciones de los Campos


Unique: Permite determinar que los valores registrados en una misma columna no sean idnticos, es decir se
mantengan nicos. Por ejemplo el email de una persona es un campo nico.

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

--Eliminar la tabla avin y la creare de nuevo pero dejando un campo menos


drop table avion

--creando de nuevo la tabla avion


CREATE TABLE avion (
idavion char(5) not null primary key,
idaerolinea int not null,
fabricante varchar(40) null,
tipo varchar(3) null
)
go
--voy agregar nuevamente la capacidad
ALTER TABLE AVION
ADD capacidad int not null
go

--eliminar nuevamente capacidad


--ALTER TABLE avion
--drop column capacidad
--go

--voy a modificar la columna tipo


ALTER TABLE avion
ALTER COLUMN tipo varchar(30) not null
go

--TABLA ASIENTO
CREATE TABLE asiento (
idasiento int not null primary key,
letra char(2) not null,
fila int not null
)
go

--TABLA TARIFA
CREATE TABLE tarifa(
idtarifa int not null primary key,
clase varchar(20) not null unique,
precio money not null,
impuesto money not null
)
go
--TABLA RESERVA
CREATE TABLE reserva(
idreserva int not null primary key,
costo money not null,
fecha date NULL,
observacion varchar(200) null
)
go

--AGREGAREMOS UNA RESTRICCIN DEFAULT A LA FECHA PARA QUE LA FECHA POR DEFECTO SEA LA FECHA ACTUAL
ALTER TABLE reserva
ADD CONSTRAINT DFL_RESERVA_FECHA
DEFAULT GETDATE() FOR fecha
go

--TABLA VUELO
CREATE TABLE vuelo(
idasiento int not null,
idaeropuerto char(5) not null,
idreserva int not null,
idavion char(5) not null,
idtarifa int not null
)
go

--IMPLEMENTANDO LAS LLAVES PRIMARIAS DE LA TABLA VUELO


ALTER TABLE VUELO
ADD PRIMARY KEY NONCLUSTERED (idasiento,idaeropuerto,idreserva,idavion)
go

--TABLA PAGO
CREATE TABLE pago(
idpago int not null primary key identity,
idreserva int not null,
idpasajero char(8) not null,
fecha date DEFAULT GETDATE(),
monto money not null,
tipo_comprobante varchar(20) not null,
num_comprobante varchar(15)not null,
impuesto decimal (5,2) not null
)
go

--AGREGARE UNA RESTRICCIN CHECK PARA SOLO INGRESAR FECHAS IGUALES O MENORES A LA FECHA ACTUAL
ALTER TABLE pago
ADD CONSTRAINT CHK_PAGO_FECHA
CHECK (fecha<=getdate())

go

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

--Relacin entre la tabla pago y pasajero


ALTER TABLE pago
ADD CONSTRAINT FK_pago_pasajero
FOREIGN KEY (idpasajero) REFERENCES pasajero (idpasajero)
go
--Relacin entre la tabla pago y reserva
ALTER TABLE pago
ADD CONSTRAINT fk_pago_reserva
FOREIGN KEY (idreserva) REFERENCES reserva(idreserva)
go

--Relacin entre la tabla avin y aerolnea


ALTER TABLE avion
ADD CONSTRAINT FK_avion_aerolinea
FOREIGN KEY (idaerolinea) REFERENCES aerolinea(idaerolinea)
go

--Relacin entre la tabla vuelo y asiento


ALTER TABLE vuelo
ADD CONSTRAINT FK_vuelo_asiento
FOREIGN KEY (idasiento) REFERENCES asiento(idasiento)
go

--Relacin entre la tabla vuelo y reserva


ALTER TABLE vuelo
ADD CONSTRAINT FK_vuelo_reserva
FOREIGN KEY (idreserva) REFERENCES reserva(idreserva)
go

--Relacin entre la tabla vuelo y avin


ALTER TABLE vuelo
ADD CONSTRAINT FK_vuelo_avion
FOREIGN KEY (idavion) REFERENCES avion(idavion)
go

--Relacin entre la tabla vuelo y tarifa


ALTER TABLE vuelo
ADD CONSTRAINT FK_vuelo_tarifa
FOREIGN KEY (idtarifa) REFERENCES tarifa(idtarifa)
go

--Relacin entre la tabla vuelo y aeropuerto


ALTER TABLE vuelo
ADD CONSTRAINT FK_vuelo_aeropuerto
FOREIGN KEY (idaeropuerto) REFERENCES aeropuerto(idaeropuerto)
go
Separar y Adjuntar Base de Datos
Cuando creamos una base de datos el servidor la protege de gestiones desde el exterior, eso quiere decir que desde
el explorador de windows no se podr eliminar ni cambiar de nombre a la DB.

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.

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.

Las siguientes sentencias son de categora DML:


INSERT
UPDATE
DELETE
SELECT
MERGE
BULK INSERT

Ejemplos: Insertar Registros en las Tablas

Aerolnea
Pas
Pasajero
Reserva
Pago
Tarifa
Aeropuerto

SENTENCIA INSERT (Insertar Registros):


Permite agregar una nueva fila a una tabla o vista.

INSERT [INTO]
[ESQUEMA] TABLA O VISTA [(Lista de columnas)]
[VALUES] ('Lista de valores')

SENTENCIA INSERT
Ejemplos: Insertar Registros en las Tablas
Aerolnea
Pas
Pasajero
Reserva
Pago
Tarifa
Aeropuerto

Tabla Aeropuerto

----Insertar registros en la tabla aeropuerto


insert into aeropuerto (idaeropuerto,idpais,nombre)
values ('AE01','0003','Bariloche'),
('AE02','0003','Mar del Plata'),
('AE03','0001','Jorge Chvez')
go
----Verificando los registros insertados en la tabla aeropuerto
select * from AEROPUERTO
Tabla Reserva

--Insertar registros en la tabla reserva


insert into RESERVA (idreserva,costo,fecha,observacion)
values ('1','140','01-27-2013','')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('2','100','01-01-2013','')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('3','300','03-04-2014','')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('4','800','04-05-2014','')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('5','250',getdate(),'')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('6','1150',getdate(),'')
go
insert into RESERVA (idreserva,costo,fecha,observacion)
values ('7','700',getdate(),'')
go

Tabla Pago
--Insertar registro en la tabla pago
insert into pago(idreserva,fecha,idpasajero,monto,tipo_comprobante,num_comprobante,impuesto)
values ('1','01-27-2013','P0000001',40,'Ticket','0010007',0.18),
('5','05-05-2014','P0000002',250,'Factura','001-0002',0.18),
('7',getdate(),'P0000007',700,'Factura','001-0003',0.18)

go
--Verificando registros insertados en la tabla pago
select * from pago

Tabla Tarifa

--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
SENTENCIA UPDATE (Modificacin y actualizacin de Datos): Permite modificar o actualizar un conjunto de registros
de una Tabla o vista dependiendo de una condicin.

UPDATE TABLA O VISTA


[SET] {column name =expresin }
[WHERE <Search_Condition>]

Ejemplos

1. Actualizar los Valores de la columna impuesto por el valor 11 a todos los registros de la tabla TARIFA.

Tabla 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
Todo esto deber ser realizado en la tabla
Pasajero.

Tabla Pasajero

update pasajero
set telefono = 'Sin Fono'
where idpais= (select idpais from pais where nombre='Per')
go

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

delete from aerolinea


go

2. Eliminar el registro de la tabla Pasajero cuyo idpasajero sea P0000004.

Tabla Pasajero
delete from pasajero
where idpasajero='P0000004'
go

3. Eliminar los registros de la tabla PASAJERO cuyo pas sea Mxico, utilizar subconsultas.

delete from pasajero


where idpais = (select idpais from pais where nombre = 'Mxico')
go

4. Eliminar los registros de la tabla RESERVA que sean del ao 2013 y que no superen los $ 70.

Tabla Reserva

delete from reserva


where year(fecha)= 2013 and costo>70
go
5. Eliminar los registros de la tabla PAGO, que se han efectuado en el ao 2012 2013.

Tabla Pago

delete from pago


where year(fecha)=2012 or year(fecha)=2013
go

Back Up de Base de Datos


Una copia de seguridad, copia de respaldo en tecnologas de la informacin es una copia de los datos originales
que se realiza con el fin de disponer de un medio para recuperarlos en caso de su prdida. Los Backup son tiles
ante distintos eventos y usos:

Recuperar los datos de los sistemas informticos de una catstrofe informtica, natural o ataque.
Restaurar una pequea cantidad de informacin que pueden haberse eliminado accidentalmente,
corrompido.
Restaurar Base de Datos

El proceso de copia de seguridad se complementa con otro conocido como restauracin de los datos (en ingls
restore), que es la accin de leer y grabar en la ubicacin original u otra alternativa los datos requeridos que han
sido respaldados con anterioridad.

Lenguaje de Manipulacin de Datos

COMANDO SELECT (Recuperacin de Registros): Uno de los propsitos de la Gestin de Base de Datos es almacenar
informacin Lgica y ordenada dentro de tablas, usaremos la sentencia SELECT y sus variadas formas de recuperar
informacin desde una tabla en la base de datos activa.

Sintxis
SELECT [ALL - DISTINCT]
[TOP nmero [PERCENT] ]
[FROM] tabla
[WHERE <Condicin> ]
[<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

--Seleccionando todas las filas y columnas


select all * from PASAJERO
order by apaterno asc
go

--Seleccionando slo algunas columnas


--1ra forma
select idpasajero as Codigo, apaterno as ApellidoPaterno,
amaterno as ApellidoMaterno
from PASAJERO
go
--2da Forma
select idpasajero as [Cdigo], apaterno as [Apellido Paterno],
amaterno as [Apellido Materno]
from PASAJERO
go

--Concatenando los Apellidos


select idpasajero as [Cdigo], apaterno as ApellidoPaterno,
amaterno as ApellidoMaterno
from PASAJERO
go

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

select top 30 percent * from reserva


go

Comando Select

Clusula Where
Clusula que permite condicionar el resultado de una consulta.

Ejemplos

Ejemplo 1:
Script que permita mostrar los PASAJEROS cuyo tipo de documento sea DNI.

Tabla Pasajero

select * from pasajero


where tipo_documento='DNI'
go

Ejemplo 2:
Mostrar los pagos que se han realizado la fecha 27-01-2013.

Tabla Pago
select fecha,idpasajero,monto from pago
where fecha='2013-1-27'
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.

select nombre,apaterno,amaterno,telefono from pasajero


where telefono is null
go
Ejemplo 5:
Implementar un Script que permita mostrar los PASAJEROS con su correspondiente pas de residencia.

select pas.nombre as Nombre,apaterno as ApellidoP,amaterno asApellidoM,pai.nombre as Pais


from pasajero pas, pais pai
where pas.idpais=pai.idpais
go

Operadores en SQL Server


Un Operador es un smbolo que especfica una accin que es realizada por una o ms expresiones. Categoras de
Operadores:
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.
Select '2*(10+5) - (8/3)' as [Operacin],
2*(10+5)-(8/3) as [Resultado]
go

Ejemplo 2:
Script que permita mostrar el resultado de la expresin Celsius=(Fharenheit-32)*5/9, usar la sentencia Select.

select '100' as Fahrenheit,


(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.

declare @pi float


declare @radio float
declare @area float
--Asignar valores
set @pi=3.1415
set @radio=7
--Encontrar el rea del Crculo
set @area=@pi * Power(@radio,2)

select @area as [rea]


go

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.

declare @correo varchar(70)

select @correo=email from pasajero


where idpasajero='P0000005'
--Mostramo el correo obtenido
select 'P0000005' as [Cdigo],
@correo as [Email]
go

Lenguaje de Manipupacin de Datos

C) Operadores Lgicos
Los operadores lgicos tienen por misin comprobar la veracidad de Alguna Condicin, estos como los operadores
de comparacin, devuelven el tipo de datos BOOLEAN (True, False, Unknown).

AND: Representa la Lgica Y, dos expresiones deben ser TRUE para poder devolver TRUE.
ANY: Devuelve TRUE si alguna expresin del conjunto de expresiones es TRUE.

BETWEEN: Devuelve TRUE si el valor se encuentra dentro de un rango numrico o cadena.


EXISTS: Devuelve TRUE si una determinada subconsulta devuelve por lo menos una fila de registros.
IN: Devuelve TRUE si el operando se encuentra dentro de una lista de valores especficos.
NOT: Invierte el valor booleano de una expresin
OR: Devuelve FALSE cuando ambas expresiones sean FALSE.
SOME: Devuelve TRUE si de un conjunto de comparaciones alguna es TRUE.

Smbolos que representan a los operadores Lgicos, tenemos los siguientes:

= 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

select * from reserva


where year(fecha)='2014'
and costo<500
go
Ejemplo 2:
Script que permita mostrar las reservas cuyo costo se encuentre desde $400 hasta $700.

select * from reserva


where costo between 400 and 700
go

select * from reserva


where costo>=400 and costo<=700
go

Ejemplo 3:

Script que permita mostrar los pasajeros cuya letra inicial de su apellido paterno se encuentre entre A y C.

Tabla Pasajero
select apaterno, amaterno, nombre,num_documento from pasajero
where left(apaterno,1) between 'A' and 'C'
order by apaterno asc, amaterno asc, nombre asc
go

Ejemplo 4:
Script que permita mostrar los pasajeros cuya letra inicial de su apellido paterno No se encuentre entre A y C.

select apaterno, amaterno, nombre,num_documento from pasajero


where not left(apaterno,1) between 'A' and 'C'
order by apaterno asc, amaterno asc, nombre asc
go

Ejemplo 5:

Script que permita mostrar las reservas cuya fecha se encuentra en el ao 2013.

select * from reserva


where fecha between '2013-01-01' and '2013-12-31'
go

select * from reserva


where fecha>='2013-01-01' and fecha<='2013-12-31'
go

select * from reserva


where year(fecha)=2013
go
Lenguaje de Manipulacin de Datos

C) Operadores Lgicos

Operador LIKE: Devuelve TRUE si el operando coincide a lo ms con un patrn especfico. El patrn es una cadena de
caracteres que se buscar en la expresin. Los comodines a utilizar son:

%: Representa a uno o ms caracteres. Puede ser cualquier tipo de carcter textual o smbolo.
_: Representa un solo carcter de cualquier tipo.

[ ]: Representa cualquier carcter individual, dentro de un conjunto de caracteres.

[^]: Representa cualquier carcter individual fuera del intervalo especificado.

IS NOT NULL: Representa que el contenido de una columna no este vaca.

Ejemplos:

Ejemplo 1:

Script que permita verificar si un determinado pas fue registrado o no en su tabla origen.

declare @pais varchar(40)


set @pais='Per' --Alt + 39
if exists(select idpais from pais where nombre=@pais)
print 'Pas ya se encuentra registrado'
else
print 'Pas no se encuentra registrado'
go

Ejemplo 2:
Script que permita mostrar los pasajeros cuyo nombre inicie con la letra A

Tabla Pasajero
select * from pasajero
where nombre like 'A%'
go

Ejemplo 3:
Mostrar los pasajeros que tienen una cuenta de correo GMAIL

select * from pasajero


where email like '%gmail%'
go

Ejemplo 4:
Mostrar los pasajeros cuyo segundo carcter de su nombre sea la letra A, O U.

select * from pasajero


where nombre like '_[AOU]%'
go

Ejemplo 5:
Mostrar los pasajeros cuyo segundo carcter de su nombre no sea la letra A, O U.

select * from pasajero


where nombre like '_[^AOU]%'
go
Ejemplo 6:
Mostrar los pagos realizados por un determinado pasajero, filtrar a dicho pasajero por su nmero de documento. Usar
subconsultas Operadores T-SQL.

declare @documento varchar(50)


set @documento ='47715777'

select * from pago


where idpasajero=(
select idpasajero from pasajero
where num_documento=@documento
)
go

Combinacin de Tablas JOIN


En determinada ocasin se tendr que unir ms tablas para combinar los valores y poder mostrarlos juntos en una
consulta, para esto utilizamos la clusula JOIN.

Hay que diferenciar dos tipos de combinaciones:


Internas: Devuelven todas las filas que cumplen con la condicin de las tablas, en caso de no encontrarse
coincidencia de valores no muestra nada.

Externas: las filas resultantes no son directamente de la tabla origen, podra ser de la izquierda, derecha o
completa.

Combinacin de tablas Join


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
--Utilizando un producto cartesiano
select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as [Pas]
from pasajero pas, pais pai
go

--Utilizando la clusula Inner Join


select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as Pais
from pasajero pas inner join pais pai
on pas.idpais=pai.idpais
go

--Utilizando un producto cartesiano y aplicando un filtro Where


select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as Pais
from pasajero pas, pais pai
where pas.idpais=pai.idpais
go

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
select pas.idpasajero,pas.nombre,pas.apaterno, pas.amaterno,pai.nombre as Pais,pag.fecha, pag.monto
from pasajero pas inner join pais pai
on pas.idpais=pai.idpais
inner join pago pag
on pag.idpasajero=pas.idpasajero
go

3. Implementar un Script que permita mostrar las reservas de un determinado PASAJERO especificado por su nombre.
Finalmente, debe ordenar la fecha de reserva de forma descendente.

Tabla Reserva
declare @num_documento varchar(12)='47715777'
select res.*
from pago pag inner join pasajero pas
on pag.idpasajero=pas.idpasajero
inner join reserva res
on pag.idreserva=res.idreserva
where pas.num_documento=@num_documento
go

Funciones Agregadas

Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven un solo valor. Se suelen
utilizar con la clusula GROUP BY de la instruccin SELECT.
SUM
COUNT
MAX
MIN
AVG
SUM

Permite devolver la suma de todos los valores distinguidos en una determinada expresin. Esta funcin solo puede
utilizarse con columnas de tipo numrico.
SUM(Columna o Expresin)

Ejemplos:
Ejemplo 1:
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla pago (Funcin
SUM).

Tabla Pago

--Utilizando Funcin SUM


select sum(monto) as [Total Acumulado]
from pago
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

Funciones Agregadas
SUM
COUNT
MAX
MIN
AVG

COUNT
Funcin que permite devolver el nmero de elementos de un grupo. Count siempre devolver un valor numrico.

COUNT(All Distinct Columna *)

All: Al especificarlo todos los valores son contabilizados.

Distinct: Permite definir la no repitencia de valores condicionados de la consulta.

Columna: Se puede especificar el nombre de una columna de la tabla a contar.

Asterisco (*): Representa a todas las filas de la tabla.

Ejemplos

Ejemplo 1:
Implementar un Script que permita determinar el total de pasajeros registrados (Funcin COUNT).

Tabla Pasajero
--Utilizando Funcin count
select count(idpasajero) as Total_Pasajeros
from pasajero
go

select count(*) as Total_Pasajeros


from pasajero
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
--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

3. Implementar un Script que permita mostrar el total de pasajeros y el monto acumulado de pagos de sus viajes
realizados por un determinado pas.

Tabla Pasajero-Pas-Pago
select pai.nombre as [Pas],count(distinct pas.num_documento)
as [Total Pasajeros], sum(pag.monto) as [Monto Acumulado]
from pasajero pas inner join pais pai
on pai.idpais=pas.idpais inner join pago pag
on pag.idpasajero=pas.idpasajero
group by pai.nombre
go

Funciones Agregadas
SUM
COUNT
MAX
MIN
AVG

MAX
Funcin que permite determinar el valor mximo de una expresin propuesta por el usuario.
Solo puede ser usado en columnas o expresiones que tenga como tipo de dato un entero.

MAX(All Columna Expresin).

MIN
Funcin que permite determinar el valor mnimo de una expresin propuesta por el usuario.
Solo puede ser usado en columnas o expresiones que tenga como tipo de dato un entero.
MIN(All Columna Expresin).

MAX Y MIN
All: Especifica que todos los valores son evaluados.

Columna: Se puede especificar el nombre de una columna de la tabla a evaluar.

Expresin: Representa a una funcin SQL o a un juego de operadores aritmticos.

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

--Usando la funcin MAX y MIN


select max(monto) as [Monto Mayor],
min(monto) as [Monto Menor]
from pago
go
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.

--Usando la funcin MAX y MIN


select year(fecha)as [Ao],max(monto) as [Monto Mayor],
min(monto) as [Monto Menor]
from pago
group by year(fecha)
order by year(fecha) desc
go

Ejemplo 3:
Implementar un Script que permita mostrar los datos del pasajero que registra el mayor monto desde la tabla
PAGO.

--Usando la funcin MAX


declare @maxPago money
select @maxPago=max(monto) from pago

select pas.*
from pasajero pas
where pas.idpasajero=(select idpasajero from pago
where monto=@maxPago)
go
Funciones Agregadas

SUM
COUNT
MAX
MIN
AVG

AVG
Funcin que devuelve el promedio de los valores de un determinado grupo, consideremos que dicha columna debe
de ser numrica.

AVG(Columna Expresin)

Columna: Se puede especificar el nombre de una columna de la tabla para especificar el promedio.

Expresin: Representa a una funcin SQL o a un juego de operadores aritmticos. No se permite las funciones de
agregado ni subconsultas.

Ejemplos:

Ejemplo 1:
Implementar un Script que permita mostrar el precio promedio de las tarifas asignadas a los diferentes vuelos.
(Funcin AVG).

Tabla Tarifa

--Usando la Funcin AVG


select avg(precio) as [Tarifa Promedio]
from tarifa
go

Ejemplo 2:
Implementar un Script que permita mostrar el monto promedio de pagos agrupado por pases. (Funcin AVG).

Tabla Pas-Pasajero-Pago

--Usando la Funcin AVG


select pai.nombre,avg(pag.monto) as [Promedio Pago]
from pago pag inner join pasajero pas
on pag.idpasajero=pas.idpasajero
inner join pais pai
on pai.idpais=pas.idpais
group by pai.nombre
go

Agregar Conjunto de Resultados: UNION


El operador UNION permite mostrar los resultados de varias consultas SELECT en una sola. La regla del uso para este
operador es que ambas tablas deben de tener las mismas columnas o especificarlas de la misma forma, y que los
tipos de datos sean exactamente iguales.

UNION
Consulta1
UNION
Consulta2

Ejemplos

Ejemplo 1:
Implementar un Script que permita mostrar los apellidos paternos de los pasajeros y los nombres de los pases en
una misma consulta.

Tabla Pas-Pasajero

--Agregando resultados UNION


select pas.idpasajero,pas.apaterno
from pasajero pas
UNION
select pai.idpais,pai.nombre
from pais pai
go
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

--Agregando resultados UNION


select 'pasajero' as [Tabla], count (idpasajero)
as [Total Registros] from pasajero

UNION
select 'pais' as [tabla], count (idpais) as [Total Registros]
from pais
UNION
select 'pago' as [tabla], count (idpago) as [Total Registros]
from pago
go
Programacin Transact SQL

Transact SQL es el lenguaje de programacin que proporciona Microsoft SQl Server para extender el SQL estndar
con otro tipo de instrucciones y elementos propios de los lenguajes de programacin ya que esta parte est limitada
en SQL.

Scripts
Procedimientos Almacenados
Funciones
Triggers

Estructuras de Control:

Estructuras Secuenciales: Las instrucciones se ejecutan una a continuacin de otra.

Estructuras Selectivas: Las instrucciones se ejecutan segn el valor lgico de una variable.

Estructuras Repetitivas: Las instrucciones se ejecutan en forma repetida segn una condicin lgica llamada ciclo
bucle.

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

Estructura Selectiva IF - Sintxis

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

Ejemplos:
Ejemplo 1:
Implementar un Script que permita insertar un nuevo registro en la tabla pas, en caso se registre duplicidad en el
nombre de un pas mostrar un mensaje de pas ya registrado, caso contrario insertar dicho registro y mostrar un
mensaje de Pas registrado Correctamente.

Tabla Pas

--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

declare @nombre char(40)='Bolivia'

if (select count(*) from pasajero pas


left join pais pai on pas.idpais=pai.idpais
group by pai.nombre
having pai.nombre=@nombre) is null
begin
print 'No hay Pasajeros en este Pas'
end
else
begin
declare @total int
select @total=count(*)
from pasajero pas left join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
having pai.nombre=@nombre

print 'El Pas ' + @nombre + 'Tiene ' +


cast(@total as char(2)) + ' Pasajero'
end
go

Programacin Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Estructura Condicional Mltiple CASE

La estructura CASE evala una expresin que podr tomar N valores distintos, segn se elija uno de estos valores se
tomar N posibles acciones

Estructura Mltiple CASE - Sintxis


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

Ejemplos:

Ejemplo 1:
Implementar un Script que permita mostrar la fecha en texto registrada en la tabla RESERVA.

2014-10-01 = 01 Octubre 2014

Tabla Reserva

--Estructura Mltiple Case


select *,
cast(day(fecha) as char(2)) +
case month(fecha)
when 1 then ' Enero '
when 2 then ' Febrero '
when 3 then ' Marzo '
when 4 then ' Abril '
when 5 then ' Mayo '
when 6 then ' Junio '
when 7 then ' Julio '
when 8 then ' Agosto '
when 9 then ' Septiembre '
when 10 then ' Octubre '
when 11 then ' Noviembre '
when 12 then ' Diciembre '
end
+ cast(year(fecha) as char(4)) as [Fecha]
from reserva
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

--Estructura Mltiple Case


select pai.nombre, count(pas.idpasajero)as [Total Pasajeros],
case
when count(pas.idpasajero)=0 then 'NO CUENTA'
else ''
end as [Mensaje]
from pais pai left join pasajero pas
on pai.idpais=pas.idpais
group by pai.nombre
go

Programacin Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Procedimientos Almacenados

Son un conjunto de instrucciones de Transact-SQL que pueden aceptar y devolver parmetros proporcionados por
el usuario.

Tipos de procedimientos almacenados

Procedimientos Almacenados del Sistema:


Generalmente estn guardados en la base de datos MASTER son identificados por iniciar en SP, permiten realizar
una amplia variedad de tareas, a continuacin mostramos algunos procedimientos almacenados del sistema:
Sp_columns
Sp_column_privileges
Sp_databases
Sp_fkeys
Sp_pkeys
Sp_tables
Sp_server_info
Sp_statistics

Ejemplos

--Procedimiento del sistema que muestra


--las columnas de la tabla pas
sp_columns pais

--Procedimiento almacenado del sistema para mostrar los


--privilegios de las columnas involucradas de la tabla pasajero
Sp_column_privileges pasajero

--Procedimiento almacenado del sistema que muestra


--las base de datos del servidor activo.
Sp_databases

--Procedimiento almacenado que muestra las caractersticas


--de nuestro servidor activo
sp_server_info

--procedimiento almacenado que muestra donde se hace referencia


--a la tabla pasajero
Sp_fkeys pasajero

--Procedimiento almacenado que muestra la llave primaria


--de la tabla pasajero
Sp_pkeys pasajero

Procedimientos Almacenados definidos por el usuario:


Son procedimientos que se implementan en forma personalizada segn las necesidades del usuario.

Los Procedimientos Almacenados pueden tener parmetros de entrada y salida.

Procedimientos Almacenados - Sintxis

Create procedure Nombre_Procedimiento


@parmetro1 [tipo dato],
@parmetroN [tipo dato]
AS
<Instrucciones>

Ejemplos:

Ejemplo 1:
Implementar un procedimiento almacenado que muestre el listado de los pases y su total de pasajeros.

Tabla Pasajero - Pas

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('pasajerosxpais') is not null

begin

drop procedure pasajerosxpais

end
go
--Implementamos nuestro procedimiento almacenado
create procedure pasajerosxpais
as
select pai.nombre,count(*) as [Total]
from pasajero pas join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
go
--Ejecutamos el procedimiento almacenado
exec pasajerosxpais

Ejemplo 2:
Implementar un procedimiento almacenado que permita mostrar los pagos de un determinado pasajero,
considerar para este caso como parmetro de bsqueda el nmero de documento del pasajero.

Tabla Pasajero - Pas=Pago

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('pagosxpasajero') is not null

begin

drop procedure pagosxpasajero

end

go
--Implementamos nuestro procedimiento almacenado
alter procedure pagosxpasajero
@num_documento varchar(12)
as
select fecha,monto,tipo_comprobante,num_comprobante
from pago where idpasajero=
(select idpasajero from pasajero
where num_documento=@num_documento)
go
--Ejecutamos el procedimiento almacenado y le enviamos el parmetro de entrada
exec pagosxpasajero '47715777'

Ejemplo 3:
Implementar un procedimiento almacenado que permita registrar un Nuevo pas, para este caso definir como
parmetro de entrada todos los campos referentes a la tabla pas.

Tabla Pas

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('nuevopais') is not null

begin

drop procedure nuevopais


end
go
--Implementamos nuestro procedimiento almacenado
create procedure nuevopais
@idpais char(4),
@nombre varchar(30)
as
insert into pais (idpais,nombre)
values(@idpais,@nombre)
go
--Ejecutamos el procedimiento almacenado y le enviamos los parmetros de entrada
exec nuevopais '0014','Dinamarca'
Ejemplo 4:
Implementar un procedimiento almacenado que retorne el total de pagos recibidos en una determinada fecha.

Tabla Pago

--Evaluamos si ya existe el procedimiento


--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('pagosxfecha') is not null
begin
drop procedure pagosxfecha
end
go
--Implementamos nuestro procedimiento almacenado
create procedure pagosxfecha
@fecha date,
@total money output
as
select @total=sum(monto) from pago
where fecha=@fecha
go

--Ejecutamos el procedimiento almacenado y le enviamos


--los parmetros
declare @t money
exec pagosxfecha '2014-05-05',@total=@t output

print 'Total' + cast(@t as char(10))

Programacin Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Funciones

Rutina almacenada que recibe unos parmetros escalares de entrada, luego los procesa segn el cuerpo definido de
la funcin y por ltimo retorna un resultado de un tipo especfico que permitir cumplir un objetivo.

SQL Server proporciona numerosas funciones integradas y permite crear funciones definidas por el usuario.

Tipos de Funciones

Funciones del Sistema:


SQL Server cuenta con una gran variedad de funciones dependiendo de los valores o configuraciones que deseamos
realizar, a continuacin, mostramos algunas funciones del sistema:
Funciones de Agregado: SUM, AVG, COUNT,MAX, MIN
Funciones de Fecha y Hora: GETDATE, DAY, MONTH, YEAR, DATEADD, DATEDIF, ISDATE
Funciones Matemticas: ABS, RAND, LOG10, SQRT, POWER, TAN, PI, RADIANS
Funciones definidas por el usuario:
Las funciones definidas por el usuario de SQL Server son rutinas que aceptan parmetros, realizan una accin, como
un clculo complejo, y devuelven el resultado de esa accin como un valor (nico o conjunto de valores).

Funciones - Sintxis

Create Function Nombre_Funcin


(@parmetro1 as [Tipo Dato] = [ValorxDefecto],
@parmetroN as [Tipo Dato] = [ValorxDefecto])
RETURNS TipoDato_Returnado
AS
BEGIN
<Instrucciones>
RETURN Expresin_salida
END

Ejemplos:

Ejemplo 1:
Implementar una funcin que devuelva el promedio de dos nmeros ingresados por el usuario.

--Evaluamos primero si ya existe la funcin

--que queremos implementar si ya existe la eliminamos

IF object_id('calcularpromedio') is not null

BEGIN

DROP FUNCTION dbo.calcularpromedio

END
go
--Implementamos la funcin con dos parmetros de entrada
CREATE FUNCTION calcularpromedio
(@valor1 as decimal(10,2),@valor2 decimal(10,2))
RETURNS decimal(10,2)
AS
BEGIN
DECLARE @resultado decimal(10,2)
SET @resultado=(@valor1+@valor2)/2
RETURN @resultado
END
GO
--Ejecutamos la funcin con un select y le enviamos
--los dos parmetros de entrada (DBO es el nombre del propietario)
select dbo.calcularpromedio(12,13) as Promedio
--Ejecutamos la funcin con un print y le enviamos
--los dos parmetros de entrada
print 'Promedio: ' + cast(dbo.calcularpromedio(12,13) as Char(10))
Ejemplo 2:
Implementar una funcin que devuelva el nombre de un mes en letras segn una fecha ingresada por el usuario.

Tabla Pasajero - Pas - Pago

--Evaluamos primero si ya existe la funcin

--que queremos implementar, si ya existe la eliminamos

IF object_id('fechaletras') is not null

BEGIN

DROP FUNCTION dbo.fechaletras

END
go
--Implementamos la funcin con un solo parmetro de entrada
CREATE FUNCTION fechaletras (@fecha as DATE)
RETURNS varchar(20)
AS
BEGIN
DECLARE @resultado varchar(20)
SET @resultado=concat(day(@fecha),' de ',datename(month,@fecha),
' del ',year(@fecha))

RETURN @resultado
END
GO
--Ejecutamos la funcin con un select y le enviamos
--el parmetro de entrada
select dbo.fechaletras('2015-08-08') as [Fecha Actual]

select dbo.fechaletras(pag.fecha) as Fecha,


(pas.nombre + ' ' +pas.apaterno) as pasajero,
pag.tipo_comprobante,pag.num_comprobante
from pago pag inner join pasajero pas
on pag.idpasajero=pas.idpasajero
go

Ejemplo 3:

Implementar una funcin de tabla en lnea que muestre los registros de la tabla pasajero dependiendo del pas de
proveniencia.

Tabla Pasajero - Pas


--Evaluamos primero si ya existe la funcin

--que queremos implementar, si ya existe la eliminamos

IF object_id('pasajeroxpais') is not null

BEGIN

DROP FUNCTION dbo.pasajeroxpais

END
go
--Implementamos la funcin con un solo parmetro de entrada
CREATE FUNCTION pasajeroxpais (@pais as varchar(30))
RETURNS TABLE
AS
RETURN (SELECT pas.idpasajero,(pas.nombre + ' ' +
pas.apaterno) as Pasajero,pai.nombre as Pais
from pasajero pas inner join pais pai
on pai.idpais=pas.idpais
where pai.nombre=@pais)

GO
--Ejecutamos la funcin con un select,
--Mostraremos los pasajeros del pas Per
select * from dbo.pasajeroxpais('Per')
go
Cursores

Los cursores son una herramienta de SQL que nos permite recorrer el resultado de una consulta SQL y realizar
operaciones en cada paso de esta. Es as como nos ayuda a realizar operaciones que de otro modo seran ms
complejas o imposibles.

Declaracin de un Cursor - Sintxis

Declare Nombre_Cursor
[INSENSITIVE][SCROLL] CURSOR
FOR EXPRESSION_SELECT
[FOR READ ONLY
| UPDATE [OF column_name[,n]]]

Ejemplos:

Ejemplo 1:
Implementar un cursos bsico donde se imprima el primer registro de la table PASAJERO.

Tabla Pasajero

--Declaramos la variable de tipo cursor


--donde almacenamos los registros de la consulta
--pasajero
DECLARE micursorpas CURSOR
FOR select * from PASAJERO
--aperturamos el cursor
OPEN micursorpas
--accedemos al primer registro del cursos con el operador
--next
FETCH NEXT FROM micursorpas
--Cerramos el cursor
close micursorpas
--liberamos el cursor con el operador deallocate
deallocate micursorpas

Ejemplo 2:
Implementar un cursor donde se imprima en forma de reporte a los registros de la tabla PASAJERO.

Tabla Pasajero - Pas


--Declaramos las variables locales que representaran
--el valor de las columnas
DECLARE @idpasajero char(8),@pasajero char(20),
@pais char(10),@documento char(12)
--declaramos el cursor con la consulta de la tabla pasajero
--y pas
DECLARE micursor CURSOR
FOR select pas.idpasajero,
(pas.nombre+ ' ' +pas.apaterno) as pasajero,
pai.nombre as pais,pas.num_documento
from pasajero pas inner join pais pai
on pas.idpais=pai.idpais
--aperturamos el cursos
OPEN micursor
--obtenemos el primer registro y enviamos el valor
--a las variables correspondientes
FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento
--Imprimimos la cabecera del reporte
PRINT 'CODIGO PASAJERO PAIS DOCUMENTO'
PRINT '----------------------------------------------------------'
--Implementamos una estructura iterativa para poder
--imprimir todos los registros
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @idpasajero+space(5)+@pasajero+space(5)+
@pais+space(5)+@documento
FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento
END

--Cerramos el cursor
close micursor
--liberamos el cursor con el operador deallocate
deallocate micursor

Tablas de Referencia cruzada - Funcin PIVOT

PIVOT gira una expresin con valores de tabla convirtiendo los valores nicos de una columna de la expresin en
varias columnas en la salida y realiza agregaciones donde son necesarias en cualquier valor de columna restante que
se desee en la salida final.

Ejemplos:

Ejemplo 1:
Mostrar los pagos realizados por los pasajeros, pero ordenar los pagos por meses.
Pasajero Enero Febrero Marzo Abril
Pasajero 01 100 0 154 0
Pasajero 02 0 300 0 170
Pasajero 03 150 0 500 0
Tabla Pasajero - Pas - Pago

--Seleccionamos todos los registros de la tabla

--de referencia cruzada

select
Pasajero,
case when Enero Is not null then Enero else 0 end as Enero,
case when Febrero Is not null then Febrero else 0 end as Febrero,
case when Marzo Is not null then Marzo else 0 end as Marzo,
case when Abril Is not null then Abril else 0 end as Abril,
case when Mayo Is not null then Mayo else 0 end as Mayo,
case when Junio Is not null then Junio else 0 end as Junio,
case when Julio Is not null then Julio else 0 end as Julio,
case when Agosto Is not null then Agosto else 0 end as Agosto,
case when Setiembre Is not null then Setiembre else 0 end asSetiembre,
case when Octubre Is not null then Octubre else 0 end as Octubre,
case when Noviembre Is not null then Noviembre else 0 end asNoviembre,
case when Diciembre Is not null then Diciembre else 0 end asDiciembre
from
(
select pas.apaterno as Pasajero,
datename(month,pag.fecha) as Mes
,SUM(pag.monto) as Total
from pago pag inner join pasajero pas
on pag.idpasajero=pas.idpasajero
group by pas.apaterno,
datename(month,pag.fecha)
)T
PIVOT (SUM(T.Total) FOR T.Mes IN ([Enero],[Febrero],[Marzo]
,[Abril],[Mayo],[Junio],[Julio],[Agosto],[Setiembre],
[Octubre],[Noviembre],[Diciembre]))PVT
go

Potrebbero piacerti anche