LIKE Y COMODINES
Para realizar los siguientes ejercicios, se recomienda descargar los archivos BD
Facturacion_DML y BDFacturacion_DDL que se encuentran en la categora
BASE DE DATOS, de este blog.
SINTXIS
SELECT * | columnas
FROM tabla
WHERE columna LIKE expresin
COMODINES
%
--> Representa cualquier cadena en la posicin que sea colocada.
_
--> Representa cualquier caracter en la posicin que sea colocada.
[xyz] --> Representa un conjunto de caracteres vlidos en la posicin que sea coloca
da.
[x-z] --> Representa un rango de caracteres vlidos en la posicin que sea colocada.
^
--> Representa los caracteres, conjunto o rangos que no figuraran en el r
esultado.
EJEMPLOS
--Mostrar todos los datos del cliente 'C001'
select *
from tbCliente
where codigoCliente like 'C001'
--Mostrar el nombre y el ruc del cliente 'C001'
select nombreCliente,rucCliente
from tbCliente
where codigoCliente like 'C001'
--Se desea obtener todos los clientes cuyos nombres
--empiecen con el caracter 'A'
select *
from tbCliente
where nombreCliente like 'a%'
--Se desea obtener todos los clientes cuyos segundo
--caracter del sus nombres sea 'A'
select *
from tbCliente
where nombreCliente like '_a%'
--Se desea obtener todos los clientes cuyos segundo
--caracter del sus nombres sea 'A' 'D'
select *
from tbCliente
where nombreCliente like '[ad]%'
--Se desea obtener todos los clientes cuyos segundo
--caracter de sus nombre este definido por el rango A-M
select *
from tbCliente
where nombreCliente like '[a-m]%'
--Se desea obtener todos los clientes cuyos nombres
--no inicien con 'A' 'D'
select *
from tbCliente
where nombreCliente like '[^ad]%'
FUNCIONES DE FECHA
--Day(fecha)
--Muestra el da correspondiente a la fecha
--(1-30). EJEMPLO:
SELECT DAY('16/10/2011')
--Muestra '16'
--Month(fecha)
--Muestra el mes correspondiente a la fecha
--(1-12) EJEMPLO:
SELECT MONTH('16/10/2011')
--Muestra '10'
--Year(fecha)
--Muestra el ao correspondiente a la fecha.
--EJEMPLO:
SELECT YEAR('16/10/2011')
--Muestra '2011'
--DateName(Month,fecha)
--Muestra el nombre del mes correspondiente
--7
select e.employeeid,e.lastname+' '+e.firstname as [empleado],t.territorydescript
ion,r.regiondescription
from employees e
inner join employeeterritories et on e.employeeid=et.employeeid
inner join territories t on t.territoryid=et.territoryid
inner join region r on r.regionid=t.regionid
--8
select e.lastname,e.firstname,count(et.territoryid) as [cantidad]
from employees e
inner join employeeterritories et on e.employeeid=et.employeeid
inner join territories t on t.territoryid=et.territoryid
group by et.employeeid,e.lastname,e.firstname
order by e.lastname desc
CURSORES
Para realizar los siguientes ejercicios, se recomienda descargar los archivos BD
Facturacion_DML y BDFacturacion_DDL que se encuentran en la categoria
BASE DE DATOS, de este blog.
--Listar todas las categoras
declare @codigo as varchar(4)
declare @nombre as varchar(50)declare CursorCategoria cursor for
select * from tbCategoria
open CursorCategoria
print 'LISTA DE CATEGORIAS'
print '==================='
fetch CursorCategoria into @codigo,@nombre
while (@@fetch_status=0) begin
print @codigo +' '+ @nombre fetch CursorCategoria into @codigo,@nombreend
close CursorCategoria
deallocate CursorCategoria
--Listar las facturas(nmero,total) con su respectivos clientes
declare @cliente as varchar(50)
declare @factura as varchar(10)
declare @total as varchar(10)declare @cont as int
declare CursorFacura cursor for select tbCliente.nombreCliente,tbFactura.numeroF
actura,tbFactura.totalFactura
from tbCliente
inner join tbFactura on tbCliente.codigoCliente=tbFactura.codigoCliente
open CursorFacura
set @cont=1
print ' LISTA DE FACTURAS POR CLIENTE'
print ' ============================='
fetch CursorFacura into @cliente,@factura,@total
while (@@fetch_status=0)begin
print 'Cliente '+convert(varchar(3),@cont)+ ': ' + @cliente
print ' Factura #'+@factura+' Total S/.'+ @total
print ''
fetch CursorFacura into @cliente,@factura,@total
set @cont=@cont+1end
close CursorFacura
deallocate CursorFacura
--Listar las facturas(nmero,total) con su respectivos clientes y el detalle
declare @cliente as varchar(50)
declare @factura as varchar(10)
declare @total as varchar(10)declare @cont as int
declare CursorFacura cursor for
select tbCliente.nombreCliente,tbFactura.numeroFactura,tbFactura.totalFactura
from tbCliente
inner join tbFactura on tbCliente.codigoCliente=tbFactura.codigoCliente
open CursorFacura
set @cont=1
print 'LISTA DE FACTURAS POR CLIENTE'
print '============================='
fetch CursorFacura into @cliente,@factura,@total
while (@@fetch_status=0)begin
print 'Cliente '+convert(varchar(3),@cont)+': '+ @cliente
print ' Factura #'+@factura+' Total S/.'+ @total
print ' DETALLE DE LA FACTURA # '+ @factura
print ' ------------------------------'
declare @producto as varchar(30)
declare @cantidad as varchar(10)
declare @precio as varchar(10)
declare @importe as varchar(10)
declare CursorDetalle cursor for
select tbProducto.nombreProducto,tbDetalleFactura.cantidadProducto,tbProducto.pr
ecioProducto,
tbDetalleFactura.importeProducto
from tbProducto
inner join tbDetalleFactura on tbProducto.codigoProducto=tbDetalleFactura.codigo
Producto
where tbDetalleFactura.numeroFactura = @factura
open CursorDetalle
fetch CursorDetalle into @producto,@cantidad,@precio,@importe
while (@@fetch_status=0)begin
print ' Producto: '+ @producto
print ' Precio: S/.'+ @precio+' Cantidad: '+@cantidad+' Importe: S/.'+ @importe
fetch CursorDetalle into @producto,@cantidad,@precio,@importe
end
close CursorDetalle
deallocate CursorDetalle
print ''
fetch CursorFacura into @cliente,@factura,@total
set @cont=@cont+1end
close CursorFacura
deallocate CursorFacura
STORED PROCEDURES
Para realizar los siguientes ejercicios, se recomienda descargar los archivosBDF
acturacion_DML y BDFacturacion_DDL que se encuentran en la categoria
BASE DE DATOS, de este blog.
-- Listar las facturas(nmero,total) correspondientes
-- al cliente con cdigo 'c001'
create procedure procedureFactura
@codigo char(4)
as begin
declare @cliente as varchar(50)
declare @factura as varchar(10)
declare @total as varchar(10)
declare @cont as int
declare CursorFacura cursor for
select tbCliente.nombreCliente,tbFactura.numeroFactura,tbFactura.totalFactura
from tbCliente inner join tbFactura on tbCliente.codigoCliente=tbFactura.codigoC
liente
where tbCliente.codigoCliente= @codigo
open CursorFacura
set @cont=1
print ' LISTA DE FACTURAS POR CLIENTE'
print ' ============================='
fetch CursorFacura into @cliente,@factura,@total
while (@@fetch_status=0)
begin
print 'Cliente '+convert(varchar(3),@cont)+': '+ @cliente
print ' Factura #'+@factura+' Total S/.'+ @total
print ''
fetch CursorFacura into @cliente,@factura,@total
set @cont=@cont+1
end
close CursorFacura
deallocate CursorFacura
end
--probando procedimiento
exec procedureFactura 'c001'
SUB CONSULTAS
Para realizar los siguientes ejercicios, se recomienda descargar los archivosBDF
acturacion_DML y BDFacturacion_DDL que se encuentran en la categora
BASE DE DATOS, de este blog.
--Listar los productos con sus respectivas categoras
select codigoProducto, nombreProducto, precioProducto,
(select nombreCategoria from tbCategoria
where codigoCategoria= tbProducto.codigoCategoria) as [categoriaProducto]
from tbProducto
--Listar las categoras con sus respectivos nmeros de productos
select codigoCategoria,nombreCategoria,
(select count(*) from tbProducto
where codigoCategoria=tbCategoria.codigoCategoria) as [numeroProductos]
from tbCategoria
--Listar los productos que ayan vendido 2 unidades
select * from(select p.nombreProducto,count(*) as [cantidad]
from tbProducto p
inner join tbDetalleFactura df on p.codigoProducto=df.codigoProducto
group by p.nombreProducto,df.codigoProducto) as productos
where cantidad = 2
--Listar los productos cuyas ventas esten entre 100 y 500
select * from(select p.nombreProducto,
isnull((select sum(importeProducto) from tbDetalleFactura
where codigoProducto=p.codigoProducto),0) as [ventaProducto]
from tbProducto p) as productos
where ventaProducto between 100 and 500
--Listar aquellos productos que hayan sido facturados
select codigoProducto, nombreProducto, precioProducto
from tbProducto
where codigoProducto in (select distinct codigoProducto from tbDetalleFactura)
--Listar los productos de la categora 'Memorias'
select codigoProducto, nombreProducto, precioProducto
from tbProducto
where codigoProducto in(select p.codigoProducto
from tbProducto p inner join tbCategoria c on c.codigoCategoria=p.codigoCategori
a
FUNCIONES
--INVERTIR PALABRA
create function invertir(@palabra varchar(50))returns varchar(50)
as begin
declare @tamao int
declare @posicion int
declare @cadena varchar(50)
set @tamao = len(@palabra)
set @posicion = 0
set @cadena= ''
while @tamao >= @posicion begin
set @cadena=substring(@palabra,@posicion,1)+ @cadena
set @posicion=@posicion+1
end
return @cadena
end
go
print dbo.invertir('DAMIAN')
go
--MXIMO COMN DIVISOR
create function mcd(@num1 as int,@num2 as int)returns int
as begin
declare @cont int,@mcm int
set @mcm=1
set @cont=2
while(@num1>=@cont or @num2>=@cont)begin
if(@num1%@cont=0 and @num2%@cont=0)begin
set @num1=@num1/@cont
set @num2=@num2/@cont
set @mcm=@mcm*@cont
end
else begin
set @cont=@cont+1
end
end
if(@mcm=1)begin
set @mcm=0
end
return @mcm
end
go
print dbo.mcd (4,6)
go
--MNIMO COMN MLTIPLO
create function mcm(@n1 int,@n2 int)returns int
as begin
declare @cont int,@mcm int
set @cont = 2
set @mcm = 1
while @n1>=@cont or @n2>=@cont begin
if @n1 % @cont = 0 begin
if @n2 % @cont = 0 begin
set @mcm = @mcm * @cont
set @n1 = @n1 / @cont
set @n2 = @n2 / @cont
end
else begin
set @mcm = @mcm * @cont
set @n1 = @n1 / @cont
end
end
else begin
if @n2 % @cont = 0 begin
set @mcm = @mcm * @cont
set @n2 = @n2 / @cont
end
else begin
set @cont = @cont + 1
end
end
end
return @mcm
end
go
print dbo.mcm(8,32)
go
--BINARIO
create function binario(@enteroP int)returns varchar(50)
as
begin
declare @cadena varchar(50)
set @cadena= ''
while @enteroP >= 2 begin
set @cadena = convert(varchar, @enteroP % 2) + @cadena
set @enteroP = @enteroP/2
end
set @cadena = convert(varchar, @enteroP ) + @caden
areturn @cadena
end
go
print dbo.binario(80)
go
--GENERO
create function genero(@sexo as char(1))returns varchar(10)
as
begin
declare @genero varchar(10)
set @genero=
case @sexo
when 'M' then 'MASCULINO'
when 'F' then 'FEMENINO'
end
return @genero
end
go
print dbo.genero('M')
-----------------------------BDSica_06
--Mostrar la cantidad de alumnos matriculados en cada
--seccin del nivel primario para el ao 2009
select grado.descripcion as 'grado',
seccion.descripcion as 'seccin',
count(detallealumno.idalumno) as 'alumnos'
FROM detallealumno
inner join seccion on seccion.idseccion=detallealumno.idseccion
inner join grado on grado.idgrado=seccion.idgrado
inner join nivel on nivel.idnivel=grado.idnivel
where nivel.descripcion='primario' and detallealumno.idano='2009'
group by detallealumno.idseccion,nivel.descripcion,
seccion.descripcion,grado.descripcion
BDSica_05
--Mostrar los alumnos matriculados en el nivel
--secundario para el grado de nombre 5
select nivel.descripcion as 'nivel',
grado.descripcion as 'grado',
count(detallealumno.idalumno) as 'alumnos'
from detallealumno
inner join seccion on seccion.idseccion=detallealumno.idseccion
inner join grado on grado.idgrado=seccion.idgrado
inner join nivel on nivel.idnivel=grado.idnivel
where grado.nombre='5' and nivel.descripcion='secundario'
group by nivel.descripcion,grado.descripcion,detallealumno.idseccion
BDSica_04
--Mostrar el turno con mayor cantidad de secciones
select top 1 turno.descripcion as 'turno' ,
count(seccion.descripcion) as 'secciones'
from turno
inner join seccion on turno.idturno=seccion.idturno
group by turno.descripcion
BDSica_03
--Mostrar la cantidad de secciones A de cada turno
select turno.descripcion as 'turno' ,
count(seccion.descripcion) as 'secciones'
from turno
inner join seccion on turno.idturno=seccion.idturno
where seccion.descripcion='A'
group by turno.descripcion
BDSica_02
--Mostrar la cantidad de secciones por cada nivel y grado
select nivel.descripcion as 'nivel',grado.descripcion as 'grado',
count(seccion.idseccion) as 'secciones'
from nivel
inner join grado on nivel.idnivel=grado.idnivel
inner join seccion on grado.idgrado=seccion.idgrado
group by grado.descripcion,nivel.descripcion
BDSica_01
--Mostrar la cantidad de secciones por cada turno
select idturno,count(idseccion)
from seccion
group by idturno
BDAvanzada_07
--MOSTRAR LA CANTIDAD EN SOLES QUE SE LE HA VENDIDO A CADA CLIENTE
select cliente.idcliente,cliente.nombre +' '+ cliente.apellido as 'cliente',