Comandos SQL

159
1 2011 Erwin Fischer Bases de Datos Unidad El Lenguaje SQL

description

Este es una presentación sobre algunos comandos SQL

Transcript of Comandos SQL

Page 1: Comandos SQL

1 2011 Erwin Fischer

Bases de Datos

Unidad

El Lenguaje SQL

Page 2: Comandos SQL

2 2011 Erwin Fischer

Unidad - SQL - ObjetivosUnidad - SQL - Objetivos

• Entender el propósito e importancia del Lenguaje de Consulta Estructurado SQL.

• Como recuperar datos de una base de datos usando la instrucción SELECT

– Uso de condición WHERE compuesta.

– Ordenando resultados usando ORDER BY.

Page 3: Comandos SQL

3 2011 Erwin Fischer

Unidad - SQL - ObjetivosUnidad - SQL - Objetivos

– Uso de funciones agregadas.– Agrupación de datos usando GROUP

BY y HAVING.– Uso de Subconsultas.– Combinación de Tablas. – Realizando operaciones de conjunto

(UNION, INTERSECT, EXCEPT).

Page 4: Comandos SQL

4 2011 Erwin Fischer

Unidad - SQL - ObjetivosUnidad - SQL - Objetivos

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

Page 5: Comandos SQL

5 2011 Erwin Fischer

Objetivos de SQLObjetivos de SQL

• Idealmente un lenguaje de base de datos debería permitir a un usuario:– Crear la base de datos y las estructuras de

relaciones– Realizar tareas básicas de administración de

datos, – Realizar consultas simples y complejas– Debe realizar estas tareas con mínimo esfuerzo

del usuario– Su estructura de comandos y sintaxis debe ser

fácil de aprender – Debe ser portable

Page 6: Comandos SQL

6 2011 Erwin Fischer

Objetivos de SQLObjetivos de SQL

• SQL es un lenguaje orientado a transformación con dos principales componentes:– 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

• Hasta 1999 SQL no contenía comando para control de flujo. Estos tenían que ser implementados usando lenguajes de programación o un Lenguaje de control de tareas, o interactivamente por las decisiones del usuario.

Page 7: Comandos SQL

7 2011 Erwin Fischer

Objetivos de SQLObjetivos de SQL

• SQL es un lenguaje relativamente fácil de aprender:– Es un lenguaje no procedural: se

especifica que información se requiere, en lugar de, como obtenerla,

– Es un lenguaje esencialmente de formato libre

Page 8: Comandos SQL

8 2011 Erwin Fischer

Objetivos de SQLObjetivos de SQL

• Consiste de palabras en ingles tales como :

1) CREATE TABLE Empleado(numEmpleado VARCHAR(5),

nombre VARCHAR(15), salario DECIMAL(7,2));

2) INSERT INTO Empleado VALUES (‘SG16’, ‘Brown’, 8300);

3) SELECT numEmpleado, nombre, salario FROM Empleado WHERE salario > 10000;

Page 9: Comandos SQL

9 2011 Erwin Fischer

Objetivos de SQLObjetivos de SQL

• Puede ser usado por un rango de usuarios DBAs, administradores, desarrolladores de aplicaciones, y otros tipos de usuarios finales.

• Existe un estándar ISO para SQL, haciéndolo el lenguaje estándar formal y de facto para bases de datos relacionales

Page 10: Comandos SQL

10 2011 Erwin Fischer

Historia de SQLHistoria de SQL

• En 1974, D. Chamberlin (Laboratorio de IBM San José) definió un lenguaje llamado ‘Structured English Query Language’ (SEQUEL).

• Una versión revisada, SEQUEL/2, fue definida en 1976 pero el nombre fue posteriormente cambiado a SQL por razones legales.

Page 11: Comandos SQL

11 2011 Erwin Fischer

Historia de SQLHistoria de SQL

• Aun pronunciado ‘see-quel’, a pesar que la pronunciación oficial es ‘S-Q-L’.

• IBM posteriormente produjo un Prototipo de un DBMS llamado System R, basado en SEQUEL/2.

• Las raíces de SQL, están en SQUARE (Specifying Queries as Relational Expressions), el cual es anterior al proyecto System R.

Page 12: Comandos SQL

12 2011 Erwin Fischer

Historia de SQLHistoria de SQL

• Al final de los 70, aparecía ORACLE y fue probablemente el primer RDBMS basado en SQL

• En 1987, ANSI e ISO publicaron un estándar inicial para SQL.

• En 1989, ISO publicó un anexo que definió las características de mejoras de integridad.

• En 1992, ocurrió la primera revisión principal del estándar ISO, referido como SQL2 o SQL/92.

• En 1999, SQL:1999 fue liberado con soporte para administración de datos orientado a objeto.

• Al final de 2003, fue liberado SQL:2003.

Page 13: Comandos SQL

13 2011 Erwin Fischer

Importancia de SQLImportancia de SQL

• SQL pasa a formar parte de la arquitecturas de aplicaciones tales como IBM’s Systems Application Architecture (SAA).

• Es una opción estratégica de muchas organizaciones grandes e influyentes (Ej: X/OPEN).

• SQL es el estándar federal para el tratamiento de la información (FIPS) del cual se requiere la conformidad para todas las ventas de bases de datos al gobierno americano.

Page 14: Comandos SQL

14 2011 Erwin Fischer

Importancia de SQLImportancia de SQL

• El SQL se utiliza en otros estándares e incluso influencia el desarrollo de otros estándares como herramienta de definicion. Los ejemplos incluyen:

– El sistema IRDS (Information Resource Dictionary System, sistema de diccionarios para recursos de información de ISO).

– El estándar RDA (Remote Data Access, acceso remoto a datos).

Page 15: Comandos SQL

15 2011 Erwin Fischer

Escribiendo Comandos SQLEscribiendo Comandos SQL

• Una instrucción 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.

Page 16: Comandos SQL

16 2011 Erwin Fischer

Escribiendo Comandos SQLEscribiendo Comandos SQL

• La mayoría de los componentes de una instrucción SQL no distinguen entre mayúsculas y minúsculas excepto en los datos de caracteres literales.

• Son mas legibles con indentación y alineación: – Cada cláusula debería comenzar en una nueva

línea.– El comienzo de una cláusula debe alinearse

con el comienzo de otras cláusulas.– Si la cláusula tiene varias partes, cada una

debe aparecer en una línea separada e indentada bajo comienzo de la cláusula.

Page 17: Comandos SQL

17 2011 Erwin Fischer

Escribiendo Comandos SQLEscribiendo Comandos SQL

• Uso de la notación BNF extendida:

– Las letras mayúsculas representan palabras reservadas.

– Las letras minúsculas representan palabras definidas por el usuario.

– | indica una elección entre alternativas.– {} Indican un elemento requerido.– [] Indican un elemento opcional.– … Indica repetición opcional (0 o más

veces).

Page 18: Comandos SQL

18 2011 Erwin Fischer

LiteralesLiterales

• Los literales son constantes usadas en sentencias SQL.

• Todos los literales no numéricos deben estar encerrados en comillas simple (ej. ‘London’).

• Todos los literales numéricos no deben estar encerrados en comillas (ej. 650.00).

Page 19: Comandos SQL

19 2011 Erwin Fischer

Instrucción SELECTInstrucción SELECT

SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] }

FROM NombreTabla [alias] [, ...][WHERE condición][GROUP BY listaColumna] [HAVING condición][ORDER BY listaColumna]

Page 20: Comandos SQL

