Você está na página 1de 159

Bases de Datos

Unidad

El Lenguaje SQL

2011 Erwin Fischer

Unidad - SQL - Objetivos


Entender el propsito e importancia del Lenguaje de Consulta Estructurado SQL. Como recuperar datos de una base de datos usando la instruccin SELECT
Uso de condicin WHERE compuesta. Ordenando resultados usando ORDER BY.

2011 Erwin Fischer

Unidad - SQL - Objetivos


Uso de funciones agregadas. Agrupacin de datos usando GROUP BY y HAVING. Uso de Subconsultas. Combinacin de Tablas. Realizando operaciones de conjunto (UNION, INTERSECT, EXCEPT).

2011 Erwin Fischer

Unidad - SQL - Objetivos

Como realizar actualizaciones a la Base de datos usando INSERT, UPDATE y DELETE

2011 Erwin Fischer

Objetivos de SQL
Idealmente un lenguaje de base de datos debera permitir a un usuario:
Crear la base de datos y las estructuras de relaciones Realizar tareas bsicas de administracin de datos, Realizar consultas simples y complejas Debe realizar estas tareas con mnimo esfuerzo del usuario Su estructura de comandos y sintaxis debe ser fcil de aprender Debe ser portable

2011 Erwin Fischer

Objetivos de SQL
SQL es un lenguaje orientado a transformacin con dos principales componentes:

Hasta 1999 SQL no contena comando para control de flujo. Estos tenan que ser implementados usando lenguajes de programacin o un Lenguaje de control de tareas, o interactivamente por las decisiones del usuario.
2011 Erwin Fischer
7

Un DDL para definir la estructura de la base de datos y controlar el acceso a los datos; Un DML para recuperar y actualizar datos

Objetivos de SQL

SQL es un lenguaje relativamente fcil de aprender:


Es un lenguaje no procedural: se especifica que informacin se requiere, en lugar de, como obtenerla, Es un lenguaje esencialmente de formato libre

2011 Erwin Fischer

Objetivos de SQL

Consiste de palabras en ingles tales como :


1) CREATE TABLE Empleado(
numEmpleado nombre salario VARCHAR(5), VARCHAR(15), DECIMAL(7,2));

2) INSERT INTO Empleado VALUES (SG16, Brown, 8300); 3) SELECT numEmpleado, nombre, salario FROM Empleado WHERE salario > 10000;
2011 Erwin Fischer
9

Objetivos de SQL

Puede ser usado por un rango de usuarios DBAs, administradores, desarrolladores de aplicaciones, y otros tipos de usuarios finales. Existe un estndar ISO para SQL, hacindolo el lenguaje estndar formal y de facto para bases de datos relacionales
2011 Erwin Fischer
10

Historia de SQL

En 1974, D. Chamberlin (Laboratorio de IBM San Jos) defini un lenguaje llamado Structured English Query Language (SEQUEL). Una versin revisada, SEQUEL/2, fue definida en 1976 pero el nombre fue posteriormente cambiado a SQL por razones legales.
2011 Erwin Fischer
11

Historia de SQL

Aun pronunciado see-quel, a pesar que la pronunciacin oficial es S-Q-L. IBM posteriormente produjo un Prototipo de un DBMS llamado System R, basado en SEQUEL/2. Las races de SQL, estn en SQUARE (Specifying Queries as Relational Expressions), el cual es anterior al proyecto System R.
2011 Erwin Fischer
12

Historia de SQL
Al final de los 70, apareca ORACLE y fue probablemente el primer RDBMS basado en SQL En 1987, ANSI e ISO publicaron un estndar inicial para SQL. En 1989, ISO public un anexo que defini las caractersticas de mejoras de integridad. En 1992, ocurri la primera revisin principal del estndar ISO, referido como SQL2 o SQL/92. En 1999, SQL:1999 fue liberado con soporte para administracin de datos orientado a objeto. Al final de 2003, fue liberado SQL:2003.
2011 Erwin Fischer
13

Importancia de SQL
SQL pasa a formar parte de la arquitecturas de aplicaciones tales como IBMs Systems Application Architecture (SAA). Es una opcin estratgica de muchas organizaciones grandes e influyentes (Ej: X/OPEN). SQL es el estndar federal para el tratamiento de la informacin (FIPS) del cual se requiere la conformidad para todas las ventas de bases de datos al gobierno americano.
2011 Erwin Fischer
14

Importancia de SQL
El SQL se utiliza en otros estndares e incluso influencia el desarrollo de otros estndares como herramienta de definicion. Los ejemplos incluyen:
El sistema IRDS (Information Resource Dictionary System, sistema de diccionarios para recursos de informacin de ISO). El estndar RDA (Remote Data Access, acceso remoto a datos).

2011 Erwin Fischer

15

Escribiendo Comandos SQL


Una instruccin SQL consiste de palabras reservadas y palabras definidas por el usuario.
Las palabras reservadas son una parte fija del lenguaje SQL y tienen un significado fijo. Ellas tienen que ser deletreadas exactamente como se requiere Las palabras definidas por el usuario son creadas por el usuario y representan los nombres de diversos objetos de la base de datos tales como tablas, columnas, vistas, ndices, entre otros.
2011 Erwin Fischer
16

Escribiendo Comandos SQL


La mayora de los componentes de una instruccin SQL no distinguen entre maysculas y minsculas excepto en los datos de caracteres literales. Son mas legibles con indentacin y alineacin:
Cada clusula debera comenzar en una nueva lnea. El comienzo de una clusula debe alinearse con el comienzo de otras clusulas. Si la clusula tiene varias partes, cada una debe aparecer en una lnea separada e indentada bajo comienzo de la clusula.
2011 Erwin Fischer
17

Escribiendo Comandos SQL

Uso de la notacin BNF extendida:


Las letras maysculas representan palabras reservadas. Las letras minsculas representan palabras definidas por el usuario. | indica una eleccin entre alternativas. {} Indican un elemento requerido. [] Indican un elemento opcional. Indica repeticin opcional (0 o ms veces).

2011 Erwin Fischer

18

Literales

Los literales son constantes usadas en sentencias SQL. Todos los literales no numricos deben estar encerrados en comillas simple (ej. London).

Todos los literales numricos no deben estar encerrados en comillas (ej. 650.00).
2011 Erwin Fischer
19

Instruccin SELECT
SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM NombreTabla [alias] [, ...] [WHERE condicin] [GROUP BY listaColumna] [HAVING condicin] [ORDER BY listaColumna]

2011 Erwin Fischer

20

Instruccin SELECT
FROM Especifica la o las tabla(s) a ser usadas WHERE Filtra filas. GROUP BY Forma grupos de filas con el mismo valor de columna. HAVING Filtra los grupos de acuerdo a una condicin. SELECT Especifica que columnas van a aparecer en la salida ORDER BY Especifica el orden de la salida.

2011 Erwin Fischer

21

Instruccin SELECT

El orden de las clusulas no puede ser cambiado.

Solamente SELECT y FROM son obligatorias.

2011 Erwin Fischer

22

Ejemplo 5.1 Todas las columnas, Todas las filas


Listar todos los detalles de Empleados.
SELECT numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, numOficina FROM Empleado;
Podemos usar * Como una abreviacin para todas las columnas: SELECT * FROM Empleado;

2011 Erwin Fischer

