El Lenguaje SQL Bases de Datos Unidad
Unidad - SQL - Objetivos <ul><li>Entender el  propósito e importancia del Lenguaje de Consulta Estructurado   SQL. </li></...
Unidad - SQL - Objetivos <ul><ul><li>Uso de funciones agregadas. </li></ul></ul><ul><ul><li>Agrupación de datos usando GRO...
Unidad - SQL - Objetivos <ul><li>Como realizar actualizaciones a la Base de datos usando INSERT, UPDATE y   DELETE </li></ul>
Objetivos de SQL <ul><li>Idealmente un lenguaje de base de datos debería permitir a un usuario: </li></ul><ul><ul><li>Crea...
Objetivos de SQL <ul><li>SQL es un lenguaje orientado a transformación con dos principales componentes: </li></ul><ul><ul>...
Objetivos de SQL <ul><li>SQL es un lenguaje relativamente fácil de aprender: </li></ul><ul><ul><li>Es un lenguaje no proce...
Objetivos de SQL <ul><li>Consiste de palabras en ingles tales como   : </li></ul><ul><li>CREATE TABLE Empleado( </li></ul>...
Objetivos de SQL <ul><li>Puede ser usado por un rango de usuarios DBAs, administradores, desarrolladores de aplicaciones, ...
Historia de SQL <ul><li>En 1974, D. Chamberlin (Laboratorio de IBM San José) definió un lenguaje llamado ‘Structured Engli...
Historia de SQL <ul><li>Aun pronunciado ‘see-quel’, a pesar que la pronunciación oficial es ‘S-Q-L’.  </li></ul><ul><li>IB...
Historia de SQL <ul><li>Al final de los 70, aparecía ORACLE y fue probablemente el primer RDBMS basado en SQL </li></ul><u...
Importancia de SQL <ul><li>SQL pasa a formar parte de la arquitecturas de aplicaciones tales como IBM’s Systems Applicatio...
Importancia de SQL <ul><li>El SQL se utiliza en otros estándares e incluso influencia el desarrollo de otros estándares co...
Escribiendo Comandos SQL <ul><li>Una instrucción SQL consiste de  palabras reservadas  y  palabras definidas por el usuari...
Escribiendo Comandos SQL <ul><li>La mayoría de los componentes de una instrucción SQL  no distinguen entre mayúsculas y mi...
Escribiendo Comandos SQL <ul><li>Uso de la notación BNF extendida: </li></ul><ul><ul><li>Las letras mayúsculas representan...
Literales <ul><li>Los literales son constantes usadas en sentencias  SQL. </li></ul><ul><li>Todos los literales no numéric...
Instrucción SELECT <ul><ul><li>SELECT [DISTINCT | ALL]  </li></ul></ul><ul><ul><li>{* | [columnExpression [AS newName]] [,...
Instrucción SELECT <ul><li>FROM Especifica la o las tabla(s) a ser usadas </li></ul><ul><li>WHERE Filtra filas. </li></ul>...
Instrucción SELECT <ul><li>El orden de las cláusulas no puede ser cambiado. </li></ul><ul><li>Solamente SELECT y FROM son ...
Ejemplo 5.1  Todas las columnas, Todas las filas <ul><li>Listar todos los detalles de Empleados. </li></ul><ul><li>SELECT ...
Ejemplo 5.1  Todas las columnas, Todas las filas SELECT  numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, num...
Ejemplo 5.2  Recuperar colum nas  especificas, todas las filas <ul><li>Producir una lista de salarios para todos los emple...
Ejemplo 5.2  Recuperar colum nas  especificas, todas las filas SELECT  numEmpleado, nombre, apellido, salario FROM  Emplea...
Ejemplo 5.3  Uso de DISTINCT <ul><li>Listar el numero de propiedad de todas las propiedades que han sido visitadas </li></...
Ejemplo 5.3  Uso de DISTINCT <ul><li>Uso de DISTINCT para eliminar duplicados: </li></ul>SELECT DISTINCT  numPropiedad FRO...
Ejemplo 5.3  Uso de DISTINCT Tabla 1‑1 Tabla resultado con duplicados Tabla 1‑2 Tabla resultado eliminando duplicados SELE...
Ejemplo 5.4  Campos calculad os <ul><li>Listar el salario mensual para todos los empleados, mostrando el numero de emplead...
Ejemplo 5.4  Campos calculad os <ul><li>Se puede dar un nombre a la columna mediante la cláusula AS: </li></ul><ul><li>SEL...
Ejemplo 5.5  Comparación  en la  Condición de búsqueda <ul><li>Listar todos los empleados con un salario mayor que 100.000...
Ejemplo 5.6   Comparación  compuesta  en la Condición de búsqueda <ul><li>Listar las direcciones de todas las oficinas en ...
Ejemplo 5.7  Condición Rango de Búsqueda <ul><li>Listar todo el personal con un sueldo entre 200.000 y 300.000. </li></ul>...
Ejemplo 5.7  Condición Rango de Búsqueda <ul><li>También existe una versión negada NOT BETWEEN. </li></ul><ul><li>BETWEEN ...
Ejemplo 5.8  pertenencia de conjuntos (IN/NOT IN) <ul><li>SELECT  numEmpleado, nombre, apellido, cargo </li></ul><ul><li>F...
Ejemplo 5.8  pertenencia de conjuntos (IN/NOT IN) <ul><li>También  hay una versión negada NOT IN. </li></ul><ul><li>IN no ...
Ejemplo 5.9   Patrón de caracteres <ul><li>Encontrar todos los clientes con el string ‘Glasgow’ en su dirección </li></ul>...
Ejemplo 5.9   Patrón de caracteres <ul><li>SQL tiene dos símbolos especiales para correspondencia de patrones: </li></ul><...
Ejemplo 5.10   Condición de búsqueda NULL La Tabla Visita contiene el detalle de todas las visitas a las propiedades.
Ejemplo 5.10   Condición de búsqueda NULL <ul><li>Listar el detalle de todas las visitas a la propiedad ‘IG4’ en la cual n...
Ejemplo 5.10   Condición de búsqueda NULL <ul><li>La versión negada (IS NOT NULL) puede verificar por valores no-null. </l...
Ejemplo 5.11  Ordenando por una columna <ul><li>Listar los sueldos para todo el personal, dispuestos en orden descendente ...
Ejemplo 5.11  Ordenando por una columna SELECT  numEmpleado, nombre, apellido, salario FROM  Empleado ORDER BY  salario  D...
Ejemplo 5.12  Ordenamiento por múltiples columnas La tabla Propiedad
Ejemplo 5.12  Ordenamiento por múltiples columnas <ul><li>Produzca una lista abreviada de propiedades en orden por tipo de...
Ejemplo 5.12  Ordenamiento por múltiples columnas Tabla resultado para el ejemplo 5.12, con una clave de ordenamiento SELE...
Ejemplo 5.12  Ordenamiento por múltiples columnas <ul><li>Cuatro departamentos en esta lista – no hay una clave de ordenam...
Ejemplo 5.12  Ordenamiento por múltiples columnas Tabla resultado para el ejemplo 5.12, con dos claves de ordenamiento SEL...
Instrucción SELECT - Agregadas <ul><li>El estándar ISO define cinco funciones agregadas: </li></ul>Función Descripción AVG...
Instrucción SELECT - Agregadas <ul><li>Cada uno funciona sobre un sola columna de una tabla y devuelve un solo valor. </li...
Instrucción SELECT - Agregadas <ul><li>COUNT(*) cuenta todas las filas de una tabla, sin importar si ocurren valores nulos...
Instrucción SELECT - Agregadas <ul><li>Las funciones agregadas se pueden utilizar solamente en lista SELECT y en la cláusu...
Ejemplo 5.13  Uso de COUNT(*) <ul><li>¿Cuántas propiedades cuestan más de 350 por mes de alquiler? </li></ul>tabla Propiedad
Ejemplo 5.13  Uso de COUNT(*) <ul><li>¿Cuántas propiedades cuestan más de 350 por mes de alquiler? </li></ul>SELECT COUNT(...
Ejemplo 5.14   Uso de COUNT(DISTINCT) <ul><li>¿Cuántas diferentes propiedades se visitaron en noviembre de 1999? </li></ul...
Ejemplo 5.14   Uso de COUNT(DISTINCT) SELECT COUNT(DISTINCT numPropiedad) AS myCount FROM Visita WHERE fecha BETWEEN ‘1-No...
Ejemplo 5.15   Uso de COUNT  y SUM <ul><li>Encuentre la cantidad de gerentes y el total de sus salarios </li></ul>Tabla Em...
Ejemplo 5.15   Uso de COUNT y SUM <ul><li>SELECT COUNT(numEmpleado) AS myCount,    SUM(salario) AS mySum </li></ul><ul><li...
Ejemplo 5.16   Uso de MIN, MAX y A VG <ul><li>Determinar el sueldo mínimo, máximo y el promedio de los empleados . </li></...
Ejemplo 5.16   Uso de MIN, MAX y A VG <ul><li>Determinar el sueldo mínimo, máximo y el promedio de los empleados . </li></...
Instrucción SELECT - Agregación <ul><li>Use la cláusula GROUP BY para obtener sub-totales. </li></ul><ul><li>El SELECT y G...
Instrucción SELECT - Agregación <ul><li>Todos los nombres de las columnas en la lista SELECT deben aparecer en la cláusula...
Ejemplo 5.17  Uso de GROUP  BY <ul><li>Listar por cada oficina el número de empleados y el total de sus sueldos </li></ul>...
Ejemplo 5.17  Uso de GROUP  BY <ul><li>SELECT numOficina, </li></ul><ul><li>COUNT(numEmpleado) AS myCount, </li></ul><ul><...
Restringiendo los grupos –  Clausula HAVING <ul><li>La cláusula HAVING es diseñada para ser utilizada con la cláusula GROU...
Example 5.18  Use of HAVING <ul><li>Para cada oficina con más de 1 empleado, encuentre el número de empleados en cada ofic...
Ejemplo 5.18  Uso de HAVING <ul><li>SELECT numOficina,  </li></ul><ul><li>COUNT(numEmpleado) AS myCount, </li></ul><ul><li...
Subconsultas <ul><li>Algunas instrucciones SQL pueden tener un SELECT incrustado dentro de él. </li></ul><ul><li>Un subsel...
Ejemplo 5.19  Usando una subconsulta con Igualdad <ul><li>Listar los empleados que trabajan en la oficina ubicada en ‘163 ...
Ejemplo 5.19  Usando una subconsulta con Igualdad <ul><li>SELECT  numEmpleado, nombre, apellido, cargo </li></ul><ul><li>F...
Ejemplo 5.19  Usando una subconsulta con Igualdad <ul><li>El SELECT interno determina el numero de oficina para la oficina...
Ejemplo 5.19  Usando una subconsulta con Igualdad Tabla Oficina Tabla Empleado Listar los empleados que trabajan en la ofi...
Ejemplo 5.20  subconsulta con una función agregada.   <ul><li>Listar a todos los empleados cuyo sueldo sea mayor que el su...
Ejemplo 5.20  subconsulta con una función agregada.   <ul><li>SELECT  numEmpleado, nombre, apellido, cargo ,  </li></ul><u...
Ejemplo 5.20  subconsulta con una función agregada. <ul><li>No puede escribir ‘WHERE salario > AVG(salario)’ </li></ul><ul...
Ejemplo 5.20  subconsulta con una función agregada. Tabla Empleado SELECT  numEmpleado, nombre, apellido, cargo , salario ...
Reglas de Subconsulta <ul><li>La cláusula ORDER BY no se puede utilizar en una subconsulta (aunque puede ser utilizada en ...
Subquery Rules <ul><li>Cuando una subconsulta es uno de los dos operandos en una comparación, la subconsulta debe aparecer...
Ejemplo 5.21  Subconsultas anidadas: Uso de IN <ul><li>Listar las propiedades que son manejadas por los empleados que trab...
Ejemplo 5.21  Subconsultas anidadas: Uso de IN <ul><li>Listar las propiedades que son manejadas por los empleados que trab...
ANY y ALL <ul><li>ANY y ALL pueden ser usadas con subconsultas que producen una sola columna de números   </li></ul><ul><l...
Ejemplo 5.22   Uso de ANY / SOME <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de al menos un em...
Ejemplo 5.22   Uso de ANY / SOME <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de al menos un em...
Ejemplo 5.22   Uso de ANY / SOME <ul><li>La consulta interna produce el conjunto {120000, 180000, 240000}  y la consulta e...
Ejemplo 5.23  Uso de ALL <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de...
Ejemplo 5.23  Uso de ALL <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de...
Consultas multi-tablas <ul><li>Puede utilizar subqueries que proporcione columnas de resultado  que vienen de la misma tab...
Consultas multi-tablas <ul><li>También es posible utilizar un alias para una tabla nombrada en la cláusula FROM.  </li></u...
Ejemplo 5.24  Join simple <ul><li>Listar los nombres de todos los clientes que han visitado una propiedad y los comentario...
Ejemplo 5.24  Join simple <ul><li>Listar los nombres de todos los clientes que han visitado una propiedad y los comentario...
Ejemplo 5.24  Join simple <ul><li>Es equivalente a equi-join en Algebra Relacional. </li></ul><ul><li>Solamente las filas ...
Constucciones alternativas de JOI N <ul><li>SQL provee maneras alternativas para especificar JOIN: </li></ul><ul><li>FROM ...
Ejemplo 5.25  Ordenando un  join <ul><li>Para cada oficina, listar los números y nombres de los empleados que administran ...
Ejemplo 5.25  Ordenando un  join <ul><li>Para cada oficina, listar los números y nombres de los empleados que administran ...
Ejemplo 5.26   Un join de tres tablas <ul><li>Para cada oficina, Listar los números y nombres de los empleados que adminis...
Ejemplo 5.26   Un join de tres tablas <ul><li>Para cada oficina, Listar los números y nombres de los empleados que adminis...
Ejemplo 5.26   Un join de tres tablas <ul><li>Para cada oficina, Listar los números y nombres de los empleados que adminis...
Ejemplo 5.26   Un join de tres tablas <ul><li>Formulación alternativa para FROM y WHERE: </li></ul><ul><li>FROM ( Oficina ...
Ejemplo 5.27  Agrupando por múltiples columnas <ul><li>Encuentre el total de propiedades manejadas por cada empleado . </l...
Ejemplo 5.27  Agrupando por múltiples columnas <ul><li>SELECT  e.numOficina, s.numEmpleado, COUNT(*) AS myCount </li></ul>...
Ejemplo 5.27  Agrupando por múltiples columnas Tabla Resultado del ejemplo 5.27 SELECT  e.numOficina, s.numEmpleado, COUNT...
Calculando un Join <ul><li>El procedimiento para generar resultados de un join es: </li></ul><ul><li>1. Forme el producto ...
Calculando un Join <ul><li>4.  Si se ha especificado DISTINCT, eliminar cualquier fila duplicada de la tabla resultado. </...
Outer Joins <ul><li>Si una fila de una de las tablas a unir no coincide, la fila es omitida de la tabla   resultante. </li...
Outer Joins <ul><li>El (inner) join de estas dos tablas: </li></ul><ul><ul><li>SELECT o.*, p.* </li></ul></ul><ul><ul><ul>...
Outer Joins <ul><li>La tabla resultado tiene dos filas donde son iguales las ciudades .  </li></ul><ul><li>No hay filas qu...
Ejemplo 5.28  Left Outer join <ul><li>Liste las oficinas y las Propiedades que están en la misma ciudad junto con cualquie...
Ejemplo 5.28  Left Outer join <ul><li>Incluye  aquellas filas de la primera tabla (left) que no coinciden con las filas de...
Ejemplo 5.29  Right Outer join <ul><li>List e los sucursales y las propiedades en la misma ciudad y cualquier propiedad in...
Example 5.29  Right Outer Join <ul><li>El Right Outer join incluye  aquellas filas de la segunda tabla (derecha) que no co...
Ejemplo  5.30  Full Outer Join <ul><li>Listar las oficinas y las propiedades en la misma ciudad y cualquier oficina o prop...
Ejemplo  5.30  Full Outer Join <ul><li>Incluye no solamente aquellas filas que tienen la misma cuidad, si no también aquel...
EXISTS y NOT EXISTS <ul><li>EXISTS y NOT EXISTS están para ser usados solamente con subqueries.  </li></ul><ul><li>Produce...
EXISTS y NOT EXISTS <ul><li>Como (NO) EXISTS verifica solamente por la existencia o la no-existencia de filas en la tabla ...
Ejemplo 5.31   Consulta usando EXIST Listar todos los empleados que trabajan en alguna oficina de Londres . Tabla Empleado...
Ejemplo 5.31   Consulta usando EXIST <ul><li>  SELECT numEmpleado, nombre, apellido, cargo </li></ul><ul><ul><li>FROM Empl...
Ejemplo 5.31   Consulta usando EXIST Tabla Empleado Tabla Oficina Tabla resultado  Ejemplo 5.31 SELECT numEmpleado, nombre...
Ejemplo 5.31   Consulta usando EXIST <ul><li>Note que la condición de búsqueda e.numOficina = o.numOficina es necesaria pa...
Ejemplo 5.31   Consulta usando EXIST <ul><li>Podria también escribir esta consulta a través de un join: </li></ul><ul><ul>...
Union, Intersect, y  Difference (Except) <ul><li>Puede utilizar operaciones de conjuntos normales tales como unión, inters...
Union, Intersect, y  Difference (Except) <ul><li>El formato de la cláusula del operador de conjunto en cada caso es : </li...
Union, Intersect, y  Difference (Except) <ul><li>Si se especifica ALL el resultado puede incluir filas duplicadas . </li><...
Union, Intersect, y  Difference (Except)
Ejemplo 5.32  Uso de UNION <ul><li>Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propie...
Ejemplo 5.32  Uso de UNION <ul><li>(SELECT ciudad </li></ul><ul><ul><li>FROM Oficina </li></ul></ul><ul><ul><li>WHERE ciud...
Ejemplo 5.32  Uso de UNION <ul><li>O </li></ul><ul><ul><li>(SELECT * FROM Oficina WHERE ciudad IS NOT NULL) UNION CORRESPO...
Ejemplo 5.32  Uso de UNION <ul><li>Esta consulta es ejecutada produciendo el resultado de la primera consulta y el resulta...
Ejemplo 5.33  Uso de INTERS ECT <ul><li>Construya un listado de todas las ciudades en que hay una oficina y una propiedad....
Ejemplo 5.33  Uso de INTERS ECT <ul><li>Construya un listado de todas las ciudades en que hay una oficina y una propiedad....
Ejemplo 5.33  Uso de INTERS ECT <ul><li>O </li></ul><ul><ul><li>(SELECT * FROM Oficina) </li></ul></ul><ul><ul><li>INTERSE...
Ejemplo 5.33  Uso de INTERS ECT <ul><li>Podríamos reescribir esta consulta, sin el operador INTERSECT: </li></ul><ul><ul><...
Ejemplo 5.34  Uso de EXCEPT <ul><li>Listar todas las ciudades en donde haya oficinas, pero no propiedades . </li></ul><ul>...
Ejemplo 5.34  Uso de EXCEPT <ul><li>Podemos reescribir esta consulta sin el operador EXCEPT: </li></ul><ul><ul><li>SELECT ...
Actualizaciones a la Base de da tos   <ul><ul><li>El lenguaje SQL puede ser usado para consultar la base de datos como tam...
INSERT <ul><li>  INSERT INTO Nombretabla [  ( listaDeColumnas ) ] </li></ul><ul><ul><li>VALUES ( listaDeValores ) </li></u...
INSERT <ul><li>La  listaDeValores  debe coincidir con  listaDeColumnas  como sigue: </li></ul><ul><li>El número de ítems d...
Ejemplo 5.34   INSERT . . . VALUES <ul><li>Insertar una nueva fila en la tabla Empleado,  entregando los datos para todas ...
Ejemplo 5.34   INSERT . . . VALUES <ul><li>INSERT INTO Empleado  </li></ul><ul><li>VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Asist...
Ejemplo 5.35  INSERT  usando valores por defecto <ul><li>INSERT INTO  Empleado (numEmpleado, nombre,  apellido, cargo, sal...
INSERT … SELECT <ul><li>La segunda forma de la instrucción INSERT permite que múltiples filas sean copiadas de una o  más ...
Ejemplo 5.35  INSERT … SELE CT <ul><ul><li>EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp) </li></ul></u...
Ejemplo 5.35  INSERT … SELE CT <ul><li>Poblar la tabla EmpleadoTotalPropiedad usando los detalles de la tabla  Empleado y ...
Ejemplo 5.35  INSERT … SELE CT <ul><ul><li>INSERT INTO EmpleadoTotalPropiedad </li></ul></ul><ul><ul><li>(SELECT e.numEmpl...
Ejemplo 5.35  INSERT … SELE CT <ul><li>Si la segunda parte de la UNIÓN se omite, excluye a los empleados que no manejan ac...
UPDATE <ul><ul><li>UPDATE NombreTabla  </li></ul></ul><ul><ul><li>SET columnName1 = dataValue1  </li></ul></ul><ul><ul><li...
UPDATE <ul><li>La cláusula WHERE es opcional: </li></ul><ul><ul><li>Si se omite, las columnas nombradas serán actualizadas...
Ejemplo 5.38/39  UPDATE  todas las filas <ul><li>Dé a todos los Empleados un aumento de sueldo del 3% . </li></ul><ul><li>...
Ejemplo 5.38/39  UPDATE  todas las filas <ul><li>Dé a todos los Empleados un aumento de sueldo del 3% . </li></ul><ul><li>...
Ejemplo 5.38/39  UPDATE  todas las filas <ul><li>Dé a todos los Gerentes un aumento de sueldo del 5% .  </li></ul><ul><li>...
Ejemplo 5.38/39  UPDATE  múltiples columnas <ul><li>Promueva a  David Ford (numEmpleado=‘SG14’) a Gerente y cambie su sala...
Ejemplo 5.38/39  UPDATE  múltiples columnas <ul><li>Promueva a  David Ford (numEmpleado=‘SG14’) a Gerente y cambie su sala...
DELETE <ul><ul><li>DELETE FROM NombreTabla  </li></ul></ul><ul><ul><li>[WHERE searchCondition] </li></ul></ul><ul><li>Nomb...
Ejemplo 5.41/42  DELETE  Filas especificas <ul><li>Suprima todas las visitas que se relacionen con la propiedad PG4 . </li...
Ejemplo 5.41/42  DELETE  Filas especificas <ul><li>Suprima todas las visitas que se relacionen con la propiedad PG4 . </li...
Ejemplo 5.41/42  DELETE  Filas especificas <ul><li>Elimine todos los registros de la tabla Visita. </li></ul><ul><li>DELET...
Unidad I – Introducción a las Bases de datos <ul><li>Fin de la Unidad </li></ul>
la notación BNF  (forma Backus-Naur)  <ul><li><oración>  ::= <sujeto> <predicado>  <sujeto>    ::= Juan | Julia  <predicad...
X/Open Company <ul><li>X/Open Company, Ltd. era un consorcio fundado en 1984 para identificar y promover estándares abiert...
Unidad I – Introducción a las Bases de datos <ul><li>Fin de la Unidad </li></ul>
Upcoming SlideShare
Loading in...5
×

Comandos SQL

7,230

Published on

Este es una presentación sobre algunos comandos SQL

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,230
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
551
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • SQL es un ejemplo de un lenguaje orientado a transformación o un lenguaje diseñado para utilizar relaciones para transformar entradas en salidas requeridas. Como un lenguaje, el estándar ISO SQL tiene dos principales componentes: Un lenguaje de definición de datos (DDL) para definir la estructura de la base de datos y controlar el acceso a los datos; Un Lenguaje de manipulación de datos (DML) para recuperar y actualizar datos
  • Para listar las cantidades requeridas, primero debemos identificar que empleado realmente administra alguna propiedad. Esto se puede realizar uniendo las tablas Empleado y Propiedad sobre la columna numEmpleado
  • Como estamos insertando datos en cada columna en el orden en que la tabla fue creada, no hay necesidad de especificar una lista de columnas. Note que el carácter literal tal como ‘Alan’ debe ir encerrado en comillas simples.
  • Este ejemplo es complejo porque deseamos contar el número de propiedades que el empleado maneja. Si omitimos la segunda parte de la UNION obtenemos la lista de aquellos empleados que manejan al menos una propiedad; en otras palabras, excluimos aquellos empleados que actualmente no manejan propiedades. Por lo tanto para incluir aquellos empleados que no manejan propiedades , necesitamos usar la instrucción UNION e incluir un segundo SELECT para agregar tales empleados, usando 0 para el atributo total. Note que algunos dialectos de SQL pueden no permitir el uso del operador UNION dentro de un subselect para un INSERT
  • Comandos SQL

    1. 1. El Lenguaje SQL Bases de Datos Unidad
    2. 2. Unidad - SQL - Objetivos <ul><li>Entender el propósito e importancia del Lenguaje de Consulta Estructurado SQL. </li></ul><ul><li>Como recuperar datos de una base de datos usando la instrucción SELECT </li></ul><ul><ul><li>Uso de condición WHERE compuesta. </li></ul></ul><ul><ul><li>Ordenando resultados usando ORDER BY. </li></ul></ul>
    3. 3. Unidad - SQL - Objetivos <ul><ul><li>Uso de funciones agregadas. </li></ul></ul><ul><ul><li>Agrupación de datos usando GROUP BY y HAVING. </li></ul></ul><ul><ul><li>Uso de Subconsultas. </li></ul></ul><ul><ul><li>Combinación de Tablas. </li></ul></ul><ul><ul><li>Realizando operaciones de conjunto (UNION, INTERSECT, EXCEPT). </li></ul></ul>
    4. 4. Unidad - SQL - Objetivos <ul><li>Como realizar actualizaciones a la Base de datos usando INSERT, UPDATE y DELETE </li></ul>
    5. 5. Objetivos de SQL <ul><li>Idealmente un lenguaje de base de datos debería permitir a un usuario: </li></ul><ul><ul><li>Crear la base de datos y las estructuras de relaciones </li></ul></ul><ul><ul><li>Realizar tareas básicas de administración de datos, </li></ul></ul><ul><ul><li>Realizar consultas simples y complejas </li></ul></ul><ul><ul><li>Debe realizar estas tareas con mínimo esfuerzo del usuario </li></ul></ul><ul><ul><li>Su estructura de comandos y sintaxis debe ser fácil de aprender </li></ul></ul><ul><ul><li>Debe ser portable </li></ul></ul>
    6. 6. Objetivos de SQL <ul><li>SQL es un lenguaje orientado a transformación con dos principales componentes: </li></ul><ul><ul><li>Un DDL para definir la estructura de la base de datos y controlar el acceso a los datos; </li></ul></ul><ul><ul><li>Un DML para recuperar y actualizar datos </li></ul></ul><ul><li>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 . </li></ul>
    7. 7. Objetivos de SQL <ul><li>SQL es un lenguaje relativamente fácil de aprender: </li></ul><ul><ul><li>Es un lenguaje no procedural: se especifica que información se requiere, en lugar de, como obtenerla, </li></ul></ul><ul><ul><li>Es un lenguaje esencialmente de formato libre </li></ul></ul>
    8. 8. Objetivos de SQL <ul><li>Consiste de palabras en ingles tales como : </li></ul><ul><li>CREATE TABLE Empleado( </li></ul><ul><li>numEmpleado VARCHAR(5), </li></ul><ul><ul><li>nombre VARCHAR(15), </li></ul></ul><ul><ul><li>salario DECIMAL(7,2)); </li></ul></ul><ul><li>2) INSERT INTO Empleado VALUES (‘SG16’, ‘Brown’, 8300); </li></ul><ul><li>3) SELECT numEmpleado, nombre, salario </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE salario > 10000; </li></ul>
    9. 9. Objetivos de SQL <ul><li>Puede ser usado por un rango de usuarios DBAs, administradores, desarrolladores de aplicaciones, y otros tipos de usuarios finales. </li></ul><ul><li>Existe un estándar ISO para SQL, haciéndolo el lenguaje estándar formal y de facto para bases de datos relacionales </li></ul>
    10. 10. Historia de SQL <ul><li>En 1974, D. Chamberlin (Laboratorio de IBM San José) definió un lenguaje llamado ‘Structured English Query Language’ (SEQUEL). </li></ul><ul><li>Una versión revisada, SEQUEL/2, fue definida en 1976 pero el nombre fue posteriormente cambiado a SQL por razones legales. </li></ul>
    11. 11. Historia de SQL <ul><li>Aun pronunciado ‘see-quel’, a pesar que la pronunciación oficial es ‘S-Q-L’. </li></ul><ul><li>IBM posteriormente produjo un Prototipo de un DBMS llamado System R , basado en SEQUEL/2. </li></ul><ul><li>Las raíces de SQL, están en SQUARE (Specifying Queries as Relational Expressions), el cual es anterior al proyecto System R. </li></ul>
    12. 12. Historia de SQL <ul><li>Al final de los 70, aparecía ORACLE y fue probablemente el primer RDBMS basado en SQL </li></ul><ul><li>En 1987, ANSI e ISO publicaron un estándar inicial para SQL. </li></ul><ul><li>En 1989, ISO publicó un anexo que definió las características de mejoras de integridad. </li></ul><ul><li>En 1992, ocurrió la primera revisión principal del estándar ISO, referido como SQL2 o SQL/92. </li></ul><ul><li>En 1999, SQL:1999 fue liberado con soporte para administración de datos orientado a objeto. </li></ul><ul><li>Al final de 2003, fue liberado SQL:2003. </li></ul>
    13. 13. Importancia de SQL <ul><li>SQL pasa a formar parte de la arquitecturas de aplicaciones tales como IBM’s Systems Application Architecture (SAA). </li></ul><ul><li>Es una opción estratégica de muchas organizaciones grandes e influyentes (Ej: X/OPEN). </li></ul><ul><li>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. </li></ul>
    14. 14. Importancia de SQL <ul><li>El SQL se utiliza en otros estándares e incluso influencia el desarrollo de otros estándares como herramienta de definicion. Los ejemplos incluyen: </li></ul><ul><ul><li>El sistema IRDS ( Information Resource Dictionary System , sistema de diccionarios para recursos de información de ISO). </li></ul></ul><ul><ul><li>El estándar RDA ( Remote Data Access , acceso remoto a datos) . </li></ul></ul>
    15. 15. Escribiendo Comandos SQL <ul><li>Una instrucción SQL consiste de palabras reservadas y palabras definidas por el usuario . </li></ul><ul><ul><li>Las palabras reservadas son una parte fija del lenguaje SQL y tienen un significado fijo. Ellas tienen que ser deletreadas exactamente como se requiere </li></ul></ul><ul><ul><li>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. </li></ul></ul>
    16. 16. Escribiendo Comandos SQL <ul><li>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. </li></ul><ul><li>Son mas legibles con indentación y alineación: </li></ul><ul><ul><li>Cada cláusula debería comenzar en una nueva línea. </li></ul></ul><ul><ul><li>El comienzo de una cláusula debe alinearse con el comienzo de otras cláusulas . </li></ul></ul><ul><ul><li>Si la cláusula tiene varias partes, cada una debe aparecer en una línea separada e indentada bajo comienzo de la cláusula . </li></ul></ul>
    17. 17. Escribiendo Comandos SQL <ul><li>Uso de la notación BNF extendida: </li></ul><ul><ul><li>Las letras mayúsculas representan palabras reservadas . </li></ul></ul><ul><ul><li>Las letras minúsculas representan palabras definidas por el usuario . </li></ul></ul><ul><ul><li>| indica una elección entre alternativas. </li></ul></ul><ul><ul><li>{} Indican un elemento requerido . </li></ul></ul><ul><ul><li>[] Indican un elemento opcional . </li></ul></ul><ul><ul><li>… Indica repetición opcional (0 o más veces). </li></ul></ul>
    18. 18. Literales <ul><li>Los literales son constantes usadas en sentencias SQL. </li></ul><ul><li>Todos los literales no numéricos deben estar encerrados en comillas simple (ej. ‘London’). </li></ul><ul><li>Todos los literales numéricos no deben estar encerrados en comillas (ej. 650.00). </li></ul>
    19. 19. Instrucción SELECT <ul><ul><li>SELECT [DISTINCT | ALL] </li></ul></ul><ul><ul><li>{* | [columnExpression [AS newName]] [,...] } </li></ul></ul><ul><ul><li>FROM NombreTabla [alias] [, ...] </li></ul></ul><ul><ul><li>[WHERE condición] </li></ul></ul><ul><ul><li>[GROUP BY listaColumna] </li></ul></ul><ul><ul><li>[HAVING condición] </li></ul></ul><ul><ul><li>[ORDER BY listaColumna] </li></ul></ul>
    20. 20. Instrucción SELECT <ul><li>FROM Especifica la o las tabla(s) a ser usadas </li></ul><ul><li>WHERE Filtra filas. </li></ul><ul><li>GROUP BY Forma grupos de filas con el mismo valor de columna. </li></ul><ul><li>HAVING Filtra los grupos de acuerdo a una condición. </li></ul><ul><li>SELECT Especifica que columnas van a aparecer en la salida </li></ul><ul><li>ORDER BY Especifica el orden de la salida. </li></ul>
    21. 21. Instrucción SELECT <ul><li>El orden de las cláusulas no puede ser cambiado. </li></ul><ul><li>Solamente SELECT y FROM son obligatorias. </li></ul>
    22. 22. Ejemplo 5.1 Todas las columnas, Todas las filas <ul><li>Listar todos los detalles de Empleados. </li></ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, numOficina </li></ul><ul><li>FROM Empleado ; </li></ul><ul><li>Podemos usar * Como una abreviación para ‘todas las columnas’: </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Empleado ; </li></ul></ul>
    23. 23. Ejemplo 5.1 Todas las columnas, Todas las filas SELECT numEmpleado, nombre, apellido, cargo, sexo, fechNac, salario, numOficina FROM Empleado
    24. 24. Ejemplo 5.2 Recuperar colum nas especificas, todas las filas <ul><li>Producir una lista de salarios para todos los empleados, mostrando solamente, numEmpleado, nombre, apellido y salario. </li></ul>SELECT numEmpleado, nombre, apellido, salario FROM Empleado ;
    25. 25. Ejemplo 5.2 Recuperar colum nas especificas, todas las filas SELECT numEmpleado, nombre, apellido, salario FROM Empleado ;
    26. 26. Ejemplo 5.3 Uso de DISTINCT <ul><li>Listar el numero de propiedad de todas las propiedades que han sido visitadas </li></ul><ul><li>SELECT numPropiedad </li></ul><ul><ul><li>FROM Visita; </li></ul></ul>
    27. 27. Ejemplo 5.3 Uso de DISTINCT <ul><li>Uso de DISTINCT para eliminar duplicados: </li></ul>SELECT DISTINCT numPropiedad FROM Visita ;
    28. 28. Ejemplo 5.3 Uso de DISTINCT Tabla 1‑1 Tabla resultado con duplicados Tabla 1‑2 Tabla resultado eliminando duplicados SELECT numPropiedad FROM Visita; SELECT DISTINCT numPropiedad FROM Visita ;
    29. 29. Ejemplo 5.4 Campos calculad os <ul><li>Listar el salario mensual para todos los empleados, mostrando el numero de empleado, nombre, apellido y el detalle del salario </li></ul><ul><li>SELECT numEmpleado, nombre, apellido, salario/12 </li></ul><ul><li>FROM Empleado; </li></ul>© Pearson Education Limited 1995, 2005
    30. 30. Ejemplo 5.4 Campos calculad os <ul><li>Se puede dar un nombre a la columna mediante la cláusula AS: </li></ul><ul><li>SELECT numEmpleado, nombre, apellido, salario/12 AS salarioMensual </li></ul><ul><li>FROM Empleado; </li></ul>
    31. 31. Ejemplo 5.5 Comparación en la Condición de búsqueda <ul><li>Listar todos los empleados con un salario mayor que 100.000 . </li></ul>SELECT numEmpleado, nombre, apellido, salario FROM empleado WHERE salario > 100000;
    32. 32. Ejemplo 5.6 Comparación compuesta en la Condición de búsqueda <ul><li>Listar las direcciones de todas las oficinas en Castellón o Santiago . </li></ul>SELECT * FROM Oficina WHERE ciudad = ‘Castellón’ or ciudad = ‘Santiago’;
    33. 33. Ejemplo 5.7 Condición Rango de Búsqueda <ul><li>Listar todo el personal con un sueldo entre 200.000 y 300.000. </li></ul>SELECT numEmpleado, nombre, apellido, cargo, salario FROM Empleado WHERE salario BETWEEN 200000 AND 300000 ; <ul><li>La condición BETWEEN incluye los extremos del rango </li></ul>
    34. 34. Ejemplo 5.7 Condición Rango de Búsqueda <ul><li>También existe una versión negada NOT BETWEEN. </li></ul><ul><li>BETWEEN no agrega mucho poder expresivo a SQL. También podríamos escribir: </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo, salario </li></ul></ul><ul><ul><li>FROM Empleado </li></ul></ul><ul><ul><li>WHERE salario >= 20000 AND salario <= 30000 ; </li></ul></ul><ul><li>Útil aunque para un rango de valores. </li></ul>
    35. 35. Ejemplo 5.8 pertenencia de conjuntos (IN/NOT IN) <ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE cargo IN (‘ Gerente’, ‘Supervisor ’) </li></ul>Listar todos los Gerentes y Supervisores
    36. 36. Ejemplo 5.8 pertenencia de conjuntos (IN/NOT IN) <ul><li>También hay una versión negada NOT IN. </li></ul><ul><li>IN no agrega mucho poder expresivo a SQL. También podríamos escribir: </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul></ul><ul><ul><li>FROM Empleado </li></ul></ul><ul><ul><li>WHERE cargo = ‘ Gerente’ </li></ul></ul><ul><ul><li> OR cargo = ‘Supervisor ’); </li></ul></ul><ul><li>IN es más eficiente cuando el conjunto tiene muchos valores </li></ul>
    37. 37. Ejemplo 5.9 Patrón de caracteres <ul><li>Encontrar todos los clientes con el string ‘Glasgow’ en su dirección </li></ul>SELECT numCliente, nombre, apellido, direccion, telefono FROM Cliente WHERE direccion like ‘%Glasgow%’;
    38. 38. Ejemplo 5.9 Patrón de caracteres <ul><li>SQL tiene dos símbolos especiales para correspondencia de patrones: </li></ul><ul><ul><li>El caracter porcentaje % representa cualquier secuencia de cero o más caracteres </li></ul></ul><ul><ul><li>El caracter underscore _ representa cualquier carácter unitario. </li></ul></ul><ul><li>LIKE ‘%Glasgow%’ significa una secuencia de caracteres de cualquier longitud conteniendo el string ‘ Glasgow ’. </li></ul>
    39. 39. Ejemplo 5.10 Condición de búsqueda NULL La Tabla Visita contiene el detalle de todas las visitas a las propiedades.
    40. 40. Ejemplo 5.10 Condición de búsqueda NULL <ul><li>Listar el detalle de todas las visitas a la propiedad ‘IG4’ en la cual no hay comentarios. </li></ul><ul><ul><li>Hay dos visitas a la propiedad IG4, una con comentario y otra sin comentario . </li></ul></ul><ul><ul><li>tenemos que chequear por nulo explícitamente utilizando la palabra clave IS NULL : </li></ul></ul>SELECT * FROM Visita WHERE numPropiedad = ’IG4’ AND comentario IS NULL
    41. 41. Ejemplo 5.10 Condición de búsqueda NULL <ul><li>La versión negada (IS NOT NULL) puede verificar por valores no-null. </li></ul>
    42. 42. Ejemplo 5.11 Ordenando por una columna <ul><li>Listar los sueldos para todo el personal, dispuestos en orden descendente del sueldo . </li></ul>SELECT numEmpleado, nombre, apellido, salario FROM Empleado ORDER BY salario DESC;
    43. 43. Ejemplo 5.11 Ordenando por una columna SELECT numEmpleado, nombre, apellido, salario FROM Empleado ORDER BY salario DESC;
    44. 44. Ejemplo 5.12 Ordenamiento por múltiples columnas La tabla Propiedad
    45. 45. Ejemplo 5.12 Ordenamiento por múltiples columnas <ul><li>Produzca una lista abreviada de propiedades en orden por tipo de propiedad. </li></ul>SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo ;
    46. 46. Ejemplo 5.12 Ordenamiento por múltiples columnas Tabla resultado para el ejemplo 5.12, con una clave de ordenamiento SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo ;
    47. 47. Ejemplo 5.12 Ordenamiento por múltiples columnas <ul><li>Cuatro departamentos en esta lista – no hay una clave de ordenamiento menor especificada, el sistema arregla estas filas en cualquier orden. </li></ul><ul><li>Para ordenar por renta, especifique el orden menor </li></ul>SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo, renta DESC ;
    48. 48. Ejemplo 5.12 Ordenamiento por múltiples columnas Tabla resultado para el ejemplo 5.12, con dos claves de ordenamiento SELECT numPropiedad, tipo, hab, renta FROM Propiedad ORDER BY tipo, renta DESC ;
    49. 49. Instrucción SELECT - Agregadas <ul><li>El estándar ISO define cinco funciones agregadas: </li></ul>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
    50. 50. Instrucción SELECT - Agregadas <ul><li>Cada uno funciona sobre un sola columna de una tabla y devuelve un solo valor. </li></ul><ul><li>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. </li></ul><ul><li>Aparte de COUNT(*), cada función elimina los nulos primero y opera solamente en valores no nulos restantes . </li></ul>
    51. 51. Instrucción SELECT - Agregadas <ul><li>COUNT(*) cuenta todas las filas de una tabla, sin importar si ocurren valores nulos o duplicados. </li></ul><ul><li>Puede utilizar DISTINCT antes del nombre de la columna para eliminar los duplicados. </li></ul><ul><li>DISTINCT no tiene efecto con MIN/MAX, pero puede tener con SUM/AVG. </li></ul>
    52. 52. Instrucción SELECT - Agregadas <ul><li>Las funciones agregadas se pueden utilizar solamente en lista SELECT y en la cláusula HAVING . </li></ul><ul><li>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: </li></ul><ul><li> SELECT staffNo, COUNT(salary) </li></ul><ul><ul><li>FROM Staff; </li></ul></ul>
    53. 53. Ejemplo 5.13 Uso de COUNT(*) <ul><li>¿Cuántas propiedades cuestan más de 350 por mes de alquiler? </li></ul>tabla Propiedad
    54. 54. Ejemplo 5.13 Uso de COUNT(*) <ul><li>¿Cuántas propiedades cuestan más de 350 por mes de alquiler? </li></ul>SELECT COUNT(*) AS myCount FROM Propiedad WHERE renta > 350;
    55. 55. Ejemplo 5.14 Uso de COUNT(DISTINCT) <ul><li>¿Cuántas diferentes propiedades se visitaron en noviembre de 1999? </li></ul>Tabla Visita
    56. 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’;
    57. 57. Ejemplo 5.15 Uso de COUNT y SUM <ul><li>Encuentre la cantidad de gerentes y el total de sus salarios </li></ul>Tabla Empleado
    58. 58. Ejemplo 5.15 Uso de COUNT y SUM <ul><li>SELECT COUNT(numEmpleado) AS myCount, SUM(salario) AS mySum </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE cargo = ‘Gerente’; </li></ul>© Pearson Education Limited 1995, 2005 Encuentre la cantidad de gerentes y el total de sus salarios
    59. 59. Ejemplo 5.16 Uso de MIN, MAX y A VG <ul><li>Determinar el sueldo mínimo, máximo y el promedio de los empleados . </li></ul>Tabla Empleado
    60. 60. Ejemplo 5.16 Uso de MIN, MAX y A VG <ul><li>Determinar el sueldo mínimo, máximo y el promedio de los empleados . </li></ul>SELECT MIN(salario) AS myMin, MAX(salario) AS myMax, AVG(salario) AS myProm FROM Empleado;
    61. 61. Instrucción SELECT - Agregación <ul><li>Use la cláusula GROUP BY para obtener sub-totales. </li></ul><ul><li>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: </li></ul><ul><ul><li>Nombre de columnas </li></ul></ul><ul><ul><li>Funciones agregadas </li></ul></ul><ul><ul><li>constantes </li></ul></ul><ul><ul><li>Expresiones involucrando combinaciones de las anteriores. </li></ul></ul>
    62. 62. Instrucción SELECT - Agregación <ul><li>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 . </li></ul><ul><li>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. </li></ul><ul><li>La ISO considera dos Null como iguales para los propósitos del GROUP BY. </li></ul>
    63. 63. Ejemplo 5.17 Uso de GROUP BY <ul><li>Listar por cada oficina el número de empleados y el total de sus sueldos </li></ul>Tabla Empleado
    64. 64. Ejemplo 5.17 Uso de GROUP BY <ul><li>SELECT numOficina, </li></ul><ul><li>COUNT(numEmpleado) AS myCount, </li></ul><ul><li>SUM(salario) AS mySum </li></ul><ul><li>FROM Empleado </li></ul><ul><li>GROUP BY numOficina </li></ul><ul><li>ORDER BY numOficina; </li></ul>
    65. 65. Restringiendo los grupos – Clausula HAVING <ul><li>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 . </li></ul><ul><li>HAVING es similar a WHERE, pero WHERE filtra filas individuales mientras que HAVING filtra grupos . </li></ul><ul><li>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 . </li></ul>
    66. 66. Example 5.18 Use of HAVING <ul><li>Para cada oficina con más de 1 empleado, encuentre el número de empleados en cada oficina y la suma de sus sueldos . </li></ul>Tabla Empleado
    67. 67. Ejemplo 5.18 Uso de HAVING <ul><li>SELECT numOficina, </li></ul><ul><li>COUNT(numEmpleado) AS myCount, </li></ul><ul><li>SUM(salario) AS mySum </li></ul><ul><li>FROM Empleado </li></ul><ul><li>GROUP BY numOficina </li></ul><ul><li>HAVING COUNT(numEmpleado) > 1 </li></ul><ul><li>ORDER BY numOficina; </li></ul>
    68. 68. Subconsultas <ul><li>Algunas instrucciones SQL pueden tener un SELECT incrustado dentro de él. </li></ul><ul><li>Un subselect puede ser usado en una cláusula WHERE y HAVING de un SELECT externo, donde se llama una subquery o consulta anidada . </li></ul><ul><li>Los Subselects pueden también aparecer en las instrucciones INSERT, UPDATE, y DELETE. </li></ul>
    69. 69. Ejemplo 5.19 Usando una subconsulta con Igualdad <ul><li>Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’ </li></ul>Tabla Oficina Tabla Empleado
    70. 70. Ejemplo 5.19 Usando una subconsulta con Igualdad <ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE numOficina = (SELECT numOficina </li></ul><ul><ul><li> FROM Oficina </li></ul></ul><ul><ul><li> WHERE calle = ‘163 Main St’); </li></ul></ul>Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’
    71. 71. Ejemplo 5.19 Usando una subconsulta con Igualdad <ul><li>El SELECT interno determina el numero de oficina para la oficina que se encuentra en ‘163 Main St’ (‘B003’). </li></ul><ul><li>El SELECT externo recupera el detalle de todos los empleados que trabajan en esa oficina. </li></ul><ul><li>El SELECT externo entonces se convierte en: </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul></ul><ul><ul><li>FROM Empleado </li></ul></ul><ul><ul><li>WHERE numOficina = ‘B003’; </li></ul></ul>
    72. 72. Ejemplo 5.19 Usando una subconsulta con Igualdad Tabla Oficina Tabla Empleado Listar los empleados que trabajan en la oficina ubicada en ‘163 Main Street’ Tabla resultado
    73. 73. Ejemplo 5.20 subconsulta con una función agregada. <ul><li>Listar a todos los empleados cuyo sueldo sea mayor que el sueldo promedio, e indique por cuánto. </li></ul>Tabla Empleado
    74. 74. Ejemplo 5.20 subconsulta con una función agregada. <ul><li>SELECT numEmpleado, nombre, apellido, cargo , </li></ul><ul><li>salario - (SELECT AVG(salario) </li></ul><ul><li>FROM Empleado) AS Diferencia </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE salario > (SELECT AVG(salario) </li></ul><ul><li>FROM Empleado); </li></ul>
    75. 75. Ejemplo 5.20 subconsulta con una función agregada. <ul><li>No puede escribir ‘WHERE salario > AVG(salario)’ </li></ul><ul><li>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 : </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo , </li></ul></ul><ul><ul><li>salario - 170000 AS Diferencia </li></ul></ul><ul><ul><li>FROM Empleado </li></ul></ul><ul><ul><li>WHERE salario > 170000); </li></ul></ul>
    76. 76. Ejemplo 5.20 subconsulta con una función agregada. Tabla Empleado SELECT numEmpleado, nombre, apellido, cargo , salario - (SELECT AVG(salario) FROM Empleado) AS Diferencia FROM Empleado WHERE salario > (SELECT AVG(salario) FROM Empleado);
    77. 77. Reglas de Subconsulta <ul><li>La cláusula ORDER BY no se puede utilizar en una subconsulta (aunque puede ser utilizada en un SELECT exterior ). </li></ul><ul><li>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 </li></ul><ul><li>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 . </li></ul>
    78. 78. Subquery Rules <ul><li>Cuando una subconsulta es uno de los dos operandos en una comparación, la subconsulta debe aparecer al lado derecho de la comparación . </li></ul>
    79. 79. Ejemplo 5.21 Subconsultas anidadas: Uso de IN <ul><li>Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle ‘163 Main Street’. </li></ul>Tabla Oficina Tabla Empleado Tabla Propiedad
    80. 80. Ejemplo 5.21 Subconsultas anidadas: Uso de IN <ul><li>Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle ‘163 Main Street’. </li></ul><ul><ul><li>SELECT numPropiedad, calle, ciudad, codigoPostal, tipo, hab, renta </li></ul></ul><ul><ul><li>FROM Propiedad </li></ul></ul><ul><ul><li>WHERE numEmpleado IN </li></ul></ul><ul><ul><ul><li>(SELECT numEmpleado </li></ul></ul></ul><ul><ul><ul><li>FROM Empleado </li></ul></ul></ul><ul><ul><ul><li>WHERE numOficina = </li></ul></ul></ul><ul><ul><ul><li>(SELECT numOficina </li></ul></ul></ul><ul><ul><ul><li> FROM Oficina </li></ul></ul></ul><ul><ul><ul><li> WHERE calle = ‘163 Main Street’)); </li></ul></ul></ul>
    81. 81. ANY y ALL <ul><li>ANY y ALL pueden ser usadas con subconsultas que producen una sola columna de números </li></ul><ul><li>Si usa ALL, la condición será verdadera si es satisfecha por todos los valores producidos en la subconsulta </li></ul><ul><li>Si usa ANY, la condición será verdadera si es satisfecha por uno o más valores producidos por la subconsulta . </li></ul><ul><li>Si la subconsulta es vacia, ALL retorna verdadero y ANY retorna falso </li></ul><ul><li>SOME mude ser usado en lugar de ANY. </li></ul>
    82. 82. Ejemplo 5.22 Uso de ANY / SOME <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de al menos un empleado de la sucursal B003. </li></ul>Tabla Empleado
    83. 83. Ejemplo 5.22 Uso de ANY / SOME <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de al menos un empleado de la sucursal B003. </li></ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo , salario </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE salario > SOME (SELECT salario </li></ul><ul><ul><li> FROM Empleado </li></ul></ul><ul><ul><li> WHERE numOficina = ‘B003’); </li></ul></ul>
    84. 84. Ejemplo 5.22 Uso de ANY / SOME <ul><li>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. </li></ul>Tabla resultado del ejemplo 5.22
    85. 85. Ejemplo 5.23 Uso de ALL <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003. </li></ul>Tabla Empleado
    86. 86. Ejemplo 5.23 Uso de ALL <ul><li>Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003. </li></ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo , salario </li></ul><ul><li>FROM Empleado </li></ul><ul><li>WHERE salario > ALL (SELECT salario </li></ul><ul><ul><li> FROM Empleado </li></ul></ul><ul><ul><li> WHERE numOIficina =‘B003’); </li></ul></ul>Tabla resultado del ejemplo 5.23
    87. 87. Consultas multi-tablas <ul><li>Puede utilizar subqueries que proporcione columnas de resultado que vienen de la misma tabla . </li></ul><ul><li>Si las columnas de resultado vienen de más de una tabla debe utilizar un join. </li></ul><ul><li>Para realizar el join, incluya más de una tabla en la cláusula FROM . </li></ul><ul><li>Utilice la coma como separador e incluya la cláusula WHERE para especificar la(s) columna(s) del join. </li></ul>
    88. 88. Consultas multi-tablas <ul><li>También es posible utilizar un alias para una tabla nombrada en la cláusula FROM. </li></ul><ul><li>El Alias es separado del nombre de la tabla con un espacio. </li></ul><ul><li>El alias se puede utilizar para calificar nombres de la columna cuando hay ambigüedad. </li></ul>
    89. 89. Ejemplo 5.24 Join simple <ul><li>Listar los nombres de todos los clientes que han visitado una propiedad y los comentarios efectuados al visitarla . </li></ul>Tabla Cliente Tabla Visita
    90. 90. Ejemplo 5.24 Join simple <ul><li>Listar los nombres de todos los clientes que han visitado una propiedad y los comentarios efectuados al visitarla . </li></ul>SELECT c.numCliente, nombre, apellido, numPropiedad, comentario FROM Cliente c , Visita v WHERE c.numCliente = v.numCliente ;
    91. 91. Ejemplo 5.24 Join simple <ul><li>Es equivalente a equi-join en Algebra Relacional. </li></ul><ul><li>Solamente las filas de ambas tablas que tengan valores idénticos en las columnas numCliente (c.numCliente = v.numCliente) se incluyen en el resultado. </li></ul>Tabla resultado ejemplo 5.24
    92. 92. Constucciones alternativas de JOI N <ul><li>SQL provee maneras alternativas para especificar JOIN: </li></ul><ul><li>FROM Cliente c JOIN Visita v ON c.numCliente = v.numCliente </li></ul><ul><li>FROM Cliente JOIN Visita USING numCliente </li></ul><ul><li>FROM Cliente c NATURAL JOIN Visita v </li></ul><ul><li>En cada caso, FROM reemplaza el FROM y WHERE original. Sin embargo, el primero produce una tabla con dos columnas idénticas de numCliente . </li></ul>
    93. 93. Ejemplo 5.25 Ordenando un join <ul><li>Para cada oficina, listar los números y nombres de los empleados que administran propiedades y las propiedades que ellos administran. </li></ul>Tabla Propiedad Tabla Empleado
    94. 94. Ejemplo 5.25 Ordenando un join <ul><li>Para cada oficina, listar los números y nombres de los empleados que administran propiedades y las propiedades que ellos administran. </li></ul>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
    95. 95. Ejemplo 5.26 Un join de tres tablas <ul><li>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. </li></ul>Tabla Propiedad Tabla Empleado Tabla Oficina
    96. 96. Ejemplo 5.26 Un join de tres tablas <ul><li>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. </li></ul>Tabla resultado ejercicio 5.25 Tabla Oficina
    97. 97. Ejemplo 5.26 Un join de tres tablas <ul><li>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. </li></ul>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;
    98. 98. Ejemplo 5.26 Un join de tres tablas <ul><li>Formulación alternativa para FROM y WHERE: </li></ul><ul><li>FROM ( Oficina o JOIN Empleado e USING numOficina ) AS oe </li></ul><ul><li>JOIN Propiedad p USING numEmpleado </li></ul>Tabla resultado ejercicio 5.26
    99. 99. Ejemplo 5.27 Agrupando por múltiples columnas <ul><li>Encuentre el total de propiedades manejadas por cada empleado . </li></ul>Tabla Propiedad Tabla Empleado
    100. 100. Ejemplo 5.27 Agrupando por múltiples columnas <ul><li>SELECT e.numOficina, s.numEmpleado, COUNT(*) AS myCount </li></ul><ul><li>FROM Empleado e, Propiedad p </li></ul><ul><li>WHERE e.numEmpleado = p.numEmpleado </li></ul><ul><li>GROUP BY e.numOficina, e.numEmpleado </li></ul><ul><li>ORDER BY e.numOficina, e.numEmpleado ; </li></ul>Encuentre el total de propiedades manejadas por cada empleado .
    101. 101. Ejemplo 5.27 Agrupando por múltiples columnas 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;
    102. 102. Calculando un Join <ul><li>El procedimiento para generar resultados de un join es: </li></ul><ul><li>1. Forme el producto cartesiano de las tablas nombradas en la cláusula FROM. </li></ul><ul><li>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 </li></ul><ul><li>3. Para cada fila restante, determine el valor de cada item en lista SELECT para producir una sola fila en la tabla resultado. </li></ul>
    103. 103. Calculando un Join <ul><li>4. Si se ha especificado DISTINCT, eliminar cualquier fila duplicada de la tabla resultado. </li></ul><ul><li>5. Si hay una cláusula ORDER BY, se requiere ordenar la tabla resultado. </li></ul><ul><li>SQL provee una forma especial de SELECT para el producto Cartesiano: </li></ul><ul><ul><li>SELECT [DISTINCT | ALL] {* | columnList} </li></ul></ul><ul><ul><li>FROM Tabla1 CROSS JOIN Tabla2 </li></ul></ul>
    104. 104. Outer Joins <ul><li>Si una fila de una de las tablas a unir no coincide, la fila es omitida de la tabla resultante. </li></ul><ul><li>El outer join retiene las filas que no satisfacen la condición. </li></ul><ul><li>Considere las siguientes tablas: </li></ul>Tabla Oficina1 Tabla Propiedad1
    105. 105. Outer Joins <ul><li>El (inner) join de estas dos tablas: </li></ul><ul><ul><li>SELECT o.*, p.* </li></ul></ul><ul><ul><ul><li>FROM Oficina1 o, Propiedad1 p </li></ul></ul></ul><ul><ul><ul><li>WHERE o.ciudad = p.ciudad; </li></ul></ul></ul>Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1
    106. 106. Outer Joins <ul><li>La tabla resultado tiene dos filas donde son iguales las ciudades . </li></ul><ul><li>No hay filas que corresponden a las oficinas en Bristol y Aberdeen . </li></ul><ul><li>Para incluir filas incomparables en la tabla resultado, utilice un join externo (Outer Join). </li></ul>Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1
    107. 107. Ejemplo 5.28 Left Outer join <ul><li>Liste las oficinas y las Propiedades que están en la misma ciudad junto con cualquier oficina incomparable . </li></ul>SELECT o.*, p.* FROM Oficina1 o LEFT JOIN Propiedad1 p ON o.ciudad = p.ciudad; Tabla Oficina1 Tabla Propiedad1
    108. 108. Ejemplo 5.28 Left Outer join <ul><li>Incluye aquellas filas de la primera tabla (left) que no coinciden con las filas de la segunda tabla (derecha) . </li></ul><ul><li>Las columnas de la segunda tabla son completadas con valores Nulos . </li></ul>Tabla resultado del ejemplo 5.28
    109. 109. Ejemplo 5.29 Right Outer join <ul><li>List e los sucursales y las propiedades en la misma ciudad y cualquier propiedad incomparable (ciudad unmatched) . </li></ul>SELECT o.*, p.* FROM Oficina1 b RIGHT JOIN Propiedad1 p ON b.ciudad = p.ciudad; Tabla Oficina1 Tabla Propiedad1
    110. 110. Example 5.29 Right Outer Join <ul><li>El Right Outer join incluye aquellas filas de la segunda tabla (derecha) que no coinciden con la las filas de la primera tabla (izquierda) . </li></ul><ul><li>Las columnas de la primera tabla son completadas con valores Nulos . </li></ul>Tabla resultado del ejemplo 5.29
    111. 111. Ejemplo 5.30 Full Outer Join <ul><li>Listar las oficinas y las propiedades en la misma ciudad y cualquier oficina o propiedad incomparable </li></ul>SELECT b.*, p.* FROM Branch1 b FULL JOIN PropertyForRent1 p ON b.bCity = p.pCity;
    112. 112. Ejemplo 5.30 Full Outer Join <ul><li>Incluye no solamente aquellas filas que tienen la misma cuidad, si no también aquellas filas de ambas tablas que no coinciden. </li></ul><ul><li>Las columnas de las tablas que no coinciden son completadas con Null. </li></ul>Tabla resultado del ejemplo 5.30
    113. 113. EXISTS y NOT EXISTS <ul><li>EXISTS y NOT EXISTS están para ser usados solamente con subqueries. </li></ul><ul><li>Produce un resultado verdadero/falso. </li></ul><ul><li>Verdadero si y solo si existe por lo menos una fila en la tabla resultado retornada por la subquery. </li></ul><ul><li>Falso si la subconsulta retorna una tabla vacía. </li></ul><ul><li>NOT EXISTS es el opuesto de EXISTS. </li></ul>
    114. 114. EXISTS y NOT EXISTS <ul><li>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. </li></ul><ul><li>Las subconsultas comunes que siguen a (NOT) EXISTS son de la forma: </li></ul><ul><ul><li>(SELECT * ...) </li></ul></ul>
    115. 115. Ejemplo 5.31 Consulta usando EXIST Listar todos los empleados que trabajan en alguna oficina de Londres . Tabla Empleado Tabla Oficina
    116. 116. Ejemplo 5.31 Consulta usando EXIST <ul><li> SELECT numEmpleado, nombre, apellido, cargo </li></ul><ul><ul><li>FROM Empleado e </li></ul></ul><ul><ul><li>WHERE EXISTS </li></ul></ul><ul><ul><li>(SELECT * </li></ul></ul><ul><ul><li> FROM Oficina o </li></ul></ul><ul><ul><li> WHERE e .numEmpleado = o .numEmpleado </li></ul></ul><ul><ul><li>AND ciudad = ‘London’); </li></ul></ul>Listar todos los empleados que trabajan en alguna oficina de Londres .
    117. 117. Ejemplo 5.31 Consulta usando EXIST Tabla Empleado Tabla Oficina Tabla resultado Ejemplo 5.31 SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e WHERE EXISTS (SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado AND ciudad = ‘London’);
    118. 118. Ejemplo 5.31 Consulta usando EXIST <ul><li>Note que la condición de búsqueda e.numOficina = o.numOficina es necesaria para considerar el correcto registro de oficina para cada empleado </li></ul><ul><li>Si se omite, listaría todos los registros de empleado, debido a que la siguiente subconsulta: </li></ul><ul><ul><li>SELECT * FROM Oficina WHERE ciudad=‘London’ </li></ul></ul><ul><li>Seria siempre verdad y la consulta quedaría : </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul></ul><ul><ul><li>FROM Empleado </li></ul></ul><ul><ul><li>WHERE true; </li></ul></ul>
    119. 119. Ejemplo 5.31 Consulta usando EXIST <ul><li>Podria también escribir esta consulta a través de un join: </li></ul><ul><ul><li>SELECT numEmpleado, nombre, apellido, cargo </li></ul></ul><ul><ul><li>FROM Empleado e, Oficina o </li></ul></ul><ul><ul><li>WHERE e.numOficina = o.numOficina </li></ul></ul><ul><ul><li>AND city = ‘London’; </li></ul></ul>
    120. 120. Union, Intersect, y Difference (Except) <ul><li>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. </li></ul><ul><li>La unión de dos tablas, A y B, es una tabla que contiene todas las filas en A o B o ambos . </li></ul><ul><li>La intersección es una tabla que contiene todas las filas comunes a A y a B . </li></ul><ul><li>La diferencia es una tabla que contiene todas las filas en A pero no en B. </li></ul><ul><li>Dos tablas deben ser unión compatible . </li></ul>
    121. 121. Union, Intersect, y Difference (Except) <ul><li>El formato de la cláusula del operador de conjunto en cada caso es : </li></ul><ul><ul><li>op [ALL] [CORRESPONDING [BY {columna1 [, ...]}]] </li></ul></ul><ul><li>Si CORRESPONDING BY es especificado, entonces la operación de conjunto es realizada sobre la o las columnas nombradas </li></ul><ul><li>Si CORRESPONDING es especificado sin el BY, la operación de conjunto se aplica sobre las columnas comunes en ambas tablas . </li></ul>
    122. 122. Union, Intersect, y Difference (Except) <ul><li>Si se especifica ALL el resultado puede incluir filas duplicadas . </li></ul><ul><li>Algunos dialectos no soportan INTERSECT y EXCEPT; otros usan MINUS en lugar de EXCEPT </li></ul>
    123. 123. Union, Intersect, y Difference (Except)
    124. 124. Ejemplo 5.32 Uso de UNION <ul><li>Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propiedad. </li></ul>Tabla Propiedad Tabla Oficina
    125. 125. Ejemplo 5.32 Uso de UNION <ul><li>(SELECT ciudad </li></ul><ul><ul><li>FROM Oficina </li></ul></ul><ul><ul><li>WHERE ciudad IS NOT NULL) UNION </li></ul></ul><ul><ul><li>(SELECT ciudad </li></ul></ul><ul><ul><li>FROM Propiedad </li></ul></ul><ul><ul><li>WHERE ciudad IS NOT NULL); </li></ul></ul>Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propiedad.
    126. 126. Ejemplo 5.32 Uso de UNION <ul><li>O </li></ul><ul><ul><li>(SELECT * FROM Oficina WHERE ciudad IS NOT NULL) UNION CORRESPONDING BY ciudad (SELECT * FROM Propiedad WHERE ciudad IS NOT NULL); </li></ul></ul>
    127. 127. Ejemplo 5.32 Uso de UNION <ul><li>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 </li></ul>Tabla resultado Ejemplo 5.32
    128. 128. Ejemplo 5.33 Uso de INTERS ECT <ul><li>Construya un listado de todas las ciudades en que hay una oficina y una propiedad. </li></ul>Tabla Propiedad Tabla Oficina
    129. 129. Ejemplo 5.33 Uso de INTERS ECT <ul><li>Construya un listado de todas las ciudades en que hay una oficina y una propiedad. </li></ul><ul><li>(SELECT ciudad FROM Oficina) </li></ul><ul><ul><li>INTERSECT </li></ul></ul><ul><ul><li>(SELECT ciudad FROM Propiedad); </li></ul></ul>
    130. 130. Ejemplo 5.33 Uso de INTERS ECT <ul><li>O </li></ul><ul><ul><li>(SELECT * FROM Oficina) </li></ul></ul><ul><ul><li>INTERSECT CORRESPONDING BY ciudad </li></ul></ul><ul><ul><li>(SELECT * FROM Propiedad); </li></ul></ul>© Pearson Education Limited 1995, 2005
    131. 131. Ejemplo 5.33 Uso de INTERS ECT <ul><li>Podríamos reescribir esta consulta, sin el operador INTERSECT: </li></ul><ul><ul><li>SELECT O.city </li></ul></ul><ul><ul><li>FROM Oficina o Propiedad p </li></ul></ul><ul><ul><li>WHERE o.ciudad = p.ciudad; </li></ul></ul><ul><li>O: </li></ul><ul><ul><li>SELECT DISTINCT ciudad </li></ul></ul><ul><ul><li>FROM Oficina o </li></ul></ul><ul><ul><li>WHERE EXISTS </li></ul></ul><ul><ul><li>(SELECT * FROM Propiedad p </li></ul></ul><ul><ul><li>WHERE p.ciudad = o.ciudad); </li></ul></ul>
    132. 132. Ejemplo 5.34 Uso de EXCEPT <ul><li>Listar todas las ciudades en donde haya oficinas, pero no propiedades . </li></ul><ul><li> (SELECT ciudad FROM Oficina) </li></ul><ul><ul><li>EXCEPT </li></ul></ul><ul><ul><li>(SELECT ciudad FROM Propiedad); </li></ul></ul><ul><li>O </li></ul><ul><ul><li>(SELECT * FROM Oficina) </li></ul></ul><ul><ul><li>EXCEPT CORRESPONDING BY ciudad </li></ul></ul><ul><ul><li>(SELECT * FROM Propiedad); </li></ul></ul>
    133. 133. Ejemplo 5.34 Uso de EXCEPT <ul><li>Podemos reescribir esta consulta sin el operador EXCEPT: </li></ul><ul><ul><li>SELECT DISTINCT ciudad FROM Oficina </li></ul></ul><ul><ul><li>WHERE ciudad NOT IN </li></ul></ul><ul><ul><li>(SELECT ciudad FROM Propiedad); </li></ul></ul><ul><li>O </li></ul><ul><ul><li>SELECT DISTINCT ciudad FROM Oficina o </li></ul></ul><ul><ul><li>WHERE NOT EXISTS </li></ul></ul><ul><ul><li>(SELECT * FROM Propiedad p </li></ul></ul><ul><ul><li>WHERE p. ciudad = b. ciudad ); </li></ul></ul>
    134. 134. Actualizaciones a la Base de da tos <ul><ul><li>El lenguaje SQL puede ser usado para consultar la base de datos como también para modificar los datos. </li></ul></ul><ul><ul><li>Tres comandos SQL para modificar el contenido de las tablas en la base de datos: </li></ul></ul><ul><ul><li>Insert – Agrega nuevas filas de datos a una tabla </li></ul></ul><ul><ul><li>Delete – Elimina filas de datos de una tabla </li></ul></ul><ul><ul><li>Update – Modifica los datos existentes en una tabla. </li></ul></ul>
    135. 135. INSERT <ul><li> INSERT INTO Nombretabla [ ( listaDeColumnas ) ] </li></ul><ul><ul><li>VALUES ( listaDeValores ) </li></ul></ul><ul><li>listaDeColumnas es opcional; si se omite, SQL asume la lista de todas las columnas en el orden original. </li></ul><ul><li>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 . </li></ul>
    136. 136. INSERT <ul><li>La listaDeValores debe coincidir con listaDeColumnas como sigue: </li></ul><ul><li>El número de ítems de cada lista debe ser el mismo </li></ul><ul><li>Debe haber una correspondencia directa en la posición de los ítems en las dos listas, </li></ul><ul><li>El tipo de datos de cada item en listaDeValores debe ser compatible con el tipo de datos de la correspondiente columna. </li></ul>
    137. 137. Ejemplo 5.34 INSERT . . . VALUES <ul><li>Insertar una nueva fila en la tabla Empleado, entregando los datos para todas las columnas: </li></ul>Tabla Empleado
    138. 138. Ejemplo 5.34 INSERT . . . VALUES <ul><li>INSERT INTO Empleado </li></ul><ul><li>VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Asistente’, ‘M’, Date‘1957-05-25’, 83000, ‘B003’); </li></ul>Insertar una nueva fila en la tabla Empleado, entregando los datos para todas las columnas: Tabla Empleado
    139. 139. Ejemplo 5.35 INSERT usando valores por defecto <ul><li>INSERT INTO Empleado (numEmpleado, nombre, apellido, cargo, salario, numOficina) </li></ul><ul><li>VALUES (‘SG44’, ‘Amme’, ‘Jones’, ‘Asistente’, 8100, ‘B003’); </li></ul><ul><li>O </li></ul><ul><ul><li>INSERT INTO Empleado </li></ul></ul><ul><ul><li>VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Asistente’, NULL , </li></ul></ul><ul><ul><li>NULL , 8100, ‘B003’); </li></ul></ul>Insertar una nueva fila en la tabla Empleado suministrando datos para todas las columnas obligatorias. numEmpleado, nombre, apellido, cargo, salario y numOficina .
    140. 140. INSERT … SELECT <ul><li>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: </li></ul><ul><li>INSERT INTO NombreTabla [ (listaDeColumnas) ] </li></ul><ul><ul><li>SELECT ... </li></ul></ul>
    141. 141. Ejemplo 5.35 INSERT … SELE CT <ul><ul><li>EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp) </li></ul></ul><ul><li>Poblar la tabla EmpleadoTotalPropiedad usando los detalles de la tabla Empleado y la tabla Propiedad . </li></ul>Asuma que hay una tabla EmpleadoTotalPropiedad, que contiene los nombres de los empleados y el número de propiedades que ellos manejan:
    142. 142. Ejemplo 5.35 INSERT … SELE CT <ul><li>Poblar la tabla EmpleadoTotalPropiedad usando los detalles de la tabla Empleado y la tabla Propiedad . </li></ul><ul><li>EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp) </li></ul>Tabla Empleado Tabla Propiedad
    143. 143. Ejemplo 5.35 INSERT … SELE CT <ul><ul><li>INSERT INTO EmpleadoTotalPropiedad </li></ul></ul><ul><ul><li>(SELECT e.numEmpleado, Nombre, Apellido, COUNT(*) </li></ul></ul><ul><ul><li>FROM Empleado e, Propiedad p </li></ul></ul><ul><ul><li>WHERE e.numEmpleado = p.numEmpleado </li></ul></ul><ul><ul><li>Group BY e.numempleado , nombre, apellido) </li></ul></ul><ul><ul><li>UNION </li></ul></ul><ul><ul><li>(SELECT numEmpleado, nombre, apellido, 0 </li></ul></ul><ul><ul><li>FROM Empleado e </li></ul></ul><ul><ul><li>WHERE NOT EXIST (SELECT * </li></ul></ul><ul><ul><li>FROM Propiedad p </li></ul></ul><ul><ul><li>WHERE e.numEmpleado = p.numEmpleado)); </li></ul></ul>
    144. 144. Ejemplo 5.35 INSERT … SELE CT <ul><li>Si la segunda parte de la UNIÓN se omite, excluye a los empleados que no manejan actualmente ninguna propiedad . </li></ul>Tabla resultado Ejemplo 5.35
    145. 145. UPDATE <ul><ul><li>UPDATE NombreTabla </li></ul></ul><ul><ul><li>SET columnName1 = dataValue1 </li></ul></ul><ul><ul><li>[, columnName2 = dataValue2...] </li></ul></ul><ul><ul><li>[WHERE searchCondition] </li></ul></ul><ul><li>NombreTabla puede ser el nombre de una tabla base o una vista actualizable. </li></ul><ul><li>La cláusula SET especifica los nombres de una o más columnas a ser actualizadas </li></ul>
    146. 146. UPDATE <ul><li>La cláusula WHERE es opcional: </li></ul><ul><ul><li>Si se omite, las columnas nombradas serán actualizadas para todas las filas en tabla; </li></ul></ul><ul><ul><li>Si se especifica, solamente esas filas que satisfacen la searchCondition son actualizadas. </li></ul></ul><ul><li>El(los) nuevo(s) dataValue(s) debe(n) ser compatible con el tipo de datos para la columna correspondiente. </li></ul>
    147. 147. Ejemplo 5.38/39 UPDATE todas las filas <ul><li>Dé a todos los Empleados un aumento de sueldo del 3% . </li></ul><ul><li>Dé a todos los Gerentes un aumento de sueldo del 5% . </li></ul>Tabla Empleado
    148. 148. Ejemplo 5.38/39 UPDATE todas las filas <ul><li>Dé a todos los Empleados un aumento de sueldo del 3% . </li></ul><ul><li>UPDATE Empleado </li></ul><ul><ul><li>SET salario = salario*1.03; </li></ul></ul>Tabla Empleado
    149. 149. Ejemplo 5.38/39 UPDATE todas las filas <ul><li>Dé a todos los Gerentes un aumento de sueldo del 5% . </li></ul><ul><li>UPDATE Empleado </li></ul><ul><ul><li>SET salario = salario*1.05 </li></ul></ul><ul><ul><li>WHERE cargo = ‘Gerente’; </li></ul></ul>Tabla Empleado
    150. 150. Ejemplo 5.38/39 UPDATE múltiples columnas <ul><li>Promueva a David Ford (numEmpleado=‘SG14’) a Gerente y cambie su salario a 190.000. </li></ul>
    151. 151. Ejemplo 5.38/39 UPDATE múltiples columnas <ul><li>Promueva a David Ford (numEmpleado=‘SG14’) a Gerente y cambie su salario a 190.000. </li></ul><ul><li>UPDATE Empleado </li></ul><ul><ul><li>SET cargo = ‘Gerente’, </li></ul></ul><ul><ul><li>salario = 190000 </li></ul></ul><ul><ul><li>WHERE numEmpleado = ‘SG14’; </li></ul></ul>
    152. 152. DELETE <ul><ul><li>DELETE FROM NombreTabla </li></ul></ul><ul><ul><li>[WHERE searchCondition] </li></ul></ul><ul><li>NombreTabla puede ser una tabla base o una vista actualizable. </li></ul><ul><li>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 </li></ul>
    153. 153. Ejemplo 5.41/42 DELETE Filas especificas <ul><li>Suprima todas las visitas que se relacionen con la propiedad PG4 . </li></ul><ul><li>Elimine todos los registros de la tabla Visita. </li></ul>Tabla Visita
    154. 154. Ejemplo 5.41/42 DELETE Filas especificas <ul><li>Suprima todas las visitas que se relacionen con la propiedad PG4 . </li></ul><ul><li>DELETE FROM Visita </li></ul><ul><ul><li>WHERE numPropiedad = ‘PG4’; </li></ul></ul>Tabla Visita
    155. 155. Ejemplo 5.41/42 DELETE Filas especificas <ul><li>Elimine todos los registros de la tabla Visita. </li></ul><ul><li>DELETE FROM Visita; </li></ul>Tabla Visita
    156. 156. Unidad I – Introducción a las Bases de datos <ul><li>Fin de la Unidad </li></ul>
    157. 157. la notación BNF (forma Backus-Naur) <ul><li><oración> ::= <sujeto> <predicado> <sujeto>    ::= Juan | Julia <predicado> ::= <verbo> <adverbio> <verbo>       ::= maneja | corre <adverbio> ::= descuidadamente | frecuentemente </li></ul>Las gramáticas tienen métodos alternativos útiles para desplegar las producciones
    158. 158. X/Open Company <ul><li>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 </li></ul>
    159. 159. Unidad I – Introducción a las Bases de datos <ul><li>Fin de la Unidad </li></ul>
    1. ¿Le ha llamado la atención una diapositiva en particular?

      Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

    ×