20 2011 Erwin Fischer

Instrucción SELECTInstrucción 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

condición. SELECT Especifica que columnas van a

aparecer en la salida ORDER BY Especifica el orden de la salida.

Page 21: Comandos SQL

21 2011 Erwin Fischer

Instrucción SELECTInstrucción SELECT

• El orden de las cláusulas no puede ser cambiado.

• Solamente SELECT y FROM son obligatorias.

Page 22: Comandos SQL

22 2011 Erwin Fischer

Ejemplo 5.1 Todas las columnas, Ejemplo 5.1 Todas las columnas, Todas las filasTodas las filas

Listar todos los detalles de Empleados.

• SELECT numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, numOficina

FROM Empleado;

• Podemos usar * Como una abreviación para ‘todas las columnas’:

SELECT *FROM Empleado;

Page 23: Comandos SQL

23 2011 Erwin Fischer

Ejemplo 5.1 Todas las columnas, Ejemplo 5.1 Todas las columnas, Todas las filasTodas las filas

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

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

FROM Empleado

Page 24: Comandos SQL

24 2011 Erwin Fischer

Ejemplo 5.2Ejemplo 5.2 Recuperar colum Recuperar columnasnas especificas, todas las filasespecificas, todas las filas

Producir una lista de salarios para todos los empleados, mostrando solamente, numEmpleado, nombre, apellido y salario.

SELECT numEmpleado, nombre, apellido, salarioFROM Empleado;

Page 25: Comandos SQL

25 2011 Erwin Fischer

Ejemplo 5.2Ejemplo 5.2 Recuperar colum Recuperar columnasnas especificas, todas las filasespecificas, todas las filas

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

SELECT numEmpleado, nombre, apellido, salarioFROM Empleado;

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Page 26: Comandos SQL

26 2011 Erwin Fischer

Ejemplo 5.3 Ejemplo 5.3 Uso de Uso de DISTINCTDISTINCT

Listar el numero de propiedad de todas las propiedades que han sido visitadas

SELECT numPropiedadFROM Visita;

Page 27: Comandos SQL

27 2011 Erwin Fischer

Ejemplo 5.3 Ejemplo 5.3 Uso de DISTINCT Uso de DISTINCT

Uso de DISTINCT para eliminar duplicados:

SELECT DISTINCT numPropiedadFROM Visita;

Page 28: Comandos SQL

28 2011 Erwin Fischer

Ejemplo 5.3 Ejemplo 5.3 Uso de Uso de DISTINCTDISTINCT

Tabla 1‑1 Tabla resultado con duplicados

numPropiedadIA14

IG4

IG4

IA14 IG36

numPropiedadIA14

IG4 IG36

Tabla 1‑2 Tabla resultado eliminando duplicados

SELECT numPropiedad FROM Visita;

SELECT DISTINCT numPropiedadFROM Visita;

Page 29: Comandos SQL

29 2011 Erwin Fischer

Ejemplo 5.4 Ejemplo 5.4 Campos Campos calculadcalculadososListar el salario mensual para todos los empleados, mostrando el numero de empleado, nombre, apellido y el detalle del salario

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

© Pearson Education Limited 1995, 2005

numEmpleado nombre apellido col4

SL21 Jhon White 25000SG37 Peter Denver 10000SG14 David Ford 15000SA9 Mary Lee 7500SG5 Susan Sarandon 20000SL41 Julie Roberts 7500

Page 30: Comandos SQL

30 2011 Erwin Fischer

Ejemplo 5.4 Ejemplo 5.4 Campos Campos calculadcalculadosos

• Se puede dar un nombre a la columna mediante la cláusula AS:

SELECT numEmpleado, nombre, apellido, salario/12 AS salarioMensual

FROM Empleado;numEmpleado nombre apellido salarioMensual

SL21 Jhon White 25000SG37 Peter Denver 10000SG14 David Ford 15000SA9 Mary Lee 7500SG5 Susan Sarandon 20000SL41 Julie Roberts 7500

Page 31: Comandos SQL

31 2011 Erwin Fischer

Ejemplo 5.5Ejemplo 5.5 Comparación Comparación en en lala Condición de búsqueda Condición de búsqueda

Listar todos los empleados con un salario mayor que 100.000.

SELECT numEmpleado, nombre, apellido, salarioFROM empleadoWHERE salario > 100000;

numEmpleado nombre apellido salarioSL21 Jhon White 300000SG37 Peter Denver 120000SG14 David Ford 180000SG5 Susan Sarandon 240000

Page 32: Comandos SQL

32 2011 Erwin Fischer

Ejemplo 5.6Ejemplo 5.6 Comparación Comparación compuesta en la Condición de búsquedacompuesta en la Condición de búsqueda

Listar las direcciones de todas las oficinas en Castellón o Santiago.

SELECT *FROM OficinaWHERE ciudad = ‘Castellón’ or ciudad = ‘Santiago’;

numOficina calle area ciudad telefono fax O5 Enmedio, 8 Centro Castellón 964 201 240 964 201 340

O7 Moyano, s/n Centro Castellón 964 215 760 964 215 670

O1 Larga 2003 Santiago 627 550 320 627 550 321O4 Trafalgar, 23 Grao Castellón 964 284 440 964 284 420

Page 33: Comandos SQL

33 2011 Erwin Fischer

Ejemplo 5.7 Condición Rango de Ejemplo 5.7 Condición Rango de BúsquedaBúsqueda

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 nombre apellido cargo salarioSL21 Jhon White Gerente 300000SG5 Susan Sarandon Gerente 240000

• La condición BETWEEN incluye los extremos del rango

Page 34: Comandos SQL

34 2011 Erwin Fischer

Ejemplo 5.7 Condición Rango de Ejemplo 5.7 Condición Rango de BúsquedaBúsqueda

• También existe una versión negada NOT BETWEEN.

• BETWEEN no agrega mucho poder expresivo a SQL. También podríamos escribir:

SELECT numEmpleado, nombre, apellido, cargo, salario

FROM Empleado

WHERE salario>=20000 AND salario <= 30000;

• Útil aunque para un rango de valores.

Page 35: Comandos SQL

35 2011 Erwin Fischer

Ejemplo 5.8Ejemplo 5.8 pertenencia de pertenencia de conjuntos (IN/NOT IN)conjuntos (IN/NOT IN)

SELECT numEmpleado, nombre, apellido, cargoFROM EmpleadoWHERE cargo IN (‘Gerente’, ‘Supervisor’)

Listar todos los Gerentes y Supervisores

numEmpleado nombre apellido cargoSL21 Jhon White GerenteSG14 David Ford SupervisorSG5 Susan Sarandon Gerente

Page 36: Comandos SQL

36 2011 Erwin Fischer

Ejemplo 5.8Ejemplo 5.8 pertenencia de pertenencia de conjuntos (IN/NOT IN)conjuntos (IN/NOT IN)• También hay una versión negada NOT IN.• IN no agrega mucho poder expresivo a SQL.

También podríamos escribir:

SELECT numEmpleado, nombre, apellido, cargoFROM EmpleadoWHERE cargo = ‘Gerente’

OR cargo = ‘Supervisor’);

• IN es más eficiente cuando el conjunto tiene muchos valores

Page 37: Comandos SQL

37 2011 Erwin Fischer

Ejemplo 5.9Ejemplo 5.9 Patrón de Patrón de caracterescaracteres

Encontrar todos los clientes con el string ‘Glasgow’ en su dirección

