Sie sind auf Seite 1von 19

[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 2



CREAR UNA BASE DE DATOS CON LAS SIGUIENTES
CARACTERSTICAS

















[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 3

CREAMOS LA BASE DE DATOS

Pulsamos el botn derecho sobre bases de datos y seleccionamos nueva base de datos



Lo siguiente que tenemos que hacer es poner el nombre que queramos a la base de datos y
pulsamos en aceptar.



[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 4

Una vez hecho esto ya tenemos la base de datos creada, con el nombre que le hemos
puesto.



Para empezar a utilizarla lo nico que tendramos que hacer seria pulsar en nueva consulta
y escribir use seguido del nombre de la base de datos, en este caso como vemos use SQL una
vez escrito esto ejecutaramos la consulta y ya empezaramos a utilizar la base de datos.



































[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 5

CREAMOS LAS TABLAS TENIENDO EN CUENTA LA
INTEGRIDAD REFERENCIAL

TABLA PROVEEDORES

CREATE TABLE Proveedores
(P# CHAR(3),
PNombre VARCHAR(20),
Categoria INT,
Ciudad VARCHAR(30),
CONSTRAINT P#_pk PRIMARY KEY(P#))






TABLA COMPONENTES

CREATE TABLE Componentes
(C# CHAR(3),
CNombre VARCHAR(20),
Color CHAR(10),
Peso INT,
Ciudad VARCHAR(30),
CONSTRAINT C#_pk PRIMARY KEY(C#))




[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 6

TABLA ARTICULOS

CREATE TABLE Articulos
(T# CHAR(3),
TNombre VARCHAR(20),
Ciudad VARCHAR(30),
CONSTRAINT T#_pk PRIMARY KEY(T#))







TABLA ENVIOS

CREATE TABLE Envios
(P# CHAR(3) CONSTRAINT P# REFERENCES Proveedores(P#),
C# CHAR(3) CONSTRAINT C# REFERENCES Componentes(C#),
T# CHAR(3) CONSTRAINT T# REFERENCES Articulos(T#),
Cantidad INT)













[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 7

APRENDEMOS A INSERTAR LOS DATOS DE
DIFERENTES FORMAS SIGUIENDO ESTOS PASOS

Lo primero que tenemos que hacer una vez hemos creado las tablas con sus respectivas
claves es introducir los datos que se nos dan, para ello ejecutamos las siguientes
instrucciones.

INSERTAMOS LOS DATOS DE LA TABLA COMPONENTES
Primero lo hacemos con componentes, siguiendo los valores que se nos han dado en las
tablas del enunciado, para hacer esto, podemos insertar los valores uno por uno.

Como en el siguiente caso, esta es una forma de insertar los valores en la fila de una tabla, lo
primero que hacemos es utilizar el comando insert into con la opcin de valores para ello
escribimos despus de insert into el nombre concreto de la tabla donde vamos a insertar
dichos valores, en la lnea siguiente escribiremos values seguido de los valores que se van a
insertar en las columnas en el orden correcto, tambin hay que tener en cuenta que los
datos de caracteres se introducen con comillas alrededor, pero no as los datos numricos
una vez hecho esto nos quedara una consulta, como la que vemos a continuacin y
tendramos que pulsar en el botn ejecutar nos aparecer un mensaje que nos indicara el
nmero de filas afectadas.

insert into componentes
values ('c1','x3a','rojo',12,'sevilla')


COMO INSERTAR VARIOS REGISTROS A LA VEZ

Para hacer esto, seguimos el mismo procedimiento que el anterior, pero tenemos que tener
en cuenta un par de cosas, la palabra values, solo debemos escribirla una vez, y entre
instrucciones, deben ir separadas mediante una coma como podemos ver a continuacin:

insert into componentes
values ('c2','b85','verde',17,'madrid'),
('c3','c4b','azul',17,'malaga'),
('c4','c4b','rojo',14,'sevilla'),
('c5','vt8','azul',12,'madrid'),
('c6','c30','rojo',19,'sevilla')













[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 8

INSERTAMOS LOS DATOS DE LA TABLA PROVEEDORES

Hacemos lo mismo insertando los datos, en la tabla proveedores, ejecutando la siguiente
sentencia:

insert into proveedores
values ('p1','carlos',20,'sevilla'),
('p2','juan',10,'madrid'),
('p3','jose',30,'sevilla'),
('p4','inma',20,'sevilla'),
('p5','eva',30,'caceres')


INSERTAMOS LOS DATOS DE LA TABLA ARTICULOS

Volvemos a hacer lo mismo, pero ahora introduciendo los valores para artculos

insert into articulos
values ('t1','clasificadora','madrid'),
('t2','perforadora','malaga'),
('t3','lectora','caceres'),
('t4','consola','caceres'),
('t5','mezcladora','sevilla'),
('t6','terminal','barcelona'),
('t7','cinta','sevilla')

Qu pasa cuando no se incluyen todos los valores para las columnas?

insert into articulos
values ('t1','clasificadora')



[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 9

Solucin al problema anterior, para insertar una fila con menos de todas las columnas, se
tienen que especificar los nombres de las columnas.

insert into articulos (t#,tnombre)
values ('t1','clasificadora')






En este caso la fila que hemos introducido, contendr valores NULL o valores
predeterminados como podemos ver en la siguiente imagen.
















[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 10

Qu pasa cuando el orden de los valores es incorrecto?

insert into articulos
values ('clasificadora','madrid','t1')






Solucin al problema anterior, para que esto no se produzca, si tenemos desordenados los
datos de las tablas, tendramos que especificar especificando el orden de los nombres de las
columnas como vemos a continuacin.

insert into articulos (tnombre,ciudad,t#)
values ('perforadora','malaga','t2')





[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 11

INSERTAMOS LOS DATOS DE LA TABLA ENVIOS

Ahora volveremos a hacer lo mismo, con la tabla que nos falta, que seria la tabla de envos,
para esta operacin ejecutaramos la siguiente instruccin


insert into envios
values ('p1','c1','t1',200),
('p1','c1','t4',700),
('p2','c3','t1',400),
('p2','c3','t2',200),
('p2','c3','t3',200),
('p2','c3','t4',500),
('p2','c3','t5',600),
('p2','c3','t6',400),
('p2','c3','t7',800),
('p2','c5','t2',100),
('p3','c3','t1',200),
('p3','c4','t2',500),
('p4','c6','t3',300),
('p4','c6','t7',300),
('p5','c2','t2',200),
('p5','c2','t4',100),
('p5','c5','t4',500),
('p5','c5','t7',100),
('p5','c6','t2',200),
('p5','c1','t4',100),
('p5','c3','t4',200),
('p5','c4','t4',800),
('p5','c5','t5',400),
('p5','c6','t4',500)




















[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 12

SOLUCION A LOS EJERCICIOS 1-14


1. Obtener todos los detalles de todos los artculos de CACERES.

Como podemos ver, lo que hacemos para obtener todos los detalles de los artculos
pertenecientes a cceres, hacemos un select con un astersco (*) ya que en lugar de campos
listaremos todas las columnas de la tabla, en este caso seleccionamos con from la tabla que
deseamos consultar, en este caso (Articulos) y como condicion con un where indicamos que
todos los artculos que pertenezcan a (CACERES).

SELECT *
FROM Articulos
WHERE ciudad=caceres





2. Obtener todos los valores de P# para los proveedores que abastecen el articulo Tl.

Ahora en este ejemplo vemos que lo que hacemos es obtener los valores de p# para esto
hacemos un select sobre este desde la tabla a la que pertenece ENVIOS donde t# es uno,
para asi obtener los proveedores que estan relacionados con el artculo T1.

SELECT P#
FROM ENVIOS
WHERE T#= T1




[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 13

3. Obtener la lista de pares de atributos {COLOR, CIUDAD) de la tabla componentes
eliminando los pares duplicados.

En este tercer ejercicio lo que estamos haciendo es utilizar la funcion DISTINCT de color y
ciudad ,la cual realiza una seleccin de filas cuyos valores en la columna especificada no
estn duplicados sobre componentes.

SELECT DISTINCT COLOR, CIUDAD
FROM COMPONENTES




4. Obtener de la tabla de artculos los valores de T# y CIUDAD donde el nombre de la
ciudad acaba en D o contiene al menos una E.

Hacemos un selecet de T# y ciudad desde artculos donde el nombre de la ciudad acabe en D
o contiene al menos una de, esto lo hacemos con el operador LIKE, como podemos ver en el
cdigo.

SELECT T#, CIUDAD
FROM ARTICULOS
WHERE CIUDAD LIKE '%D'
OR CIUDAD LIKE '%E%'

[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 14

5. Obtener los valores de P# para los proveedores que suministran para el artculo T1
el componente Cl.

Obtenemos los valores de P# mediante un select desde la tabla envios cuando se cumple la
condicion que le indicamos mediante el wher que son cuando suministran el artculo T1 y el
componente C1.

SELECT P#
FROM ENVIOS
WHERE T#=T1 AND C#=C1





6. Obtener los valores de TNOMBRE en orden alfabtico para los artculos
abastecidos por el proveedor P1.

Hacemos un select sobre TNOMBRE para los artculos que son abastecidos por el proveedor
P1 para ello tendremos que hacer el INNER JOIN correspondiente entre las tablas artculos y
envios.

SELECT TNOMBRE
FROM ARTICULOS INNER JOIN ENVIOS
ON ENVIOS.P#='P1' AND ENVIOS.T#=ARTICULOS.T#




[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 15

7. Obtener los valores de C# para los componentes suministrados para cualquier
articulo de MADRID.

Aqui lo que hacemos es obtener los valores de C#, es decir de los componentes
suministrados para cualquier artculo de madrid para ello utilizamos la funcion distinct
evitando as valores duplicados y hacemos un inner join entre la tabla articulos y envios para
ello hacemos despues la comparacion correspondiente entre el valor que se va a comparar
articulos y metemos la concicion de que estos articulos tengan como valor dentro del
campo ciudad Madrid

SELECT DISTINCT ENVIOS.C#
FROM ARTICULOS INNER JOIN ENVIOS
ON ARTICULOS.T#=ENVIOS.T#
WHERE ARTICULOS.CIUDAD='MADRID'



8. Obtener todos los valores de C# de los componentes tales que ningn otro
componente tenga un valor de peso inferior.

Con este selec obtenemos el valor de c# para el componente o componentes con el minimo
valor en peso, que es lo que le indicamosen la condicin, lo unico digamos a destacar esque
esta condicion esta formada por un select.

SELECT c#
FROM componentes
WHERE peso = (SELECT MIN(peso)
FROM componentes );


[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 16

9. Obtener los valores de P# para los proveedores que suministren los artculos T1 y
T2.

Hacemos una primera consulta simple que nos de los valores de P# para los proveedores que
suministran los artculos cuyo valor para T# es T1 y otra consulta igual pero donde el valor de
T# sea T2 despus unimos las dos utilizando el operador INTERSECT para devolver todas las
filas comunes a estas dos consultas.

SELECT ENVIOS.P#
FROM ENVIOS
WHERE T#='T1'
INTERSECT
SELECT ENVIOS.P#
FROM ENVIOS
WHERE T#='T2'





















[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 17

10. Obtener los valores de P# para los proveedores que suministran para un artculo
de SEVILLA o MADRID un componente ROJO.

Hacemos un select de p# evitando los valores duplicados desde envos y componentes
poniendo la igualdad comparativa sobre los componentes, hacemos un JOIN de nuevo
poniendo la comparacin correspondiente en los artculos sobre la tabla envos y artculos y
despus ponemos las condiciones que se nos pide donde los componentes sean para Sevilla
o Madrid y que el color sea rojo.

SELECT DISTINCT ENVIOS.P#
FROM (ENVIOS JOIN COMPONENTES
ON ENVIOS.C#=COMPONENTES.C#)
JOIN ARTICULOS
ON ENVIOS.T#=ARTICULOS.T#
WHERE (ARTICULOS.CIUDAD='SEVILLA' OR ARTICULOS.CIUDAD='MADRID') AND
(COMPONENTES.COLOR='ROJO')


























[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 18

11. Obtener mediante subconsultas los valores de C# para los componentes
suministrados para algn artculo de SEVILLA por un proveedor de SEVILLA.

Como vemos es un ejercicio parecido al anterior, obtenemos los valores de C# evitando
duplicaciones desde envos donde t# es decir el articulo provenga de sevilla y donde p# a su
vez tambin pertenezca a Sevilla

SELECT DISTINCT C#
FROM ENVIOS
WHERE T# IN( SELECT T#
FROM ARTICULOS
WHERE CIUDAD='SEVILLA')
AND P# IN ( SELECT P#
FROM PROVEEDORES
WHERE CIUDAD='SEVILLA')




12. Obtener los valores para los artculos que usan al menos un componente que se
puede obtener con el proveedor P1.

Hacemos un select sobre los artculos desde envos donde la clave de algn componente de
estos artculos se encuentre en los componentes suministrados desde envos por P1.

SELECT DISTINCT T#
FROM ENVIOS
WHERE C# IN( SELECT DISTINCT C#
FROM ENVIOS
WHERE P#='P1')


[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 19

13. Obtener todas las ternas (CIUDAD, C#, CIUDAD) tales que un proveedor de la
primera ciudad suministre el componente especificado para un artculo montado en
la segunda ciudad.

Como vemos recuperamos los valores que se nos indican mediante un select, esto lo
hacemos desde envos proveedores y artculos y en la condicin indicamos que un proveedor
de la primera ciudad suministre el componente especificado para un artculo montado en la
segunda ciudad.

SELECT P.Ciudad ,E.C#, A.Ciudad
FROM Envios E, Proveedores P, Articulos A
WHERE E.P#=P.P# AND E.T#=A.T#;



















[EJERCICIOS SQL 1-14]

PRIMERO DE ASIR Pgina 20

14. Repetir el ejercicio anterior pero sin recuperar las ternas en los que los dos
valores de ciudad sean los mismos.

Como vemos el ejercicio es el mismo que el anterior, solo que ahora solo se muestra el
resultado cuando se cumple la nueva regla dentro de la condicin WHERE, que es la que
hemos introducido y que evita que los dos valores de ciudad sean los mismos, como
indicamos.

SELECT P.Ciudad, C#, A.Ciudad
FROM Envios E, Proveedores P , Articulos A
WHERE E.P#=P.P# AND E.T#=A.T# AND P.Ciudad <> A.Ciudad

Das könnte Ihnen auch gefallen