23

Ejemplo 5.1 Todas las columnas, Todas las filas


SELECT numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, numOficina FROM Empleado

numEmpleado SL21 SG37 SG14 SA9 SG5 SL41

nombre Jhon Peter David Mary Susan Julie

apellido White Denver Ford Lee Sarandon Roberts

cargo Gerente Asistente Supervisor Asistente Gerente Asistente

sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63

salario 300000 120000 180000 90000 240000 90000

numOficina B005 B003 B003 B007 B003 B005

2011 Erwin Fischer

24

Ejemplo 5.2 Recuperar columnas especificas, todas las filas Producir una lista de salarios para todos los empleados, mostrando solamente, numEmpleado, nombre, apellido y salario.
SELECT numEmpleado, nombre, apellido, salario FROM Empleado;

2011 Erwin Fischer

25

Ejemplo 5.2 Recuperar columnas especificas, todas las filas


numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

SELECT numEmpleado, nombre, apellido, salario FROM Empleado;


numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts salario 300000 120000 180000 90000 240000 90000
26

2011 Erwin Fischer

Ejemplo DISTINCT

5.3

Uso

de

Listar el numero de propiedad de todas las propiedades que han sido visitadas SELECT numPropiedad
FROM Visita;

2011 Erwin Fischer

27

Ejemplo 5.3 Uso de DISTINCT


Uso de DISTINCT para eliminar duplicados: SELECT DISTINCT numPropiedad FROM Visita;

2011 Erwin Fischer

28

Ejemplo 5.3 Uso de DISTINCT


SELECT numPropiedad FROM Visita; SELECT DISTINCT numPropiedad FROM Visita;

Tabla 1-1 Tabla resultado con duplicados

Tabla 1-2 Tabla resultado eliminando duplicados

numPropiedad IA14 IG4 IG4 IA14 IG36


2011 Erwin Fischer

numPropiedad IA14 IG4 IG36

29

Ejemplo calculados

5.4

Campos

Listar el salario mensual para todos los empleados, mostrando el numero de empleado, nombre, apellido y el detalle del salario
SELECT numEmpleado, nombre, apellido, salario/12 FROM Empleado;
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts col4 25000 10000 15000 7500 20000 7500

2011 Erwin Limited Fischer 1995, 2005 Pearson Education

30

Ejemplo calculados

5.4

Campos

Se puede dar un nombre a la columna mediante la clusula AS:


SELECT numEmpleado, salarioMensual FROM Empleado; nombre, apellido, salario/12 AS

numEmpleado SL21 SG37 SG14 SA9 SG5 SL41

nombre Jhon Peter David Mary Susan Julie

apellido White Denver Ford Lee Sarandon Roberts

salarioMensual 25000 10000 15000 7500 20000 7500

2011 Erwin Fischer

31

Ejemplo 5.5 Comparacin en la Condicin de bsqueda


Listar todos los empleados salario mayor que 100.000. con un

SELECT numEmpleado, nombre, apellido, salario FROM empleado WHERE salario > 100000;

numEmpleado SL21 SG37 SG14 SG5

nombre Jhon Peter David Susan

apellido White Denver Ford Sarandon

salario 300000 120000 180000 240000


32

2011 Erwin Fischer

Ejemplo 5.6 Comparacin compuesta en la Condicin de bsqueda

Listar las direcciones de todas las oficinas en Castelln o Santiago.


SELECT * FROM Oficina WHERE ciudad = Castelln or ciudad = Santiago;
numOficina calle O5 Enmedio, 8 O7 O1 O4 Moyano, s/n Larga 2003 Trafalgar, 23 area Centro Centro Grao ciudad Castelln Castelln Santiago Castelln telefono fax 964 201 240 964 201 340 964 215 760 964 215 670 627 550 320 627 550 321 964 284 440 964 284 420

2011 Erwin Fischer

33

Ejemplo 5.7 Condicin Rango de Bsqueda


Listar todo el personal con un sueldo entre 200.000 y 300.000.
SELECT numEmpleado, nombre, apellido, cargo, salario FROM Empleado WHERE salario BETWEEN 200000 AND 300000;
numEmpleado SL21 SG5 nombre Jhon Susan apellido White Sarandon cargo Gerente Gerente salario 300000 240000

La condicin BETWEEN incluye los extremos del rango

2011 Erwin Fischer

34

Ejemplo 5.7 Condicin Rango de Bsqueda


Tambin existe una versin negada NOT BETWEEN. BETWEEN no agrega mucho poder expresivo a SQL. Tambin podramos escribir:
SELECT numEmpleado, nombre, apellido, cargo, salario FROM Empleado WHERE salario>=20000 AND salario <= 30000;

til aunque para un rango de valores.

2011 Erwin Fischer

35

Ejemplo 5.8 pertenencia de conjuntos (IN/NOT IN)


Listar todos los Gerentes y Supervisores
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE cargo IN (Gerente, Supervisor)

numEmpleado SL21 SG14 SG5

nombre Jhon David Susan

apellido White Ford Sarandon

cargo Gerente Supervisor Gerente

2011 Erwin Fischer

36

Ejemplo 5.8 pertenencia de conjuntos (IN/NOT IN)


Tambin hay una versin negada NOT IN. IN no agrega mucho poder expresivo a SQL. Tambin podramos escribir:
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE cargo = Gerente OR cargo = Supervisor);

IN es ms eficiente cuando el conjunto tiene muchos valores

2011 Erwin Fischer

37

Ejemplo 5.9 Patrn de caracteres


Encontrar todos los clientes con el string Glasgow en su direccin
SELECT numCliente, nombre, apellido, direccion, telefono FROM Cliente WHERE direccion like %Glasgow%;

numCliente nombre apellido direccion CR74 Mike Ritchie 63 Well St, Glasgow, G42 CR62 Mary Tregear 12 Park PI, Glasgow, G4 0QR

telefono 0141-943-7420 0141-225-7421

2011 Erwin Fischer

38

Ejemplo 5.9 Patrn de caracteres


SQL tiene dos smbolos especiales para correspondencia de patrones:
El caracter porcentaje % representa cualquier secuencia de cero o ms caracteres El caracter underscore _ representa cualquier carcter unitario.

LIKE %Glasgow% significa una

secuencia de caracteres de cualquier longitud conteniendo el string


Glasgow.

2011 Erwin Fischer

39

Ejemplo 5.10 Condicin de bsqueda NULL


La Tabla Visita contiene el detalle de todas las visitas a las propiedades.

numCliente numPropiedad Q56 IA14 Q76 Q56 Q62 Q56 IG4 IG4 IA14 IG36

Fecha Comentario 24-11-1999 muy pequeo 20-10-1999 muy lejos 26-11-1999 14-11-1999 no tiene saln 28-10-1999

2011 Erwin Fischer

40

Ejemplo 5.10 Condicin de bsqueda NULL


Listar el detalle de todas las visitas a la propiedad IG4 en la cual no hay comentarios.
Hay dos visitas a la propiedad IG4, una con comentario y otra sin comentario. tenemos que chequear por nulo explcitamente utilizando la palabra clave IS NULL:

SELECT * FROM Visita WHERE numPropiedad = IG4 AND comentario IS NULL

2011 Erwin Fischer

41

Ejemplo 5.10 Condicin de bsqueda NULL