SELECT numCliente, nombre, apellido, direccion, telefonoFROM ClienteWHERE direccion like ‘%Glasgow%’;

numCliente nombre apellido direccion telefonoCR74 Mike Ritchie 63 Well St, Glasgow, G42 0141-943-7420CR62 Mary Tregear 12 Park PI, Glasgow, G4 0QR 0141-225-7421

Page 38: Comandos SQL

38 2011 Erwin Fischer

Ejemplo 5.9Ejemplo 5.9 Patrón de Patrón de caracterescaracteres

• SQL tiene dos símbolos especiales para correspondencia de patrones:– El caracter porcentaje % representa cualquier

secuencia de cero o más caracteres – El caracter underscore _ representa cualquier

carácter unitario.

• LIKE ‘%Glasgow%’ significa una secuencia de caracteres de cualquier longitud conteniendo el string ‘Glasgow’.

Page 39: Comandos SQL

39 2011 Erwin Fischer

Ejemplo 5.10Ejemplo 5.10 Condición de Condición de búsqueda NULLbúsqueda NULL

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

numCliente numPropiedad Fecha ComentarioQ56 IA14 24-11-1999 muy pequeño

Q76 IG4 20-10-1999 muy lejos Q56 IG4 26-11-1999

Q62 IA14 14-11-1999 no tiene salón Q56 IG36 28-10-1999

Page 40: Comandos SQL

40 2011 Erwin Fischer

Ejemplo 5.10Ejemplo 5.10 Condición de Condición de búsqueda NULLbúsqueda 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 explícitamente utilizando la palabra clave IS NULL:

SELECT *FROM VisitaWHERE numPropiedad = ’IG4’ AND comentario IS NULL

Page 41: Comandos SQL

41 2011 Erwin Fischer

Ejemplo 5.10Ejemplo 5.10 Condición de Condición de búsqueda NULLbúsqueda NULL

• La versión negada (IS NOT NULL) puede verificar por valores no-null.

numCliente numPropiedad Fecha ComentarioQ56 IG4 26-11-1999

Page 42: Comandos SQL

42 2011 Erwin Fischer

Ejemplo 5.11 Ordenando por Ejemplo 5.11 Ordenando por una columnauna columna

Listar los sueldos para todo el personal, dispuestos en orden descendente del sueldo.

SELECT numEmpleado, nombre, apellido, salarioFROM EmpleadoORDER BY salario DESC;

Page 43: Comandos SQL

43 2011 Erwin Fischer

Ejemplo 5.11 Ordenando por Ejemplo 5.11 Ordenando por una columnauna columna

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

SELECT numEmpleado, nombre, apellido, salarioFROM EmpleadoORDER BY salario DESC;

Page 44: Comandos SQL

44 2011 Erwin Fischer

Ejemplo 5.12 Ordenamiento por Ejemplo 5.12 Ordenamiento por múltiples columnasmúltiples columnas

numPropiedad calle ciudad codigoPostal tipo hab renta numPropietarioPA14 16 Holhead Aberdeem AB7 5SU Casa 6 650 C046PL94 6 Argvill St. London NW2 Departamento 4 400 C087PG4 6 Lawrence St Glasgow G11 9QX Departamento 3 350 C040PG36 2 Manor Rd Glasgow G114QX Departamento 3 375 C093PG21 10 Dale Rd Glasgow G12 Casa 5 600 C087PG16 5 Novar Dr Glasgow G12 9AX Departamento 4 450 C093

La tabla Propiedad

Page 45: Comandos SQL

45 2011 Erwin Fischer

Ejemplo 5.12 Ordenamiento por Ejemplo 5.12 Ordenamiento por múltiples columnasmúltiples columnas

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

SELECT numPropiedad, tipo, hab, rentaFROM PropiedadORDER BY tipo;

Page 46: Comandos SQL

46 2011 Erwin Fischer

Ejemplo 5.12 Ordenamiento por Ejemplo 5.12 Ordenamiento por múltiples columnasmúltiples columnas

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

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

SELECT numPropiedad, tipo, hab, rentaFROM PropiedadORDER BY tipo;

Page 47: Comandos SQL

47 2011 Erwin Fischer

Ejemplo 5.12 Ordenamiento por Ejemplo 5.12 Ordenamiento por múltiples columnasmúltiples 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, rentaFROM PropiedadORDER BY tipo, renta DESC;

Page 48: Comandos SQL

48 2011 Erwin Fischer

Ejemplo 5.12 Ordenamiento por Ejemplo 5.12 Ordenamiento por múltiples columnasmúltiples columnas

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

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

SELECT numPropiedad, tipo, hab, rentaFROM PropiedadORDER BY tipo, renta DESC;

Page 49: Comandos SQL

49 2011 Erwin Fischer

Instrucción SELECT - AgregadasInstrucción SELECT - Agregadas

• El estándar ISO define cinco funciones agregadas:

Función Descripción

AVG Calcula el promedio de los valores de un campo determinado

COUNT Devuelve el número de registros de la seleccionados

SUM Devuelve la suma de todos los valores de un campo determinado

MAX Devuelve el valor más alto de un campo especificado

MIN Devuelve el valor más bajo de un campo especificado

Page 50: Comandos SQL

50 2011 Erwin Fischer

Instrucción SELECT - AgregadasInstrucción 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 numéricos y no numéricos, pero SUM y AVG se pueden utilizar en campos numéricos solamente.

• Aparte de COUNT(*), cada función elimina los nulos primero y opera solamente en valores no nulos restantes.

Page 51: Comandos SQL

51 2011 Erwin Fischer

Instrucción SELECT - AgregadasInstrucción 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.

Page 52: Comandos SQL

52 2011 Erwin Fischer

Instrucción SELECT - AgregadasInstrucción SELECT - Agregadas

• Las funciones agregadas se pueden utilizar solamente en lista SELECT y en la cláusula HAVING.

• Si la lista SELECT incluye una función agregada y no hay una cláusula GROUP BY, la lista SELECT no puede referirse a una columna con una función agregada. Por ejemplo, lo que sigue es ilegal:

SELECT staffNo, COUNT(salary)FROM Staff;

Page 53: Comandos SQL

53 2011 Erwin Fischer

Ejemplo 5.13 Uso de COUNT(*)Ejemplo 5.13 Uso de COUNT(*)

¿Cuántas propiedades cuestan más de 350 por mes de alquiler?

numPropiedad calle ciudad codigoPostal tipo hab renta numPropietarioPA14 16 Holhead Aberdeem AB7 5SU Casa 6 650 C046PL94 6 Argvill St. London NW2 Departamento 4 400 C087PG4 6 Lawrence St Glasgow G11 9QX Departamento 3 350 C040PG36 2 Manor Rd Glasgow G114QX Departamento 3 375 C093PG21 10 Dale Rd Glasgow G12 Casa 5 600 C087PG16 5 Novar Dr Glasgow G12 9AX Departamento 4 450 C093

tabla Propiedad

Page 54: Comandos SQL

54 2011 Erwin Fischer

Ejemplo 5.13 Uso de COUNT(*)Ejemplo 5.13 Uso de COUNT(*)

¿Cuántas propiedades cuestan más de 350 por mes de alquiler?

SELECT COUNT(*) AS myCountFROM PropiedadWHERE renta > 350;

Page 55: Comandos SQL

55 2011 Erwin Fischer

Ejemplo 5.14Ejemplo 5.14 Uso de Uso de COUNT(DISTINCT)COUNT(DISTINCT)

