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

93
ESCUELA: NOMBRES: BASE DE DATOS I CICLO Ciencias de la Computación Ing. Juan Carlos Morocho OCTUBRE 2009 – FEBRERO 2010 1 BIMESTRE: I BIMESTRE

description

SQL: Manipulación de datosPonente: Juan Carlos Morocho

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

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

ESCUELA:

NOMBRES:

BASE DE DATOS I

CICLO

Ciencias de la Computación

Ing. Juan Carlos Morocho

OCTUBRE 2009 – FEBRERO 2010

1

BIMESTRE: I BIMESTRE

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

Capítulo 5

SQL: Manipulación de datos

© Pearson Education Limited 1995, 2005

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

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.

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

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

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

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

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

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

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

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

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

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,

branchNoFROM Staff;

Se puede utilizar un asterisco(*) como abreviatura de «todas las columnas»:

SELECT *FROM Staff;

© Pearson Education Limited 1995, 2005

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

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

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

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

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

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

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

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 propertyNoFROM Viewing;

© Pearson Education Limited 1995, 2005

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

13

Ejemplo 5.3 Uso de DISTINCT

Uso de DISTINCT para eliminar duplicados:

SELECT DISTINCT propertyNoFROM Viewing;

© Pearson Education Limited 1995, 2005

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

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

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

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

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

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

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

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

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

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, salaryFROM StaffWHERE salary BETWEEN 20000 y 30000;

BETWEEN indica los puntos extremos del rango.

© Pearson Education Limited 1995, 2005

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

19

Ejemplo 5.7 Condición de búsqueda basada en rango

© Pearson Education Limited 1995, 2005

Tabla de resultados para el ejemplo 5.7Tabla 5.7

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

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, salaryFROM StaffWHERE 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

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

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.8Tabla 5.8

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

22

Ejemplo 5.9 Correspondencia de patronesLocalizar 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.9Tabla 5.9

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

Ejemplo 5.10 Condición de búsqueda NULLGenerar 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, viewDateFROM ViewingWHERE propertyNo = ‘PG4’ y

comment IS NULL;

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

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

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

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, salaryFROM StaffORDER BY salary DESC;

© Pearson Education Limited 1995, 2005

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

26

Ejemplo 5.11 Ordenación de resultado en una sola columna

© Pearson Education Limited 1995, 2005

Tabla de resultados para el ejemplo 5.11Tabla 5.11

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

27

Ejemplo 5.12 Ordenación multicolumna

Generar una lista abreviada de inmuebles ordenada según el tipo de inmueble.

SELECT propertyNo, type, rooms, rentFROM PropertyForRentORDER BY type;

© Pearson Education Limited 1995, 2005

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

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

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

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, rentFROM PropertyForRentORDER BY type, rent DESC;

© Pearson Education Limited 1995, 2005

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

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

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

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.

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

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

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

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

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

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

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

35

Ejemplo 5.13 Utilización de COUNT(*)

¿Cuántos inmuebles tienen un alquiler superior a 350 euros por mes?

SELECT COUNT(*) AS myCountFROM PropertyForRentWHERE rent > 350;

© Pearson Education Limited 1995, 2005

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

36

Ejemplo 5.14 Utilización de COUNT (DISTINCT)

¿Cuántos inmuebles distintos fueron visitados en mayo de 2004?

SELECT COUNT(DISTINCT propertyNo) AS myCountFROM ViewingWHERE viewDate BETWEEN ‘1-May-04’ y ‘31-May-04’;

© Pearson Education Limited 1995, 2005

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

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’;

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

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;

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

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.

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

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

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

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 StaffGROUP BY branchNoORDER BY branchNo;

© Pearson Education Limited 1995, 2005

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

42

Ejemplo 5.17 Utilización de GROUP BY

© Pearson Education Limited 1995, 2005

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

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.

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

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 mySumFROM StaffGROUP BY branchNoHAVING COUNT(staffNo) > 1ORDER BY branchNo;

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

45

Ejemplo 5.18 Utilización de HAVING

© Pearson Education Limited 1995, 2005

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

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

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

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, positionFROM StaffWHERE branchNo =