numCliente numPropiedad Q56 IG4 Fecha Comentario 26-11-1999

La versin negada (IS NOT NULL) puede verificar por valores no-null.

2011 Erwin Fischer

42

Ejemplo 5.11 Ordenando por una columna

Listar los sueldos para todo el personal, dispuestos en orden descendente del sueldo.
SELECT numEmpleado, nombre, apellido, salario FROM Empleado ORDER BY salario DESC;

2011 Erwin Fischer

43

Ejemplo 5.11 Ordenando por una columna


SELECT numEmpleado, nombre, apellido, salario FROM Empleado ORDER BY salario DESC;

numEmpleado SL21 SG5 SG14 SG37 SA9 SL41

nombre Jhon Susan David Peter Mary Julie

apellido White Sarandon Ford Denver Lee Roberts

salario 300000 240000 180000 120000 90000 90000

2011 Erwin Fischer

44

Ejemplo 5.12 Ordenamiento por mltiples columnas

La tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093

2011 Erwin Fischer

45

Ejemplo 5.12 Ordenamiento por mltiples columnas

Produzca una lista abreviada de propiedades en orden por tipo de propiedad.


SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo;

2011 Erwin Fischer

46

Ejemplo 5.12 Ordenamiento por mltiples columnas


SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo;

Tabla resultado para el ejemplo 5.12, con una clave de ordenamiento


numPropiedad PA14 PG21 PL94 PG4 PG36 PG16 tipo hab renta Casa 6 650 Casa 5 600 Departamento 4 400 Departamento 3 350 Departamento 3 375 Departamento 4 450
2011 Erwin Fischer
47

Ejemplo 5.12 Ordenamiento por mltiples columnas


Cuatro departamentos en esta lista no hay una clave de ordenamiento menor especificada, el sistema arregla estas filas en cualquier orden. Para ordenar por renta, especifique el orden menor
SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo, renta DESC;

2011 Erwin Fischer

48

Ejemplo 5.12 Ordenamiento por mltiples columnas


SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo, renta DESC;

Tabla resultado para el ejemplo 5.12, con dos claves de ordenamiento


numPropiedad PA14 PG21 PG16 PL94 PG36 PG4 tipo hab renta Casa 6 650 Casa 5 600 Departamento 4 450 Departamento 4 400 Departamento 3 375 Departamento 3 350

2011 Erwin Fischer

49

Instruccin SELECT - Agregadas


El estndar ISO define cinco funciones agregadas:
Funcin
AVG COUNT SUM MAX MIN

Descripcin
Calcula el promedio de los valores de un campo determinado Devuelve el nmero de registros de la seleccionados Devuelve la suma de todos los valores de un campo determinado Devuelve el valor ms alto de un campo especificado Devuelve el valor ms bajo de un campo especificado

2011 Erwin Fischer

50

Instruccin SELECT - Agregadas


Cada uno funciona sobre un sola columna de una tabla y devuelve un solo valor. COUNT, MIN, y MAX se aplican a los campos numricos y no numricos, pero SUM y AVG se pueden utilizar en campos numricos solamente. Aparte de COUNT(*), cada funcin elimina los nulos primero y opera solamente en valores no nulos restantes.
2011 Erwin Fischer
51

Instruccin SELECT - Agregadas


COUNT(*) cuenta todas las filas de una tabla, sin importar si ocurren valores nulos o duplicados.
Puede utilizar DISTINCT antes del nombre de la columna para eliminar los duplicados.

DISTINCT no tiene efecto con MIN/MAX, pero puede tener con SUM/AVG.

2011 Erwin Fischer

52

Instruccin SELECT - Agregadas


Las funciones agregadas se pueden utilizar solamente en lista SELECT y en la clusula HAVING.
Si la lista SELECT incluye una funcin agregada y no hay una clusula GROUP BY, la lista SELECT no puede referirse a una columna con una funcin agregada. Por ejemplo, lo que sigue es ilegal: SELECT staffNo, COUNT(salary) FROM Staff;

2011 Erwin Fischer

53

Ejemplo 5.13 Uso de COUNT(*)


tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093

Cuntas propiedades cuestan ms de 350 por mes de alquiler?

2011 Erwin Fischer

54

Ejemplo 5.13 Uso de COUNT(*)


Cuntas propiedades cuestan ms de 350 por mes de alquiler?
SELECT COUNT(*) AS myCount FROM Propiedad WHERE renta > 350;

2011 Erwin Fischer

55

Ejemplo 5.14 Uso de COUNT(DISTINCT)


Tabla Visita
numCliente numPropiedad Q56 IA14 Q76 Q56 Q62 Q56 IG4 IG4 IA14 IG36 Fecha Comentario 24-11-1999 muy pequeo 20-11-1999 muy lejos 26-11-1999 14-11-1999 no tiene saln 28-10-1999

Cuntas diferentes propiedades se visitaron en noviembre de 1999?


2011 Erwin Fischer
56

Ejemplo 5.14 Uso de COUNT(DISTINCT)


SELECT COUNT(DISTINCT numPropiedad) AS myCount FROM Visita WHERE fecha BETWEEN 1-Nov-1999 AND 31-Nov-1999;

myCount 2

2011 Erwin Fischer

57

Ejemplo 5.15 Uso de COUNT y SUM


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Encuentre la cantidad de gerentes y el total de sus salarios

2011 Erwin Fischer

58

Ejemplo 5.15 Uso de COUNT y SUM

Encuentre la cantidad de gerentes y el total de sus salarios


SELECT COUNT(numEmpleado) AS myCount, SUM(salario) AS mySum FROM Empleado WHERE cargo = Gerente;

myCount

mySum 2 540000

2011 Erwin Limited Fischer 1995, 2005 Pearson Education

59

Ejemplo 5.16 Uso de MIN, MAX y AVG Tabla Empleado


numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Determinar el sueldo mnimo, mximo y el promedio de los empleados.

2011 Erwin Fischer

60

Ejemplo 5.16 Uso de MIN, MAX y AVG Determinar el sueldo mnimo, mximo y el promedio de los empleados. SELECT MIN(salario) AS myMin, MAX(salario) AS myMax, AVG(salario) AS myProm FROM Empleado;
myMin myMax myProm 90000 300000 170000
2011 Erwin Fischer
61

Instruccin SELECT - Agregacin


Use la clusula GROUP BY para obtener sub-totales. El SELECT y GROUP BY son fuertemente integrados: cada item en la lista SELECT debe tener un solo valor por grupo, y la clusula SELECT puede contener solamente:
Nombre de columnas Funciones agregadas constantes Expresiones involucrando combinaciones de las anteriores.
2011 Erwin Fischer
62

Instruccin SELECT - Agregacin


Todos los nombres de las columnas en la lista SELECT deben aparecer en la clusula GROUP BY a menos que el nombre se utilice solamente en una funcin agregada. Si WHERE se utiliza con el GROUP BY, WHERE se aplica primero, despus los grupos se forman de las filas restantes que satisfacen el predicado. La ISO considera dos Null como iguales para los propsitos del GROUP BY.

2011 Erwin Fischer

63

Ejemplo 5.17 Uso de GROUP BY


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar por cada oficina el nmero de empleados y el total de sus sueldos

2011 Erwin Fischer

64

Ejemplo 5.17 Uso de GROUP BY