¿Cuántas diferentes propiedades se visitaron en noviembre de 1999?

numCliente numPropiedad Fecha ComentarioQ56 IA14 24-11-1999 muy pequeño

Q76 IG4 20-11-1999 muy lejos

Q56 IG4 26-11-1999

Q62 IA14 14-11-1999 no tiene salón Q56 IG36 28-10-1999

Tabla Visita

Page 56: Comandos SQL

56 2011 Erwin Fischer

Ejemplo 5.14Ejemplo 5.14 Uso de Uso de COUNT(DISTINCT)COUNT(DISTINCT)

SELECT COUNT(DISTINCT numPropiedad) AS myCountFROM VisitaWHERE fecha BETWEEN ‘1-Nov-1999’

AND ‘31-Nov-1999’;

myCount2

Page 57: Comandos SQL

57 2011 Erwin Fischer

Ejemplo 5.15Ejemplo 5.15 Uso de COUNT Uso de COUNT y SUMy SUM

Encuentre la cantidad de gerentes y el total de sus salarios

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 58: Comandos SQL

58 2011 Erwin Fischer

Ejemplo 5.15Ejemplo 5.15 Uso de COUNT y Uso de COUNT y SUMSUM

SELECT COUNT(numEmpleado) AS myCount, SUM(salario) AS mySum

FROM EmpleadoWHERE cargo = ‘Gerente’;

© Pearson Education Limited 1995, 2005

Encuentre la cantidad de gerentes y el total de sus salarios

myCount mySum2 540000

Page 59: Comandos SQL

59 2011 Erwin Fischer

Ejemplo 5.16Ejemplo 5.16 Uso de MIN, MAX y Uso de MIN, MAX y AAVGVG

Determinar el sueldo mínimo, máximo y el promedio de los empleados.

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 60: Comandos SQL

60 2011 Erwin Fischer

Ejemplo 5.16Ejemplo 5.16 Uso de MIN, MAX y Uso de MIN, MAX y AAVGVG

Determinar el sueldo mínimo, máximo y el promedio de los empleados.

SELECT MIN(salario) AS myMin,MAX(salario) AS myMax,AVG(salario) AS myProm

FROM Empleado;

myMin myMax myProm90000 300000 170000

Page 61: Comandos SQL

61 2011 Erwin Fischer

Instrucción SELECT - AgregaciónInstrucción SELECT - Agregación

• Use la cláusula 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 cláusula SELECT puede contener solamente:– Nombre de columnas– Funciones agregadas – constantes– Expresiones involucrando combinaciones de las

anteriores.

Page 62: Comandos SQL

62 2011 Erwin Fischer

Instrucción SELECT - AgregaciónInstrucción SELECT - Agregación

• Todos los nombres de las columnas en la lista SELECT deben aparecer en la cláusula GROUP BY a menos que el nombre se utilice solamente en una función agregada.

• Si WHERE se utiliza con el GROUP BY, WHERE se aplica primero, después los grupos se forman de las filas restantes que satisfacen el predicado.

• La ISO considera dos Null como iguales para los propósitos del GROUP BY.

Page 63: Comandos SQL

63 2011 Erwin Fischer

Ejemplo 5.17Ejemplo 5.17 Uso de GROUP Uso de GROUP BYBY

Listar por cada oficina el número de empleados y el total de sus sueldos

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 64: Comandos SQL

64 2011 Erwin Fischer

Ejemplo 5.17Ejemplo 5.17 Uso de GROUP Uso de GROUP BYBY

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

FROM EmpleadoGROUP BY numOficinaORDER BY numOficina;

numOficina myCount mySum

B003 3 540000B005 2 390000B007 1 90000

Page 65: Comandos SQL

65 2011 Erwin Fischer

Restringiendo los grupos – Restringiendo los grupos – Clausula HAVINGClausula HAVING

• La cláusula HAVING es diseñada para ser utilizada con la cláusula 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 cláusula HAVING deben también aparecer en la lista GROUP BY o estar contenido dentro de una función agregada.

Page 66: Comandos SQL

66 2011 Erwin Fischer

Example 5.18 Use of HAVINGExample 5.18 Use of HAVING

Para cada oficina con más de 1 empleado, encuentre el número de empleados en cada oficina y la suma de sus sueldos.

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 67: Comandos SQL

67 2011 Erwin Fischer

Ejemplo 5.18 Uso de HAVINGEjemplo 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 540000B005 2 390000

Page 68: Comandos SQL

68 2011 Erwin Fischer

SubconsultasSubconsultas

• Algunas instrucciones SQL pueden tener un SELECT incrustado dentro de él.

• Un subselect puede ser usado en una cláusula WHERE y HAVING de un SELECT externo, donde se llama una subquery o consulta anidada.

• Los Subselects pueden también aparecer en las instrucciones INSERT, UPDATE, y DELETE.

Page 69: Comandos SQL

69 2011 Erwin Fischer

Ejemplo 5.19Ejemplo 5.19 Usando una Usando una subconsulta con Igualdadsubconsulta con Igualdad

Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Tabla Empleado

Page 70: Comandos SQL

70 2011 Erwin Fischer

Ejemplo 5.19Ejemplo 5.19 Usando una Usando una subconsulta con Igualdadsubconsulta con Igualdad

SELECT numEmpleado, nombre, apellido, cargo

FROM EmpleadoWHERE numOficina = (SELECT numOficina

FROM Oficina WHERE calle = ‘163 Main St’);

Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’

Page 71: Comandos SQL

71 2011 Erwin Fischer

Ejemplo 5.19Ejemplo 5.19 Usando una Usando una subconsulta con Igualdadsubconsulta 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, cargoFROM EmpleadoWHERE numOficina = ‘B003’;

Page 72: Comandos SQL

72 2011 Erwin Fischer

Ejemplo 5.19Ejemplo 5.19 Usando una Usando una subconsulta con Igualdadsubconsulta con Igualdad

numEmpleado nombre apellido cargoSG37 Peter Denver AsistenteSG14 David Ford SupervisorSG5 Susan Sarandon Gerente

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Tabla Empleado

Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’

Tabla resultado

Page 73: Comandos SQL

73 2011 Erwin Fischer

Ejemplo 5.20Ejemplo 5.20 subconsulta subconsulta con una función agregada.con una función agregada.

Listar a todos los empleados cuyo sueldo sea mayor que el sueldo promedio, e indique por cuánto.

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 74: Comandos SQL

74 2011 Erwin Fischer

Ejemplo 5.20Ejemplo 5.20 subconsulta subconsulta con una función agregada.con una función agregada.

SELECT numEmpleado, nombre, apellido, cargo,

salario - (SELECT AVG(salario) FROM Empleado) AS Diferencia

FROM EmpleadoWHERE salario > (SELECT AVG(salario)

FROM Empleado);

Page 75: Comandos SQL

75 2011 Erwin Fischer

Ejemplo 5.20Ejemplo 5.20 subconsulta subconsulta con una función agregada.con una función agregada.

• No puede escribir ‘WHERE salario > AVG(salario)’

• En lugar, utilice un subquery para encontrar el sueldo promedio (170000), y después utilice un SELECT externo para encontrar ésos empleados con sueldo mayores que el promedio:

SELECT numEmpleado, nombre, apellido, cargo,

salario - 170000 AS Diferencia

FROM EmpleadoWHERE salario > 170000);

Page 76: Comandos SQL

76 2011 Erwin Fischer

Ejemplo 5.20Ejemplo 5.20 subconsulta subconsulta con una función agregada.con una función agregada.

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

