SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL...

37
1 Lenguaje SQL Pedro Pablo Alarcón Departamento de O.E.I. Escuela Universitaria de Informática Universidad Politécnica de Madrid 2002 © Pedro P. Alarcón U.P.M.- E.U.I. Bases de Datos Lenguaje SQL 1. Introducción 2. LMD- Operaciones de Recuperación 3. LMD – Operaciones de Actualización 4. Lenguaje de Definición de Datos 5. Lenguaje de Control de Datos 6. SQL Inmerso

Transcript of SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL...

Page 1: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

1

Lenguaje SQL

Pedro Pablo Alarcón

Departamento de O.E.I.Escuela Universitaria de InformáticaUniversidad Politécnica de Madrid

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje SQL

1. Introducción2. LMD- Operaciones de Recuperación3. LMD – Operaciones de Actualización4. Lenguaje de Definición de Datos5. Lenguaje de Control de Datos6. SQL Inmerso

Page 2: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

2

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

1. Introducción? SQL (Structured Query Language)

? Lenguaje de Consulta Estructurado, para bases de datos relacionales

? Es mucho más que un lenguaje de consulta puesto que permite además funciones de definición y control de datos

? La estandarización ha sido crucial para su difusión? Prácticamente la mayoría de los sistemas relacionales

soportan las bases de SQL estándar y suelen incluir aportaciones propias

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Introducción? Historia

? 1974, IBM construye un prototipo de sistema relacional llamado SYSTEMR que incluía el lenguaje SEQUEL, posteriormente llamado SQL

? 1979, ORACLE aparece como primer gestor relacional comercial, incluyendo lenguaje SQL

? 1981, primera implementación de IBM con el sistema SQL/DS

? Desde 1983, fue el estándar de facto? 1986, aparece el primer estándar (SQL-86)? 1989, revisión del estándar anterior (SQL-89)? 1992, se publica el segundo estándar (SQL-2 o SQL-92)? 1999, aparece el tercer estándar (SQL-3 o SQL-99)

Page 3: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

3

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Introducción? Escribir sentencias o comandos SQL

? Las sentencias SQL tienen? Palabras reservadas, que forman parte del lenguaje? Palabras definidas por el usuario, tales como, nombres de bases

de datos, tablas, atributos, etc.

? Total independencia al escribir las sentencias? En SQL es indiferente escribir las palabras en mayúsculas o

minúsculas, salvo para los literales

? Cada cláusula o palabra puede aparecer en líneas diferentes, lo que no se puede hacer es separar una misma palabra

? Se puede utilizar la identación que se quiera? Una sentencia o comando SQL finaliza con la aparición del

símbolo “;” (no suele ser necesario para un único comando)

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Introducción? Escribir sentencias o comandos SQL

? Se utiliza una extensión de la notación BNF? Las palabras en mayúsculas representan palabras reservadas? Las palabras en minúsculas representan palabras definidas por

el usuario? El símbolo | indica una elección entre alternativas

? Las llaves representan elementos requeridos? Los corchetes representan elementos opcionales? Los ... Indican repetición opcional (0 ó más)

? Literales? Son constantes utilizadas en las sentencias SQL? Todos los literales no numéricos deben ir entrecomillados

Page 4: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

4

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

2. Operaciones de Recuperación? Sintaxis de la sentencia

SELECT [DISTINCT | ALL] { * | expresion [AS alias] [,...] }FROM tabla [AS alias] [, ...][WHERE condicion][GROUP BY lista_de_atributos

[HAVING condición_de_grupo ]][ORDER BY lista_de_atributos [ASC/DESC] ];

? SELECT: indica que información se desea obtener? FROM: especifica las tablas en las que se encuentran los

atributos implicados en la consulta? WHERE: especifica la condición de búsqueda? GROUP BY: permite agrupar el resultado? HAVING: especifica una condición de grupo? ORDER BY: permite ordenar el resultado

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Consulta? Operadores

Los siguientes operadores se pueden utilizar para expresar condiciones de fila (cláusula WHERE) o de grupo (cláusula HAVING):? De comparación (<, <=, >, >=, <>, =)? Lógicos (AND, OR, NOT)? BETWEEN ... AND ...? LIKE? IN? IS NULL? Cuantificadores (ANY, SOME, ALL)? Existencial (EXISTS)

Page 5: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

5

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas sobre una tabla? Recuperación simple

» Obtener todos los datos de todos los proyectosSELECT codP, descrip, localidad, cliente, telefonoFROM proyectos;

ó:

SELECT *FROM proyectos;

* : equivale a todos los atributos de una tabla

» Obtener los códigos de máquina (CodM) para todas las máquinas utilizadas

SELECT DISTINCT codM

FROM trabajos;

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Distinct? Elimina los valores duplicados del resultado

» Obtener las localidades de los conductoresSELECT codMFROM trabajos;

» Obtener las localidades de los conductoresSELECT DISTINCT codMFROM trabajos;

? Algunos gestores disponen de la cláusula TOP nSELECT DISTINCT TOP 2 codMFROM trabajos;

Localidad

ArgandaArgandaRivasArgandaLoechesRivas

Localidad

ArgandaRivasLoeches

Localidad

ArgandaRivas

Page 6: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

6

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Recuperación Calificada? La cláusula Where contiene una condición simple

o compuesta mediante operadores lógicos.» Obtener los códigos de los conductores de Arganda

SELECT codCFROM conductoresWHERE localidad = 'Arganda';

? Los literales suelen ser sensibles a mayúsculas y minúsculas

ARGANDA <> Arganda <> arganda

» Obtener los códigos de los conductores de Arganda que tengan categoría inferior a 18

SELECT codCFROM conductoresWHERE localidad = 'Arganda' AND categ < 18;

CodC

C01 C02C04

CodC

C02

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Between? Establece una comparación dentro de un intervalo? Se utiliza en valores numéricos o de fecha

» Obtener el nombre de las máquinas cuyo precio por hora estécomprendido entre 11000 y 15000 ptas

SELECT nombre, preciohoraFROM maquinasWHERE precio_hora BETWEEN 5000 AND 10000;

? También se puede utilizar NOT BETWEEN

Nombre PrecioHora

Excavadora 15000Volquete 11000

Page 7: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

7

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Like? Establece una comparación entre cadenas de

caracteres. Comodines:% : secuencia de cero o más caracteres (a veces se utiliza *)_ (subrayado): sustituye a un solo carácter (a veces se utiliza ?)

» Obtener los conductores que se apelliden ‘Pérez ’

SELECT nombreFROM conductoresWHERE nombre LIKE ‘%Pérez%’;

? También se puede utilizar NOT LIKE

NombreJuan P érezCarmen P érez

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador IN? Comprueba la pertenencia de un valor a un

conjunto dado» Obtener los nombres de aquellos conductores que residen

en Arganda o en Rivas

SELECT nombreFROM conductoresWHERE localidad IN ('Arganda','Rivas');

? También se puede utilizar NOT IN» Obtener nombres de conductores que no sean de Arganda

SELECT nombreFROM conductores

WHERE localidad NOT IN ('Arganda');

NombreJosé SánchezManuel DíazJuan P érezLuis OrtizCarmen P érez

NombreJuan Pérez

Javier Mart ínCarmen P érez

Page 8: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

8

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Is Null

? Comprueba si un valor determinado es nulo? Un valor nulo no participa en ninguna

comparación, solo se puede comprobar si es o no nulo

» Obtener los partes de trabajo que no figuren con el tiempo empleado

SELECT codC,codM,codP,FechaFROM trabajosWHERE tiempo IS NULL;

? También se puede utilizar IS NOT NULL

CodC CodM CodP Fecha

C02 M03 P02 15/09/02C01 M02 P04 17/09/02C02 M03 P01 18/09/02

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operadores All y Any? ALL: todos? ANY: algunos

? Van acompañados de un operador de comparación ? >ALL, >=ALL, <ALL, <=ALL, =ALL, <>ALL? >ANY, >= ANY, <ANY, <=ANY, =ANY, <>ANY

» Obtener proyectos que no sean de Arganda ni de RivasSELECT descrip, localidadFROM proyectosWHERE localidad <> ALL (‘Arganda’, ‘Rivas ’);

? <>ALL es equivalente a NOT IN

? El segundo operando suele ser una subconsulta

Descrip LocalidadTechado Loeches

Page 9: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

9

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Exists? Indica la existencia o no de un conjunto

» Obtener nombres de las máquinas que se han utilizado en el proyecto P03

SELECT nombreFROM maquinasWHERE EXISTS (SELECT *

FROM trabajosWHERE trabajos.codM = maquinas.codM

AND codP = 'P03');

? El operando suele ser una subconsulta

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Conjuntos? Operadores de conjuntos

? Los conjuntos deben ser union-compatible? Tipos

? Union? Unión de conjuntos

? Except (Minus en algunos gestores)? Diferencia de conjuntos