SELECT numOficina, COUNT(numEmpleado) AS myCount, SUM(salario) AS mySum FROM Empleado GROUP BY numOficina ORDER BY numOficina;
numOficina myCount mySum B003 3 540000 B005 2 390000 B007 1 90000

2011 Erwin Fischer

65

Restringiendo los grupos Clausula HAVING


La clusula HAVING es diseada para ser utilizada con la clusula GROUP BY para restringir los grupos que aparecen en la tabla final. HAVING es similar a WHERE, pero WHERE filtra filas individuales mientras que HAVING filtra grupos.

Los nombres de las columnas en la clusula HAVING deben tambin aparecer en la lista GROUP BY o estar contenido dentro de una funcin agregada.
2011 Erwin Fischer
66

Example 5.18 Use of HAVING


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Para cada oficina con ms de 1 empleado, encuentre el nmero de empleados en cada oficina y la suma de sus sueldos.

2011 Erwin Fischer

67

Ejemplo 5.18 Uso de HAVING


SELECT numOficina,
COUNT(numEmpleado) AS myCount, SUM(salario) AS mySum FROM Empleado

GROUP BY numOficina
HAVING COUNT(numEmpleado) > 1 ORDER BY numOficina;

numOficina myCount mySum B003 3 540000 B005 2 390000

2011 Erwin Fischer

68

Subconsultas
Algunas instrucciones SQL pueden tener un SELECT incrustado dentro de l. Un subselect puede ser usado en una clusula WHERE y HAVING de un SELECT externo, donde se llama una subquery o consulta anidada. Los Subselects pueden tambin aparecer en las instrucciones INSERT, UPDATE, y DELETE.

2011 Erwin Fischer

69

Ejemplo 5.19 Usando una subconsulta con Igualdad


Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

Tabla Empleado
cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

numEmpleado SL21 SG37 SG14 SA9 SG5 SL41

nombre Jhon Peter David Mary Susan Julie

apellido White Denver Ford Lee Sarandon Roberts

Listar los empleados que trabajan en la oficina ubicada en 163 Main Street
2011 Erwin Fischer
70

Ejemplo 5.19 Usando una subconsulta con Igualdad


Listar los empleados que trabajan en la oficina ubicada en 163 Main Street
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE numOficina = (SELECT numOficina FROM Oficina WHERE calle = 163 Main St);

2011 Erwin Fischer

71

Ejemplo 5.19 Usando una subconsulta con Igualdad


El SELECT interno determina el numero de oficina para la oficina que se encuentra en 163 Main St (B003). El SELECT externo recupera el detalle de todos los empleados que trabajan en esa oficina. El SELECT externo entonces se convierte en:
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE numOficina = B003;

2011 Erwin Fischer

72

Ejemplo 5.19 Usando una subconsulta con Igualdad


Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie

Tabla Empleado
apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar los empleados que trabajan en la oficina ubicada en 163 Main Street
numEmpleado SG37 SG14 SG5 nombre Peter David Susan apellido Denver Ford Sarandon cargo Asistente Supervisor Gerente

Tabla resultado

2011 Erwin Fischer

73

Ejemplo 5.20 subconsulta con una funcin agregada.


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar a todos los empleados cuyo sueldo sea mayor que el sueldo promedio, e indique por cunto.
2011 Erwin Fischer
74

Ejemplo 5.20 subconsulta con una funcin agregada.


SELECT numEmpleado, nombre, apellido, cargo,
salario - (SELECT AVG(salario) FROM Empleado) AS Diferencia

FROM Empleado WHERE salario > (SELECT AVG(salario) FROM Empleado);

2011 Erwin Fischer

75

Ejemplo 5.20 subconsulta con una funcin agregada.


No puede escribir WHERE salario > AVG(salario) En lugar, utilice un subquery para encontrar el sueldo promedio (170000), y despus utilice un SELECT externo para encontrar sos empleados con sueldo mayores que el promedio:
SELECT numEmpleado, nombre, apellido, cargo,
salario - 170000 AS Diferencia

FROM Empleado WHERE salario > 170000);

2011 Erwin Fischer

76

Ejemplo 5.20 subconsulta con una funcin agregada.


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

SELECT numEmpleado, nombre, apellido, cargo, salario - (SELECT AVG(salario)


FROM Empleado) AS Diferencia

FROM Empleado WHERE salario > (SELECT AVG(salario) FROM Empleado);

numEmpleado SG14 SG5 SL21

nombre David Susan John

apellido Ford Sarandon White

cargo Diferencia Supervisor 10000 Gerente 70000 Gerente 130000


77

2011 Erwin Fischer

Reglas de Subconsulta
La clusula ORDER BY no se puede utilizar en una subconsulta (aunque puede ser

utilizada en un SELECT exterior).

La lista SELECT de una subconsulta debe consistir en un solo nombre o expresin de columna, a excepcin de las subconsultas que usan EXIST Por defecto, los nombres de columna en una subconsulta se refieren al nombre de la tabla en la clusula FROM del subquery. Puede referir a una tabla en el FROM de una consulta externa usando un alias.
2011 Erwin Fischer
78

Subquery Rules

Cuando una subconsulta es uno de los dos operandos en una comparacin, la subconsulta debe aparecer al lado derecho de la comparacin.

2011 Erwin Fischer

79

Ejemplo 5.21 Subconsultas anidadas: Uso de IN


Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie

Tabla Empleado
apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle 163 Main Street.
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow

Tabla Propiedad
codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21
80

2011 Erwin Fischer

Ejemplo 5.21 Subconsultas anidadas: Uso de IN


Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle 163 Main Street.
SELECT numPropiedad, calle, ciudad, codigoPostal, tipo, hab, renta FROM Propiedad WHERE numEmpleado IN

(SELECT numEmpleado FROM Empleado WHERE numOficina = (SELECT numOficina FROM Oficina WHERE calle = 163 Main Street));

numPropiedad PG21

calle 10 Dale Rd

ciudad Glasgow

codigoPostal tipo G12 Casa

hab renta 5 600

2011 Erwin Fischer

81

ANY y ALL
ANY y ALL pueden ser usadas con subconsultas que producen una sola columna de nmeros Si usa ALL, la condicin ser verdadera si es satisfecha por todos los valores producidos en la subconsulta Si usa ANY, la condicin ser verdadera si es satisfecha por uno o ms valores producidos por la subconsulta . Si la subconsulta es vacia, ALL retorna verdadero y ANY retorna falso SOME mude ser usado en lugar de ANY.
2011 Erwin Fischer
82

Ejemplo 5.22 Uso de ANY / SOME


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar todos los empleados cuyo salario es mayor que el salario de al menos un empleado de la sucursal B003.
2011 Erwin Fischer
83

Ejemplo 5.22 Uso de ANY / SOME


Listar todos los empleados cuyo salario es mayor que el salario de al menos un empleado de la sucursal B003.
SELECT numEmpleado, nombre, apellido, cargo, salario FROM Empleado WHERE salario > SOME (SELECT salario
FROM Empleado WHERE numOficina = B003);

2011 Erwin Fischer

84

Ejemplo 5.22 Uso de ANY / SOME