numEmpleado nombre apellido cargo DiferenciaSG14 David Ford Supervisor 10000SG5 Susan Sarandon Gerente 70000SL21 John White Gerente 130000

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

FROM Empleado) AS Diferencia

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

Page 77: Comandos SQL

77 2011 Erwin Fischer

Reglas de SubconsultaReglas de Subconsulta

• La cláusula 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 expresión de columna, a excepción de las subconsultas que usan EXIST

• Por defecto, los nombres de columna en una subconsulta se refieren al nombre de la tabla en la cláusula FROM del subquery. Puede referir a una tabla en el FROM de una consulta externa usando un alias.

Page 78: Comandos SQL

78 2011 Erwin Fischer

Subquery RulesSubquery Rules

• Cuando una subconsulta es uno de los dos operandos en una comparación, la subconsulta debe aparecer al lado derecho de la comparación.

Page 79: Comandos SQL

79 2011 Erwin Fischer

Ejemplo 5.21Ejemplo 5.21 Subconsultas Subconsultas anidadas: Uso de INanidadas: Uso de IN

Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle ‘163 Main Street’.

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Tabla Empleado

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

Tabla Propiedad

Page 80: Comandos SQL

80 2011 Erwin Fischer

Ejemplo 5.21Ejemplo 5.21 Subconsultas Subconsultas anidadas: Uso de INanidadas: 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, rentaFROM PropiedadWHERE numEmpleado IN

(SELECT numEmpleado

FROM Empleado WHERE numOficina =

(SELECT numOficina FROM Oficina WHERE calle = ‘163 Main Street’));

numPropiedad calle ciudad codigoPostal tipo hab rentaPG21 10 Dale Rd Glasgow G12 Casa 5 600

Page 81: Comandos SQL

81 2011 Erwin Fischer

ANY y ALLANY y ALL

• ANY y ALL pueden ser usadas con subconsultas que producen una sola columna de números

• Si usa ALL, la condición será verdadera si es satisfecha por todos los valores producidos en la subconsulta

• Si usa ANY, la condición será verdadera si es satisfecha por uno o más 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.

Page 82: Comandos SQL

82 2011 Erwin Fischer

Ejemplo 5.22Ejemplo 5.22 Uso de ANY / SOMEUso de ANY / SOME

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 83: Comandos SQL

83 2011 Erwin Fischer

Ejemplo 5.22Ejemplo 5.22 Uso de ANY / SOMEUso 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 EmpleadoWHERE salario > SOME (SELECT salario

FROM Empleado

WHERE numOficina = ‘B003’);

Page 84: Comandos SQL

84 2011 Erwin Fischer

Ejemplo 5.22Ejemplo 5.22 Uso de ANY / SOMEUso 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.

numEmpleado nombre apellido cargo salarioSL21 Jhon White Gerente 300000SG14 David Ford Supervisor 180000SG5 Susan Sarandon Gerente 240000

Tabla resultado del ejemplo 5.22

Page 85: Comandos SQL

85 2011 Erwin Fischer

Ejemplo 5.23Ejemplo 5.23 Uso de ALL Uso de ALL

Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003.

numEmpleado nombre apellido cargo sexo fechNac salario numOficina

SL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 86: Comandos SQL

86 2011 Erwin Fischer

Ejemplo 5.23Ejemplo 5.23 Uso de ALL 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 EmpleadoWHERE salario > ALL (SELECT salario

FROM Empleado WHERE numOIficina

=‘B003’);

numEmpleado nombre apellido cargo salarioSL21 Jhon White Gerente 300000

Tabla resultado del ejemplo 5.23

Page 87: Comandos SQL

87 2011 Erwin Fischer

Consultas multi-tablasConsultas multi-tablas

• Puede utilizar subqueries que proporcione columnas de resultado que vienen de la misma tabla.

• Si las columnas de resultado vienen de más de una tabla debe utilizar un join.

• Para realizar el join, incluya más de una tabla en la cláusula FROM.

• Utilice la coma como separador e incluya la cláusula WHERE para especificar la(s) columna(s) del join.

Page 88: Comandos SQL

88 2011 Erwin Fischer

Consultas multi-tablasConsultas multi-tablas

• También es posible utilizar un alias para una tabla nombrada en la cláusula 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 ambigüedad.

Page 89: Comandos SQL

89 2011 Erwin Fischer

Ejemplo 5.24Ejemplo 5.24 Join simple Join simple

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

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

Tabla Cliente

numCliente numPropiedad Fecha ComentarioCR56 PA14 24-11-1999 muy pequeño

CR76 PG4 20-10-1999 muy lejos

CR56 PG4 26-11-1999

CR62 PA14 14-11-1999 no tiene salón CR56 PG36 28-10-1999

Tabla Visita

Page 90: Comandos SQL

90 2011 Erwin Fischer

Ejemplo 5.24Ejemplo 5.24 Join simple 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 vWHERE c.numCliente = v.numCliente;

Page 91: Comandos SQL

91 2011 Erwin Fischer

Ejemplo 5.24Ejemplo 5.24 Join simple Join simple

• Es equivalente a equi-join en Algebra Relacional.

• Solamente las filas de ambas tablas que tengan valores idénticos en las columnas numCliente (c.numCliente = v.numCliente) se incluyen en el resultado.

numCliente nombre apellido numPropiedad ComentarioCR56 Aline Stewart PA14 muy pequeño CR56 Aline Stewart PG4 CR56 Aline Stewart PG36 CR62 Mary Tregear PA14 no tiene salón CR76 Jhon Kay PG4 muy lejos

Tabla resultado ejemplo 5.24

Page 92: Comandos SQL

92 2011 Erwin Fischer

Constucciones alternativas de Constucciones alternativas de JOIJOINN

• SQL provee maneras alternativas para especificar JOIN:

FROM Cliente c JOIN Visita v ON c.numCliente = v.numCliente

FROM Cliente JOIN Visita USING numClienteFROM 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 idénticas de numCliente.

Page 93: Comandos SQL

93 2011 Erwin Fischer

Ejemplo 5.25Ejemplo 5.25 Ordenando un Ordenando un joinjoin

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

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

Tabla Propiedad

Tabla Empleado

Page 94: Comandos SQL

94 2011 Erwin Fischer

Ejemplo 5.25Ejemplo 5.25 Ordenando un Ordenando un joinjoin

Para cada oficina, listar los números 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 pWHERE e.numEmpleado = p.numEmpleadoORDER BY e.numOficina, e.numEmpleado, numPropiedad;

Tabla resultado ejercicio 5.25numOficina numEmpleado nombre apellido numPropiedadB003 SG5 Susan Sarandon PG21B005 SL21 Jhon White PA14B005 SL21 Jhon White PG16B005 SL21 Jhon White PL94B007 SA9 Mary Lee PG36B007 SA9 Mary Lee PG4

Page 95: Comandos SQL

95 2011 Erwin Fischer

Ejemplo 5.26Ejemplo 5.26 Un join de tres tablasUn join de tres tablas

Para cada oficina, Listar los números y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina está ubicada y las propiedades que ellos administran.

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

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

Tabla Propiedad

Tabla Empleado

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Page 96: Comandos SQL

96 2011 Erwin Fischer

Ejemplo 5.26Ejemplo 5.26 Un join de tres tablasUn join de tres tablas

Para cada oficina, Listar los números y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina está ubicada y las propiedades que ellos administran.

Tabla resultado ejercicio 5.25