? Intersect? Intersección de conjuntos

? Sintaxis? SelectSQL { < union | intersect | except > [ all ] SelectSQL }

? La opción all elimina duplicados del resultado

Page 10: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

10

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Union? Unión de dos conjuntos que tiene que

estar definidos sobre los mismos dominios» Obtener los códigos de aquellos conductores que

residan en Rivas o tengan categoría inferior a 18SELECT codCFROM conductoresWHERE localidad = 'Rivas'UNIONSELECT codCFROM conductoresWHERE categ < 18;

CodC

C02C03 C05C06

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Union? La cláusula ALL hace que no se eliminen duplicados? Pueden concatenarse varios en la misma sentencia

» Obtener los códigos de conductores que residan en Rivas o tengan categoría inferior a 15 o hayan manejado la máquina M01

SELECT codCFROM conductoresWHERE localidad = 'Rivas'UNION ALLSELECT codCFROM conductoresWHERE categ < 18UNION ALLSELECT codCFROM trabajosWHERE codM = ‘M01’;

Sin los ALL en las cláusulas UNION

CodC

C03 C06C02C05 C06C03C03 CodC

C02 C03C05C06

Page 11: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

11

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Except? Establece la diferencia de conjuntos, eliminado

las filas del primer operando que se encuentren en el segundo» Obtener los códigos de aquellos trabajadores que tengan

categoría inferior a 15 y no hayan trabajado con la máquina M03SELECT codCFROM conductoresWHERE categ < 18EXCEPTSELECT codCFROM trabajosWHERE codM = 'M03';

CodC

C06

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Except? Algunos gestores no implementan este operador

? Alternativa» Obtener los códigos de aquellos trabajadores que tengan

categoría inferior a 15 y no hayan trabajado con la máquina M03

SELECT codCFROM conductoresWHERE categ < 18