La consulta interna produce el conjunto {120000, 180000, 240000} y la consulta externa selecciona aquellos empleados cuyos sueldos son mayores que cualesquiera de los valores en este conjunto.
Tabla resultado del ejemplo 5.22
numEmpleado SL21 SG14 SG5 nombre Jhon David Susan apellido White Ford Sarandon cargo salario Gerente 300000 Supervisor 180000 Gerente 240000
85

2011 Erwin Fischer

Ejemplo 5.23 Uso de ALL


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003.
2011 Erwin Fischer
86

Ejemplo 5.23 Uso de ALL


Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003.
SELECT numEmpleado, nombre, apellido, cargo, salario FROM Empleado WHERE salario > ALL (SELECT salario FROM Empleado WHERE numOIficina =B003);

Tabla resultado del ejemplo 5.23


numEmpleado SL21 nombre apellido Jhon White
2011 Erwin Fischer

cargo Gerente

salario 300000
87

Consultas multi-tablas
Puede utilizar subqueries que proporcione columnas de resultado que vienen de la misma tabla.

Si las columnas de resultado vienen de ms de una tabla debe utilizar un join.


Para realizar el join, incluya ms de una tabla en la clusula FROM. Utilice la coma como separador e incluya la clusula WHERE para especificar la(s) columna(s) del join.
2011 Erwin Fischer
88

Consultas multi-tablas
Tambin es posible utilizar un alias para una tabla nombrada en la clusula FROM. El Alias es separado del nombre de la tabla con un espacio. El alias se puede utilizar para calificar nombres de la columna cuando hay ambigedad.
2011 Erwin Fischer
89

Ejemplo 5.24 Join simple


Tabla Cliente
numCliente CR76 CR56 CR74 CR62 nombre Jhon Aline Mike Mary apellido Kay Stewart Ritchie Tregear direccion 56 High ST, Londonn SW1 4EH 64 Fern Dr,. Glasgow, G42 OBL 63 Well St, Glasgow, G42 12 Park PI, Glasgow, G4 0QR telefono 0207-774-5632 0141-324-1825 0141-943-7420 0141-225-7421 tipoPref maxRent Departamento 425 Departamento 350 Casa 750 Departamento 600

Tabla Visita
numCliente numPropiedad CR56 PA14 CR76 CR56 CR62 CR56 PG4 PG4 PA14 PG36 Fecha Comentario 24-11-1999 muy pequeo 20-10-1999 muy lejos 26-11-1999 14-11-1999 no tiene saln 28-10-1999

Listar los nombres de todos los clientes que han visitado una propiedad y los comentarios efectuados al visitarla.
2011 Erwin Fischer
90

Ejemplo 5.24 Join simple


Listar los nombres de todos los clientes que han visitado una propiedad y los comentarios efectuados al visitarla.

SELECT c.numCliente, nombre, apellido, numPropiedad, comentario FROM Cliente c, Visita v WHERE c.numCliente = v.numCliente;

2011 Erwin Fischer

91

Ejemplo 5.24 Join simple


Solamente las filas de ambas tablas que tengan valores idnticos en las columnas numCliente (c.numCliente = v.numCliente) se incluyen en el resultado.
Tabla resultado ejemplo 5.24
numCliente CR56 CR56 CR56 CR62 CR76 nombre Aline Aline Aline Mary Jhon apellido Stewart Stewart Stewart Tregear Kay numPropiedad PA14 PG4 PG36 PA14 PG4 Comentario muy pequeo

no tiene saln muy lejos

Es equivalente a equi-join en Algebra Relacional.


2011 Erwin Fischer
92

Constucciones alternativas de JOIN


SQL provee maneras alternativas para especificar JOIN:
FROM Cliente c JOIN Visita v ON c.numCliente = v.numCliente FROM Cliente JOIN Visita USING numCliente FROM Cliente c NATURAL JOIN Visita v

En cada caso, FROM reemplaza el FROM y WHERE original. Sin embargo, el primero produce una tabla con dos columnas idnticas de numCliente.

2011 Erwin Fischer

93

Ejemplo 5.25 Ordenando un join


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21

Para cada oficina, listar los nmeros y nombres de los empleados que administran propiedades y las propiedades que ellos administran.
2011 Erwin Fischer
94

Ejemplo 5.25 Ordenando un join


Para cada oficina, listar los nmeros y nombres de los empleados que administran propiedades y las propiedades que ellos administran.

SELECT e.numOficina, e.numEmpleado, nombre, apellido, numPropiedad FROM Empleado e, Propiedad p WHERE e.numEmpleado = p.numEmpleado ORDER BY e.numOficina, e.numEmpleado, numPropiedad;

Tabla resultado ejercicio 5.25


numOficina B003 B005 B005 B005 B007 B007 numEmpleado SG5 SL21 SL21 SL21 SA9 SA9 nombre Susan Jhon Jhon Jhon Mary Mary apellido Sarandon White White White Lee Lee numPropiedad PG21 PA14 PG16 PL94 PG36 PG4
95

2011 Erwin Fischer

Ejemplo 5.26 Un join de tres tablas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21

Tabla Oficina
Para cada oficina, Listar los nmeros y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina est ubicada y las propiedades que ellos administran.
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

2011 Erwin Fischer

96

Ejemplo 5.26 Un join de tres tablas


numOficina B003 B005 B005 B005 B007 B007 numEmpleado SG5 SL21 SL21 SL21 SA9 SA9 nombre Susan Jhon Jhon Jhon Mary Mary

Tabla resultado ejercicio 5.25


apellido Sarandon White White White Lee Lee numPropiedad PG21 PA14 PG16 PL94 PG36 PG4

Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

Para cada oficina, Listar los nmeros y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina est ubicada y las propiedades que ellos administran.
2011 Erwin Fischer
97

Ejemplo 5.26 Un join de tres tablas


Para cada oficina, Listar los nmeros y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina est ubicada y las propiedades que ellos administran.
SELECT e.numOficina, e.numEmpleado, nombre, apellido, numPropiedad FROM Empleado e, Propiedad p, Oficina o WHERE e.numEmpleado = p.numEmpleado AND o.numOficina = e.numOficina ORDER BY e.numOficina, e.numEmpleado, numPropiedad;

2011 Erwin Fischer

98

Ejemplo 5.26 Un join de tres tablas


Tabla resultado ejercicio 5.26
numOficina B003 B005 B005 B005 B007 B007 ciudad Glasgow Aberdeem Aberdeem Aberdeem London London numEmpleado SG5 SL21 SL21 SL21 SA9 SA9 nombre Susan Jhon Jhon Jhon Mary Mary apellido Sarandon White White White Lee Lee numPropiedad PG21 PA14 PG16 PL94 PG36 PG4

Formulacin alternativa para FROM y WHERE:


FROM (Oficina o JOIN Empleado e USING numOficina) AS oe JOIN Propiedad p USING numEmpleado

2011 Erwin Fischer

99

Ejemplo 5.27 Agrupando por mltiples columnas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab Casa Departamento Departamento Departamento Casa Departamento 6 4 3 3 5 4 renta 650 400 350 375 600 450 numPropietario C046 C087 C040 C093 C087 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL41

Encuentre el total de propiedades manejadas por cada empleado.

2011 Erwin Fischer

100

Ejemplo 5.27 Agrupando por mltiples columnas