numOficina numEmpleado nombre apellido numPropiedadB003 SG5 Susan Sarandon PG21B005 SL21 Jhon White PA14B005 SL21 Jhon White PG16B005 SL21 Jhon White PL94B007 SA9 Mary Lee PG36B007 SA9 Mary Lee PG4

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Page 97: Comandos SQL

97 2011 Erwin Fischer

Ejemplo 5.26Ejemplo 5.26 Un join de tres tablasUn join de tres tablas

Para cada oficina, Listar los números 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 oWHERE e.numEmpleado = p.numEmpleado AND o.numOficina = e.numOficinaORDER BY e.numOficina, e.numEmpleado, numPropiedad;

Page 98: Comandos SQL

98 2011 Erwin Fischer

Ejemplo 5.26Ejemplo 5.26 Un join de tres tablasUn join de tres tablas

• Formulación alternativa para FROM y WHERE:

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

numOficina ciudad numEmpleado nombre apellido numPropiedadB003 Glasgow SG5 Susan Sarandon PG21B005 Aberdeem SL21 Jhon White PA14B005 Aberdeem SL21 Jhon White PG16B005 Aberdeem SL21 Jhon White PL94B007 London SA9 Mary Lee PG36B007 London SA9 Mary Lee PG4

Tabla resultado ejercicio 5.26

Page 99: Comandos SQL

99 2011 Erwin Fischer

Ejemplo 5.27Ejemplo 5.27 Agrupando por Agrupando por múltiples columnasmúltiples columnas

Encuentre el total de propiedades manejadas por cada empleado.

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Propiedad

Tabla Empleado

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

Page 100: Comandos SQL

100 2011 Erwin Fischer

Ejemplo 5.27Ejemplo 5.27 Agrupando por Agrupando por múltiples columnasmúltiples columnas

SELECT e.numOficina, s.numEmpleado, COUNT(*) AS myCountFROM Empleado e, Propiedad pWHERE e.numEmpleado = p.numEmpleadoGROUP BY e.numOficina, e.numEmpleadoORDER BY e.numOficina, e.numEmpleado;

Encuentre el total de propiedades manejadas por cada empleado.

Page 101: Comandos SQL

101 2011 Erwin Fischer

Ejemplo 5.27Ejemplo 5.27 Agrupando por Agrupando por múltiples columnasmúltiples columnas

numOficina numEmpleado myCountB003 SG5 1B005 SL21 2B005 SL41 1B007 SA9 2

Tabla Resultado del ejemplo 5.27

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;

Page 102: Comandos SQL

102 2011 Erwin Fischer

Calculando un JoinCalculando un Join

El procedimiento para generar resultados de un join es:

1. Forme el producto cartesiano de las tablas nombradas en la cláusula FROM.

2. Si hay una cláusula WHERE, aplique la condición de búsqueda a cada fila de la tabla del producto, conservando esas filas que satisfagan la condición

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

Page 103: Comandos SQL

103 2011 Erwin Fischer

Calculando un JoinCalculando un Join

4. Si se ha especificado DISTINCT, eliminar cualquier fila duplicada de la tabla resultado.

5. Si hay una cláusula 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

Page 104: Comandos SQL

104 2011 Erwin Fischer

Outer JoinsOuter 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

condición. • Considere las siguientes tablas:

numPropiedad ciudadPA14 AberdeemPL94 LondonPG4 Glasgow

numOficina ciudadB003 GlasgowB004 BristolB002 London

Tabla Oficina1 Tabla Propiedad1

Page 105: Comandos SQL

105 2011 Erwin Fischer

Outer JoinsOuter Joins

• El (inner) join de estas dos tablas:

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

numOficina ciudad numPropiedad ciudadB003 Glasgow PG4 GlasgowB002 London PL94 London

Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1

Page 106: Comandos SQL

106 2011 Erwin Fischer

Outer JoinsOuter Joins

• 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).

numOficina ciudad numPropiedad ciudadB003 Glasgow PG4 GlasgowB002 London PL94 London

Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1

Page 107: Comandos SQL

107 2011 Erwin Fischer

Ejemplo 5.28Ejemplo 5.28 Left Outer join Left Outer join

Liste las oficinas y las Propiedades que están en la misma ciudad junto con cualquier oficina incomparable.

SELECT o.*, p.*FROM Oficina1 o LEFT JOIN

Propiedad1 p ON o.ciudad = p.ciudad;

numPropiedad ciudadPA14 AberdeemPL94 LondonPG4 Glasgow

numOficina ciudadB003 GlasgowB004 BristolB002 London

Tabla Oficina1 Tabla Propiedad1

Page 108: Comandos SQL

108 2011 Erwin Fischer

Ejemplo 5.28Ejemplo 5.28 Left Outer join 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 .

numOficina ciudad numPropiedad ciudadB003 Glasgow PG4 GlasgowB004 Bristol NULL NULLB002 London PL94 London

Tabla resultado del ejemplo 5.28

Page 109: Comandos SQL

109 2011 Erwin Fischer

Ejemplo 5.29Ejemplo 5.29 Right Outer Right Outer joinjoin

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;

numPropiedad ciudadPA14 AberdeemPL94 LondonPG4 Glasgow

numOficina ciudadB003 GlasgowB004 BristolB002 London

Tabla Oficina1 Tabla Propiedad1

Page 110: Comandos SQL

110 2011 Erwin Fischer

Example 5.29 Right Outer JoinExample 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.

numOficina ciudad numPropiedad ciudadNULL NULL PA14 AberdeemB002 London PL94 LondonB003 Glasgow PG4 Glasgow

Tabla resultado del ejemplo 5.29

Page 111: Comandos SQL

111 2011 Erwin Fischer

Ejemplo Ejemplo 5.30 Full Outer Join5.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 JOINPropertyForRent1 p ON b.bCity = p.pCity;

Page 112: Comandos SQL

112 2011 Erwin Fischer

Ejemplo Ejemplo 5.30 Full Outer Join5.30 Full Outer Join

• Incluye no solamente aquellas filas que tienen la misma cuidad, si no también aquellas filas de ambas tablas que no coinciden.

• Las columnas de las tablas que no coinciden son completadas con Null.

numOficina ciudad numPropiedad ciudad

NULL NULL PA14 AberdeemB003 Glasgow PG4 GlasgowB004 Bristol NULL NULLB002 London PL94 London

Tabla resultado del ejemplo 5.30

Page 113: Comandos SQL

113 2011 Erwin Fischer

EXISTS y NOT EXISTSEXISTS y NOT EXISTS

• EXISTS y NOT EXISTS están 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 vacía.

• NOT EXISTS es el opuesto de EXISTS.

Page 114: Comandos SQL

114 2011 Erwin Fischer

EXISTS y NOT EXISTSEXISTS 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 número de columnas.

• Las subconsultas comunes que siguen a (NOT) EXISTS son de la forma:

(SELECT * ...)

Page 115: Comandos SQL

115 2011 Erwin Fischer

Ejemplo 5.31Ejemplo 5.31 Consulta usando EXISTConsulta usando EXIST

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Page 116: Comandos SQL

116 2011 Erwin Fischer

Ejemplo 5.31Ejemplo 5.31 Consulta usando EXISTConsulta usando EXIST

SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e WHERE EXISTS

(SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado

AND ciudad = ‘London’);

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

Page 117: Comandos SQL

117 2011 Erwin Fischer

Ejemplo 5.31Ejemplo 5.31 Consulta usando EXISTConsulta usando EXIST