(SELECT branchNo FROM Branch WHERE street = ‘163 Main St’);

© Pearson Education Limited 1995, 2005

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

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, positionFROM StaffWHERE branchNo = ‘B003’;

© Pearson Education Limited 1995, 2005

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

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

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

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);

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

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;

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

52

Ejemplo 5.20 Subconsulta con función de agregación

© Pearson Education Limited 1995, 2005

Tabla de resultados para el ejemplo 5.20Tabla 5.20

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

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.

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

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.

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

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 vWHERE c.clientNo = v.clientNo;

© Pearson Education Limited 1995, 2005

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

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.24Tabla 5.24

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

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

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

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, propertyNoFROM Staff s, PropertyForRent pWHERE s.staffNo = p.staffNoORDER BY s.branchNo, s.staffNo, propertyNo;

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

59

Ejemplo 5.25 Ordenación de una combinación

© Pearson Education Limited 1995, 2005

Tabla de resultados para el ejemplo 5.25Tabla 5.25

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

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;

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

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.26Tabla 5.26

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

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 myCountFROM Staff s, PropertyForRent pWHERE s.staffNo = p.staffNoGROUP BY s.branchNo, s.staffNoORDER BY s.branchNo, s.staffNo;

© Pearson Education Limited 1995, 2005

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

63

Ejemplo 5.27 Múltiples columnas de agrupamiento

© Pearson Education Limited 1995, 2005

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

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

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

Combinaciones externas

La combinación (interna) de estas dos tablas:

SELECT b.*, p.*FROM Branch1 b, PropertyForRent1 pWHERE b.bCity = p.pCity;

Tabla 27(b). Tabla de resultados para la combinación interna de las tablas Branch1 y PropertyForRent1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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.

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

75

Unión, Intersección, y diferencia(Except)

© Pearson Education Limited 1995, 2005

Unión Intersección

Diferencia

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

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 cityFROM BranchWHERE city IS NOT NULL) UNION(SELECT cityFROM PropertyForRentWHERE city IS NOT NULL);

© Pearson Education Limited 1995, 2005

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

77

Ejemplo 5.32 Utilización de UNIóN

O bien

(SELECT *FROM BranchWHERE city IS NOT NULL)UNION CORRESPONDING BY city(SELECT *FROM PropertyForRentWHERE city IS NOT NULL);

© Pearson Education Limited 1995, 2005

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

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

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

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.

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

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.

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

81

Ejemplo 5.35 INSERT … VALUES

Insertar una nueva fila en la tabla Staff y suministrarle los datos para todas las columnas.

INSERT INTO StaffVALUES (‘SG16’, ‘Alan’, ‘Brown’,

‘Assistant’, ‘M’, Date‘1957-05-25’, 8300, ‘B003’);

© Pearson Education Limited 1995, 2005

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

Ejemplo 5.36 INSERT utilizando valores predeterminadosInsertar 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’);

OINSERT INTO StaffVALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, NULL, NULL, 8100, ‘B003’);

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

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

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

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.

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

Ejemplo 5.37 INSERT … SELECT

INSERT INTO StaffPropCount(SELECT s.staffNo, fName, lName, COUNT(*)FROM Staff s, PropertyForRent pWHERE s.staffNo = p.staffNoGROUP BY s.staffNo, fName, lName)UNION(SELECT staffNo, fName, lName, 0FROM StaffWHERE staffNo NOT IN

(SELECT DISTINCT staffNo FROM PropertyForRent));

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

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.

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

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.

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

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.

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

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’;

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

Ejemplo 5.40 Actualización de múltiples columnas mediante UPDATEAscender a David Ford (staffNo=‘SG14’) a gerente e incrementar su salario a 18000 euros.

UPDATE StaffSET position = ‘Manager’, salary

= 18000WHERE staffNo = ‘SG14’;

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

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

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

Ejemplo 5.41/42 Borrado de filas específicas mediante DELETE

Borrar todas las filas relativas al inmueble PG4.

DELETE FROM ViewingWHERE propertyNo = ‘PG4’;

Borrar todas las filas de la tabla de búsqueda.

DELETE FROM Viewing;

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