ESCUELA:
NOMBRES:
BASE DE DATOS I
CICLO
Ciencias de la Computación
Ing. Juan Carlos Morocho
OCTUBRE 2009 – FEBRERO 2010
1
BIMESTRE: I BIMESTRE
Capítulo 5
SQL: Manipulación de datos
© Pearson Education Limited 1995, 2005
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,
branchNoFROM 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 propertyNoFROM Viewing;
© Pearson Education Limited 1995, 2005
13
Ejemplo 5.3 Uso de DISTINCT
Uso de DISTINCT para eliminar duplicados:
SELECT DISTINCT propertyNoFROM 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
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, salaryFROM StaffWHERE 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.7Tabla 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, 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
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
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
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;
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, salaryFROM StaffORDER 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.11Tabla 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, rentFROM PropertyForRentORDER 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, rentFROM PropertyForRentORDER 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
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 myCountFROM PropertyForRentWHERE 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 myCountFROM ViewingWHERE 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’;
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;
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 StaffGROUP BY branchNoORDER BY branchNo;
© Pearson Education Limited 1995, 2005
42
Ejemplo 5.17 Utilización de GROUP BY
© Pearson Education Limited 1995, 2005
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.
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;
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, positionFROM StaffWHERE 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, positionFROM StaffWHERE 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
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);
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.20Tabla 5.20
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.
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 vWHERE c.clientNo = v.clientNo;
© Pearson Education Limited 1995, 2005
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
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
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;
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
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.26Tabla 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 myCountFROM Staff s, PropertyForRent pWHERE s.staffNo = p.staffNoGROUP BY s.branchNo, s.staffNoORDER 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
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.
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
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.
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 cityFROM BranchWHERE city IS NOT NULL) UNION(SELECT cityFROM PropertyForRentWHERE city IS NOT NULL);
© Pearson Education Limited 1995, 2005
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
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
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.
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 StaffVALUES (‘SG16’, ‘Alan’, ‘Brown’,
‘Assistant’, ‘M’, Date‘1957-05-25’, 8300, ‘B003’);
© Pearson Education Limited 1995, 2005
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’);
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
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.
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));
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.
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.
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.
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’;
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’;
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
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;
Top Related