Вы находитесь на странице: 1из 55

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 asApell


idoM,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 nmerico 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 comodnes 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.
Ejemplos

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


e 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
Combinacin de Tablas JOIN
INNER JOIN
JOIN
LEFT JOIN
RIGHT JOIN
CROSS JOIN
FULL JOIN

LEFT JOIN
La sentencia LEFT JOIN retorna la pareja de todos los valores de la izquierda con los
valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en
caso de no correspondencia.
El operador de combinacin LEFT JOIN, indica que todas las filas de la primera tabla
se deben incluir en los resultados, con independencia si hay datos coincidentes en la
segunda tabla.

Ejemplos:

1. Implementar un Script que permita mostrar los pasajeros que no han realizado
ningn pago (Left Join).
Tabla Pas-Pasajero-Pago

--Utilizando Left Join


select pas.* from pasajero pas left join pago pag
on pas.idpasajero=pag.idpasajero
where pag.idpasajero is null
go

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

--Utilizando Right Join


select pai.nombre as Pais,pas.* from pasajero pas
right join pais pai
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).
select * from pasajero cross join pago pag
Datos Agrupados

GROUP BY
Agrupa un conjunto de registros de acuerdo a los valores de una o ms columnas de
una tabla.

[ROLLUP]
[CUBE]
<Lista de Columnas>

ROLLUP: Genera filas de agregado a la clusula Group By ms filas de subtotal y


tambin una fila con un total general.

CUBE: Genera filas de agregado a la clusula Group By ms una fila de


superagregado y filas de tabulacin Cruzada.

Ejemplos:
Ejemplo 1:
Implementar un Script que permita mostrar las claves primarias de la tabla pas
agrupadas desde la tabla pasajero. Usar la clusula Group By.

Tabla Pasajero-Pas

--Utilizando Group By
select p.idpais from pasajero p
group by p.idpais
go
2. Implementar un Script que permita determiner el total de Aviones que tiene cada
aerolnea, y filtrar solo las aerolneas que tienen ms de un avin. Usar la clusula
Group By y Having.

Tabla Aerolnea-Avin

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

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

t Tabla Pago

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

Estructura de control Iterativa WHILE

La estructura WHILE hace repetir un conjunto de instrucciones en secuencia un


nmero determinado de veces mientras la condicin por la cual se rige sea
verdadera, a esto se le denomina bucle o ciclo. Si en algn momento es falsa el
bucle se termina.

Estructura de control Iterativa WHILE - Sintxis


WHILE condicin
BEGIN
<expresin repetida>
[BREAK]
<expression repetida>
[CONTINUE]
<expression repetida>
END

Ejemplos:

Ejemplo 1:
Implementar un Script que permita mostrar los nmeros pares consecutivos del 1 al
100.

--Declaramos la variable que controlar las repeticiones del bucle


declare @N INT=0
--Aplicamos la estructura iterativa
while (@N<100)
begin
--Aumentamos el valor de N para iniciar en 1
--y evaluarlo en la prxima iteracin
set @N=@N+1
--Evaluamos que slo se imprima el valor de N cuando es par,
es decir su residuo es cero.
if (@N % 2 =0)
Print 'Valor N: ' + Cast(@N as Char(3))
end
go

Ejemplo 2:
Implementar un Script que permita aumentar en 10% el costo de las tarifas solo si el
promedio de estas no supera los 2000, cuando se termine de actualizar dichos
valores mostrar el mensaje YA NO HAY MS QUE ACTUALIZAR.

