Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
BASE DE DATOS
2015
PRACTICA 1
6.1. Defina los siguientes Trminos.
o
de
en
de
de
JDno=5 (EMPLEADO)
TNombre,
(DIRECCIN:
texto),
(COD.CLIENTE:
NOMBREP=Producto X
(PROYECTO)
(NSS,NOMBREP)
NSSE,
NOMBRE_DEPENDIENTE
(DEPENDIENTE)
DEPENDIENTE_PILA EMPLEAD_DEP * EMPLEADO
RESULTADO NOMBREP (DEPENDIENTE_PILA)
c. VIZCARRA (NSSSUPER) NSS ( NOMBREP=Federico,
(EMPLEADO))
EMPLEADO_SUPERV (VIZCARRA * EMPLEADO)
RESULTADO NOMBREP (EMPLEADO_SUPERV)
d. PROYECTO_TRABAJA TRABAJA_EN
NUMP=NUMEROP
T1
(NOMBREP,
TOTALHORAS)
(PROYECTO_TRABAJA)
RESULTADO NOMBREP, TOTALHORAS (T1)
APELLIDO=Vizcarra
PROYECTO
NOMBREP
SUMA
HORAS
NOMBRED,NUMEROD
(DEPARTAMENTO)
DEPARTAMENTO_EMP (CDEPARTAMENTO * EMPLEADO)
R
(NOMBRE,
SALARIOMED)
(DEPARTAMENTO_EMP)
RESULTADO NOMBRE, SALARIOMED (R)
h. EMPLEADO_SEXOF
SEXO=F
NOMBRED
PROMEDIO
SALARIO
(EMPLEADO)
TSALARIO_F
(SEXO,
SALARIOMED)
(EMPLEADO_SEXOF)
RESULTADO SALARIOMED (TSALARIO_F)
SEXO
PROMEDIO
SALARIO
PROYECTO_CONDIC (NUMP)
PROYECTO_HIGUERAS
NUMEROP
(DEP_NOHIGUERAS
NUMEROD=NUMD
DESARROLLO EN SQL.
Problema a
SELECT e.NOMBREP, e.APELLIDO
FROM EMPLEADO e, PROYECTO p, TRABAJA_EN t
WHERE NSS=NSSE AND NUMP=NUMEROP AND
p.NOMBREP='ProductoX'
ND=5
AND
Problema b
SELECT e.NOMBREP
FROM EMPLEADO e
WHERE e.NSS IN (SELECT NSSE
FROM DEPENDIENTE
WHERE
NSSE=NSS
AND
NOMBRE_DEPENDIENTE=NOMBREP)
Problema c
SELECT e.NOMBREP
FROM EMPLEADO e
WHERE e.NSSSUPER IN (SELECT NSS
FROM EMPLEADO
WHERE
NOMBREP='Federico'
APELLIDO='Vizcarra')
Problema d
SELECT NOMBREP,sum(HORAS)
FROM TRABAJA_EN INNER JOIN PROYECTO
ON NUMP=NUMEROP
GROUP BY NOMBREP
Problema e
SELECT DISTINCT NOMBREP
FROM TRABAJA_EN INNER JOIN EMPLEADO
ON NSS=NSSE
Problema f
SELECT DISTINCT NOMBREP
AND
FROM EMPLEADO
WHERE NSS NOT IN (SELECT NSSE
FROM TRABAJA_EN);
Problema g
SELECT NUMEROD,avg(SALARIO)
FROM EMPLEADO INNER JOIN DEPARTAMENTO
ON ND=NUMEROD
GROUP BY ND
Problema h
SELECT avg(SALARIO)
FROM EMPLEADO
GROUP BY SEXO
HAVING SEXO='F'
Problema i
select NOMBREP,DIRECCION
from trabaja_en,empleado
where NUMP in(
SELECT distinct NUMEROP
FROM lugares_deptos
inner join proyecto ON LUGARD!='Higueras' AND LUGARP='Higueras'
AND NUMEROD=NUMD
)
and nsse=nss
Problema j
SELECT APELLIDO
from empleado
where NSS <> ALL(
SELECT distinct NSSGTE
FROM departamento inner join dependiente ON
NSSGTE=NSSE
)
PRACTICA 2
CONSULTAS SENCILLAS
6.1.
SELECT JCOD, JNOMBRE, CIUDAD
FROM J;
6.2.
SELECT JCOD, JNOMBRE, CIUDAD
FROM J
WHERE CIUDAD = Londres;
6.3.
SELECT SCOD
FROM SPJ
WHERE JCOD='J1'
ORDER BY SCOD
6.4.
SELECT SCOD, PCOD, JCOD, CANT
FROM SPJ
WHERE CANT>300
AND CANT<750
6.5.
SELECT DISTINCT COLOR, CIUDAD
FROM P
REUNIONES
6.6.
SELECT sCOD, PCOD, jCOD
FROM S, P, J
WHERE S.CIUDAD=P.CIUDAD
AND P.CIUDAD= J.CIUDAD;
6.7.
SELECT sCOD, PCOD, jCOD
FROM S, P, J
WHERE NOT (S.CIUDAD=P.CIUDAD AND P.CIUDAD= J.CIUDAD);
6.8.
SELECT sCOD, PCOD, jCOD
FROM S,P,J
WHERE S.CIUDAD <> P.CIUDAD
AND P.CIUDAD <> J.CIUDAD
AND J.CIUDAD <> S.CIUDAD;
6.9.
SELECT DISTINCT PCOD
FROM SPJ, S
WHERE SPJ.SCOD = S.SCOD
AND CIUDAD = LONDRES
6.10
SELECT DISTINCT PCOD
FROM SPJ, S, J
WHERE SPJ. SCOD = S.SCOD
AND SPJ.JCOD= J.JCOD
AND S.CIUDAD = LONDRES
AND J.CIUDAD = LONDRES;
6.11.
SELECT DISTINCT s.CIUDAD, J.CIUDAD
FROM S, SPJ, J
WHERE S.Scod=SPJ.Scod
AND SPJ.Jcod = J.Jcod
6.12.
SELECT DISTINCT PCOD
FROM SPJ, S, J
WHERE SPJ.SCOD = S.SCOD
AND SPJ.JCOD = J.JCOD
AND S.CIUDAD = J.CIUDAD;
6.13.
SELECT DISTINCT *
FROM SPJ, S, J, P
WHERE SPJ.JCOD = J.JCOD
AND SPJ.PCOD = P.pCOD
AND P.CIUDAD <> s.CIUDAD;
6.15
SELECT count(jcod)
FROM SPJ
WHERE SCOD = 's1';
6.16
SELECT Sum (CANT)
FROM SPJ
WHERE Pcod = 'P1'
SUBCONSULTAS
6.21
SELECT JNOMBRE
FROM J
WHERE JCOD IN (SELECT JCOD
FROM SPJ
WHERE SCOD = 'S1');
6.22.
SELECT color
FROM P
WHERE pCOD IN (SELECT pCOD
FROM SPJ
WHERE sCOD='S1')
6.23.
SELECT DISTINCT PCOD
FROM SPJ
WHERE PCOD = ANY (
SELECT PCOD
FROM J
WHERE J.JCOD=SPJ.JCOD
AND CIUDAD=LONDRES);
6.24.
6.28.
SELECT JCOD
FROM SPJ
WHERE PCOD='P1'
GROUP BY JCOD
HAVING AVG(CANT)>(
SELECT MAX(CANT)
FROM SPJ
WHERE SPJ.JCOD='J1'
)
6.29.
SELECT SCOD
FROM SPJ A
WHERE PCOD='P1'
AND CANT>(
SELECT AVG(CANT)
FROM SPJ B
WHERE B.PCOD='P1'
AND B.JCOD=A.JCOD
)
EXISTS (EXISTE)
6.30.
SELECT DISTINCT JNOMBRE
FROM J
WHERE EXISTS(
SELECT 1
FROM SPJ
WHERE SPJ.JCOD=J.JCOD
AND SCOD='S1' );
6.31.
SELECT COLOR
FROM P
WHERE EXISTS (SELECT 1
FROM SPJ
WHERE SPJ.PCOD=P.PCOD
AND SCOD='S1')
6.32.
SELECT JCOD
FROM J
WHERE JCOD NOT IN (
SELECT JCOD
FROM SPJ, P, S
WHERE COLOR='ROJO'
AND S.CIUDAD='LONDRES'
AND SPJ.SCOD=S.SCOD
AND SPJ.PCOD=P.PCOD)
6.33.
SELECT DISTINCT SPJ1.JCOD
FROM SPJ SPJ1
WHERE NOT EXISTS (
SELECT *
FROM SPJ SPJ2
WHERE SPJ1.JCOD = SPJ2.JCOD
AND SPJ2.SCOD <> S1);
6.34.
SELECT PCOD
FROM SPJ SPJ1
WHERE NOT EXISTS (
SELECT *
FROM J
WHERE J.CIUDAD='LONDRES'
AND NOT EXISTS (
SELECT * FROM SPJ SPJ2
WHERE SPJ2.JCOD = J.JCOD
AND SPJ2.PCOD = SPJ1.PCOD
))
6.35.
SELECT DISTINCT SPJ1.sCOD
FROM SPJ SPJ1
WHERE NOT EXISTS (
SELECT *
FROM J
WHERE NOT EXISTS (
SELECT * FROM SPJ SPJ2
WHERE SPJ2.jCOD = J.jCOD
AND SPJ2.pCOD = SPJ1.pCOD
AND SPJ2.sCOD = SPJ1.sCOD));
6.36.
SELECT DISTINCT *
FROM SPJ SPJ1
WHERE NOT EXISTS (
SELECT *
FROM SPJ SPJ2
WHERE SPJ2.sCOD = 'S1'
AND NOT EXISTS (
SELECT *
FROM SPJ SPJ3
WHERE SPJ3.jCOD = SPJ1.jCOD
AND SPJ3.pCOD = SPJ2.pCOD));
6.41.
SELECT S.CIUDAD
FROM S,SPJ
WHERE SPJ.SCOD=S.SCOD
UNION
SELECT P.CIUDAD
FROM P,SPJ
WHERE SPJ.PCOD=P.PCOD
UNION
SELECT J.CIUDAD
FROM J,SPJ
WHERE SPJ.JCOD=J.JCOD;
6.42.
SELECT P.COLOR
FROM P
UNION
SELECT P.COLOR
FROM P;
Resultado de la eleccin.
Rojo
Verde
Azul
6.43.
UPDATE P SET COLOR='GRIS' WHERE COLOR='ROJO';
6.44.
DELETE FROM J
WHERE JCOD IN (SELECT JCOD
FROM SPJ WHERE CANT=0);
HOJA 3
1. Defina los trminos siguientes
a. Catlogo. Podemos describir un catlogo como una coleccin de
esquemas. Otra manera de ver a un catlogo es como una estructura
jerrquica donde el catlogo es el objeto primario y los esquemas como
los objetos secundarios.
b. Propietario de esquemas.
Es el que otorgar privilegios de acceso y actualizacin de la base de
datos definida en el esquema a otros usuarios del sistema.
c. Definicin de Dominio. Conjunto de valores posibles para un atributo.
d. Literal cadena de caracteres. Es una cadena que vienen
representadas entre comillas simples (''). Otro punto bastante
importante es la insensibilidad de MySQL ante las maysculas y
minsculas, a no ser que se lo expresemos explcitamente con la funcin
BINARY.
e. Operaciones de comparacin. Son aquellos operadores destinados a
comparar dos expresiones o valores y que tienen como resultado un
valor booleano, true o false, aunque tambin puede devolver NULL
f. Conectores booleanos. Sirven para conectar palabras o frases entre
ms de un campo de texto, o utilizar operadores booleanos para
conectar palabras o frases dentro de un campo de texto.
g. Consulta externa. Es una instruccin de subconsulta.
h. Consulta correlacionada. Son consultas que no hacen referencia a
columnas de tablas de su clusula FROM.
i. Funcin integrada. Son funciones del sistema que permiten hacer
diferentes operaciones
j. DISTINCT. Se especifica que los registros con ciertos datos duplicados
sean obviadas en el resultado
k. GROUP BY. Agrupa los datos de la tabla origen y produce una nica fila
resumen por cada grupo formado
l. INSERT. Sirve para ingresar registros en una tabla
m. DELETE. Sirve para eliminar registros de una tabla
n. SQL empotrado (embebido). Una base de datos embebida es aquella
que no inicia un servicio en nuestra mquina independiente de la
aplicacin, pudindose enlazar directamente a nuestro cdigo fuente o
utilizarse en forma de librera
o. Lenguaje anfitrin. Un lenguaje anfitrin es el que permite que otro
lenguaje interacte con l
p. Cursor. Se refiere a una estructura de control utilizada para el recorrido
(y potencial procesamiento) de los registros del resultado de una
consulta.
q. FETCH. Son operaciones de recuperacin
r. Vista. Una vista de base de datos es un resultado de una consulta SQL
de una o varias tablas; tambin se le puede considerar una tabla virtual.
s. Especificacin de consulta. Se refiere a que se puede realizar
consultas a bases de datos relacionales desde otro programa
t. Esquema de informacin. Es la base de datos de informacin, que
almacena informacin acerca de las otras bases de datos
u. Valor por defecto. Es un valor fijo sobre el cual nosotros queremos
obtener informacin
La historia de SQL empieza en 1974 con la definicin, por parte de Donald Chamberlin y de
otras personas que trabajaban en los laboratorios de investigacin de IBM, de un lenguaje para
la especificacin de las caractersticas de las bases de datos que adoptaban
el modelo relacional. Este lenguaje se llamaba SEQUEL y se implement en un prototipo
llamado SEQUEL-XRM entre 1974 y 1975. Las experimentaciones con ese prototipo
condujeron, entre 1976 y 1977, a una revisin del lenguaje, que a partir de ese momento
cambi de nombre por motivos legales, convirtindose en SQL. En 1986, el ANSI adopt SQL
(sustancialmente adopt el dialecto SQL de IBM) como estndar para los lenguajes
relacionales y en 1987 se transform en estndar ISO. Esta versin del estndar va con el
nombre de SQL/86. En los aos siguientes, ste ha sufrido diversas revisiones que han
conducido primero a la versin SQL/89 y, posteriormente, a la actual SQL/92.
3.
a- Cules son las rdenes de SQL-92nque se usan para definir un
esquema de una base de datos?
o Para crear bases de datos, tablas, dominios, aserciones y vistas
se utilice la sentencia CREATE.
o Para modificar tablas y dominios se utilice la sentencia ALTER.
o Para borrar bases de datos, tablas, dominios, aserciones y
vistas se utilice la sentencia DROP.
b- Cmo se puede definir una clave de una sola columna o de
multicolumnas?
o Lo primero que tenemos que hacer es decidir qu nombre
queremos poner a la tabla (NOMBRE_TABLA).
o Despus, iremos dando el nombre de cada uno de los atributos
que formarn las columnas de la tabla (NOMBRE_COLUMNA).
o A cada una de las columnas le asignaremos un tipo de datos
predefinido o bien un dominio definido por el usuario. Tambin
podremos dar definiciones por defecto y restricciones de columna.
o Una vez definidas las columnas, slo nos quedar dar las
restricciones de tabla.
4.
5. Operaciones.
o UNION. Combina los resultados de dos o ms consultas en un solo
conjunto de resultados que incluye todas las filas que pertenecen a
las consultas de la unin.
o INTERSECT. Devuelve filas distintas que son de salida en las
consultas de entrada izquierda y derecha.
o
o
o
o
3.-Escriba las ordenes SQL para crear un esquema de base de datos para el
siguiente esquema relacional
CREATE DATABASE EMBARCADERO2;
USE EMBARCADERO2;
CREATE TABLE CLIENTE
(ID_CLIENTE INTEGER NOT NULL PRIMARY KEY
CHECK(ID_CLIENTE>100 AND ID_CLIENTE<10000),
NOMB_CLIENTE CHAR(30),
RENTA_ANUAL INTEGER DEFAULT 20000,
TIPO_CLIENTE CHAR(20)
CHECK (TIPO_CLIENTE IN('FABRICANTE','MAYORISTA','MINORISTA')));
CREATE TABLE EMBARQUE
(EMBARQUE_NUM INTEGER not null ,
ID_CLIENTE INTEGER ,
PESO INTEGER DEFAULT 10
CHECK(PESO<1000),
CAMION_NUM INTEGER ,
DESTINO CHAR(30),
FECHA_EMBARQUE DATE,
primary key(embarque_num),
FOREIGN KEY(ID_CLIENTE) REFERENCES CLIENTE(ID_CLIENTE)
ON DELETE CASCADE,
FOREIGN KEY(CAMION_NUM) REFERENCES CAMION(CAMION_NUM)
ON DELETE SET NULL,
FOREIGN KEY(DESTINO) REFERENCES CIUDAD(NOMB_CIUDAD)
ON DELETE SET NULL
)
;
CREATE TABLE CAMION
(CAMION_NUM INTEGER NOT NULL PRIMARY KEY,
NOMB_CHOFER CHAR(30)
);
CREATE TABLE CIUDAD
(
NOMB_CIUDAD CHAR(30) not null ,
POBLACION INTEGER,
primary key(nomb_ciudad)
);
INSERT INTO embarque
VALUES (100,200,200,200,'SIOUX CITY','1985/01/01');
INSERT INTO embarque
VALUES (200,200,200,300,'SIOUX CITY','1985/01/01');
INSERT INTO embarque
VALUES (400,300,200,200,'SIOUX CITY','1985/01/01');
INSERT INTO embarque
VALUES (600,400,200,300,'TOKYO','1985/01/01');
INSERT INTO embarque
VALUES (800,300,0,300,'TOKYO','1985/01/01');
INSERT INTO embarque
VALUES (900,200,100,300,'SAN FRANCISCO','1985/01/01');
INSERT INTO embarque
VALUES (150,500,100,300,'INVERNALIA','1985/01/01');
INSERT INTO CLIENTE
VALUES (200,'JOSE',10000,'FABRICANTE');
INSERT INTO CLIENTE
VALUES (300,'CARLOS',10000,'FABRICANTE');
INSERT INTO CLIENTE
VALUES (400,'PEPE',10000,'FABRICANTE');
INSERT INTO CLIENTE
VALUES(500,'JORGE',25000000,'MAYORISTA');
INSERT INTO CAMION
VALUES (200,'FAPENCIO');
INSERT INTO CAMION
VALUES (300,'JOFREY');
INSERT INTO ciudad
VALUES ('SIOUX CITY',1000);
INSERT INTO ciudad
VALUES('TOKYO',2000);
INSERT INTO CIUDAD
VALUES('SAN FRANCISCO',3000);
INSERT INTO CIUDAD
VALUES('INVERNALIA',2000000);
4. Consultas Simples
a. Cul es el nombre del cliente 433?
SELECT NOMB_CLIENTE
FROM CLIENTE
WHERE ID_CLIENTE=43
FROM EMBARQUE
WHERE DESTINO='CHIGACO'OR ' ST LOUIS' OR 'BALTIMORE';
i. D los nombres de los clientes que han enviado embarques a las
ciudades cuyo nombre empieza con C
SELECT C.NOMB_CLIENTE
FROM EMBARQUE E, CLIENTE C
WHERE
E.ID_CLIENTE=C.ID_CLIENTE
AND
DESTINO LIKE 'C%';
j. D los nombres de los clientes que han enviado embarques a las
ciudades cuyo nombre termina con City
SELECT C.NOMB_CLIENTE
FROM EMBARQUE E ,CLIENTE C
WHERE
E.ID_CLIENTE=C.ID_CLIENTE
AND
DESTINO LIKE '%CITY';
k. D los nombres de lo clientes que tienen una D como tercera
letra del nombre
SELECT C.NOMB_CLIENTE
FROM EMBARQUE E, CLIENTE C
WHERE
E.ID_CLIENTE=C.ID_CLIENTE
AND
DESTINO LIKE '__D%';
l. D los nombres de todos los clientes que sean minoristas
SELECT C.NOMB_CLIENTE
FROM EMBARQUE E,CLIENTE C
WHERE E.ID_CLIENTE=C.ID_CLIENTE
AND
TIPO_CLIENTE='MINORISTA';
5. Reuniones
a. Cmo se llaman los clientes que han enviado paquetes a Sioux
City?
SELECT C.NOMB_CLIENTE,E.DESTINO
FROM EMBARQUE E INNER JOIN CLIENTE C
ON (E.ID_CLIENTE=C.ID_CLIENTE)
AND E.DESTINO='SIOUX CITY';
b. A cuales destinos han hecho envos las compaas con renta
anual menor del milln
7. NOT EXISTS
a. Indique los clientes que han tenido embarque transportados
por cada camin
SELECT E.ID_CLIENTE
FROM EMBARQUE E
WHERE EXISTS (SELECT *
FROM CAMION C
WHERE C.CAMION_ID=E.CAMION_ID);
b. Indique las ciudades que han recibido embarques de todos los
clientes
SELECT CIU.NOMB_CIUDAD
FROM CIUDAD CIU
WHERE NOT EXISTS (
SELECT E.DESTINO
FROM EMBARQUE E
WHERE E.DESTINO=CIU.NOMB_CIUDAD
AND NOT EXISTS (
SELECT CLI.ID_CLIENTE
FROM CLIENTE CLI
WHERE CLI.ID_CLIENTE=E.ID_CLIENTE));
8. FUNCIONES INTEGRADAS
a. SELECT AVG(PESO)
FROM EMBARQUE;
b. SELECT AVG(PESO)
FROM EMBARQUE
WHERE DESTINO = 'ATLANTIDA';
c. SELECT COUNT(*)
FROM EMBARQUE E JOIN CLIENTE C ON (E.ID_CLIENTE =
C.ID_CLIENTE)
WHERE C.ID_CLIENTE = 433;
a.
SELECT NOMB_CHOFER
FROM camion
WHERE EXISTS (
SELECT *
FROM embarque
WHERE camion.CAMION_NUM=embarque.CAMION_NUM
AND ID_CLIENTE IN (
SELECT ID_CLIENTE
FROM vistac)
)
b.
SELECT POBLACION,NOMB_CIUDAD
FROM ciudad
WHERE EXISTS (
SELECT *
FROM embarque
WHERE NOMB_CIUDAD=embarque.DESTINO
AND ID_CLIENTE IN (
SELECT ID_CLIENTE
FROM vistab)
)
c.
SELECT NOMB_CHOFER,POBLACION
FROM camion,ciudad
WHERE EXISTS (
SELECT *
FROM embarque
WHERE NOMB_CIUDAD=embarque.DESTINO
AND CAMION.CAMION_NUM=EMBARQUE.CAMION_NUM
AND ID_CLIENTE IN (
SELECT ID_CLIENTE
FROM vistaa)
)