Está en la página 1de 7

use examen

Create Table Autores(


idAutor int
Identity(1, 1) Not NULL
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

/*Al crear la tabla libros, el campo idlibro se


implementa con un constraint de primary key, el
campo idtema se implementa con un constraint de
tipo llave foranea, los campos preciocompra y
paginas se implementan con un check donde solo
aceptan valores mayores a cero. Como repito
tambien se pueden crear constraints desde el alter
table (como lo hicimos en la sesión de
Laboratorio*/
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

Insert into Autores (Nombre,Telefono) values


('Nancy Rodrígues','498-0356')
Insert into Autores (Nombre,Telefono) values
('Carlos Cueva','000-0000')
Insert into Autores (Nombre,Telefono) values
('Janet Alva','962-7944')
Insert into Autores (Nombre,Telefono) values
('Ana Osorio','000-0000')
Insert into Autores (Nombre,Telefono) values
('Luis Rubio','962-6356')
go
insert into Temas(DescripcionTema) values
('Empresariales')
insert into Temas(DescripcionTema) values
('Psicología')
insert into Temas(DescripcionTema) values
('Ciencia')
insert into Temas(DescripcionTema) values
('Salud')
insert into Temas(DescripcionTema) values
('Ficción')
insert into Temas(DescripcionTema) values
('Romance')
insert into Temas(DescripcionTema) values
('Técnico')

go
insert into
Libros(Titulo,idTema,Editorial,PrecioCompra,Pagina
s) values ('Guerra de
Marcianos',5,'Navarrete',350.5,1012)
insert into
Libros(Titulo,idTema,Editorial,PrecioCompra,Pagina
s) values ('Planear su Carrera',1,'Prentice
Hall',450.8,395)
insert into
Libros(Titulo,idTema,Editorial,PrecioCompra,Pagina
s) values ('Diamantes',6,'Publicaciones
Ramona',395,593)
insert into
Libros(Titulo,idTema,Editorial,PrecioCompra,Pagina
s) values ('Técnicas del Tai
Chi',4,'Navarrete',595,236)
insert into Libros
(Titulo,idTema,Editorial,PrecioCompra,Paginas)
values ('Estoy en la Luna',5,'Publicaciones
Ramona',195,226)

go
Insert into AutoresLibros values (1,1)
Insert into AutoresLibros values (2,2)
Insert into AutoresLibros values (3,4)
Insert into AutoresLibros values (4,5)
Insert into AutoresLibros values (5,3)

select * from libros


select * from autores
select * from temas
select * from AutoresLibros

insert into Libros


(Titulo,idTema,Editorial,PrecioCompra,Paginas)
values ('PHP y SQL Server',7,'Publicaciones
Soft',85,250)

insert into Libros


(Titulo,idTema,Editorial,PrecioCompra,Paginas)
values ('Todo sobre JAVA',7,'Publicaciones
Jefry',180,350)
insert into Libros
(Titulo,idTema,Editorial,PrecioCompra,Paginas)
values ('Algoritmos',7,'Publicaciones
Jefry',60,80)

insert into Libros


(Titulo,idTema,Editorial,PrecioCompra,Paginas)
values ('Aventuras de
Avenger',5,'Publicaciones Host',45,120)

delete from libros where idlibro=7


select * from libros

--Ubicar que libros no se han registrado en


autoreslibros
--usando subconsulta
select * from libros where idlibro not in (select
idlibro from AutoresLibros)

--usando left join


select * from libros left join AutoresLibros on
libros.idLibro=AutoresLibros.idLibro
where AutoresLibros.idAutor is null

select * from AutoresLibros right join libros on


libros.idLibro=AutoresLibros.idLibro
where AutoresLibros.idAutor is null

--Listar los autores que escribrieron sobre tema


Ficción
select al.idAutor,au.Nombre,
au.Direccion,au.Telefono, li.Titulo
from libros li inner join temas te on
li.idTema=te.idTema
inner join AutoresLibros al on
li.idLibro=al.idLibro
inner join Autores au on
au.idAutor=al.idAutor
where te.DescripcionTema='ficción'

--COLLATE Modern_Spanish_CI_AS (case insensitivo,


acento sensitivo)
--Insertar en una tabla a partir de una consulta
(creando la tabla)
--Condición: que no exista la tabla tmp_autores
select al.idAutor,au.Nombre,
au.Direccion,au.Telefono, li.Titulo
into tmp_autores
from libros li inner join temas te on
li.idTema=te.idTema
inner join AutoresLibros al on
li.idLibro=al.idLibro
inner join Autores au on
au.idAutor=al.idAutor
where te.DescripcionTema='ficción'

--select * from tmp_autores

delete from tmp_autores

--Inserción a partir de una consulta (sobre una


tabla EXISTENTE)
INSERT tmp_autores
select al.idAutor,au.Nombre,
au.Direccion,au.Telefono, li.Titulo
from libros li inner join temas te on
li.idTema=te.idTema
inner join AutoresLibros al on
li.idLibro=al.idLibro
inner join Autores au on
au.idAutor=al.idAutor
where te.DescripcionTema='ficción'

---Consulta con LIKE


--ubicar libros cuyo titulo tenga la palabre "de"
select * from libros
where titulo like '%de%'

--ubicar libros cuyo titulo termina con letra a"


select * from libros
where titulo like '%a'

--ubicar libros cuyo titulo inicia con letra T y


termina con letra i"
select * from libros
where titulo like 't%i'

--ubicar libros cuyo titulo en la tercera letra


sea una vocal
select * from libros
where titulo like '__[a,e,i,o,u]%[n,s]'
order by PrecioCompra desc

select * from libros


where titulo like '__[a,e,i,o,u]%[n,s]'
order by 5

--GRUPOS (agrupamiento)
select * from libros order by idtema

--Contabilizar la cantidad de libros por tema


select idtema, count(*) as contar from libros
group by idtema

--Indicar que tema tiene mas libros


select top 1 libros.idTema, descripciontema,
count(*) as contar from libros inner join Temas
on Libros.idTema=Temas.idTema
group by libros.idTema, descripciontema
order by 3 desc

--Indicar que tema tiene mas libros (incluye


empates)
select top 1 with ties libros.idTema,
descripciontema, count(*) as contar from libros
inner join Temas
on Libros.idTema=Temas.idTema
group by libros.idTema, descripciontema
order by 3 desc

--Listar el autor con mas libros


select top 1 with ties al.idAutor, COUNT(*)
from libros li inner join AutoresLibros al on
li.idLibro=al.idLibro
group by al.idAutor
order by COUNT(*) desc
--Insert into AutoresLibros values (8,5)
--Insert into AutoresLibros values (8,1)
select top 1 with ties al.idAutor, Au.Nombre,
COUNT(*)
from libros li inner join AutoresLibros al on
li.idLibro=al.idLibro
inner join Autores au on
au.idAutor=al.idAutor
group by al.idAutor,Au.Nombre
order by COUNT(*) desc

--listar libros con mas autores


select top 1 with ties al.idlibro, li.Titulo,
COUNT(*)
from libros li inner join AutoresLibros al on
li.idLibro=al.idLibro
inner join Autores au on
au.idAutor=al.idAutor
group by al.idlibro, li.Titulo
order by COUNT(*) desc

--AVG
--COUNT
--MIN
--MAX

--promedio de precio por tema


select te.idTema, DescripcionTema ,
AVG(preciocompra) from libros li inner join Temas
te
on li.idTema=te.idTema
GROUP by te.idTema, DescripcionTema

También podría gustarte