Encuentre el total de propiedades manejadas por cada empleado.
SELECT e.numOficina, s.numEmpleado, COUNT(*) AS myCount FROM Empleado e, Propiedad p WHERE e.numEmpleado = p.numEmpleado GROUP BY e.numOficina, e.numEmpleado ORDER BY e.numOficina, e.numEmpleado;

2011 Erwin Fischer

101

Ejemplo 5.27 Agrupando por mltiples columnas


SELECT e.numOficina, s.numEmpleado, COUNT(*) AS myCount FROM Empleado e, Propiedad p WHERE e.numEmpleado = p.numEmpleado GROUP BY e.numOficina, e.numEmpleado ORDER BY e.numOficina, e.numEmpleado;

Tabla Resultado del ejemplo 5.27


numOficina B003 B005 B005 B007 numEmpleado SG5 SL21 SL41 SA9 myCount 1 2 1 2

2011 Erwin Fischer

102

Calculando un Join
El procedimiento para generar resultados de un join es:
1. Forme el producto cartesiano de las tablas nombradas en la clusula FROM. 2. Si hay una clusula WHERE, aplique la condicin de bsqueda a cada fila de la tabla del producto, conservando esas filas que satisfagan la condicin

3. Para cada fila restante, determine el valor de cada item en lista SELECT para producir una sola fila en la tabla resultado.

2011 Erwin Fischer

103

Calculando un Join
4. Si se ha especificado DISTINCT, eliminar cualquier
fila duplicada de la tabla resultado. 5. Si hay una clusula ORDER BY, se requiere ordenar la tabla resultado.

SQL provee una forma especial de SELECT para el producto Cartesiano:


SELECT [DISTINCT | ALL] {* | columnList} FROM Tabla1 CROSS JOIN Tabla2

2011 Erwin Fischer

104

Outer Joins
Si una fila de una de las tablas a unir no coincide, la fila es omitida de la tabla resultante. El outer join retiene las filas que no satisfacen la condicin. Considere las siguientes tablas:
Tabla Oficina1 Tabla Propiedad1

numOficina B003 B004 B002

ciudad Glasgow Bristol London

numPropiedad PA14 PL94 PG4

ciudad Aberdeem London Glasgow

2011 Erwin Fischer

105

Outer Joins
El (inner) join de estas dos tablas:

SELECT o.*, p.* FROM Oficina1 o, Propiedad1 p WHERE o.ciudad = p.ciudad;


Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1

numOficina ciudad numPropiedad ciudad B003 Glasgow PG4 Glasgow B002 London PL94 London
2011 Erwin Fischer
106

Outer Joins
Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1

numOficina ciudad numPropiedad B003 Glasgow PG4 B002 London PL94

ciudad Glasgow London

La tabla resultado tiene dos filas donde son iguales las ciudades.
No hay filas que corresponden a las oficinas en Bristol y Aberdeen. Para incluir filas incomparables en la tabla resultado, utilice un join externo (Outer Join).
2011 Erwin Fischer
107

Ejemplo 5.28 Left Outer join


Tabla Oficina1 Tabla Propiedad1

numOficina B003 B004 B002

ciudad Glasgow Bristol London

numPropiedad PA14 PL94 PG4

ciudad Aberdeem London Glasgow

Liste las oficinas y las Propiedades que estn en la misma ciudad junto con cualquier oficina incomparable.
SELECT o.*, p.* FROM Oficina1 o LEFT JOIN Propiedad1 p ON o.ciudad = p.ciudad;
2011 Erwin Fischer
108

Ejemplo 5.28 Left Outer join


Incluye aquellas filas de la primera tabla (left) que no coinciden con las filas de la segunda tabla (derecha) .
Las columnas de la segunda tabla son completadas con valores Nulos .
Tabla resultado del ejemplo 5.28

numOficina B003 B004 B002

ciudad Glasgow Bristol London

numPropiedad PG4 NULL PL94

ciudad Glasgow NULL London


109

2011 Erwin Fischer

Ejemplo 5.29 Right Outer join


Tabla Oficina1 Tabla Propiedad1

numOficina B003 B004 B002

ciudad Glasgow Bristol London

numPropiedad PA14 PL94 PG4

ciudad Aberdeem London Glasgow

Liste los sucursales y las propiedades en la misma ciudad y cualquier propiedad incomparable (ciudad unmatched). SELECT o.*, p.* FROM Oficina1 b RIGHT JOIN Propiedad1 p ON b.ciudad = p.ciudad;

2011 Erwin Fischer

110

Example 5.29 Right Outer Join


El Right Outer join incluye aquellas filas de la segunda tabla (derecha) que no coinciden con la las filas de la primera tabla (izquierda). Las columnas de la primera tabla son completadas con valores Nulos.
Tabla resultado del ejemplo 5.29

numOficina NULL B002 B003

ciudad NULL London Glasgow

numPropiedad PA14 PL94 PG4

ciudad Aberdeem London Glasgow

2011 Erwin Fischer

111

Ejemplo 5.30 Full Outer Join


Listar las oficinas y las propiedades en la misma ciudad y cualquier oficina o propiedad incomparable
SELECT b.*, p.* FROM Branch1 b FULL JOIN PropertyForRent1 p ON b.bCity = p.pCity;

2011 Erwin Fischer

112

Ejemplo 5.30 Full Outer Join


Incluye no solamente aquellas filas que tienen la misma cuidad, si no tambin aquellas filas de ambas tablas que no coinciden. Las columnas de las tablas que coinciden son completadas con Null.
Tabla resultado del ejemplo 5.30
numOficina NULL B003 B004 B002 ciudad NULL Glasgow Bristol London numPropiedad PA14 PG4 NULL PL94 ciudad Aberdeem Glasgow NULL London
113

no

2011 Erwin Fischer

EXISTS y NOT EXISTS


EXISTS y NOT EXISTS estn para ser usados solamente con subqueries. Produce un resultado verdadero/falso.

Verdadero si y solo si existe por lo menos una fila en la tabla resultado retornada por la subquery. Falso si la subconsulta retorna una tabla vaca.
NOT EXISTS es el opuesto de EXISTS.

2011 Erwin Fischer

114

EXISTS y NOT EXISTS


Como (NO) EXISTS verifica solamente por la existencia o la no-existencia de filas en la tabla resultado de la subconsulta, la subquery puede contener cualquier nmero de columnas. Las subconsultas comunes que siguen a (NOT) EXISTS son de la forma:

(SELECT * ...)

2011 Erwin Fischer

115

Ejemplo 5.31 Consulta usando EXIST


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

Listar todos los empleados que trabajan en alguna oficina de Londres.

2011 Erwin Fischer

116

Ejemplo 5.31 Consulta usando EXIST


Listar todos los empleados que trabajan en alguna oficina de Londres.
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e WHERE EXISTS (SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado AND ciudad = London);

2011 Erwin Fischer

117

Ejemplo Consulta usando EXIST


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

5.31
Tabla Oficina
calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

numOficina B005 B007 B003 B004 B002

SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e WHERE EXISTS (SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado AND ciudad = London);

Tabla resultado Ejemplo 5.31

numEmpleado SA9

nombre apellido Mary Lee


2011 Erwin Fischer

cargo Asistente
118

Ejemplo 5.31 Consulta usando EXIST


Note que la condicin de bsqueda e.numOficina = o.numOficina es necesaria para considerar el correcto registro de oficina para cada empleado