numEmpleado nombre apellido cargoSA9 Mary Lee Asistente

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 163 Main Street Glasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Oficina

Tabla resultado Ejemplo 5.31

SELECT numEmpleado, nombre, apellido, cargoFROM Empleado eWHERE EXISTS

(SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado

AND ciudad = ‘London’);

Page 118: Comandos SQL

118 2011 Erwin Fischer

Ejemplo 5.31Ejemplo 5.31 Consulta usando EXISTConsulta usando EXIST• Note que la condición de búsqueda

e.numOficina = o.numOficina es necesaria para considerar el correcto registro de oficina para cada empleado

• Si se omite, listaría todos los registros de empleado, debido a que la siguiente subconsulta:

SELECT * FROM Oficina WHERE ciudad=‘London’

• Seria siempre verdad y la consulta quedaría:

SELECT numEmpleado, nombre, apellido, cargo FROM EmpleadoWHERE true;

Page 119: Comandos SQL

119 2011 Erwin Fischer

Ejemplo 5.31Ejemplo 5.31 Consulta usando EXISTConsulta usando EXIST

• Podria también escribir esta consulta a través de un join:

SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e, Oficina oWHERE e.numOficina = o.numOficina AND city = ‘London’;

Page 120: Comandos SQL

120 2011 Erwin Fischer

Union, Intersect, y Union, Intersect, y Difference (Except)Difference (Except)

• Puede utilizar operaciones de conjuntos normales tales como unión, intersección, y diferencia para combinar resultados de dos o más consultas en una sola tabla resultado.

• La unión de dos tablas, A y B, es una tabla que contiene todas las filas en A o B o ambos.

• La intersección 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 unión compatible.

Page 121: Comandos SQL

121 2011 Erwin Fischer

Union, Intersect, y Union, Intersect, y Difference (Except)Difference (Except)

• El formato de la cláusula del operador de conjunto en cada caso es:

op [ALL] [CORRESPONDING [BY {columna1 [, ...]}]]

• Si CORRESPONDING BY es especificado, entonces la operación de conjunto es realizada sobre la o las columnas nombradas

• Si CORRESPONDING es especificado sin el BY, la

operación de conjunto se aplica sobre las columnas comunes en ambas tablas .

Page 122: Comandos SQL

122 2011 Erwin Fischer

Union, Intersect, y Union, Intersect, y Difference (Except)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

Page 123: Comandos SQL

123 2011 Erwin Fischer

Union, Intersect, y Union, Intersect, y Difference (Except)Difference (Except)

Page 124: Comandos SQL

124 2011 Erwin Fischer

Ejemplo 5.32Ejemplo 5.32 Uso de UNION Uso de UNION

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

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

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 6 Lawrence StGlasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Propiedad

Tabla Oficina

Page 125: Comandos SQL

125 2011 Erwin Fischer

Ejemplo 5.32Ejemplo 5.32 Uso de UNION Uso de UNION

(SELECT ciudadFROM OficinaWHERE ciudad IS NOT NULL)

UNION(SELECT ciudadFROM PropiedadWHERE ciudad IS NOT NULL);

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

Page 126: Comandos SQL

126 2011 Erwin Fischer

Ejemplo 5.32Ejemplo 5.32 Uso de UNION Uso de UNION

• O

(SELECT *FROM OficinaWHERE ciudad IS NOT NULL)UNION CORRESPONDING BY ciudad(SELECT *FROM PropiedadWHERE ciudad IS NOT NULL);

Page 127: Comandos SQL

127 2011 Erwin Fischer

Ejemplo 5.32Ejemplo 5.32 Uso de UNION 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

ciudadAberdeemLondonGlasgowBristol

Tabla resultado Ejemplo 5.32

Page 128: Comandos SQL

128 2011 Erwin Fischer

Ejemplo 5.33Ejemplo 5.33 Uso de Uso de INTERSINTERSECTECT

Construya un listado de todas las ciudades en que hay una oficina y una propiedad.

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

numOficina calle ciudad codigoPostalB005 16 Holhead Aberdeem AB7 5SUB007 6 Argvill St. London NW2B003 6 Lawrence StGlasgow G11 9QXB004 2 Manor Rd Glasgow G114QXB002 10 Dale Rd Bristol G12

Tabla Propiedad

Tabla Oficina

Page 129: Comandos SQL

129 2011 Erwin Fischer

Ejemplo 5.33Ejemplo 5.33 Uso de Uso de INTERSINTERSECTECT

Construya un listado de todas las ciudades en que hay una oficina y una propiedad.

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

Page 130: Comandos SQL

130 2011 Erwin Fischer

Ejemplo 5.33Ejemplo 5.33 Uso de Uso de INTERSINTERSECTECT

•O

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

© Pearson Education Limited 1995, 2005

Page 131: Comandos SQL

131 2011 Erwin Fischer

Ejemplo 5.33Ejemplo 5.33 Uso de Uso de INTERSINTERSECTECT

• Podríamos reescribir esta consulta, sin el operador INTERSECT:

SELECT O.cityFROM Oficina o Propiedad pWHERE o.ciudad = p.ciudad;

• O: SELECT DISTINCT ciudad

FROM Oficina o WHERE EXISTS

(SELECT * FROM Propiedad pWHERE p.ciudad = o.ciudad);

Page 132: Comandos SQL

132 2011 Erwin Fischer

Ejemplo 5.34Ejemplo 5.34 Uso de EXCEPT Uso de EXCEPT

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

Page 133: Comandos SQL

133 2011 Erwin Fischer

Ejemplo 5.34Ejemplo 5.34 Uso de EXCEPT Uso de EXCEPT

• Podemos reescribir esta consulta sin el operador EXCEPT:

SELECT DISTINCT ciudad FROM OficinaWHERE ciudad NOT IN

(SELECT ciudad FROM Propiedad);

• O

SELECT DISTINCT ciudad FROM Oficina oWHERE NOT EXISTS

(SELECT * FROM Propiedad pWHERE p. ciudad = b. ciudad );

Page 134: Comandos SQL

134 2011 Erwin Fischer

Actualizaciones a la Base de Actualizaciones a la Base de dadatostos

El lenguaje SQL puede ser usado para consultar la base de datos como también 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.

Page 135: Comandos SQL

135 2011 Erwin Fischer

INSERTINSERT

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 opción DEFAULT cuando se creo la columna.

Page 136: Comandos SQL

136 2011 Erwin Fischer

INSERTINSERT

• La listaDeValores debe coincidir con listaDeColumnas como sigue:

• El número de ítems de cada lista debe ser el mismo

• Debe haber una correspondencia directa en la posición 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.

Page 137: Comandos SQL

137 2011 Erwin Fischer

Ejemplo 5.34Ejemplo 5.34 INSERT . . . VALUESINSERT . . . VALUES

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 138: Comandos SQL

138 2011 Erwin Fischer

Ejemplo 5.34Ejemplo 5.34 INSERT . . . VALUESINSERT . . . VALUES

INSERT INTO Empleado VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Asistente’, ‘M’, Date‘1957-05-25’, 83000, ‘B003’);

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 139: Comandos SQL

139 2011 Erwin Fischer

Ejemplo 5.35 Ejemplo 5.35 INSERT INSERT usando valores por defectousando valores por defecto

INSERT INTO Empleado (numEmpleado, nombre, apellido, cargo, salario, numOficina)

VALUES (‘SG44’, ‘Amme’, ‘Jones’, ‘Asistente’, 8100, ‘B003’);

