EJERCICIOS SQL 114

[EJERCICIOS SQL 1-14]

CREAMOS LA BASE DE DATOS

CREAMOS LAS TABLAS TENIENDO EN
CUENTA LA
INTEGRIDAD
REFERENCIAL

APRENDEMOS A INSERTAR LOS
DATOS DE
DIFERENTES FORMAS SIGUIENDO
ESTOS PASOS

SOLUCION A LOS EJERCICIOS 114

Página 1

CREAR UNA BASE DE DATOS CON LAS SIGUIENTES CARACTERÍSTI CAS Página 2 .

CREAMOS LA BASE DE DATOS Creamos una base de datos llamada SQL Para empezar a utilizarla lo único que tendríamos que hacer seria pulsar en “nueva consulta” y escribir use seguido del nombre de la base de datos. Página 3 . en este caso como vemos use SQL una vez escrito esto ejecutaríamos la consulta y ya empezaríamos a utilizar la base de datos.

CONSTRAINT P#_pk PRIMARY KEY(P#)) TABLA COMPONENTES CREATE TABLE Componentes (C# CHAR(3). Ciudad VARCHAR(30). PNombre VARCHAR(20). Ciudad VARCHAR(30).CREAMOS LAS TABLAS TENIENDO EN CUENTA LA INTEGRIDAD REFERENCIAL TABLA PROVEEDORES CREATE TABLE Proveedores (P# CHAR(3). CONSTRAINT C#_pk PRIMARY KEY(C#)) Página 4 . Categoria INT. Peso INT. CNombre VARCHAR(20). Color CHAR(10).

Página 5 .

Cantidad INT) Página 6 . T# CHAR(3) CONSTRAINT T# REFERENCES Articulos(T#). TNombre VARCHAR(20). 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#). Ciudad VARCHAR(30).TABLA ARTICULOS CREATE TABLE Articulos (T# CHAR(3).