Si se omite, listara todos los registros de empleado, debido a que la siguiente subconsulta:
SELECT * FROM Oficina WHERE ciudad=London

Seria siempre verdad y la consulta quedara:


SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE true;
2011 Erwin Fischer

119

Ejemplo 5.31 Consulta usando EXIST


Podria tambin escribir esta consulta a travs de un join:
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e, Oficina o WHERE e.numOficina = o.numOficina AND city = London;

2011 Erwin Fischer

120

Union, Intersect, y Difference (Except)


Puede utilizar operaciones de conjuntos normales tales como unin, interseccin, y diferencia para combinar resultados de dos o ms consultas en una sola tabla resultado. La unin de dos tablas, A y B, es una tabla que contiene todas las filas en A o B o ambos.

La interseccin es una tabla que contiene todas las filas comunes a A y a B.


La diferencia es una tabla que contiene todas las filas en A pero no en B. Dos tablas deben ser unin compatible.
2011 Erwin Fischer

121

Union, Intersect, y Difference (Except)


El formato de la clusula del operador de conjunto en cada caso es:
op [ALL] [CORRESPONDING [BY {columna1 [, ...]}]]

Si CORRESPONDING BY es especificado, entonces la operacin de conjunto es realizada sobre la o las columnas nombradas Si CORRESPONDING es especificado sin el BY, la operacin de conjunto se aplica sobre las columnas comunes en ambas tablas .
2011 Erwin Fischer
122

Union, Intersect, y Difference (Except)


Si se especifica ALL el resultado puede incluir filas duplicadas.

Algunos dialectos no soportan INTERSECT y EXCEPT; otros usan MINUS en lugar de


EXCEPT

2011 Erwin Fischer

123

Union, Intersect, y Difference (Except)

2011 Erwin Fischer

124

Ejemplo 5.32 Uso de UNION


Tabla Propiedad
numPropiedad PA14 PL94 PL95 PG21 calle 16 Holhead 6 Argvill St. 9 Argvill St. 10 Dale Rd ciudad Aberdeem London London Glasgow codigoPostal renta AB7 5SU 650 NW2 400 NW2 800 G12 600

Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle ciudad 16 Holhead Aberdeem 6 Argvill St. London 6 Lawrence StGlasgow 2 Manor Rd Glasgow 10 Dale Rd Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propiedad.
2011 Erwin Fischer
125

Ejemplo 5.32 Uso de UNION


Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propiedad.

(SELECT ciudad
FROM Oficina WHERE ciudad IS NOT NULL) UNION (SELECT ciudad FROM Propiedad WHERE ciudad IS NOT NULL);
2011 Erwin Fischer
126

Ejemplo 5.32 Uso de UNION


O
(SELECT * FROM Oficina WHERE ciudad IS NOT NULL) UNION CORRESPONDING BY ciudad (SELECT * FROM Propiedad WHERE ciudad IS NOT NULL);

2011 Erwin Fischer

127

Ejemplo 5.32 Uso de UNION


Esta consulta es ejecutada produciendo el resultado de la primera consulta y el resultado de la segunda consulta, para finalmente mezclar el resultado en una sola tabla
Tabla resultado Ejemplo 5.32

ciudad Aberdeem London Glasgow Bristol


2011 Erwin Fischer
128

Ejemplo 5.33 INTERSECT


Tabla Propiedad
numPropiedad PA14 PL94 PL95 PG21 calle 16 Holhead 6 Argvill St. 9 Argvill St. 10 Dale Rd ciudad Aberdeem London London Glasgow

Uso

de

codigoPostal renta AB7 5SU 650 NW2 400 NW2 800 G12 600

Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle ciudad 16 Holhead Aberdeem 6 Argvill St. London 6 Lawrence StGlasgow 2 Manor Rd Glasgow 10 Dale Rd Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12

Construya un listado de todas las ciudades en que hay una oficina y una propiedad.
2011 Erwin Fischer
129

Ejemplo 5.33 INTERSECT

Uso

de

Construya un listado de todas las ciudades en que hay una oficina y una propiedad. (SELECT ciudad FROM Oficina)
INTERSECT (SELECT ciudad FROM Propiedad);

2011 Erwin Fischer

130

Ejemplo 5.33 INTERSECT


O

Uso

de

(SELECT * FROM Oficina) INTERSECT CORRESPONDING BY ciudad (SELECT * FROM Propiedad);

2011 Erwin Fischer Pearson Education Limited 1995, 2005

131

Ejemplo 5.33 INTERSECT

Uso

de

Podramos reescribir esta consulta, sin el operador INTERSECT:


SELECT O.city FROM Oficina o Propiedad p WHERE o.ciudad = p.ciudad;

O:

SELECT DISTINCT ciudad FROM Oficina o WHERE EXISTS (SELECT * FROM Propiedad p WHERE p.ciudad = o.ciudad);

2011 Erwin Fischer

132

Ejemplo EXCEPT

5.34

Uso

de

Listar todas las ciudades en donde haya oficinas, pero no propiedades.


(SELECT ciudad FROM Oficina) EXCEPT (SELECT ciudad FROM Propiedad);

O
(SELECT * FROM Oficina) EXCEPT CORRESPONDING BY ciudad (SELECT * FROM Propiedad);
2011 Erwin Fischer
133

Ejemplo EXCEPT

5.34

Uso

de

Podemos reescribir esta consulta sin el operador EXCEPT:


SELECT DISTINCT ciudad FROM Oficina WHERE ciudad NOT IN (SELECT ciudad FROM Propiedad);

O
SELECT DISTINCT ciudad FROM Oficina o WHERE NOT EXISTS (SELECT * FROM Propiedad p WHERE p. ciudad = b. ciudad );

2011 Erwin Fischer

134

Actualizaciones a la Base de datos


El lenguaje SQL puede ser usado para consultar la base de datos como tambin para modificar los datos.

Tres comandos SQL para modificar el contenido de las tablas en la base de datos:
Insert Agrega nuevas filas de datos a una tabla Delete Elimina filas de datos de una tabla Update Modifica los datos existentes en una tabla.

2011 Erwin Fischer

135

INSERT
INSERT INTO Nombretabla [ (listaDeColumnas) ]
VALUES (listaDeValores)

listaDeColumnas es opcional; si se omite, SQL asume la lista de todas las columnas en el orden original. todas las columnas omitidas en la lista deben haber sido declaradas NULL cuando la tabla fue creada, a menos que se haya utilizado la opcin DEFAULT cuando se creo la columna.

2011 Erwin Fischer

136

INSERT
La listaDeValores debe coincidir con listaDeColumnas como sigue: El nmero de tems de cada lista debe ser el mismo Debe haber una correspondencia directa en la posicin de los tems en las dos listas, El tipo de datos de cada item en listaDeValores debe ser compatible con el tipo de datos de la correspondiente columna.
2011 Erwin Fischer

137

Ejemplo 5.34 INSERT . . . VALUES


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Insertar una nueva fila en la tabla Empleado, entregando los datos para todas las columnas:
2011 Erwin Fischer
138

Ejemplo 5.34 INSERT . . . VALUES


Insertar una nueva fila en la tabla Empleado, entregando los datos para todas las columnas:
Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

INSERT INTO Empleado VALUES (SG16, Alan, Brown, Asistente, M, Date1957-05-25, 83000, B003);

