Bases de Datos Cap-V SQL: Manipulación de datos

  • 2,962 views
Uploaded on

SQL: Manipulación de datos …

SQL: Manipulación de datos
Ponente: Juan Carlos Morocho

More in: Education , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,962
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
290
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • utpl
  • Chapter Name September 98

Transcript

  • 1. ESCUELA : NOMBRES: BASE DE DATOS I CICLO Ciencias de la Computación Ing. Juan Carlos Morocho OCTUBRE 2009 – FEBRERO 2010 BIMESTRE: I BIMESTRE
  • 2. Capítulo 5 SQL: Manipulación de datos © Pearson Education Limited 1995, 2005
  • 3. Capítulo 5 - Objetivos
    • El propósito y la importancia del lenguaje SQL ( Structured Query Languaje , Lenguaje estructurado de consulta).
    • Cómo extraer datos de una base de datos usando la instrucción SELECT y construir instrucciones que:
      • utilicen la cláusula WHERE para extraer filas que satisfagan diversas condiciones.
      • ordenen los resultados de las consultas mediante ORDER BY.
      • utilicen las funciones de agregación de SQL
      • agrupen los datos mediante GROUP BY y HAVING.
  • 4. Capítulo 5 - Objetivos
      • Utilicen subconsultas
      • Combinen tablas.
      • Realicen operaciones de conjunto (UNION, INTERSECT, EXCEPT).
    • Cómo realizar actualizaciones en la base de datos mediante INSERT, UPDATE, y DELETE.
    © Pearson Education Limited 1995, 2005
  • 5. Comando SELECT
      • SELECT [DISTINCT | ALL]
      • {* | [expresiónColumna [AS nuevoNombre]] [,...] }
      • FROM NombreTabla [alias] [, ...]
      • [WHERE condición]
      • [GROUP BY listaColumnas] [HAVING condición]
      • [ORDER BY listaColumnas]
    © Pearson Education Limited 1995, 2005
  • 6. Comando SELECT
    • FROM Especifica la tabla o tablas que hay que usar.
    • WHERE Filtra las filas de acuerdo con alguna condición
    • GROUP BY Forma grupos de filas que tengan el mismo valor de columna.
    • HAVING Filtra los grupos de acuerdo con alguna condición.
    • SELECT Especifica qué columnas deben aparecer en la salida.
    • ORDER BY Especifica el orden de la salida.
    © Pearson Education Limited 1995, 2005
  • 7. Comando SELECT
    • El orden de las cláusulas no puede cambiarse.
    • La únicas cláusulas obligatorias son SELECT y FROM.
    © Pearson Education Limited 1995, 2005
  • 8. Ejemplo 5.1 Extraer todas las columnas de todas las filas.
    • Generar un listado con todos los detalles de todo el personal.
    • SELECT staffNo, fName, lName, address,
      • position, sex, DOB, salary, branchNo
      • FROM Staff;
    • Se puede utilizar un asterisco(*) como abreviatura de «todas las columnas»:
      • SELECT *
      • FROM Staff;
    © Pearson Education Limited 1995, 2005
  • 9. Ejemplo 5.1 Extraer todas las columnas de todas las filas © Pearson Education Limited 1995, 2005 Tabla 5.1 Tabla de resultados para el ejemplo 5.1
  • 10. Ejemplo 5.2 Extraer toda una serie de columnas específicas de todas las filas
    • Generar una lista con los salarios de todos los empleados en la que sólo se muestre el número de empleado, el nombre, el apellido y los datos salariales.
      • SELECT staffNo, fName, lName, salary
      • FROM Staff;
    © Pearson Education Limited 1995, 2005
  • 11. Ejemplo 5.2 Extraer toda una serie de columnas específicas de todas las filas © Pearson Education Limited 1995, 2005 Tabla 5.2 Tabla de resultados para el ejemplo 5.2
  • 12. Ejemplo 5.3 Uso de DISTINCT
    • Generar un listado con los números de inmueble de todos los inmuebles que hayan sido visitados.
    • SELECT propertyNo
      • FROM Viewing;
    © Pearson Education Limited 1995, 2005
  • 13. Ejemplo 5.3 Uso de DISTINCT
    • Uso de DISTINCT para eliminar duplicados:
    • SELECT DISTINCT propertyNo
      • FROM Viewing;
    © Pearson Education Limited 1995, 2005
  • 14. Ejemplo 5.4 Campos calculados
    • Generar una lista con el salario mensual de todos los empleados que muestre número de empleado, nombre, apellido y la información salarial.
    • SELECT staffNo, fName, lName, salary/12
      • FROM Staff;
    © Pearson Education Limited 1995, 2005 Tabla 5.4 Tabla de resultados para el ejemplo 5.4
  • 15. Ejemplo 5.4 Campos calculados
    • Se puede dar un nombre a la columna mediante la cláusula AS:
    • SELECT staffNo, fName, lName, salary/12
      • AS monthlySalary
      • FROM Staff;
    © Pearson Education Limited 1995, 2005
  • 16. Ejemplo 5.5 Condición de búsqueda basada en comparación
    • Generar una lista de todos los empleados con salario superior a 10.000 euros.
    • SELECT staffNo, fName, lName, position, salary
      • FROM Staff
      • WHERE salary > 10000;
    © Pearson Education Limited 1995, 2005 Tabla 5.5 Tabla de resultados para el ejemplo 5.5
  • 17. Ejemplo 5.6 Condición de búsqueda basada en una comparación compuesta
    • Genere una lista con la dirección de todas las sucursales de Londres y Glasgow
    • SELECT *
      • FROM Branch
      • WHERE city = ‘London’ OR city = ‘Glasgow’;
    © Pearson Education Limited 1995, 2005 Tabla 5.6 Tabla de resultados para el ejemplo 5.6
  • 18. Ejemplo 5.7 Condición de búsqueda basada en rango
    • Generar un listado con todos los empleados cuyo salario esté comprendido entre 20.000 y 30.000 euros.
    • SELECT staffNo, fName, lName, position, salary
      • FROM Staff
      • WHERE salary BETWEEN 20000 y 30000;
    • BETWEEN indica los puntos extremos del rango.
    © Pearson Education Limited 1995, 2005
  • 19. Ejemplo 5.7 Condición de búsqueda basada en rango © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.7 Tabla 5.7
  • 20. Ejemplo 5.7 Condición de búsqueda basada en rango
    • También existe una versión negada NOT BETWEEN.
    • BETWEEN no añade mucha potencia expresiva a SQL. También se puede escribir:
    • SELECT staffNo, fName, lName, position, salary
      • FROM Staff
      • WHERE salary>=20000 y salary <= 30000;
    • Sin embargo, es la forma más sencilla de expresar una condición de búsqueda cuando lo que estemos considerando sea un rango de valores.
    © Pearson Education Limited 1995, 2005
  • 21. Ejemplo 5.8 Pertenencia a un conjunto
    • Generar una lista de todos los gerentes y supervisores.
      • SELECT staffNo, fName, lName, position
      • FROM Staff
      • WHERE position IN (‘Manager’, ‘Supervisor’);
    © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.8 Tabla 5.8
  • 22. Ejemplo 5.9 Correspondencia de patrones
    • Localizar todos los propietarios en cuya dirección aparezca la cadena de caracteres «Glasgow».
    • SELECT ownerNo, fName, lName, address, telNo
      • FROM PrivateOwner
      • WHERE address LIKE ‘%Glasgow%’;
    © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.9 Tabla 5.9
  • 23. Ejemplo 5.10 Condición de búsqueda NULL
    • Generar un listado con los detalles de todas las visitas al inmueble PG4 para las que no se haya introducido ningún comentario.
    • Se han producido dos visitas al inmueble PG4, una con comentario y otra sin el.
    • Tenemos que comprobar explícitamente la existencia de valores nulos, utilizando la palabra clave especial IS NULL:
    • SELECT clientNo, viewDate
      • FROM Viewing
      • WHERE propertyNo = ‘PG4’ y
      • comment IS NULL;
  • 24. Ejemplo 5.10 Condición de búsqueda NULL
    • También puede emplearse la versión negada (IS NOT NULL) para buscar valores que no sean nulos.
    © Pearson Education Limited 1995, 2005
  • 25. Ejemplo 5.11 Ordenación de los resultado en una sola columna
    • Generar una lista con el salario de todos los empleados, en orden descendente.
    • SELECT staffNo, fName, lName, salary
      • FROM Staff
      • ORDER BY salary DESC;
    © Pearson Education Limited 1995, 2005
  • 26. Ejemplo 5.11 Ordenación de resultado en una sola columna © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.11 Tabla 5.11
  • 27. Ejemplo 5.12 Ordenación multicolumna
    • Generar una lista abreviada de inmuebles ordenada según el tipo de inmueble.
    • SELECT propertyNo, type, rooms, rent
      • FROM PropertyForRent
      • ORDER BY type;
    © Pearson Education Limited 1995, 2005
  • 28. Ejemplo 5.12 Ordenación multicolumna © Pearson Education Limited 1995, 2005 Tabla 5.12(a) Tabla de resultados para el ejemplo 5.12 con una clave de ordenación
  • 29. Ejemplo 5.12 Ordenación multicolumna
    • Hay cuatro pisos en esta lista. Como no hemos especificado ninguna clave secundaria de ordenación, el sistema ordena estas filas de cualquier manera.
    • Para ordenar lo resultados según el importe del alquiler, podemos especificar un orden secundario:
    • SELECT propertyNo, type, rooms, rent
      • FROM PropertyForRent
      • ORDER BY type, rent DESC;
    © Pearson Education Limited 1995, 2005
  • 30. Ejemplo 5.12 Ordenación multicolumna © Pearson Education Limited 1995, 2005 Tabla 5.12 (b) Tabla de resultados para el ejemplo 5.12 con dos claves de ordenación
  • 31. Comando SELECT – Funciones de agregación
    • El estándar ISO define cinco funciones de agregación:
    • COUNT devuelve el número de valores en una columna especificada.
    • SUM devuelve la suma de los valores contenidos en una columna especificada.
    • AVG devuelve la media de los valores contenidos en una columna especificada.
    • MIN devuelve el valor más pequeño contenido en una columna especificada.
    • MAX devuelve al valor más alto contenido en una columna especificada.
  • 32. Comando SELECT - Funciones de agregación
    • Cada una opera sobre una única columna de una tabla y devuelve un único valor.
    • COUNT, MIN, y MAX se aplican a campos tanto numéricos como no numéricos, pero SUM y AVG sólo pueden emplearse con campos numéricos.
    • Dejando aparte COUNT(*), todas las funciones eliminan en primer lugar los valores nulos y utilizan para sus operaciones únicamente los restantes valores no nulos.
    © Pearson Education Limited 1995, 2005
  • 33. Comando SELECT – Funciones de agregación
    • COUNT(*) se emplea para contar todas las filas de una tabla, independientemente de si existen valores nulos o valores duplicados.
    • Se emplea DISTINCT antes de la columna a la que se aplica la función para eliminar los duplicados.
    • DISTINCT no tiene ningún efecto con las funciones MIN/MAX, pero sí que puede influir sobre el resultado de SUM/AVG.
    © Pearson Education Limited 1995, 2005
  • 34. Comando SELECT – Funciones de agregación
    • Las funciones de agregación sólo pueden duplicarse en la lista SELECT y en la cláusula HAVING.
    • Si la lista SELECT incluye una función de agregación y no se está empleando ninguna cláusula GROUP BY, entonces ningún elemento de la lista SELECT puede incluir ninguna referencia a una columna a menos que dicha columna sea el argumento de una función de agregación. Por ejemplo la siguiente consulta sería ilegal:
    • SELECT staffNo, COUNT(salary)
      • FROM Staff;
    © Pearson Education Limited 1995, 2005
  • 35. Ejemplo 5.13 Utilización de COUNT(*)
    • ¿Cuántos inmuebles tienen un alquiler superior a 350 euros por mes?
    • SELECT COUNT(*) AS myCount
      • FROM PropertyForRent
      • WHERE rent > 350;
    © Pearson Education Limited 1995, 2005
  • 36. Ejemplo 5.14 Utilización de COUNT (DISTINCT)
    • ¿Cuántos inmuebles distintos fueron visitados en mayo de 2004?
    • SELECT COUNT(DISTINCT propertyNo) AS myCount
      • FROM Viewing
      • WHERE viewDate BETWEEN ‘1-May-04’
      • y ‘31-May-04’;
    © Pearson Education Limited 1995, 2005
  • 37. Ejemplo 5.15 Utilización de COUNT y SUM
    • Hallar el número total de gerentes y la suma de sus salarios.
    • SELECT COUNT(staffNo) AS myCount,
      • SUM(salary) AS mySum
      • FROM Staff
      • WHERE position = ‘Manager’;
  • 38. Ejemplo 5.16 Utilización de MIN, MAX, AVG
    • Calcular el salario mínimo, máximo y medio de los empleados.
    • SELECT MIN(salary) AS myMin,
      • MAX(salary) AS myMax,
      • AVG(salary) AS myAvg
      • FROM Staff;
  • 39. Comando SELECT – Agrupación de resultados
    • Se utiliza GROUP BY para agrupar los datos de las tablas.
    • SELECT y GROUP BY están estrechamente integradas: cada elemento de la lista SELECT debe tener un único valor para cada grupo , y la cláusula SELECT sólo puede contener:
      • Nombres de columnas
      • Funciones de agregación
      • Constantes
      • Expresiones en las que se combinen algunos de los elementos anteriores.
  • 40. Comando SELECT - Agrupación
    • Todos los nombres de columna contenidos en la lista SELECT deben aparecer obligatoriamente en la cláusula GROUP BY, a menos que el nombre se esté usando únicamente dentro de una función de agregación.
    • Si la cláusula WHERE se emplea con GROUP BY, se aplica primero la cláusula WHERE y luego se forman los grupos a partir de las filas restantes que satisfacen la condición de búsqueda.
    • El estándar ISO considera que dos valores nulos son iguales en lo que respecta a la cláusula GROUP BY.
    © Pearson Education Limited 1995, 2005
  • 41. Ejemplo 5.17 Utilización de GROUP BY
    • Calcular el número de empleados que trabajan en cada sucursal y la suma de sus salarios.
      • SELECT branchNo,
      • COUNT(staffNo) AS myCount,
        • SUM(salary) AS mySum
        • FROM Staff
        • GROUP BY branchNo
        • ORDER BY branchNo;
    © Pearson Education Limited 1995, 2005
  • 42. Ejemplo 5.17 Utilización de GROUP BY © Pearson Education Limited 1995, 2005
  • 43. Restricción de los agrupamientos – Cláusula HAVING
    • La cláusula HAVING está diseñada para ser utilizada con la cláusula GROUP BY con el fin de restringir los grupos que aparecen en la tabla final de resultados.
    • Parecida a WHERE, pero WHERE filtra las filas individuales que se encuentran en la tabla final de resultados, mientras que HAVING filtra los grupos.
    • Los nombres de las columnas utilizados en la cláusula HAVING tienen que aparecer también en la vista GROUP BY o estar contenidos dentro de una función de agregación.
  • 44. Ejemplo 5.18 Utilización de HAVING
    • Para cada sucursal que tenga más de un empleado, averiguar el número de empleados que trabajan en cada sucursal y la suma de sus salarios.
      • SELECT branchNo,
      • COUNT(staffNo) AS myCount,
        • SUM(salary) AS mySum
        • FROM Staff
        • GROUP BY branchNo
        • HAVING COUNT(staffNo) > 1
        • ORDER BY branchNo;
  • 45. Ejemplo 5.18 Utilización de HAVING © Pearson Education Limited 1995, 2005
  • 46. Suconsultas
    • Algunas instrucciones SQL pueden incluir una instrucción SELECT.
    • Puede utilizarse una subselección en las cláusulas WHERE y HAVING de una instrucción SELECT, en cuyo caso se denomina a esa instrucción subconsulta o consulta anidada.
    • Las subselecciones pueden aparecer también dentro de las instrucciones INSERT, UPDATE, y DELETE.
    © Pearson Education Limited 1995, 2005
  • 47. Ejemplo 5.19 Utilización de una subconsulta con el operador de igualdad
    • Generar un listado con todos los empleados de ka sucursal ubicada en «163 Main St».
    • SELECT staffNo, fName, lName, position
      • FROM Staff
      • WHERE branchNo =
      • (SELECT branchNo
      • FROM Branch
      • WHERE street = ‘163 Main St’);
    © Pearson Education Limited 1995, 2005
  • 48. Ejemplo 5.19 Subconsulta con el operador de igualdad
    • La instrucción SELECT interna extrae el número de sucursal correspondiente a la sucursal situada en la calle «163 Main St» (‘B003’).
    • La instrucción SELECT externa extrae los detalles de todos los empleados que trabajan en esta sucursal.
    • La instrucción SELECT externa se convierte en:
      • SELECT staffNo, fName, lName, position
        • FROM Staff
        • WHERE branchNo = ‘B003’;
    © Pearson Education Limited 1995, 2005
  • 49. Ejemplo 5.19 Subconsulta con el operador de igualdad © Pearson Education Limited 1995, 2005 Tabla 5.19 Tabla de resultados para el ejemplo 5.19
  • 50. Ejemplo 5.20 Subconsulta con una función de agregación
    • Generar un listado de todos los empleados cuyo salario sea superior al salario medio, indicando cuál es la diferencia en cada caso con respecto al salario medio.
      • SELECT staffNo, fName, lName, position,
      • salary – (SELECT AVG(salary) FROM Staff) As SalDiff
      • FROM Staff
      • WHERE salary >
        • (SELECT AVG(salary)
        • FROM Staff);
  • 51. Ejemplo 5.20 Subconsulta con función de agregación
    • No podemos escribir «WHERE salary > AVG(salary)»
    • Sin embargo, utilizamos una subconsulta para hallar el salario medio y luego empleamos la instrucción SELECT externa para extraer los empleados que tengan un salario superior al salario medio calculado:
      • SELECT staffNo, fName, lName, position,
      • salary – 17000 As salDiff
      • FROM Staff
      • WHERE salary > 17000;
  • 52. Ejemplo 5.20 Subconsulta con función de agregación © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.20 Tabla 5.20
  • 53. Consultas multitabla
    • Hasta ahora hemos podido utilizar las subconsulta siempre y cuando los resultados provinieran de la misma tabla.
    • Para combinar columnas de diversas tablas debemos utilizar una operación de combinación.
    • Para esta operación de combinación debemos incluir más de un nombre de tabla en la cláusula FROM.
    • Se utiliza una coma como separador, incluyendo una cláusula WHERE para especificar la columna o columnas con las que hay que realizar la combinación.
  • 54. Consultas multitabla
    • También se puede utilizar un alias para las tablas incluidas en la cláusula FROM.
    • El alias se separa del nombre de la tabla mediante un espacio.
    • El alias puede emplearse para cualificar los nombres de columna en aquellos casos donde exista ambigüedad.
  • 55. Ejemplo 5.24 Combinación simple
    • Generar un listado con los nombres de todos los clientes que hayan visitado un inmueble, incluyendo en el los comentarios realizados.
    • SELECT c.clientNo, fName, lName,
      • propertyNo, comment
      • FROM Client c, Viewing v
      • WHERE c.clientNo = v.clientNo;
    © Pearson Education Limited 1995, 2005
  • 56. Ejemplo 5.24 Combinación simple
    • Sólo se incluirán en el resultado aquellas columnas de ambas tablas que tengas valores idénticos en la columna del clientNo, utilizando la condición de búsqueda (c.clientNo = v.clientNo).
    • Equivalente a la operación de equicombinación del álgebra relacional.
    Tabla de resultados para el ejemplo 5.24 Tabla 5.24
  • 57. Construcciones alternativas de combinación
    • En SQL existen formas alternativas de especificar esta combinación:
    • FROM Client c JOIN Viewing v ON c.clientNo = v.clientNo
    • FROM Client JOIN Viewing USING clientNo
    • FROM Client NATURAL JOIN Viewing
    • En cada uno de los casos , la cláusula FROM sustituye a las cláusulas FROM y WHERE originales. Sin embargo, la primer alternativa produce una tabla con dos columnas clientNo idénticas.
    © Pearson Education Limited 1995, 2005
  • 58. Ejemplo 5.25 Ordenación de una combinación
    • Para cada sucursal, indicar los números y los nombres de los empledos que gestionan inmuebles, así como los inmuebles que gestionan.
    • SELECT s.branchNo, s.staffNo, fName, lName,
      • propertyNo
      • FROM Staff s, PropertyForRent p
      • WHERE s.staffNo = p.staffNo
      • ORDER BY s.branchNo, s.staffNo, propertyNo;
  • 59. Ejemplo 5.25 Ordenación de una combinación © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.25 Tabla 5.25
  • 60. Ejemplo 5.26 Combinación de tres tablas
    • Para cada sucursal, indicar los números y los nombres de los empleados que gestionan inmuebles, así como los inmuebles que gestionan.
    • SELECT b.branchNo, b.city, s.staffNo, fName, lName,
      • propertyNo
      • FROM Branch b, Staff s, PropertyForRent p
      • WHERE b.branchNo = s.branchNo y
      • s.staffNo = p.staffNo
      • ORDER BY b.branchNo, s.staffNo, propertyNo;
  • 61. Ejemplo 5.26 Combinación de tres tablas
    • El estándar SQL proporciona formulaciones alternativas para las cláusulas FROM y WHERE:
      • FROM (Branch b JOIN Staff s USING branchNo) AS bs JOIN PropertyForRent p USING staffNo
    © Pearson Education Limited 1995, 2005 Tabla de resultados para el ejemplo 5.26 Tabla 5.26
  • 62. Ejemplo 5.27 Múltiples columnas de agrupamiento
    • Determinar el número de inmuebles gestionados por cada empleado.
    • SELECT s.branchNo, s.staffNo, COUNT(*) AS myCount
      • FROM Staff s, PropertyForRent p
      • WHERE s.staffNo = p.staffNo
      • GROUP BY s.branchNo, s.staffNo
      • ORDER BY s.branchNo, s.staffNo;
    © Pearson Education Limited 1995, 2005
  • 63. Ejemplo 5.27 Múltiples columnas de agrupamiento © Pearson Education Limited 1995, 2005
  • 64. Combinaciones externas
    • Si una fila de una tabla no tiene ninguna correspondencia en la otra, se omite dicha fila de la tabla de resultados.
    • La combinación externa retiene aquellas filas que no satisfagan la condición de combinación.
    • Consideremos las siguientes tablas:
    © Pearson Education Limited 1995, 2005
  • 65. Combinaciones externas
    • La combinación (interna) de estas dos tablas:
      • SELECT b.*, p.*
        • FROM Branch1 b, PropertyForRent1 p
        • WHERE b.bCity = p.pCity;
    Tabla 27(b). Tabla de resultados para la combinación interna de las tablas Branch1 y PropertyForRent1.
  • 66. Combinaciones externas
    • La tabla de resultados tiene dos filas en las que las ciudades son iguales.
    • No hay ninguna fila correspondiente a las sucursales de Bristol y Aberdeen.
    • Para incluir aquellas filas que no satisfagan la condición de la combinación.
    © Pearson Education Limited 1995, 2005
  • 67. Ejemplo 5.28 Combinación externa izquierda
    • Generar un listado con todas las sucursales y los inmuebles que estén en la misma ciudad que alguna sucursal.
    • SELECT b.*, p.*
      • FROM Branch1 b LEFT JOIN
      • PropertyForRent1 p ON b.bCity = p.pCity;
    © Pearson Education Limited 1995, 2005
  • 68. Ejemplo 5.28 Combinación externa izquierda
    • Incluye aquellas filas de la primera tabla (la de la izquierda) que no tienen ninguna fila correspondiente en la segunda tabla (la de la derecha).
    • Las columnas correspondientes a la segunda tabla se rellenan con valores NULL.
    © Pearson Education Limited 1995, 2005 Tabla 5.28 Tabla de resultados para el ejemplo 5.28
  • 69. Ejemplo 5.29 Combinación externa derecha
    • Generar un listado de todos los inmuebles y de las sucursales que estén en la misma ciudad.
    • SELECT b.*, p.*
      • FROM Branch1 b RIGHT JOIN
      • PropertyForRent1 p ON b.bCity = p.pCity;
    © Pearson Education Limited 1995, 2005
  • 70. Ejemplo 5.29 Combinación exterior derecha
    • Incluye aquellas filas de la segunda tabla (la de la derecha) que ni tienen ninguna fila correspondiente a la primera tabla (la de la izquierda).
    • Las columnas correspondientes a la primera tabla se rellenan con valores NULL.
    © Pearson Education Limited 1995, 2005 Tabla 5.29 Tabla de resultados para el ejemplo 5.29
  • 71. Ejemplo 5.30 Combinación externa completa
    • Generar un listado con las sucursales e inmuebles que estén en la misma ciudad, sino también aquellas tablas que no tienen ninguna correspondencia.
    • SELECT b.*, p.*
      • FROM Branch1 b FULL JOIN
      • PropertyForRent1 p ON b.bCity = p.pCity;
    © Pearson Education Limited 1995, 2005
  • 72. Ejemplo 5.30 Combinación externa completa
    • Incluye aquellas filas de ambas tablas que no tienen ninguna fila correspondiente.
    • En las columnas sin correspondencia aparece NULL.
    © Pearson Education Limited 1995, 2005 Tabla 5.30 Tabla de resultados para el ejemplo 5.30
  • 73. Unión, intersección y diferencia
    • Se pueden emplear las operaciones normales de conjuntos, unión, intersección y diferencia para combinar los resultados de dos o más consultas en una única tabla de resultados.
    • La unión de dos tablas, A y B,es una tabla que contiene todas las filas que están incluidas en la primera tabla A o en la segunda tabla B o en ambas.
    • Las intersección es una tabla que contiene todas las filas que son comunes a A y B.
    • La diferencia es una tabla que contiene todas filas que están contenidas en la taba A pero no en B.
    • Las dos tablas deben ser compatibles con respecto a la unión .
  • 74. Unión, Intersección, y diferencia (Except)
    • El formato de la cláusula del operador de conjuntos es, en todos los casos:
      • op [ALL] [CORRESPONDING [BY {columna1 [, ...]}]]
    • Si se especifica CORRESPONDING BY, la operación de conjuntos se realizará sobre las columnas designadas.
    • Si se especifica CORRESPONDING pero no la cláusula BY, la operación de conjuntos se realiza sobre todas las columnas que sean comunes a ambas tablas.
    • Si se especifica ALL el resultado puede incluir filas duplicadas.
  • 75. Unión, Intersección, y diferencia(Except) © Pearson Education Limited 1995, 2005 Unión Intersección Diferencia
  • 76. Ejemplo 5.32 Utilización de UNIóN
    • Construir una lista de todas las ciudades en las que exista una sucursal o un inmueble.
    • (SELECT city
      • FROM Branch
      • WHERE city IS NOT NULL) UNION
      • (SELECT city
      • FROM PropertyForRent
      • WHERE city IS NOT NULL);
    © Pearson Education Limited 1995, 2005
  • 77. Ejemplo 5.32 Utilización de UNIóN
    • O bien
      • (SELECT * FROM Branch WHERE city IS NOT NULL) UNION CORRESPONDING BY city (SELECT * FROM PropertyForRent WHERE city IS NOT NULL);
    © Pearson Education Limited 1995, 2005
  • 78. Ejemplo 5.32 Utilización de UNIóN
    • Genera una tabla de resultados a partir de la primera consulta y otra tabla de resultados a partir de la segunda y junta las dos tablas eliminando las filas duplicadas.
    © Pearson Education Limited 1995, 2005 Tabla 5.32 Tabla de resultados para el ejemplo 5.32
  • 79. INSERT
    • INSERT INTO NombreTabla [ (listaColumnas) ]
      • VALUES (listaValoresDatos)
    • La ListaColumnas es opcional; si se omite, SQL utilizará de forma predeterminada una lista de todas las columnas en su orden original especificado en CREATE TABLE.
    • Cualquier columna omitida debe haber sido declarada como NULL cuando se creo la tabla, a menos que se haya utilizado la opción DEFAULT al crear la columna.
  • 80. INSERT
    • La ListaValoresDatos debe corresponderse con la ListaColumnas de la siguiente forma:
      • el número de elementos de cada lista debe ser el mismo;
      • Debe haber una correspondencia directa entre las posiciones de los elementos de ambas listas;
      • El tipo de datos de cada elemento de ListaValoresDatos debe ser compatible con el tipo de datos de la correspondiente columna.
  • 81. Ejemplo 5.35 INSERT … VALUES
    • Insertar una nueva fila en la tabla Staff y suministrarle los datos para todas las columnas.
    • INSERT INTO Staff
      • VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Assistant’, ‘M’, Date‘1957-05-25’, 8300, ‘B003’);
    © Pearson Education Limited 1995, 2005
  • 82. Ejemplo 5.36 INSERT utilizando valores predeterminados
    • Insertar una nueva fila en la tabla Staff y suministrarle datos para todas las columnas obligatorias.
    • INSERT INTO Staff (staffNo, fName, lName,
      • position, salary, branchNo)
      • VALUES (‘SG44’, ‘Anne’, ‘Jones’,
      • ‘ Assistant’, 8100, ‘B003’);
    • O
      • INSERT INTO Staff
      • VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, NULL,
      • NULL, 8100, ‘B003’);
  • 83. INSERT … SELECT
    • La segunda forma de la instrucción INSERT permite copiar múltiples filas de una o más tablas en otra tabla:
    • INSERT INTO NombreTabla [ (ListaColumnas) ]
      • SELECT ...
    © Pearson Education Limited 1995, 2005
  • 84. Ejemplo 5.37 INSERT … SELECT
    • Suponga que hay una tabla StaffPropCount que contiene los nombres de los empleados y el número de inmuebles que gestionan.
      • StaffPropCount( staffNo , fName, lName, propCnt)
    • Populate StaffPropCount using Staff y PropertyForRent tables.
  • 85. Ejemplo 5.37 INSERT … SELECT
      • INSERT INTO StaffPropCount
      • (SELECT s.staffNo, fName, lName, COUNT(*)
      • FROM Staff s, PropertyForRent p
      • WHERE s.staffNo = p.staffNo
      • GROUP BY s.staffNo, fName, lName)
      • UNION
      • (SELECT staffNo, fName, lName, 0
      • FROM Staff
      • WHERE staffNo NOT IN
      • (SELECT DISTINCT staffNo
      • FROM PropertyForRent));
  • 86. Ejemplo 5.37 INSERT … SELECT
    • Si omitimos la segunda parte de la operación UNION, excluye a aquellos empleados que no gestionan ningún inmueble en la actualidad.
  • 87. UPDATE
      • UPDATE NombreTabla
      • SET NombreColumna1 = valorDatos1
      • [, NombreColumna2 = valorDatos2...]
      • [WHERE condiciónBúsqueda]
    • NombreTabla puede ser el nombre de una tabla base o de una vista actualizable.
    • La cláusula SET especifica los nombres de una o más columnas que hay que actualizar.
  • 88. UPDATE
    • La cláusula WHERE es opcional:
      • Si se omite, las columnas especificadas se actualizarán para todas las filas de la tabla;
      • Si se especifica sólo se actualizarán aquellas filas que satisfagan la condiciónBúsqueda .
    • Los nuevos valores valorDatos deben ser compatibles con ,os tipos de datos de las columnas correspondientes.
  • 89. Ejemplo 5.38/39 Actualización de todas las filas mediante UPDATE
    • Incrementar en un 3% el salario de todos los empleados.
    • UPDATE Staff
      • SET salary = salary*1.03;
    • Incrementar un 5% el salario de todos los gerentes.
    • UPDATE Staff
      • SET salary = salary*1.05
      • WHERE position = ‘Manager’;
  • 90. Ejemplo 5.40 Actualización de múltiples columnas mediante UPDATE
    • Ascender a David Ford (staffNo=‘SG14’) a gerente e incrementar su salario a 18000 euros.
    • UPDATE Staff
      • SET position = ‘Manager’, salary = 18000
      • WHERE staffNo = ‘SG14’;
  • 91. DELETE
      • DELETE FROM NombreTabla
      • [WHERE condiciónBúsqueda]
    • NombreTabla puede ser el nombre de una base o de una vista actualizable.
    • condiciónBúsqueda es opcional; si se la omite, todas las filas serán borradas de la tabla. Esto no hace que se borre la propia tabla; Si se especifica condiciónBúsqueda , sólo se borrarán aquellas filas que satisfagan la condición indicada.
    © Pearson Education Limited 1995, 2005
  • 92. Ejemplo 5.41/42 Borrado de filas específicas mediante DELETE
    • Borrar todas las filas relativas al inmueble PG4.
    • DELETE FROM Viewing
      • WHERE propertyNo = ‘PG4’;
    • Borrar todas las filas de la tabla de búsqueda.
      • DELETE FROM Viewing;
  • 93.