insert into componentes values ('c1'.'x3a'.'rojo'. solo debemos escribirla una vez.12. ('c5'. ('c4'.'azul'. como la que vemos a continuación y tendríamos que pulsar en el botón ejecutar nos aparecerá un mensaje que nos indicara el número de filas afectadas.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.12.'sevilla') COMO INSERTAR VARIOS REGISTROS A LA VEZ Para hacer esto. para ello ejecutamos las siguientes instrucciones. siguiendo los valores que se nos han dado en las tablas del enunciado.'vt8'. Como en el siguiente caso. lo primero que hacemos es utilizar el comando insert into con la opción de valores para ello escribimos después de insert into el nombre concreto de la tabla donde vamos a insertar dichos valores. para hacer esto. y entre instrucciones. pero no así los datos numéricos” una vez hecho esto nos quedaría una consulta.'malaga').'sevilla') Página 7 .19. pero tenemos que tener en cuenta un par de cosas.'madrid').'c4b'. deben ir separadas mediante una coma como podemos ver a continuación: insert into componentes values ('c2'. INSERTAMOS LOS DATOS DE LA TABLA COMPONENTES Primero lo hacemos con componentes.17.'madrid'). seguimos el mismo procedimiento que el anterior.'verde'.'b85'.14. en la línea siguiente escribiremos values seguido de los valores que se van a insertar en las columnas en el orden correcto. la palabra values. ('c3'.'c30'.'c4b'. “también hay que tener en cuenta que los datos de caracteres se introducen con comillas alrededor.'sevilla'). ('c6'. podemos insertar los valores uno por uno.'rojo'.'rojo'.17.'azul'. esta es una forma de insertar los valores en la fila de una tabla.

'mezcladora'.10.30. ('t3'. ('p3'. ('t2'.'cinta'.30.'sevilla') ¿Qué pasa cuando no se incluyen todos los valores para las columnas? insert into articulos values ('t1'.20.'sevilla').'sevilla').'inma'.'madrid').'jose'.'juan'.'clasificadora') Página 8 .'sevilla').'carlos'.'malag a').'caceres') INSERTAMOS LOS DATOS DE LA TABLA ARTICULOS Volvemos a hacer lo mismo. ('p5'.'eva'. ('t6'.20.'madrid').INSERTAMOS LOS DATOS DE LA TABLA PROVEEDORES Hacemos lo mismo insertando los datos.'sevilla' ).'perforadora'.'caceres'). ('t4'. ejecutando la siguiente sentencia: insert into proveedores values ('p1'.'barcelona' ). ('t7'. ('p2'.'caceres'). ('p4'. pero ahora introduciendo los valores para artículos insert into articulos values ('t1'.'lectora'. ('t5'.'terminal'.'consola'.'clasificadora'. en la tabla proveedores.

para insertar una fila con menos de todas las columnas.tnombre) values ('t1'.'clasificadora') En este caso la fila que hemos introducido. se tienen que especificar los nombres de las columnas. contendrá valores NULL o valores predeterminados como podemos ver en la siguiente imagen. insert into articulos (t#. Página 9 .Solución al problema anterior.

't2') Página 10 .'madrid'.'malaga'.ciudad.¿Qué pasa cuando el orden de los valores es incorrecto? insert into articulos values ('clasificadora'. tendríamos que especificar especificando el orden de los nombres de las columnas como vemos a continuación. insert into articulos (tnombre.t#) values ('perforadora'. para que esto no se produzca. si tenemos desordenados los datos de las tablas.'t1') Solución al problema anterior.

't5'. ('p5'.'t2'.200).200). ('p5'. ('p2'.700).'c5'.'c1'.'c5'.100).'t4'.200).200).'t1'.'c3'.500) Página 11 .300). ('p4'.'c3'.100).'c6'.200).'c2'.100).200).200).'t4'.'t3'.'t6'. ('p3'.'c3'.400).'c3'.'t1'. que seria la tabla de envíos.'c3'.'c4'. ('p1'.800).'c3'. ('p2'. ('p2'.'c6'. ('p2'.'t2'.'c1'. ('p2'.'t4'.'t4'.'c4'.'t2'. ('p2'. ('p5'.'c2'.'t1'.500).'t2'. ('p4'.'t4'. ('p5'. ('p5'.'t7'. ('p5'.'t7'.300).'c6'.500).'t3'.'t2'.800). ('p5'.'c3'.400).'c3'. ('p5'.500).'t4'.'t5'. ('p5'. ('p2'. con la tabla que nos falta.'t4'.400).600). ('p3'.'t4'. para esta operación ejecutaríamos la siguiente instrucción insert into envios values ('p1'. ('p2'.'c5'.'c1'.100).'c3'.'c6'.INSERTAMOS LOS DATOS DE LA TABLA ENVIOS Ahora volveremos a hacer lo mismo.'t7'.'c5'. ('p5'.

para asi obtener los proveedores que estan relacionados con el artículo T1. Como podemos ver. Obtener todos los valores de P# para los proveedores que abastecen el articulo Tl. hacemos un select con un asterísco (*) ya que en lugar de campos listaremos todas las columnas de la tabla. SELECT P# FROM ENVIOS WHERE T#= ‘T1’ Página 12 . en este caso (Articulos) y como condicion con un where indicamos que todos los artículos que pertenezcan a (CACERES). lo que hacemos para obtener todos los detalles de los artículos pertenecientes a cáceres. 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. en este caso seleccionamos con from la tabla que deseamos consultar. Obtener todos los detalles de todos los artículos de CACERES. SELECT * FROM Articulos WHERE ciudad=’caceres’ 2.Selección de Registros 1.

En este tercer ejercicio lo que estamos haciendo es utilizar la funcion DISTINCT de color y ciudad . Hacemos un selecet de T# y ciudad desde artículos donde el nombre de la ciudad acabe en D o contiene al menos una de. CIUDAD FROM COMPONENTES 4. esto lo hacemos con el operador LIKE. como podemos ver en el código. Obtener de la tabla de artículos los valores de T# y CIUDAD donde el nombre de la ciudad acaba en D o contiene al menos una E.la cual realiza una selección de filas cuyos valores en la columna especificada no están duplicados sobre componentes. Obtener la lista de pares de atributos {COLOR.3. CIUDAD) de la tabla componentes eliminando los pares duplicados. CIUDAD FROM ARTICULOS WHERE CIUDAD LIKE '%D' OR CIUDAD LIKE '%E%' Página 13 . SELECT T#. SELECT DISTINCT COLOR.

P#='P1' ENVIOS. SELECT TNOMBRE FROM ARTICULOS INNER JOIN ENVIOS ON ENVIOS. Hacemos un select sobre TNOMBRE para los artículos que son abastecidos por el proveedor P1 para ello tendremos que hacer el INNER JOIN correspondiente entre las tablas artículos y envios.T#=ARTICULOS.T# AND Página 14 . SELECT P# FROM ENVIOS WHERE T#=’T1’ C#=’C1’ AND 6. Obtener los valores de TNOMBRE en orden alfabético para los artículos abastecidos por el proveedor P1.5. Obtener los valores de P# para los proveedores que suministran para el artículo 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 artículo T1 y el componente C1.

Página 15 .

Con este selec obtenemos el valor de c# para el componente o componentes con el minimo valor en peso. Obtener todos los valores de C# de los componentes tales que ningún otro componente tenga un valor de peso inferior.7.T# WHERE ARTICULOS. SELECT c# FROM componentes WHERE peso = (SELECT MIN(peso) FROM componentes ).T#=ENVIOS. es decir de los componentes suministrados para cualquier artículo 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. que es lo que le indicamosen la condición. Obtener los valores de C# para los componentes suministrados para cualquier articulo de MADRID.CIUDAD='MADRID' 8. lo unico digamos a destacar esque esta condicion esta formada por un select.C# FROM ARTICULOS INNER JOIN ENVIOS ON ARTICULOS. Página 16 . Aqui lo que hacemos es obtener los valores de C#.

9. Obtener los valores de P# para los proveedores que suministren los artículos T1 y T2.P# FROM ENVIOS WHERE T#='T1' INTERSECT SELECT ENVIOS. SELECT ENVIOS.P# FROM ENVIOS WHERE T#='T2' Página 17 . Hacemos una primera consulta simple que nos de los valores de P# para los proveedores que suministran los artículos cuyo valor para T# es T1 y otra consulta igual pero donde el valor de T# sea T2 después unimos las dos utilizando el operador INTERSECT para devolver todas las filas comunes a estas dos consultas.

10. Obtener los valores de P# para los proveedores que suministran para un artículo de SEVILLA o MADRID un componente ROJO. hacemos un “JOIN” de nuevo poniendo la comparación correspondiente en los artículos sobre la tabla envíos y artículos y después ponemos las condiciones que se nos pide donde los componentes sean para Sevilla o Madrid y que el color sea rojo.T# WHERE (ARTICULOS.CIUDAD='MADRID') AND (COMPONENTES.P# FROM (ENVIOS JOIN COMPONENTES ON ENVIOS.COLOR='ROJO') Página 18 . Hacemos un select de p# evitando los valores duplicados desde envíos y componentes poniendo la igualdad comparativa sobre los componentes.CIUDAD='SEVILLA' OR ARTICULOS.T#=ARTICULOS.C# ) JOIN ARTICULOS ON ENVIOS.C#=COMPONENTES. SELECT DISTINCT ENVIOS.

Obtener mediante subconsultas los valores de C# para los componentes suministrados para algún artículo de SEVILLA por un proveedor de SEVILLA. SELECT DISTINCT T# FROM ENVIOS WHERE C# IN( SELECT DISTINCT C# FROM ENVIOS WHERE P#='P1') Página 19 .11. obtenemos los valores de C# evitando duplicaciones desde envíos donde t# es decir el articulo provenga de sevilla y donde p# a su vez también 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. Como vemos es un ejercicio parecido al anterior. Obtener los valores para los artículos que usan al menos un componente que se puede obtener con el proveedor P1. Hacemos un select sobre los artículos desde envíos donde la clave de algún componente de estos artículos se encuentre en los componentes suministrados desde envíos por “P1”.

Página 20 .

Ciudad . Proveedores P. esto lo hacemos desde envíos proveedores y artículos y en la condición indicamos que un proveedor de la primera ciudad suministre el componente especificado para un artículo montado en la segunda ciudad.13.Ciudad FROM Envios E. CIUDAD) tales que un proveedor de la primera ciudad suministre el componente especificado para un artículo montado en la segunda ciudad. Articulos A WHERE E.T#=A.P#=P.T#. A. SELECT P. Página 21 .C#. Como vemos recuperamos los valores que se nos indican mediante un select.P# AND E. Obtener todas las ternas (CIUDAD. C#.E.

A. SELECT P.T#=A. 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 condición WHERE.Ciudad <> A. que es la que hemos introducido y que evita que los dos valores de ciudad sean los mismos.T# AND P.P# AND E. como indicamos.Ciudad Página 22 .Ciudad. Proveedores P . Repetir el ejercicio anterior pero sin recuperar las ternas en los que los dos valores de ciudad sean los mismos. Articulos A WHERE E.P#=P.Ciudad FROM Envios E.14. C#.