2011 Erwin Fischer

139

Ejemplo 5.35 INSERT usando valores por defecto


Insertar una nueva fila en la tabla Empleado suministrando datos para todas las columnas obligatorias. numEmpleado, nombre, apellido, cargo, salario y numOficina.

INSERT INTO Empleado (numEmpleado, nombre, apellido, cargo, salario, numOficina) VALUES (SG44, Amme, Jones, Asistente, 8100, B003);
O

INSERT INTO Empleado VALUES (SG44, Anne, Jones, Asistente, NULL, NULL, 8100, B003);

2011 Erwin Fischer

140

INSERT SELECT
La segunda forma de la instruccin INSERT permite que mltiples filas sean copiadas de una o ms tablas a otra, y tiene el siguiente formato: INSERT INTO NombreTabla [ (listaDeColumnas) ]
SELECT ...

2011 Erwin Fischer

141

Ejemplo SELECT

5.35

INSERT

Asuma que hay una tabla EmpleadoTotalPropiedad, que contiene los nombres de los empleados y el nmero de propiedades que ellos manejan: EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp)
Poblar la tabla EmpleadoTotalPropiedad usando los detalles de la tabla Empleado y la tabla Propiedad.

2011 Erwin Fischer

142

Ejemplo SELECT
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr

5.35

INSERT

Tabla Propiedad
ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21

Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Poblar la tabla EmpleadoTotalPropiedad usando los EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp)
2011 Erwin Fischer

detalles de la tabla Empleado y la tabla Propiedad.

143

Ejemplo SELECT

5.35

INSERT

INSERT INTO EmpleadoTotalPropiedad (SELECT e.numEmpleado, Nombre, Apellido, COUNT(*) FROM Empleado e, Propiedad p WHERE e.numEmpleado = p.numEmpleado Group BY e.numempleado , nombre, apellido) UNION (SELECT numEmpleado, nombre, apellido, 0 FROM Empleado e WHERE NOT EXIST (SELECT * FROM Propiedad p WHERE e.numEmpleado = p.numEmpleado));

2011 Erwin Fischer

144

Ejemplo SELECT

5.35

INSERT

Tabla resultado Ejemplo 5.35


numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido totalProp White 3 Denver 0 Ford 0 Lee 2 Sarandon 1 Roberts 0

Si la segunda parte de la UNIN se omite, excluye a los empleados que no manejan actualmente ninguna propiedad.
2011 Erwin Fischer
145

UPDATE
UPDATE NombreTabla SET columnName1 = dataValue1 [, columnName2 = dataValue2...] [WHERE searchCondition]

NombreTabla puede ser el nombre de una tabla base o una vista actualizable. La clusula SET especifica los nombres de una o ms columnas a ser actualizadas
2011 Erwin Fischer
146

UPDATE

La clusula WHERE es opcional:


Si se omite, las columnas nombradas sern actualizadas para todas las filas en tabla; Si se especifica, solamente esas filas que satisfacen la searchCondition son actualizadas.

El(los) nuevo(s) dataValue(s) debe(n) ser compatible con el tipo de datos para la columna correspondiente.
2011 Erwin Fischer
147

Ejemplo 5.38/39 UPDATE todas las filas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

D a todos los Empleados un aumento de sueldo del 3%. D a todos los Gerentes un aumento de sueldo del 5%.

2011 Erwin Fischer

148

Ejemplo 5.38/39 UPDATE todas las filas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

D a todos los Empleados un aumento de sueldo del 3%. UPDATE Empleado


SET salario = salario*1.03;

2011 Erwin Fischer

149

Ejemplo 5.38/39 UPDATE todas las filas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

D a todos los Gerentes un aumento de sueldo del 5%. UPDATE Empleado


SET salario = salario*1.05 WHERE cargo = Gerente;
2011 Erwin Fischer
150

Ejemplo 5.38/39 UPDATE mltiples columnas


Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Promueva a David Ford (numEmpleado=SG14) a Gerente y cambie su salario a 190.000.

2011 Erwin Fischer

151

Ejemplo 5.38/39 UPDATE mltiples columnas


Tabla Empleado
cargo Gerente Asistente Supervisor Asistente Gerente Asistente numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005

Promueva a David Ford (numEmpleado=SG14) a Gerente y cambie su salario a 190.000.

UPDATE Empleado
SET cargo = Gerente, salario = 190000 WHERE numEmpleado = SG14;

2011 Erwin Fischer

152

DELETE
DELETE FROM NombreTabla [WHERE searchCondition]

NombreTabla puede ser una tabla base o una vista actualizable. searchCondition es opcional; si se omite, todas las filas son eliminadas de la tabla. Este no elimina la tabla. Si se especifica search_condition solamente se eliminan aquellas filar que satisfacen la condicin
2011 Erwin Fischer
153

Ejemplo 5.41/42 DELETE Filas especificas


Tabla Visita
numCliente CR56 CR76 CR56 CR62 CR56 numPropiedad PA14 PG4 PG4 PA14 PG36 Fecha 24-11-1999 20-10-1999 26-11-1999 14-11-1999 28-10-1999 Comentario muy pequeo muy lejos no tiene saln

Suprima todas las visitas que se relacionen con la propiedad PG4.


Elimine todos los registros de la tabla Visita.
2011 Erwin Fischer
154

Ejemplo 5.41/42 DELETE Filas especificas


Tabla Visita
numCliente CR56 CR76 CR56 CR62 CR56 numPropiedad PA14 PG4 PG4 PA14 PG36 Fecha 24-11-1999 20-10-1999 26-11-1999 14-11-1999 28-10-1999 Comentario muy pequeo muy lejos no tiene saln

Suprima todas las visitas que se relacionen con la propiedad PG4.


DELETE FROM Visita
WHERE numPropiedad = PG4;

2011 Erwin Fischer

155

Ejemplo 5.41/42 DELETE Filas especificas


Tabla Visita
numCliente CR56 CR76 CR56 CR62 CR56 numPropiedad PA14 PG4 PG4 PA14 PG36 Fecha 24-11-1999 20-10-1999 26-11-1999 14-11-1999 28-10-1999 Comentario muy pequeo muy lejos no tiene saln

Elimine todos los registros de la tabla Visita.


DELETE FROM Visita;

2011 Erwin Fischer

156

Unidad I Introduccin a las Bases de datos

Fin de la Unidad

2011 Erwin Fischer

157

la notacin BNF (forma Backus-Naur)


Las gramticas tienen mtodos alternativos tiles para desplegar las producciones
<oracin> <sujeto> <predicado> <verbo> <adverbio> ::= ::= ::= ::= ::= <sujeto> <predicado> Juan | Julia <verbo> <adverbio> maneja | corre descuidadamente | frecuentemente

2011 Erwin Fischer

158

X/Open Company
X/Open Company, Ltd. era un consorcio fundado en 1984 para identificar y promover estndares abiertos en el campo de la tecnologa de informacin. X/Open tambin manej la marca registrada de UNIX a partir de 1993 a 1996, cuando X/Open se combin con la fundacin abierta del software Open Software Foundation (OSF) para formar The Open Group

2011 Erwin Fischer

159

Unidad I Introduccin a las Bases de datos

Fin de la Unidad

2011 Erwin Fischer

160

Você também pode gostar