AND codC NOT IN (SELECT codCFROM trabajos

WHERE codM = 'M03‘);

CodC

C06

Page 12: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

12

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Intersect? Realiza la intersección entre dos conjuntos,

obteniendo las filas comunes a ambos» Obtener los códigos de los conductores que hayan utilizado las

máquina M01 y la máquina M03SELECT codCFROM trabajosWHERE codM = 'M01'INTERSECTSELECT codCFROM trabajosWHERE codM = 'M03';

CodC

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operador Intersect? Algunos gestores no implementan este operador

? Alternativa» Obtener los códigos de los conductores que hayan utilizado la

máquina M01 y la máquina M03SELECT codCFROM trabajosWHERE codM = 'M01'

AND codC IN (SELECT codCFROM trabajosWHERE codM = 'M03‘);

? Solución ErróneaSELECT codCFROM trabajosWHERE codM = 'M01‘ AND codM = 'M03‘);

CodC

CodC

Page 13: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

13

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Funciones Agregadas? Funciones agregadas de ISO

? COUNT (*)? contador de tuplas (cuenta valores duplicados y nulos)? Con la cláusula Distinct no tiene en cuenta valores nulos ni

duplicados? AVG

? media aritmética de un atributo o una expresión num érica? puede utilizar la cláusula Distinct

? SUM? suma de atributos o expresiones num éricas? puede utilizar la cláusula Distinct

? MAX? valor m áximo de un atributo o expresión num érica

? MIN? valor m ínimo de un atributo o expresión numérica

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Funciones Agregadas? Devuelven un valor único, numérico? Solo pueden utilizarse en la cláusula Select o

en la cláusula Having No se pueden combinar , con columnas que devuelvan más de un valor, a menos que la consulta contenga una cláusula GROUP BY

? Count, Min y Max se pueden aplicar a atributos numéricos o no numéricos, pero Sum y Avgsolo se pueden aplicar a numéricos

? Salvo la función Count(*), las demás solo tienen en cuenta para su cálculo valores no-nulos

Page 14: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

14

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Funciones Agregadas» Obtener el número total de proyectos en los que se está trabajando

SELECT COUNT(*)FROM trabajos;

» Obtener el número total de máquinas que se han utilizado en 'P02'SELECT COUNT (DISTINCT codM)FROM trabajosWHERE codP = 'P02';

» Obtener el precio medio por hora de las máquinas SELECT AVG(preciohora)FROM maquinas

12

3

13500

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Funciones Agregadas» Obtener el máximo para el nombre y el preciohora de las máquinas

SELECT max(nombre), max(preciohora)FROM maquinas;

» Obtener la máxima fecha, el mínimo tiempo y la suma y media del tiempo de la tabla trabajos

SELECT max(fecha), min(tiempo), sum(tiempo), avg(tiempo)FROM trabajos

» Contar el número de filas de la tabla trabajos, numero de valores de la columna tiempo, y número de valores distintos de dicha columna

SELECT count(*), count(tiempo), count(distinct tiempo)FROM maquinas

18/09/02 30 1260 140

Volquete 18000

12 9 8

Page 15: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

15

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Group ByGROUP BY <lista_de_atributos>

? Agrupa el resultado, devolviendo una única fila por grupo

? Los atributos que aparezcan en GROUP BY, deben aparecer en la cláusula SELECT

» Obtener por cada conductor que haya trabajado, el código de éste y la cantidad total de tiempo empleado

SELECT codC, SUM(tiempo)FROM trabajosGROUP BY codC;

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Group By

CodC Tiempo

C02 100C03 200C05 150

C04 90C01 120C02 30C03 300 C02 nullC01 180 C05 90 C01 nullC02 null

C02 100C02 30

C02 nullC02 null

C03 200C03 300

C05 150C05 90

C04 90

C01 120C01 180

C01 null

C01 300C02 130C03 500C04 90C05 240

Page 16: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

16

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula HavingHAVING <condicion_de_grupo>

? Siempre va acompañada de la cláusula GROUP BY? Especifica una condición de grupo» Obtener para los conductores que figuren cin más de un trabajo

realizado, la suma de tiempos trabajados

SELECT codC, SUM (tiempo)FROM trabajos

GROUP BY codCHAVING COUNT(*) > 1;

C01 300C02 130C03 500 C05 240

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Having» Obtener para los conductores que hayan utilizado la misma

máquina más de una vez entre el 12/09/02 y el 18/09/02, el código de conductor, el código de máquina y el tiempo total empleado

SELECT codC, codM, SUM (tiempo)FROM trabajosWHERE fecha BETWEEN ‘12/09/02’ AND ‘18/09/94’GROUP BY codC , codMHAVING COUNT(*) > 1;

Page 17: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

17

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Having

C01 M02 120C01 M02 null

C02 M03 30C02 M03 nullC02 M03 null

C05 M03 90

C01 M02 120C02 M03 30

C01 M03 180

C03 M01 300

CodC CodM CodP Fecha Tiempo

C02 M03 P01 10/09/02 100C03 M01 P02 10/09/02 200C05 M03 P02 10/09/02 150C04 M03 P02 10/09/02 90C01 M02 P02 12/09/02 120C02 M03 P03 13/09/02 30C03 M01 P04 15/09/02 300 C02 M03 P02 15/09/02 nullC01 M03 P04 15/09/02 180 C05 M03 P04 15/09/02 90C01 M02 P04 17/09/02 nullC02 M03 P01 18/09/02 null

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Order ByORDER BY <lista_de_atributos> [ASC | DESC]

? El resultado de la consulta se ordena en base a los atributos que se indiquen en la lista

? Los atributos de ordenación deben aparecer en SELECT

» Obtener los partes de trabajo correspondientes al proyecto 'P4' ordenados ascendentemente por conductor y máquina

SELECT *

FROM trabajosWHERE codP = 'P04'ORDER BY codP, codM;

CodC CodM CodP Fecha Tiempo

C01 M02 P04 17/09/02 nullC01 M03 P04 15/09/02 180C03 M01 P04 15/09/02 300 C05 M03 P04 15/09/02 90

Page 18: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

18

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Alias de tablas y columnas? Para hacer el nombre de una columna más significativo

cuando se muestra? Abreviar un nombre de una tabla o de una columna que

se usa a menudo? Hacer más clara una instrucción complicada de SQL? Distinguir entre dos ocurrencias del mismo nombre de

columna o tabla en cualquier instrucción SELECT? Se indican

FROM tabla [[as] Alias]? En el SELECT para columnas

SELECT expresion [[as] Alias] [, ...]? En el FROM para tablas

FROM tabla [[as] Alias] [, ...]

? El alias de columna puede ir entre comillas para especificar un alias de mas de una palabra, pero el de tabla no

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Expresiones en la cláusula SELECT? No sólo se pueden seleccionar atributos, sino

expresiones en las que aparezcan atributos y/o constantes y operadores aritméticos

SELECT nombre, 'coste final:‘ As texto, (precio_hora*1.15) As NuevoPrecioFROM maquinas As m

WHERE m.preciohora < 18000;Nombre texto NuevoPrecio

Excavadora coste final por hora: 17250

Hormigonera coste final por hora: 11500

Volquete coste final por hora: 12650

Page 19: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

19

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas con más de una tabla? Operación algebraica de Unión Natural o Join

? Permite relacionar dos tablas para obtener información común

? Subconjunto del producto cartesiano de dos tablas en las que se seleccionan las filas con el mismo valor para los atributos comunes

? Debe existir al menos un atributo (dominio) común entre las tablas participantes (por lo general, clave principal-clave foránea

? Alternativas en SQL? Consultas anidadas? Condición de unión natural? Cláusula JOIN

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas con más de una tabla? Ejemplo

» Obtener nombres de trabajadores que han utilizado la máquina 'M2'SELECT nombreFROM conductoresWHERE codC IN (SELECT codC

FROM trabajosWHERE codM = 'M02');

SELECT nombreFROM conductores, trabajosWHERE conductores. codC = trabajos. codC AND codM = 'M02';

SELECT nombreFROM conductores INNER JOIN trabajos

ON conductores. codC = trabajos. codCWHERE codM = 'M02';

Page 20: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

20

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Las consultas anidadas establecen una

comparación entre dos operandos? Posibilidades

? operador In? operador Any? operador All? operador de comparación? operador Exists? tupla

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Operador IN

» Obtener la descripción y cliente de aquellos proyectos en los que hayan trabajado máquinas con un precio hora superior a 12000 conducidas por conductores de Rivas

SELECT descrip, clienteFROM proyectosWHERE codp In (SELECT codP

FROM trabajosWHERE codM In (SELECT CodM

FROM maquinasWHERE preciohora > 12000)

AND codC In (SELECT codCFROM conductores

WHERE localidad = 'Rivas'))

Page 21: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

21

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Operador Any

» Obtener los trabajadores con categoría inferior a la de algún trabajador de Arganda

SELECT nombreFROM conductores

WHERE categ < ANY (SELECT categFROM conductoresWHERE localidad = ‘Arganda’);

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Operador All

» Obtener conductores que no han participado en el proyecto 'P1'SELECT nombreFROM conductorWHERE codC <> ALL (SELECT codC

FROM trabajos

WHERE codP = 'P01');

? <>ALL es equivalente a NOT IN

Page 22: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

22

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Operador de comparación

» Obtener de el conductor de Arganda que tenga la categoría más alta de entre los que sean de Arganda

SELECT nombreFROM conductores

WHERE categ = (SELECT MAX(categ) FROM conductoresWHERE localidad = 'Arganda')

AND localidad = 'Arganda';

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Operador Exists

» Encontrar todos los conductores que no tengan un homónimo

SELECT *FROM conductores CWHERE NOT EXISTS (SELECT *

FROM conductores C1WHERE C1.nombre = C.nombre

AND C1.localidad = C.localidadAND C1.categ <> C.categ)

Page 23: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

23

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? La comparación con la subconsulta anidada

puede incluir más de un atributo? Los atributos deben ir entre paréntesis separados

por comas? Ejemplo

SELECT *FROM conductores CWHERE (nombre,localidad) NOT IN (SELECT nombre,localidad

FROM conductores C1WHERE C1.categ <> C.categ)

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Alcance de “variables”

? Consulta incorrectaSELECT *FROM ConductoresWHERE codC IN (SELECT codC

FROM trabajos T1WHERE codM = ‘M02’)

OR codC IN (SELECT codCFROM trabajos T2WHERE T2.fecha = T1.fecha)

? La consulta es incorrecta porque T1 no es visible desde la segunda subconsulta

Page 24: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

24

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Consultas Anidadas? Subconsultas en la cláusula Select y From» Obtener el nombre, localidad y categoría, junto con la categoría

máxima de todos los conductores, para los conductores de Loechesque tengan la máxima categoría de Loeches

SELECT nombre, localidad, categ, (SELECT MAX(categ) FROM conductores) As MaxCateg

FROM conductoresWHERE localidad = 'Loeches' AND

categ >= ALL (SELECT categFROM conductoresWHERE localidad = 'Loeches');

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Condición de Join? Se debe poner una condición de join en el Where, por cada

atributo común entre cada dos tablas relacionadas de las que figuren en la cláusula FROM

tabla1.atributoComun = tabla2.atributoComun

» Obtener para cada máquina utilizada, el código de máquina y el nombre

SELECT conductores.nombre AS cond, descrip,maquinas.nombre AS maq

FROM conductores, trabajos, proyectos, maquinasWHERE conductores.codc=trabajos.codC AND

trabajos.codp = proyectos.codP ANDtrabajos.codm = maquinas.codM ANDpreciohora > 14000 cond descrip maq

Juan Pérez Solado ExcavadoraJuan Pérez Techado Excavadora

Page 25: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

25

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Join? Sintaxis

FROM tabla { [tipoJoin] JOIN ON condicionJoin }? tipoJoin

? INNER? es la unión natural? solo se tienen en cuanta las filas con igualdad en los atributos

comunes? LEFT [OUTER]

? se tienen en cuenta todas las filas de la tabla izquierda? RIGHT [OUTER]

? se tienen en cuenta todas las filas de la tabla derecha? FULL [OUTER]

? se tienen en cuenta todas las filas de ambas tablas

? condicionJointabla1.atributoComun = tabla2.atributoComun

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Join? Inner Join

» Obtener el nombre del conductor y tiempo empleado para aquellos trabajos realizados el 10/09/02

SELECT nombre, tiempoFROM conductores INNER JOIN trabajos ON

conductores.codC=trabajos.codCWHERE fecha = ’10/09/02’;

nombre Tiempo

Manuel Díaz 100Juan Pérez 200Luis Ortiz 90 Javier Mart ín 150

Page 26: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

26

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Join? Left Join

SELECT nombre, codm, codp, fecha, tiempoFROM conductores LEFT JOIN trabajos

ON conductores.codC=trabajos.codCWHERE localidad = ‘Rivas’;

nombre codP codM Tiempo

Juan Pérez P02 M01 200Juan Pérez P04 M01 300Carmen P érez NULL NULL NULL

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Join? Right Join

SELECT nombre, codm, codp, fecha, tiempoFROM conductores RIGHT JOIN trabajos

ON conductores.codC=trabajos.codCWHERE localidad = ‘Rivas’;

nombre codP codM Tiempo

Juan Pérez P02 M01 200Juan Pérez P04 M01 300

Page 27: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

27

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Cláusula Join? Full JoinSELECT nombre, codm, descrip,tiempoFROM conductores FULL JOIN trabajos ON conductores.codC =

trabajos.codCFULL JOIN proyectos ON trabajos.codP = proyectos.codP

WHERE conductores.localidad = ‘Rivas ’ OR proyectos.localidad = ‘Rivas ’;

nombre codM descrip Tiempo

José Sánchez M02 Solado 120Manuel Díaz M03 Solado nullJuan Pérez M01 Solado 200Juan Pérez M01 Techado 300Luis Ortiz M03 Solado 90Javier Mart ín M03 Solado 150Carmen P érez null null nullnull null Buhardilla null

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

3. Operaciones de Actualización? Inserción de filas

? Inserción de una filaINSERT INTO tabla [(listaAtributos)]VALUES (valor1, valor2,..., valorn);

? Inserción de varias filasINSERT INTO tabla [(listaAtributos)]( clausulaSELECT )

? La cláusula "SELECT" especifica una consulta cuyo resultado (filas) se insertará en la tabla especificada

? listaAtributos es opcional. Si se omite, se asume la lista de atributos en el orden original de la sentencia Create Table

? Cualquier columna que se omita debe estar definida como NotNull, salvo que se haya especificado un valor por defecto con Default

Page 28: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

28

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Inserción de filas

? Inserción de una filaINSERT INTO TrabajosVALUES ('C02','M03','P01','10/09/02',100);

? Cuando no se conoce algún valor? se puede poner la palabra reservada null

INSERT INTO ConductoresVALUES ('C07',‘Jorge Gil',null,18);

? se puede omitir el valorINSERT INTO ConductoresVALUES ('C07', ‘Jorge Gil',,18);

? indicar valor solo para un subconjunto de los atributosINSERT INTO Conductores (codC,nombre,categ)VALUES ('C07', ‘Jorge Gil', 18);

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Inserción de filas

? Inserción de varias filasINSERT INTO ConductoresArganda(SELECT *FROM ConductoresWHERE localidad = ‘Arganda’);

? Los valores obtenidos de la consulta deben coincidir en dominio con los de la tabla

? En la subconsulta no conviene poner * si no la lista de atributos, de forma que podamos hacer algo independiente esta sentencia de la posible variación de la estructura de la tabla en la que se basa la subconsulta

Page 29: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

29

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Modificación de filas

UPDATE tablaSET atributo = expresion | selectSQL | null | default

{, atributo = expresion | selectSQL | null | default}[WHERE condicion];

? Tabla puede ser una tabla base o una vista actualizable? El valor que se asigne a un atributo puede ser una expresión, o

el resultado de una subconsulta (que deberá ir entre paréntesis), o el valor null, o el valor por defecto definido en el atributo

? La modificación afectará a todas las filas que cumplan la condición, si se especifica ésta. Si no se especifica condición, la modificación afectará a todas las filas de la tabla

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Modificación de filas

» Incrementar en un 15% el valor de categoría de los conductores de Rivas

UPDATE conductoresSET categ = categ * 1.15WHERE localidad = ‘Rivas’

» Sumar a la categoría de los conductores de Loeches, la categoría más alta de todos los conductores

UPDATE conductoresSET categ = categ + (SELECT distinct categ

FROM conductores WHERE categ = (SELECT max(categ)

FROM conductores))WHERE localidad = 'Loeches'

Page 30: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

30

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Eliminación de filas

DELETEFROM nombre_tabla[WHERE condicion];

? No se pueden eliminar partes de una fila? Si no aparece la cláusula "WHERE" se eliminarán

todas las filas de la tabla, no eliminándose la definición de ésta en el esquema

? El borrado de una fila puede provocar el borrado de filas de otras tablas, si hay definida una restricción de integridad referencial con opción Cascade

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Operaciones de Actualización? Eliminación de filas

» Eliminar el proyecto o proyectos de Felipe Sol

DELETE FROM proyectosWHERE cliente = ‘Felipe Sol’;? Si no se ha definido integridad referencial con la tabla

trabajos hay que dejar la BD consistenteDELETE FROM trabajos

WHERE codP NOT IN (SELECT codPFROM proyectos)

Page 31: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

31

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

4. Lenguaje de Definición de Datos? Creación de tablas (estándar 86)

CREATE TABLE nombre_tabla(definición_atributo_1 [UNIQUE] [NOT NULL],(definición_atributo_2 [UNIQUE] [NOT NULL],.....................

(definición_atributo_n [UNIQUE] [NOT NULL]);

? donde:? definición_atributo = nombre_atributo tipo_dato (tamaño)? UNIQUE: no se permiten valores duplicados en la columna? NOT NULL: no se permiten valores nulos en la columna

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

? SQL2CREATE SCHEMA nombrebd AUTHORIZATION usuario;

CREATE DOMAIN nombre AS tipodato [DEFAULT valor] [CHECK condicion];

CREATE TABLE [esquema.]nombre_tabla(atributo tipodato | dominio [NOT NULL] [DEFAULT valor]

[CHECK condicion], ....PRIMARY KEY (atributo ,...)[UNIQUE (atributo ,...)][FOREIGN KEY (atributo) REFERENCES tabla (atributo )[ON {DELETE|UPDATE} {SET NULL|SET DEFAULT|CASCADE|NO ACTION}]][CHECK (condicion)] );

Lenguaje de Definición de Datos

Page 32: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

32

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Definición de Datos? ISO SQL data types

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Definición de Datos? Integridad Referencial

? Todo valor de la clave foránea (tabla dependiente) debe figurar en la clave principal (tabla padre) de la que depende, o ser nulo

? Opciones? CASCADE

? Elimina cascada las filas de un atabla dependiente al eliminar una fila de la tabla padre

? SET NULL? Al eliminar una fila de la tabla padre deja con valor nulo la clave

foránea de las filas relacionadas de la tabla dependiente. Solo es válido para claves foráneas definidas como Not Null

? SET DEFAULT? Al eliminar una fila de la tabla padre deja con el valor por defecto la

clave foránea de las filas relacionadas de la tabla dependiente. Solo es válido para claves foráneas definidas con un valor por defecto

? NO ACTION? Impide la eliminación de la fila padre si tiene filas dependientes

relacionadas. Es la opci ón por defecto

Page 33: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

33

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Definición de Datos? Modificación de tablas

? Añadir un nuevo atributoALTER TABLE nombre_tablaADD definición_atributo;

? Modificar un atributo ya existenteALTER TABLE nombre_tablaMODIFY definicion_atributo

? Eliminación de tablasDROP TABLE nombre_tabla

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Definición de Datos? Creación de vistas

CREATE VIEW nombre_vista (lista_atributos)AS (clausula_SELECT )[WITH CHECK OPTION]

? Las filas de la vista serán aquellas que resulten de ejecutar la consulta sobre la que está definida

? La cláusula With Chechk Option, comprueba que al actualizar la vista se cumplan las condiciones expresadas en la misma.

? Eliminación de vistasDROP VIEW nombre_vista;

Page 34: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

34

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Definición de Datos? Creación de índices

CREATE [UNIQUE] INDEX nombre_indiceON nombre_tabla (lista_atributos);

? Es el sistema el encargado de utilizar los índices, para optimizar el acceso a los datos

? El usuario sólo puede crear o eliminar índices, pero no indicar su utilización

? Eliminación de índicesDROP INDEX nombre_indice[ON nombre_tabla]

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

5. Lenguaje de Control de Datos? Seguridad de los datos

? Concesión de privilegios? Permite conceder a los usuarios el acceso completo o

restringido a las tablas de la base de datosGRANT <accesos> ON <lista_de_tablas>TO <lista_de_cesionarios>|PUBLIC[WITH GRANT OPTION];

donde:? accesos: ALL PRIVILEGES, SELECT, UPDATE, INSERT, DELETE

? PUBLIC: se conceden los privilegios a todos los usuarios ? WITH GRANT OPTION: se concede el privilegio de poder

otorgar privilegios a otros usuarios

Page 35: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

35

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Control de Datos

? Revocación de privilegiosSe utiliza para anular privilegios ya concedidos a los usuarios

REVOKE <accesos>FROM <nombre_usuario> TO <lista_de_tablas>

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

Lenguaje de Control de Datos

? Integridad de los datos? COMMIT WORK

? Los cambios que se puedan estar realizando sobre la base de datos se hacen fijos únicamente al completar la transacción

? ROLLBACK WORK? Elimina todos los cambios que se hayan podido producir en

la base de datos desde la ejecución de la última instrucción COMMIT

? Si se produce un error de programa o un fallo hardware el sistema realiza un ROLLBACK automáticamente

Page 36: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

36

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

6. SQL Inmerso

? Instrucciones? Van precedidas de las palabras clave EXEC SQL

? Variables principales? Las variables principales del programa, pueden

utilizarse para almacenar el resultado de una consulta que devuelva una sola fila o bien pueden utilizarse en la propia instrucción SQL.

? deben aparecer en una sección de declaración en el programa principal. Esta sección comenzará con EXEC SQL BEGIN DECLARE y finalizará con EXEC SQL END DECLARE.

2002 © Pedro P. Alarcón U.P.M.-E.U.I. Bases de Datos

SQL Inmerso? Cursores

? Son ficheros virtuales de registros, en los que se almacenan el resultado de una consulta

? Se declaran de la siguiente forma:EXEC SQL DECLARE <nombre_cursor> CURSOR FOR

<consulta_SQL>;

? Para abrirlo:EXEC SQL OPEN <nombre_cursor>;

? La forma de leer un registro del cursor es:EXEC SQL FETCH <nombre_cursor> INTO

<variables_principales>;

? Para cerrarlo:EXEC SQL CLOSE <nombre_cursor>;

Page 37: SQL BD Pedrotigger.itc.mx/conacad/cargas/OEGC691016P21/3/LenguajeSQL... · 2016. 6. 20. · SQL (Structured Query Language)? Lenguaje de Consulta Estructurado, para bases de datos

37

Base de Datos del Ejemplo

CodM Nombre PrecioHora

M01 Excavadora 15000M02 Hormigonera 10000M03 Volquete 11000M04 Apisonadora 18000

CodC Nombre Localidad Categ

C01 José Sánchez Arganda 18C02 Manuel Díaz Arganda 15C03 Juan Pérez Rivas 20C04 Luis Ortiz Arganda 18C05 Javier Mart ín Loeches 12C06 Carmen P érez Rivas 15

CodC CodM CodP Fecha Tiempo

C02 M03 P01 10/09/02 100C03 M01 P02 10/09/02 200C05 M03 P02 10/09/02 150C04 M03 P02 10/09/02 90C01 M02 P02 12/09/02 120C02 M03 P03 13/09/02 30C03 M01 P04 15/09/02 300 C02 M03 P02 15/09/02 nullC01 M03 P04 15/09/02 180 C05 M03 P04 15/09/02 90C01 M02 P04 17/09/02 nullC02 M03 P01 18/09/02 null

CodP Descrip Localidad Cliente Telefono

P01 Garaje Arganda Felipe Sol 600111111P02 Solado Rivas José Pérez 912222222P03 Garaje Arganda Rosa López 666999666P04 Techado Loeches José Pérez 913333333P05 Buhardilla Rivas Ana Botijo null

Conductores

MaquinasProyectos

Trabajos