Anda di halaman 1dari 11

--7 registros

que cumplan condicion check--

insert into cnst_first_lesson values('1234567890','Nevera','Alvaro Linares',30,'


0923569877','Guayaquil',2000)
insert into cnst_first_lesson values('1234567891','Nevera','Luis Alban',31,'0923
569876','Guayaquil',2100)
insert into cnst_first_lesson values('1234567892','Nevera','Alba Basantes',22,'0
923569875','Guayaquil',2200)
insert into cnst_first_lesson values('1234567893','Cocina','Daniel Cielo',25,'09
23569874','Quito',2300)
insert into cnst_first_lesson values('1234567894','Cocina','Pilar Lino',31,'0923
569873','Guayaquil',3000)
insert into cnst_first_lesson values('1234567895','Aspiradora','Ines Salazar',30
,'0923569872','Guayaquil',4000)
insert into cnst_first_lesson values('1234567896','lavadora','Roy Tomas',30,'092
3569878','Guayaquil',5000)
--quita la condicion de sueldos <1300
ALTER TABLE CNST_FIRST_LESSON NOCHECK CONSTRAINT SUELDOMES
insert into cnst_first_lesson values('1234567897','Cocina','Piero Lino',32,'0923
569869','Guayaquil',1000)
insert into cnst_first_lesson values('1234567898','Aspiradora','Irina Salazar',3
0,'0923569868','Guayaquil',900)
insert into cnst_first_lesson values('1234567899','lavadora','Ronny Tomas',30,'0
923569863','Guayaquil',500)
--activa la condicion de sueldos >2000
ALTER TABLE CNST_FIRST_LESSON CHECK CONSTRAINT SUELDOMES

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

--a la fecha. EJEMPLO:


SELECT DATENAME(MONTH,'16/10/2011')
--Muestra 'Octubre'
--DateName(WeekDay,fecha)
--Muestra el nmero del dia de la semana,
--correspondiente la fecha(Lunes a Domingo).
--EJEMPLO:
SELECT DATENAME(WEEKDAY,'16/10/2011')
--Muestra 'Domingo'
--DatePart(WeekDay,fecha)
--Muestra el nmero del dia correpondiente
--a la fecha(1 a 7). EJEMPLO:
SELECT DATEPART(WEEKDAY,'16/10/2011')
--Muestra '7'
--DatePart(Week,fecha)
--Muestra la semana del ao, correspondiente
--a la fecha. EJEMPLO:
SELECT DATEPART(WEEK,'16/10/2011')
--Muestra '42'
--DatePart(DayOfYear,fecha)
--Muestra el dia del ao, correspondiente a
--la fecha. EJEMPLO:
SELECT DATEPART(DAYOFYEAR,'16/10/2011')
--Muestra '289'
FUNCIONES DE CADENA
--Left(Cadena,Entero)
--Muestra los caracteres de la parte izquierca de la Cadena,
--cuya longitud
--de la cadena retornada se especifica en Entero. EJEMPLO:
SELECT LEFT('DAMIAN SAAVEDRA',6)
--Muestra 'DAMIAN'
--Right(Cadena,Entero)
--Muestra los caracteres de la parte derecha de la Cadena,
--cuya longitud de la cadena retornada se especifica en
--Entero. EJEMPLO:
SELECT RIGHT('DAMIAN SAAVEDRA',8)
--Muestra 'SAAVEDRA'
--Len(Cadena)
--Muestra la longitud de la Cadena. EJEMPLO:
SELECT LEN('DAMIAN')
--Muestra '6'
--Lower(Cadena)
--Mustra la Cadena en minsculas. EJEMPLO:
SELECT LOWER('DAMIAN')
--Muestra 'damian'
--Upper(Cadena)
--Mustra la Cadena en maysculas. EJEMPLO:
SELECT UPPER('saavedra')
--Muestra 'SAAVEDRA'
--Ltrim(Cadena)

--Suprime los espacios de la parte izquierda de la cadena.


--EJEMPLO:
SELECT LTRIM(' JOSE LUIS')
--Muestra 'JOSE LUIS'
--Rtrim(Cadena)
--Suprime los espacios de la parte derecha de la cadena.
--EJEMPLO:
SELECT RTRIM('JOSE LUIS ')
--Muestra 'JOSE LUIS'
--Replace(Cadena1,Cadena2, Cadena3)
--Reemplaza en Cadena1, todas las ocurrencias de Cadena2,
--con Cadena3. EJEMPLO:
SELECT REPLACE('JOSE LUIS','LUIS','ALBERTO')
--Muestra 'JOSE ALBERTO'
--Reverse(Cadena)
--Invierte Cadena. EJEMPLO:
SELECT REVERSE('JOSE LUIS')
--Muestra 'SIUL ESOJ'
JUNTURAS
--1
select country as [Pas],titleofcourtesy as [Ttulo],count(titleofcourtesy) as [Ca
ntidad]
from employees
group by country,titleofcourtesy
--2
select e.lastname+' '+e.firstname as [empleado],
c.companyname as [cliente],c.country,sum(od.unitprice*od.quantity) as [total]
from orders o
inner join customers c on o.customerid=c.customerid
inner join employees e on e.employeeid=o.employeeid
inner join [order details] od on o.orderid=od.orderid
where c.country='Germany'
group by od.orderid,e.lastname,e.firstname,c.companyname,c.country
--3
select e.employeeid,t.territoryDescription
from employees e
inner join employeeTerritories et on e.employeeid=et.employeeid
right join territories t on t.territoryid=et.territoryid
--4
select p.productname,p.unitprice,p.unitsinstock,s.companyname,c.categoryname
from products p
inner join suppliers s on s.supplierid=p.supplierid
inner join categories c on c.categoryid=p.categoryid
where c.categoryname like '[b-m]%'
--5
select c.companyname,count(o.customerid),c.country
from customers cinner join orders o on c.customerid=o.customerid
where c.country='germany'
group by o.customerid,c.companyname,c.country
--6
select p.categoryid,p.supplierid,count(p.productid)
from suppliers s
inner join products p on p.supplierid=s.supplierid
inner join categories c on c.categoryid=p.categoryid
where p.supplierid between 1 and 3 and p.unitprice>18
group by p.supplierid,p.categoryid

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

where c.nombreCategoria = 'Memorias')

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

sum(venta.total) as 'total' from cliente inner join venta on cliente.idcliente=v


enta.idcliente group by cliente.idcliente,cliente.nombre,cliente.apellido
BDAvanzada_06
--LISTAR LA CANTIDAD DE CLIENTES POR ZONA
--1.-Agrupamos los clientes por zona
--2.-Luego usamos una juntura (Para buscar los clientes que esten atados a deter
minadas zonas)
--3.-luego pasamos a contar los clientes por zona
select zona.idzona,count(cliente.idcliente)
from cliente
inner join zona on zona.idzona=cliente.idzona
group by zona.idzona
BDAvanzada_05
--MOSTRAR LOS 3 PRODUCTOS MAS BARATOS
--1.-Lo primero que se tiene que hacer es ordenar los productos por precio
--2.-Si queremos extraer los 3 mas baratos entonces se ordenara de forma
'As
cendente'
--3.-Si queremos extraer los 3 mas caros entonces se ordenara de forma 'Descende
nte'
--4.-Finalmente usamos el TOP para extraer los primeros 'n' regristros
select top 3 descripcion, preciounitario
from producto
order by preciounitario asc
BDAvanzada_04
--Listar los clientes que compraron
--algn jueves del mes de abril del ao 2008
select cliente.nombre +' '+ cliente.apellido as 'cliente',datename(weekday,venta
.fecha)+' '+convert(varchar(2),day(venta.fecha))+' de '+ datename(month,venta.fe
cha)+' del '+convert(varchar(4),year(venta.fecha)) as 'fecha' from cliente inner
join venta on cliente.idcliente=venta.idcliente where datename(weekday,venta.fe
cha)='Jueves' and datename(month,venta.fecha)='Abril' and year(venta.fecha)=2008
BDAvanzada_03
--Listar el nombre completo de los clientes que
--compraron memorias en el mes de marzo del 2008
select cliente.nombre +' '+ cliente.apellido as 'cliente',datename(weekday,venta
.fecha)+' '+convert(varchar(2),day(venta.fecha))+' de '+ datename(month,venta.fe
cha)+' del '+convert(varchar(4),year(venta.fecha)) as 'fecha',producto.descripci
on as 'producto' from detalleventa inner join venta on venta.idventa=detallevent
a.idventa inner join producto on detalleventa.idproducto=producto.idproducto inn
er join cliente on cliente.idcliente=venta.idcliente where year(venta.fecha)=200
8 and datename(month,venta.fecha)='Marzo' and producto.descripcion like 'memoria
%'
BDAvanzada_02
--Listar el nombre completo de los clientes de la zona 1
--que compraron el da 03 de abril del 2008
select distinct cliente.nombre +' '+ cliente.apellido as 'cliente',datename(week
day,venta.fecha)+' '+convert(varchar(2),day(venta.fecha))+' de '+ datename(month
,venta.fecha)+' del '+convert(varchar(4),year(venta.fecha)) as 'fecha' from vent
a inner join cliente on cliente.idcliente=venta.idcliente inner join zona on zon
a.idzona=cliente.idzona where day(venta.fecha)=3 and datename(month,venta.fecha)
='Abril' and year(venta.fecha)=2008 and zona.idzona=1
BDAvanzada_01
--Listar la fecha del da 30 de marzo del ao 2008
select datename(weekday,'30/03/2008')

Anda mungkin juga menyukai