IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÁNCHEZ CARRIÓN
HUACHO
Ing. CIP 127902
Mgtr. JOSUE JOEL RIOS HERRERA
Ingenierosistemasjfsc1983@[Link]
Ingeniería de Sistemas
Ciclo: V
EJEMPLOS PROPUESTOS EN SQL SERVER
SUB- CONSULTAS
CREAMOS UNA BASE DE DATOS CLUB
Un club dicta clases de distintos deportes a sus socios. El club tiene una tabla llamada
"inscriptos" en la cual almacena el número de "socio", el código del deporte en el cual se
inscribe y la cantidad de cuotas pagas (desde 0 hasta 10 que es el total por todo el año), y una
tabla denominada "socios" en la que guarda los datos personales de cada socio.
1. Elimine las tablas si existen:
if object_id('inscriptos') is not null
drop table inscriptos;
if object_id('socios') is not null
drop table socios;
2. Cree las tablas:
CREATE TABLE socios
(
numero int identity,
documento char(8),
nombre varchar(30),
domicilio varchar(30),
primary key (numero)
);
1 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
CREATE TABLE inscriptos
(
numerosocio int not null,
deporte varchar(20) not null,
cuotas tinyint
constraint CK_inscriptos_cuotas check (cuotas>=0 and cuotas<=10)
constraint DF_inscriptos_cuotas default 0,
primary key(numerosocio,deporte),
constraint FK_inscriptos_socio
foreign key (numerosocio)
references socios(numero)
on update cascade
on delete cascade,
);
3. Ingrese algunos registros:
INSERT INTO socios VALUES('23333333','Alberto Paredes','Colon 111');
INSERT INTO socios VALUES('24444444','Carlos Conte','Sarmiento755');
INSERT INTO socios VALUES('25555555','Fabian Fuentes','Caseros987');
INSERT INTO socios VALUES('26666666','Hector Lopez','Sucre 344');
INSERT INTO inscriptos VALUES(1,'tenis',1);
INSERT INTO inscriptos VALUES(1,'basquet',2);
INSERT INTO inscriptos VALUES(1,'natacion',1);
INSERT INTO inscriptos VALUES(2,'tenis',9);
INSERT INTO inscriptos VALUES(2,'natacion',1);
INSERT INTO inscriptos VALUES(2,'basquet',default);
INSERT INTO inscriptos VALUES(2,'futbol',2);
INSERT INTO inscriptos VALUES(3,'tenis',8);
INSERT INTO inscriptos VALUES(3,'basquet',9);
INSERT INTO inscriptos VALUES(3,'natacion',0);
INSERT INTO inscriptos VALUES(4,'basquet',10);
4. Emplee una subconsulta con el operador "exists" para devolver la lista de socios que se
inscribieron en un determinado deporte.
SELECT nombre
FROM socios as s
WHERE exists
(
2 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
SELECT * FROM inscriptos as i
WHERE [Link]=[Link] and [Link]='natacion'
);
5. Busque los socios que NO se han inscripto en un deporte determinado empleando "not
exists".
SELECT nombre
FROM socios as s
WHERE not exists
(
SELECT * FROM inscriptos as i
WHERE [Link]=[Link] and [Link]='natacion'
);
6. Muestre todos los datos de los socios que han pagado todas las cuotas.
SELECT s.*
FROM socios as s
WHERE exists
(
SELECT * FROM inscriptos as i
WHERE [Link]=[Link] and [Link]=10
);
3 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
CREAR TABLA A PARTIR DE OTRA
(SELECT - INTO)
Podemos crear una tabla e insertar datos en ella en una sola sentencia consultando otra tabla
(o varias) con esta sintaxis:
select CAMPOSNUEVATABLA
into NUEVATABLA
from TABLA
where CONDICION;
1. CREAMOS UNA BASE DE DATOS: LIBRERÍA1
Tenemos la tabla "libros" de una librería y queremos crear una tabla llamada "editoriales"
que contenga los nombres de las editoriales.
2. Eliminamos las tablas "libros" y "editoriales" si existen:
if object_id('libros')is not null
drop table libros;
if object_id('editoriales')is not null
drop table editoriales;
3. Creamos la tabla "libros":
CREATE TABLE libros
(
codigo int,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
4. Ingresamos algunos registros;
INSERT INTO libros VALUES('1','Uno','Richard Bach','Planeta',15);
INSERT INTO libros VALUES('2','El aleph','Borges','Emece',25);
INSERT INTO libros VALUES('3','Matematica estas ahi','Paenza','Nuevo siglo',18);
4 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
INSERT INTO libros VALUES('4','Aprenda PHP','Mario Molina','Nuevo siglo',45);
INSERT INTO libros VALUES('5','Ilusiones','Richard Bach','Planeta',14);
INSERT INTO libros VALUES('6','Java en 10 minutos','Mario Molina','Nuevo siglo',50);
INSERT INTO libros VALUES('7','Oracle','Mario Molin','Nuevo siglo',55);
INSERT INTO libros VALUES('8','Microsoft Word','Richar Bach','Planeta',14);
INSERT INTO libros VALUES('9',''Microsoft Excel','Borgez','Emece',35);
INSERT INTO libros VALUES('10','Java Script','[Link]','Nuevo siglo',57);
INSERT INTO libros VALUES('11','Base de Datos','Paensa','Planeta',48);
INSERT INTO libros VALUES('12','3D','Paenssa','Emece',46);
INSERT INTO libros VALUES('13','AUTOCAD','[Link]','Nuevo siglo',35);
INSERT INTO libros VALUES('14','S10','[Link]','Nuevo siglo',49);
INSERT INTO libros VALUES('15',' Diseño de Pagina Web ','[Link]','Nuevo siglo',54);
INSERT INTO libros VALUES('16','Diseño de Pagina Web II','[Link]','Nuevo
siglo',61);
INSERT INTO libros VALUES('17','Diseño de Datos','Borg.','Nuevo siglo',56);
INSERT INTO libros VALUES('18','Base de Datos II','Borgees','Nuevo siglo',26);
INSERT INTO libros VALUES('19','Java Scrip','[Link]','Nuevo siglo',32);
INSERT INTO libros VALUES('20','Java Scrip','Paenzza','Nuevo siglo',35);
5. Creamos una tabla llamada "editoriales" que contenga los nombres de las editoriales:
SELECT distinct editorial as nombre
INTO editoriales
FROM libros;
6. Veamos la nueva tabla:
SELECT * FROM editoriales;
7. Necesitamos una nueva tabla llamada "librosporeditorial" que contenga la cantidad de
libros de cada editorial. Primero eliminamos la tabla, si existe:
if object_id('cantidadporeditorial') is not null
DROP TABLE cantidadporeditorial;
8. Creamos la nueva tabla:
SELECT editorial as nombre, COUNT(*) as cantidad
INTO cantidadporeditorial
FROM libros
GROUP BY editorial;
5 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
9. Veamos los registros de la nueva tabla:
SELECT * FROM cantidadporeditorial;
La tabla "cantidadporeditorial" se ha creado con el campo llamado "nombre"
seleccionado del campo "editorial" de "libros" y con el campo "cantidad" con el valor
calculado con count(*) de la tabla "libros".
10. Queremos una tabla llamada "ofertas4" que contenga los mismos campos que "libros" y
guarde los 4 libros más económicos. Primero eliminamos, si existe, la tabla "ofertas4":
if object_id('ofertas4') is not null
drop table ofertas4;
11. Creamos "ofertas4" e insertamos la consulta de "libros":
SELECT top 4 *
INTO ofertas4
FROM libros
ORDER BY precio DESC;
La consulta anterior retorna los 4 primeros libros de la tabla "libros", ordenados en forma
ascendente por precio y los almacena en la nueva tabla ("ofertas4"). Note que no se listan
los campos a extraer, se coloca un asterisco para indicar que se incluyen todos los
campos.
12. Veamos los registros de la nueva tabla:
SELECT * FROM ofertas4;
13. Agregamos una columna a la tabla "editoriales" que contiene la ciudad en la cual está la
casa central de cada editorial:
ALTER TABLE editoriales ADD ciudad varchar(30);
14. Actualizamos dicho campo:
UPDATE editoriales set ciudad='Cordoba' where nombre='Planeta';
UPDATE editoriales set ciudad='Cordoba' where nombre='Emece';
UPDATE editoriales set ciudad='Buenos Aires' where nombre='Nuevo siglo';
15. Queremos una nueva tabla llamada "librosdecordoba" que contenga los títulos y
autores de los libros de editoriales de Cordoba. En primer lugar, la eliminamos, si existe:
if object_id('librosdecordoba') is not null
DROP TABLE librosdecordoba;
6 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
16. Consultamos las 2 tablas y guardamos el resultado en la nueva tabla que estamos
creando:
SELECT titulo,autor
INTO librosdecordoba
FROM libros
JOIN editoriales
ON editorial=nombre
WHERE ciudad='Cordoba';
17. Consultamos la nueva tabla:
SELECT *FROM librosdecordoba;
7 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
EJEMPLO PRÁCTICO
CREAMOS UNA BASE DE DATOS: SUPERMERCADO
Un supermercado almacena los datos de sus empleados en una tabla denominada
"empleados" y en una tabla llamada "sucursales" los códigos y ciudades de las diferentes
sucursales.
1. Elimine las tablas "empleados" y "sucursales" si existen:
if object_id('empleados')is not null
drop table empleados;
if object_id('sucursales')is not null
drop table sucursales;
2. Cree la tabla "sucursales":
CREATE TABLE sucursales
(
codigo int identity,
ciudad varchar(30) not null,
primary key(codigo)
);
3. Cree la tabla "empleados":
CREATE TABLE empleados
(
documento char(8) not null,
nombre varchar(30) not null,
domicilio varchar(30),
seccion varchar(20),
sueldo decimal(6,2),
codigosucursal int,
primary key(documento),
constraint FK_empleados_sucursal foreign key (codigosucursal)
references sucursales(codigo)
on update cascade
);
8 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
4. Ingrese algunos registros para ambas tablas:
INSERT INTO sucursales VALUES('Cordoba');
INSERT INTO sucursales VALUES('Villa Maria');
INSERT INTO sucursales VALUES('Carlos Paz');
INSERT INTO sucursales VALUES('Cruz del Eje');
INSERT INTO empleados VALUES('22222222','Ana Acosta','Avellaneda
111','Secretaria',500,1);
INSERT INTO empleados VALUES('23333333','Carlos Caseros','Colon 222','Sistemas',800,1);
INSERT INTO empleados VALUES('24444444','Diana Dominguez','Dinamarca
333','Secretaria',550,2);
INSERT INTO empleados VALUES('25555555','Fabiola Fuentes','Francia
|444','Sistemas',750,2);
INSERT INTO empleados VALUES('26666666','Gabriela Gonzalez','Guemes
555','Secretaria',580,3);
INSERT INTO empleados VALUES('27777777','Juan Juarez','Jujuy 777','Secretaria',500,4);
INSERT INTO empleados VALUES('28888888','Luis Lopez','Lules 888','Sistemas',780,4);
INSERT INTO empleados VALUES('29999999','Maria Morales','Marina
999','Contaduria',670,4);
5. Realice un join para mostrar todos los datos de "empleados" incluyendo la ciudad de la
sucursal:
SELECT documento,nombre,domicilio,seccion,sueldo,ciudad
FROM empleados
JOIN sucursales ON codigosucursal=codigo;
6. Cree una tabla llamada "secciones" que contenga las secciones de la empresa (primero
elimínela, si existe):
if object_id('secciones') is not null
drop table secciones;
SELECT DISTINCT seccion as nombre
INTO secciones
FROM empleados;
7. Recupere la información de "secciones":
SELECT * FROM secciones;
9 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
8. Se necesita una nueva tabla llamada "sueldosxseccion" que contenga la suma de los
sueldos de los empleados por sección. Primero elimine la tabla, si existe:
if object_id('sueldosxseccion') is not null
drop table sueldosxseccion;
SELECT seccion, sum(sueldo) as total
INTO sueldosxseccion
FROM empleados
GROUP BY seccion;
9. Recupere los registros de la nueva tabla:
SELECT * FROM sueldosxseccion;
10. Se necesita una tabla llamada "maximossueldos" que contenga los mismos campos que
"empleados" y guarde los 3 empleados con sueldos más altos. Primero eliminamos, si
existe, la tabla "maximossueldos":
if object_id('maximossueldos') is not null
drop table maximossueldos;
SELECT top 3 *
INTO maximossueldos
FROM empleados
ORDER BY sueldo;
11. Vea los registros de la nueva tabla:
SELECT * from maximossueldos;
12. Se necesita una nueva tabla llamada "sucursalCordoba" que contenga los nombres y
sección de los empleados de la ciudad de Córdoba. En primer lugar, eliminamos la tabla,
si existe. Luego, consulte las tablas "empleados" y "sucursales" y guarde el resultado en
la nueva tabla:
if object_id('sucursalCordoba') is not null
drop table sucursalCordoba;
SELECT nombre,ciudad
INTO sucursalCordoba
10 Ing. Josué Joél Rios Herrera
IMPLEMENTACIÓN Y GESTIÓN DE BASE DE DATOS V - CICLO
FROM empleados
JOIN sucursales
ON codigosucursal=codigo
WHERE ciudad='Cordoba';
13. Consulte la nueva tabla:
SELECT * FROM sucursalCordoba;
11 Ing. Josué Joél Rios Herrera