Tabla Tarifa
--Iniciamos el ciclo de repeticiones
--y evaluamos las repeticiones mientras el
-- promedio del precio sea menor que mil
while (select avg(precio) from tarifa)<2000
begin
--Actualizamos el costo
update tarifa set precio=precio*1.1
--repetiremos el bucle hasta que el precio `
--sea mayor que 2000 ahi nos detenemos
if (select max(precio) from tarifa)>2000
break
else
--Si el precio no es mayor que 2000 continuamos
continue
end
print 'Ya no hay ms que actualizar'
go

Ejemplo 3:
Implementar un Script que permita mostrar los registros de la tabla pasajero
paginados de 2 en 2.

Tabla Pasajero
--La pgina que deseamos mostrar
declare @pagina int=1
--Declaramos nuestra estructura iterativa
while(@pagina<=5)
begin
--Nmero de filas por pgina
declare @cantFilas int=2
--adicionamos una subconsulta llamada X
select * from (select rownum= ROW_NUMBER()
over (order by p.idpasajero),
--la funcin devuelve el nmero secuencial de una fila
de una
--particin de un conjunto de resultados,
-- comenzando con 1 para la primera fila de
--cada particin.
* from pasajero p) X
where rownum>(@cantFilas*(@pagina-1))AND
rownum<=(@cantFilas*(@pagina-1))+@cantFilas
set @pagina=@pagina+1
end
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 - Pais=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))

********************************************************************************
********************************************************************************

CREATE DATABAse data

use data

Create Table Autores(


idAutor int
Identity(1, 1) Not NULL
Constraint PKAutores Primary Key,
Nombre varchar(30) Not NULL,
Direccion varchar(30),
Telefono char(8) Not NULL
Constraint dTelf Default '000-0000'
Constraint cTelf Check (Telefono like '[0-9][0-9][0-9]-
[0-9][0-9][0-9][0-9]')
)

-- Drop Table Autores

Create Table Temas(


idTema int
Identity(1, 1) Not NULL
Constraint PKTemas Primary Key,
DescripcionTema varchar(30) Not NULL
)

-- Drop Table Temas

Create Table Libros(


idLibro int
Identity(1, 1) Not NULL
Constraint PKLibros Primary Key,
Titulo varchar(30) Not NULL,
idTema int Not NULL
Constraint FKTemas Foreign Key References
Temas(idTema),
Editorial varchar(30) Not NULL,
PrecioCompra money Not NULL
Constraint cPrecio Check (PrecioCompra > 0),
Paginas int Not NULL,
Constraint cPagina Check (Paginas > 0)
)

-- Drop Table Libros

Create Table AutoresLibros(


idLibro int Not NULL
Constraint FKLibros Foreign Key References
Libros(idLibro),
idAutor int Not NULL
Constraint FKAutores Foreign Key References
Autores(idAutor)
primary key (idLibro,idAutor)
)

-- Drop Table AutoresLibros


-------------------------------------------------------------------------

------------------------------------------------- Inserccin de registros


Insert Autores Values('Nancy Rodrgues',Null,'498-0356')
Insert Autores(Nombre, Direccion) Values('Carlos Cueva',Null)
Insert Autores Values('Janet Alva',Null,'962-7944')
Insert Autores(Nombre, Direccion) Values('Ana Osorio',Null)
Insert Autores Values('Luis Rubio',Null,'962-6356')

Select * From Autores

Insert Temas Values('Empresariales')


Insert Temas Values('Psicologa')
Insert Temas Values('Ciencia')
Insert Temas Values('Salud')
Insert Temas Values('Ficcin')
Insert Temas Values('Romance')
Insert Temas Values('Tcnico')

Select * From Temas

Declare @id int


Select @id= (Select idTema From Temas Where DescripcionTema='Ficcin')
Insert Libros Values('Guerra de Marcianos', @id,'Navarrete', 350.50,
1012)

Select @id= (Select idTema From Temas Where


DescripcionTema='Empresariales')
Insert Libros Values('Planear su Carrera', @id,'Prentice Hall', 450.80,
395)
Select @id= (Select idTema From Temas Where DescripcionTema='Romance')
Insert Libros Values('Diamantes', @id,'Publicaciones Ramona', 395.00,
593)

Select @id= (Select idTema From Temas Where DescripcionTema='Salud')


Insert Libros Values('Tcnicas del Tai Chi', @id,'Navarrete', 595, 236)

Select @id= (Select idTema From Temas Where DescripcionTema='Ficcin')


Insert Libros Values('Estoy en la Luna', @id,'Publicaciones Ramona',
195.00, 226)

Select * From Libros

Declare @idL int


Declare @idA int
Select @idL= (Select idLibro From Libros Where Titulo='Guerra de
Marcianos')
Select @idA= (Select idAutor From Autores Where Nombre='Nancy Rodrgues')

Insert AutoresLibros Values(@idL, @idA)

Select @idL= (Select idLibro From Libros Where Titulo='Planear su


Carrera')
Select @idA= (Select idAutor From Autores Where Nombre='Carlos Cueva')
Insert AutoresLibros Values(@idL, @idA)

Select @idL= (Select idLibro From Libros Where Titulo='Diamantes')


Select @idA= (Select idAutor From Autores Where Nombre='Ana Osorio')
Insert AutoresLibros Values(@idL, @idA)

Select @idL= (Select idLibro From Libros Where Titulo='Tcnicas del Tai
Chi')
Select @idA= (Select idAutor From Autores Where Nombre='Luis Rubio')
Insert AutoresLibros Values(@idL, @idA)

Select @idL= (Select idLibro From Libros Where Titulo='Estoy en la Luna')


Select @idA= (Select idAutor From Autores Where Nombre='Janet Alva')
Insert AutoresLibros Values(@idL, @idA)

Select * From AutoresLibros

---Uso de tablas temporales-------------


--Into tabla (despues del select): crea la tabla e inserta los registros
drop table #tmp_consulta
go
SELECT l.Titulo As [Libros de Ficcin],
l.PrecioCompra As Precio,a .Nombre As Autor,
t.DescripcionTema into #tmp_consulta
FROM Autores a INNER JOIN AutoresLibros al ON
a.idAutor = al.idAutor INNER JOIN
Libros l ON al.idLibro = l.idLibro
INNER JOIN Temas t
ON l.idTema = t.idTema
where 1=0
--WHERE PrecioCompra>400
select * from #tmp_consulta --tabla temporal local
select * from ##tmp_consulta --tabla temporal global

if exists(select * from sysobjects where name like 'tmp_libros')


drop table tmp_libros
--select * into tmp_libros from libros
--crear solament el esquema de la tabla
select * into tmp_libros from libros where 1=0

select * from tmp_libros

--uso del insert ... select


--Requiere que la tabla destino exista y
--crear la estructura
SELECT l.Titulo As [Libros de Ficcin],
l.PrecioCompra As Precio,a .Nombre As Autor,
t.DescripcionTema into tmp_consulta_libros
FROM Autores a INNER JOIN AutoresLibros al ON
a.idAutor = al.idAutor INNER JOIN
Libros l ON al.idLibro = l.idLibro
INNER JOIN Temas t
ON l.idTema = t.idTema
where 1=0

select * from tmp_consulta_libros

insert tmp_consulta_libros
SELECT l.Titulo As [Libros de Ficcin],
l.PrecioCompra As Precio,a .Nombre As Autor,
t.DescripcionTema
FROM Autores a INNER JOIN AutoresLibros al ON
a.idAutor = al.idAutor INNER JOIN
Libros l ON al.idLibro = l.idLibro
INNER JOIN Temas t
ON l.idTema = t.idTema
where PrecioCompra>450

select editorial, contar=count(*) into ttt from libros group by editorial


select * from ttt

--UPDATE
select idlibro,PrecioCompra,Editorial into act_libros from libros
where idlibro in (2,5)

select * from act_libros


update act_libros set PrecioCompra=PrecioCompra*1.2 from act_libros

---Actualizar los precios de libros a partir de la tabla act_libros


select * from act_libros
select * from libros

update libros set PrecioCompra=act.PrecioCompra


--select *
from libros l inner join act_libros act
on l.idLibro=act.idLibro

select idlibro, 5.0 as bonificacion into act_libro_bonif


from libros where idlibro in (2,5)
select * from act_libro_bonif

update libros set PrecioCompra=act.PrecioCompra*(1+bf.bonificacion/100)


--act.PrecioCompra+(act.PrecioCompra*bf.bonificacion/100)
--select *,act.PrecioCompra*(1+bf.bonificacion/100),
--act.PrecioCompra+(act.PrecioCompra*bf.bonificacion/100)
from libros l inner join act_libros act
on l.idLibro=act.idLibro inner join act_libro_bonif bf
on l.idLibro=bf.idLibro

update act_libros set PrecioCompra=560 where idlibro=2


update act_libros set PrecioCompra=250 where idlibro=5

select 5/100.0

---DELETE
--En SQL Server no acepta delete con from..inner
delete from libros li inner join act_libros ac
on li.idlibro=ac.idlibro

delete from libros where idlibro in (select idlibro from act_libros)