• O

INSERT INTO EmpleadoVALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Asistente’, NULL, NULL, 8100, ‘B003’);

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

Page 140: Comandos SQL

140 2011 Erwin Fischer

INSERT … SELECTINSERT … SELECT

• La segunda forma de la instrucción INSERT permite que múltiples filas sean copiadas de una o más tablas a otra, y tiene el siguiente formato:

INSERT INTO NombreTabla [ (listaDeColumnas) ]

SELECT ...

Page 141: Comandos SQL

141 2011 Erwin Fischer

Ejemplo 5.35Ejemplo 5.35 INSERT … INSERT … SELESELECTCT

EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp)

Poblar la tabla EmpleadoTotalPropiedad usando los detalles de la tabla Empleado

y la tabla Propiedad.

Asuma que hay una tabla EmpleadoTotalPropiedad, que contiene los nombres de los empleados y el número de propiedades que ellos manejan:

Page 142: Comandos SQL

142 2011 Erwin Fischer

Ejemplo 5.35Ejemplo 5.35 INSERT … INSERT … SELESELECTCT

• Poblar la tabla EmpleadoTotalPropiedad usando los

detalles de la tabla Empleado y la tabla Propiedad. EmpleadoTotalPropiedad (numEmpleado, Nombre,

Apellido, totalProp)

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Tabla Propiedad

Page 143: Comandos SQL

143 2011 Erwin Fischer

Ejemplo 5.35Ejemplo 5.35 INSERT … INSERT … SELESELECTCT

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

Page 144: Comandos SQL

144 2011 Erwin Fischer

Ejemplo 5.35Ejemplo 5.35 INSERT … INSERT … SELESELECTCT

• Si la segunda parte de la UNIÓN se omite, excluye a los empleados que no manejan actualmente ninguna propiedad.

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

Tabla resultado Ejemplo 5.35

Page 145: Comandos SQL

145 2011 Erwin Fischer

UPDATEUPDATE

UPDATE NombreTabla SET columnName1 = dataValue1

[, columnName2 = dataValue2...]

[WHERE searchCondition]

• NombreTabla puede ser el nombre de una tabla base o una vista actualizable.

• La cláusula SET especifica los nombres de una o más columnas a ser actualizadas

Page 146: Comandos SQL

146 2011 Erwin Fischer

UPDATEUPDATE

• La cláusula WHERE es opcional:– Si se omite, las columnas

nombradas serán 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.

Page 147: Comandos SQL

147 2011 Erwin Fischer

Ejemplo 5.38/39 UPDATE Ejemplo 5.38/39 UPDATE todas las filastodas las filas

• Dé a todos los Empleados un aumento de sueldo del 3%.

• Dé a todos los Gerentes un aumento de sueldo del 5%.

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 148: Comandos SQL

148 2011 Erwin Fischer

Ejemplo 5.38/39 UPDATE Ejemplo 5.38/39 UPDATE todas las filastodas las filas

• Dé a todos los Empleados un aumento de sueldo del 3%.

UPDATE EmpleadoSET salario = salario*1.03;

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 149: Comandos SQL

149 2011 Erwin Fischer

Ejemplo 5.38/39 UPDATE Ejemplo 5.38/39 UPDATE todas las filastodas las filas

• Dé a todos los Gerentes un aumento de sueldo del 5%.

UPDATE EmpleadoSET salario = salario*1.05WHERE cargo = ‘Gerente’;

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 150: Comandos SQL

150 2011 Erwin Fischer

Ejemplo 5.38/39 UPDATE Ejemplo 5.38/39 UPDATE múltiples columnasmúltiples columnas

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

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 151: Comandos SQL

151 2011 Erwin Fischer

Ejemplo 5.38/39 UPDATE Ejemplo 5.38/39 UPDATE múltiples columnasmúltiples columnas

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

UPDATE EmpleadoSET cargo = ‘Gerente’, salario = 190000WHERE numEmpleado = ‘SG14’;

numEmpleado nombre apellido cargo sexo fechNac salario numOficinaSL21 Jhon White Gerente M 01-Oct-45 300000 B005SG37 Peter Denver Asistente M 10-Nov-60 120000 B003SG14 David Ford Supervisor M 09-Sep-58 180000 B003SA9 Mary Lee Asistente F 17-Sep-59 90000 B007SG5 Susan Sarandon Gerente F 21-Mar-60 240000 B003SL41 Julie Roberts Asistente F 13-Jun-63 90000 B005

Tabla Empleado

Page 152: Comandos SQL

152 2011 Erwin Fischer

DELETEDELETE

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 condición

Page 153: Comandos SQL

153 2011 Erwin Fischer

Ejemplo 5.41/42 DELETE Ejemplo 5.41/42 DELETE Filas especificasFilas especificas

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

• Elimine todos los registros de la tabla Visita.

numCliente numPropiedad Fecha ComentarioCR56 PA14 24-11-1999 muy pequeño

CR76 PG4 20-10-1999 muy lejos

CR56 PG4 26-11-1999

CR62 PA14 14-11-1999 no tiene salón CR56 PG36 28-10-1999

Tabla Visita

Page 154: Comandos SQL

154 2011 Erwin Fischer

Ejemplo 5.41/42 DELETE Ejemplo 5.41/42 DELETE Filas especificasFilas especificas

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

DELETE FROM VisitaWHERE numPropiedad = ‘PG4’;

numCliente numPropiedad Fecha ComentarioCR56 PA14 24-11-1999 muy pequeño

CR76 PG4 20-10-1999 muy lejos

CR56 PG4 26-11-1999

CR62 PA14 14-11-1999 no tiene salón CR56 PG36 28-10-1999

Tabla Visita

Page 155: Comandos SQL

155 2011 Erwin Fischer

Ejemplo 5.41/42 DELETE Ejemplo 5.41/42 DELETE Filas especificasFilas especificas

• Elimine todos los registros de la tabla Visita.

DELETE FROM Visita;

numCliente numPropiedad Fecha ComentarioCR56 PA14 24-11-1999 muy pequeño

CR76 PG4 20-10-1999 muy lejos

CR56 PG4 26-11-1999

CR62 PA14 14-11-1999 no tiene salón CR56 PG36 28-10-1999

Tabla Visita

Page 156: Comandos SQL

156 2011 Erwin Fischer

Unidad I – Introducción a Unidad I – Introducción a las Bases de datoslas Bases de datos

• Fin de la Unidad

Page 157: Comandos SQL

157 2011 Erwin Fischer

la notación BNF la notación BNF (forma Backus-Naur) (forma Backus-Naur)

<oración> ::= <sujeto> <predicado> <sujeto>    ::= Juan | Julia <predicado> ::= <verbo> <adverbio> <verbo>       ::= maneja | corre <adverbio> ::= descuidadamente | frecuentemente

Las gramáticas tienen métodos alternativos útiles para desplegar las producciones

Page 158: Comandos SQL

158 2011 Erwin Fischer

X/Open CompanyX/Open Company

• X/Open Company, Ltd. era un consorcio fundado en 1984 para identificar y promover estándares abiertos en el campo de la tecnología de información. X/Open también manejó la marca registrada de UNIX a partir de 1993 a 1996, cuando X/Open se combinó con la fundación abierta del software Open Software Foundation (OSF) para formar The Open Group

Page 159: Comandos SQL

159 2011 Erwin Fischer

Unidad I – Introducción a Unidad I – Introducción a las Bases de datoslas Bases de datos

• Fin de la Unidad