Universidade da Coruña Departamento de Computación. Ampliación de SQL. Luis A. González Ares.

Documentos relacionados
Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

FUNDAMENTOS ORACLE 12C

Unidad. Lenguaje SQL. (Structured Query Language)

Oracle Fundamentos. Programa de Estudio.

Oracle Fundamentos. Programa de Estudio.

Operadores. Además se pueden emplear en sentencias SET.

Manual Aprendiendo Practicando Oracle SQL (Spanish Edition) Click here if your download doesn"t start automatically

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) CONSULTA DE DATOS

Oracle Database 12c SQL and PLSQL Fundamentals

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

CC BASES DE DATOS PRIMAVERA Clase 7: SQL (II) Aidan Hogan

CC BASES DE DATOS OTOÑO 2018

CC BASES DE DATOS OTOÑO Clase 5: SQL (II) Aidan Hogan

SQL SERVER SQL Server 2005 permite tres tipos de operaciones con conjuntos: UNION, disponible en todas las versiones de SQL Server.

Programa de prácticas:

Visualización de Datos a partir de Varias Tablas. Copyright Oracle Corporation, All rights reserved.

2. Distinguir entre los comandos SQL*Plus y las sentencias SQL. 3. Consultar la estructura de una tabla, por ejemplo emp.

Tema 4. Manipulación de datos con SQL

ÍNDICE INTRODUCCIÓN...17

Consulta de datos. FROM, obligatoria, se especifican las tablas donde está la información necesaria. Se puede poner alias a las tablas

Objetivos: Descripción del curso. Curso: Dirigido a: INTRODUCCIÓN A SQL - ORACLE UNIVERSIDAD NACIONAL DE INGENIERÍA

Capítulo 4. Realización de consultas

Consultas Complejas:

SQL: Lenguaje de Interrogación Estructurado

ADMINISTRACION DE ORACLE 9i Guía de estudio (OCA) TEMA 1

1. DML. Las consultas multitabla

Práctica 3: El lenguaje SQL (1ª parte). Programa de prácticas: (5ª sesión). Lenguaje SQL: manipulación de datos (consulta y actualización):

Tema 4. DML (Parte I)

Laboratorio de Bases de Datos (EBB)

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

Introducción a SQL sobre Oracle

ÍNDICE INTRODUCCIÓN...13

PARTE I Desarrollen las siguientes cuestiones (concepto, ejemplos, etc):

Programación de Base de Datos con SQL Duración: 25 Horas Código Sence:

ÍNDICE. Introducción... XVII. Capítulo 1. Oracle 10g y el Grid Computing... 1

SQL Oracle 12c. Este curso le permitira saber y conocer:

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO

ÍNDICE PRIMERA PARTE... 17

Bases de Datos 1. Teórico: Structured Query Language

Tutorial de SQL - El comando SELECT

Bases de Datos Relacionales III

Administración y Análisis de Base de Datos con Microsoft SQL Server

Introducción a SQL sobre Oracle

PROGRAMAS DE ESTUDIO FORMATO 7 INTRODUCCIÓN A SQL. Área de Formación Profesional

Introducción al lenguaje SQL

8 SQL SERVER 2008 RA-MA

SQL Los fundamentos del lenguaje

Características del lenguaje SQL

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

Uso de SQL. "WHERE id = " + cuentas[i].getid() o bien ResulSet r =s.executequery("select nombre FROM alumno" + "WHERE id = " + cuentas[i].

6.1. Introducción. Guía 5. SQL.

Bases de Datos 2. Teórico

SQL (Structured Query Language)

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

SQL Los fundamentos del lenguaje (con ejercicios corregidos) (2ª edición)

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

Restricción y Clasificación de los Datos. Copyright Oracle Corporation, All rights reserved.

SQL DML Select. Ges$ón y Modelación de Datos. María Constanza Pabón

Modelamiento y Diseño de Base de Datos

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Ampliación de Bases de Datos Práctica 1: El lenguaje PL/SQL de Oracle Sesión 1: Introducción al PL/SQL

SQL. Carlos A. Olarte BDI

Guía práctica SQL. (c) Francisco Charte Ojeda

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

Insertar Datos en Tablas

Objetivos y Temario CURSO MySQL 5

TEMA 5: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

Laboratorios de BASES DE DATOS. (I.T. Informática)

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

Formato para prácticas de laboratorio

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo

SQL: Consultas Avanzadas. Bases de Datos

Oracle Database: Introducción a SQL

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACIÓN

Adquisición y Tratamiento de Datos (Febrero 2009).

Tema 5. Lenguaje de Definición de Datos

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

SQL. Amparo López Gaona. México, D.F. Noviembre 2003

1. DML. Las consultas de resumen

UNION, INTERSECCION Y DIFERENCIA. SELECT TABLE Expresión con operador de reunión (SELECT * FROM PROFESOR) UNION (SELECT * FROM ESTUDIANTE)

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

20761 Querying Data with Transact-SQL

Tema 7. Elaboración de consultas básicas de selección. Lenguajes de bases de datos. SQL básico 15/12/2011

ADMINISTRACION DE BASES DE DATOS EN ORACLE

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

2.5.- El lenguaje estándar SQL

Informática Básica Práctica Tema 3 Ejercicios de SQL

Manual de Sentencias Básicas en SQL

Lenguaje de manipulación de datos

Oracle Database: Conceptos Básicos de SQL y PL/SQL

TEMA 4.. CONSULTA DE DATOS I.

Tutorial MySql - 1 -

Consultas que conllevan el uso de igualdades para la concatenación de filas de varias tablas. El ejemplo anterior es una equijoin.

Constraints (Restricciones) Copyright Oracle Corporation, All rights reserved.

Transcripción:

HAC LUCE Universidade da Coruña Departamento de Computación Ampliación de SQL Luis A. González Ares lgares@udc.es

Ampliación de SQL Planteamiento Objetivos Describir algunos de los elementos que más recientemente se han incorporado al lenguaje SQL. Analizar las características de dichos elementos. Conocer su implementación en un SGBD real. Establecer relaciones entre los nuevos conocimientos de SQL y los que ya se revisaron. Contenidos 1. Elementos iniciales 2. Join 3. Otros elementos 4. Expresiones condicionales Nota El presente material es un resumen de lo impartido en las clases de la Facultad de Informática, que se entrega como documento de apoyo. Ampliación de SQL Luis Glez. Ares lgares@udc.es 1

Ampliación de SQL Elementos iniciales Caracteres problemáticos Cadenas de caracteres que contienen un apóstrofe. Aparición en INSERT, SELECT, etc. Solución: (su aparición dos veces lo convierte en el propio carácter, y no en lo que representa). Predicado LIKE Correspondencia con un patrón o modelo. Comodines: % expresión_carácter [NOT] LIKE patrón [ESCAPE carácter_protector] Problemas si el patrón contiene comodines. Solución: indicar un carácter protector. FROM emp WHERE ename LIKE %a%% ESCAPE a ORDER BY nombre Predicado SIMILAR Correspondencia con un patrón (expresión regular). Usa: _ % * + [] [^ ] [: :] () expresión_carácter [NOT] SIMILAR patrón Ampliación de SQL Luis Glez. Ares lgares@udc.es 2

Ampliación de SQL Elementos iniciales (ii) Predicado EXISTS Comprobación de si una subconsulta devuelve o no filas.... [NOT] EXISTS subconsulta FROM dept d WHERE EXISTS ( FROM emp WHERE sal > 1500 AND deptno = d.deptno) Predicado UNIQUE Comprueba si en el resultado de una subconsulta aparecen filas repetidas.... [NOT] UNIQUE subconsulta FROM dept d WHERE UNIQUE ( FROM emp WHERE sal > 1500 AND deptno = d.deptno) Ampliación de SQL Luis Glez. Ares lgares@udc.es 3

Ampliación de SQL Elementos iniciales (iii) Operadores de cuantificación ANY o SOME, ALL Comprobación de una expresión escalar con el resultado del operador sobre una subconsulta.... expresión_escalar operador_comparación { ALL SOME ANY } (lista_valores) Operadores de comparación: =!= > < <= >= FROM emp WHERE sal = ANY (SELECT sal FROM emp WHERE deptno = 30); Operadores conjuntistas UNION, INTERSECT, EXCEPT Aplica el operador al resultado de dos consultas. consulta 1 { UNION EXCEPT INTERSECT } { ALL DISTINCT } consulta 2 UNION: Unión. INTERSECT: Intersección. EXCEPT: Diferencia. Ampliación de SQL Luis Glez. Ares lgares@udc.es 4

Ampliación de SQL Elementos iniciales (iv) Operadores conjuntistas UNION, INTERSECT, EXCEPT (cont.) Cada operador por defecto aplica DISTINCT. UNION: Valores que aparecen en las filas de una tabla o de la otra, sin repetir ningún valor. UNION ALL: Valores que aparecen en las filas de una tabla o de la otra, repetidos las veces que aparecen. INTERSECT: Valores que aparecen en las filas de una tabla y de la otra, sin repetir ningún valor. INTERSECT ALL: Valores que aparecen en las filas de una tabla y de la otra, repetidos n veces (si x e y son el número de veces que se repite un valor en la primera y en la segunda tabla, respectivamente, entonces n = mín(x, y)). EXCEPT: Valores que aparecen en las filas de la primera tabla y no en la segunda, sin repetir ningún valor. EXCEPT ALL: Valores que aparecen en las filas de la primera tabla y no en la segunda, repetidos n veces (si x e y son el número de veces que se repite un valor en la primera y en la segunda tabla, respectivamente, entonces n = máx(x y, 0)). Ampliación de SQL Luis Glez. Ares lgares@udc.es 5

Ampliación de SQL Join INNER JOIN Permite vincular las columnas de varias tablas mediante operadores de comparación. Sintaxis: FROM t1 [INNER] JOIN t2 ON condición_join Dados: emp(empno, ename, deptno) dept(deptno, dname, loc) el join se expresa mediante: FROM emp, dept FROM emp INNER JOIN dept WHERE emp.deptno = dept.deptno ON emp.deptno = dept.deptno AND ename LIKE A% WHERE ename LIKE A% Supongamos ahora: emp(empno, ename, deptno, loc) dept(deptno, dname, loc) y deseamos (equijoin): FROM emp INNER JOIN dept ON emp.deptno = dept.deptno AND emp.loc = dept.loc Ampliación de SQL Luis Glez. Ares lgares@udc.es 6

Ampliación de SQL Join (ii) Join natural Si expresamos una condición de igualdad sobre todas las columnas que tienen el mismo nombre en dos tablas, se tiene el join natural. Sintaxis: FROM t1 NATURAL [INNER] JOIN t2 Dados: emp(empno, ename, deptno, loc) dept(deptno, dname, loc) el join natural sería: Una alternativa de efectos casi iguales: FROM emp NATURAL INNER JOIN dept FROM emp INNER JOIN dept USING (deptno, loc) El join normal: FROM emp INNER JOIN dept ON emp.deptno = dept.deptno AND emp.loc = dept.loc Los resultados son muy parecidos: en el primer y segundo resultado, las columnas deptno y loc aparecen una única vez; no así en el tercero. El join natural y el join con USING son iguales del todo sólo si todas las columnas de nombres iguales están en el USING. El join natural se corresponde con la operación join ( ) de álgebra relacional. Ampliación de SQL Luis Glez. Ares lgares@udc.es 7

Ampliación de SQL Join (iii) OUTER JOIN Permite vincular las columnas de varias tablas mediante operadores de comparación, haciendo que aparezcan todas las columnas de una tabla, de la otra, o de ambas, cumplan o no la condición de join. Sean dos relaciones R y S. Tenemos las operaciones: Left outer join de R y S (R1S): Todas las filas de la relación de la izquierda (R), rellenando con nulos en las filas que no se correspondan con las de S. Right outer join de R y S (R2S): Todas las filas de la relación de la derecha (S), rellenando con nulos en las filas que no se correspondan con las de R. Full outer join de R y S (R 3 S): Todas las filas de la relación de la izquierda (R), y todas las filas de la relación de la derecha (S), rellenando con nulos en las filas que no se correspondan con las de la otra. FROM r {LEFT RIGHT FULL} [OUTER] JOIN s ON condición_join FROM r LEFT OUTER JOIN s ON r.c2 = s.c2 Ampliación de SQL Luis Glez. Ares lgares@udc.es 8

Ampliación de SQL Join (iv) CROSS JOIN Representa el producto cartesiano de las tablas involucradas. FROM t1 CROSS JOIN t2 FROM t1, t2 UNION JOIN Dadas dos tablas, se construye una tabla que tiene cada columna y cada fila de ambas tablas. FROM t1 UNION JOIN t2 Dadas las tablas R(a, b) y S(x, y, z), el resultado del UNION JOIN es: a b x y z...... NULL NULL NULL......... NULL NULL NULL NULL NULL............ NULL NULL......... Ampliación de SQL Luis Glez. Ares lgares@udc.es 9

Ampliación de SQL Join (v) Múltiples joins El orden de ejecución es de izquierda a derecha (asociativos a la izquierda). Equivalencias: SELECT expresion,... SELECT expresion,... FROM t1 JOIN t2 FROM (t1 JOIN t2 ON condición_join1 ON condición_join1) JOIN t3 JOIN t3 ON condición_join2 ON condición_join2...... WHERE predicado WHERE predicado Modificación del orden: SELECT expresion,... FROM t1 JOIN (t2 JOIN tb3 ON condición_join2) ON condición_join1... WHERE predicado Ampliación de SQL Luis Glez. Ares lgares@udc.es 10

Ampliación de SQL Otros elementos Subconsultas de fila Se trata de subconsultas que devuelven más de una columna. Permite realizar operaciones de comparación simultáneamente sobre cada columna que aparece en su resultado. Sintaxis: SELECT expresión a,... FROM tabla 1,... WHERE (expresión p1,..., expresión pn ) operador (SELECT expresión s1,..., expresión sn FROM... WHERE...) Operadores válidos: comparación, IN, = SOME, >ALL,... Operadores válidos en Oracle 9.2: IN, = SOME, = ALL (para subconsultas de fila!) Ejemplo: FROM articulo WHERE (cd_articulo, precio_min) IN (SELECT cd_articulo, precio FROM ventas) Ampliación de SQL Luis Glez. Ares lgares@udc.es 11

Ampliación de SQL Otros elementos (ii) Expresión de consulta Se denomina expresión de consulta, vista en ĺınea o tabla derivada a la utilización de una consulta en las cláusulas SELECT o FROM de otra. Sintaxis: SELECT expresión,..., (SELECT...) SELECT expresión,... FROM t1,... FROM t1, (SELECT...)...... No debe confundirse con la denominación tradicional de subconsulta. Permite que en el resultado de una consulta aparezcan datos correspondientes a elementos diferentes. Si aparece en la cláusula SELEC sólo puede ser un SELECT escalar. Su potencialidad está en que aparezca en la cláusula FROM. Las expresiones de consulta dentro de un FROM deben ser autosuficientes. Ejemplos: SELECT empno, ename, sal, (SELECT MAX(sal) FROM emp) - sal FROM emp SELECT empno, ename, sal, max_sal, min_sal, max_sal - sal, sal - min_sal FROM emp, (SELECT MAX(sal) max_sal, MIN(sal) min_sal FROM emp) WHERE sal > max_sal / 2 Ampliación de SQL Luis Glez. Ares lgares@udc.es 12

Ampliación de SQL Expresiones condicionales Expresión CASE En SQL pueden incluirse expresiones condicionales, o sea, que su valor dependa de que se cumplan unas condiciones, mediante la expresión CASE. Sintaxis: CASE WHEN condición 1 THEN expresión 1... WHEN condición n THEN expresión n [ELSE expresión m ] END Si se produce la condición condición i el resultado será la expresión expresión i, con i = 1,..., n; en otro caso será expresión m. Todas las expresiones deben tener el mismo tipo de datos. Puede aparecer donde lo pueda hacer una expresión. SELECT empno, ename, sal, CASE WHEN sal > 1000 AND sal <= 1500 AND comm IS NULL THEN Salario medio WHEN sal > 1500 AND sal <= 2500 THEN Alto ELSE Otros END, comm FROM emp Ampliación de SQL Luis Glez. Ares lgares@udc.es 13

Ampliación de SQL Expresi. condicionales (ii) CASE reducida Consiste en una sintaxis alternativa, más reducida, permitida si todas las condiciones de un CASE son de igualdad sobre la misma expresión. Sería el caso : CASE WHEN expresión o = expresión o1 THEN expresión 1... WHEN expresión o = expresión on THEN expresión n [ELSE expresión m ] END Podría expresarse como: CASE expresión o WHEN expresión o1 THEN expresión 1... WHEN expresión on THEN expresión n [ELSE expresión m ] END Ejemplo: SELECT deptno, dname, CASE deptno WHEN 10 THEN CONTABILIDAD WHEN 20 THEN INVESTIGACION ELSE Otros END FROM dept Ampliación de SQL Luis Glez. Ares lgares@udc.es 14

Ampliación de SQL Expresi. condicionales (iii) NULLIF Supongamos que se desea comparar la correspondencia de una expresión con otra, y si coinciden asignar un valor nulo como resultado, manteniendo el valor de la primera expresión si no se produce la correspondencia. Esto es: CASE WHEN expresión 1 = expresión 2 THEN NULL ELSE expresión 1 END Una forma alternativa de expresar lo anterior es usar la expresión NULLIF: NULLIF( expresión 1, expresión 2 ) Ejemplo: SELECT empno, ename, sal, NULLIF(comm, -1) FROM emp Ampliación de SQL Luis Glez. Ares lgares@udc.es 15

Ampliación de SQL Expresi. condicionales (iv) COALESCE Dadas n expresiones, nos interesa como resultado la primera de las n 1 que es diferente al valor nulo; en caso de que ninguna lo sea, el resultado será la expresión n. Esto es: CASE WHEN expresión 1 IS NOT NULL THEN expresión 1 WHEN expresión 2 IS NOT NULL THEN expresión 2... WHEN expresión n 1 IS NOT NULL THEN expresión n 1 ELSE expresión n END La forma alternativa de expresar lo anterior usando la expresión COALESCE es: COALESCE(expresión 1, expresión 2,..., expresión n 1, expresión n ) Ejemplo: SELECT codigo, nombre, precio, precio_min, COALESCE(0.85*precio, precio_min, 12) Rebajas FROM articulo Ampliación de SQL Luis Glez. Ares lgares@udc.es 16

Ampliación de SQL Otras sentencias TRUNCATE TABLE La eliminación de todas las filas de una tabla se realiza con la sentencia DELETE TABLE usándola de la forma: DELETE FROM mitabla Recordemos que DELETE es una sentencia DML, que mantiene la estructura de la tabla intacta y que no modifica las características del espacio asignado a la tabla. Una manera alternativa de eliminar todas las filas de una tabla es usar TRUNCATE TABLE TRUNCATE TABLE mitabla La sentencia elimina todas las filas de la tabla y libera los espacios asignados a la tabla, manteniendo la estructura de la tabla y de los índices creados. TRUNCATE TABLE es en general más eficiente que DELETE TABLE (libera espacios, no recarga los aspectos transaccionales, etc.). Se considera una sentencia DDL, aunque no modifica las estructuras lógicas. Ampliación de SQL Luis Glez. Ares lgares@udc.es 17

Ampliación de SQL Otras sentencias (ii) MERGE Permite realizar a la vez operaciones de UPDATE y de INSERT sobre una tabla destino, según que se cumpla o no una condición entre sus filas y las de otra tabla o consulta, denominada tabla origen (<tabla origen> : {<tabla base> <vista> <consulta>}). MERGE INTO <tabla destino> USING <tabla origen> ON ( <condición> ) WHEN MATCHED THEN <sentencia UPDATE> WHEN NOT MATCHED THEN <sentencia INSERT> Las filas de la tabla origen se dividen en dos grupos: Las que cumplen la condición o filas UPDATE. Las que no cumplen la condición o filas INSERT. Y ocurre que: Cada fila de la tabla destino que se corresponde, según la condición, con una de las filas UPDATE, se actualiza. Es un error que una fila de la tabla destino se corresponda con más de una de las filas UPDATE. Las filas INSERT se incorporan a la tabla destino. Ampliación de SQL Luis Glez. Ares lgares@udc.es 18

Ampliación de SQL Otras sentencias (iii) MERGE (cont.) Dadas las dos tablas MD (C1, C2) y MO (C1, C2) con las siguientes filas: MD: C1 C2 MO: C1 C2 a 100 a 200 b 150 b 250 c 175 d 290 Ejecutando: MERGE INTO md d USING mo o ON ( d.c1 = o.c1 ) WHEN MATCHED THEN UPDATE SET c2 = o.c2 WHEN NOT MATCHED THEN INSERT (c1, c2) VALUES (o.c1, o.c2) Se obtiene: MD: C1 C2 MO: C1 C2 a 200 a 200 b 250 b 250 c 175 d 290 d 290 Ampliación de SQL Luis Glez. Ares lgares@udc.es 19

Ampliación de SQL Otras sentencias (iv) MERGE (cont.) En resumen: En la sentencia MERGE solo se modifica la tabla destino. La tabla origen puede ser una tabla base, una vista o una consulta. Las filas de la tabla origen que se corresponden según la condición (filas UPDATE), se actualizan en la tabla destino. Las filas de la tabla origen que no se corresponden según la condición (filas INSERT), se incorporan a la tabla destino. Las filas de la tabla destino que no se corresponden según la condición, no se modifican. En el bloque MATCHED no se puede modificar una columna de la tabla destino involucrada en la condición. La sentencia MERGE aparece en SQL:2003. Tanto en las implementaciones de los fabricantes como en las revisiones del estándar (SQL:2008), se orienta a ampliar las posibilidades de los bloques MATCHED y NOT MATCHED con sentencias y condiciones adicionales. Ampliación de SQL Luis Glez. Ares lgares@udc.es 20

Ampliación de SQL Bibliografía Referencias [CeCa03] Celma, M.; Casamayor, J. C.; Mota, L.: Bases de Datos Relacionales. Prentice Hall, 2003. [GrWe02] Groff, J.; Weinberg, P. N.: SQL: The Complete Reference (2 nd edition). McGraw-Hill, 2002. (Traducción: SQL. Manual de referencia. McGraw-Hill, 2003.) [GuPe99] Gulutzan, P.; Pelzer, T.: SQL-99 Complete, Really. R&B Books, 1999. [MeSi02] [RiMa02] [SiKo06] Melton, J.; Simon, A.: SQL:1999 - Understanding Relational Language Components. Morgan Kaufmann, 2002. Rivero, E; Martínez, L.; Reina, L.; Benavides, J.; Olaizola, J.: Introducción al SQL para usuarios y programadores. Thomson- Paraninfo, 2002. Silberschatz, A.; Korth, H.; Sudarshan, S. Database System Concepts (5 th edition). McGraw-Hill, 2006. (Traducción: Fundamentos de Bases de Datos. McGraw-Hill, 2006.) Ampliación de SQL Luis Glez. Ares lgares@udc.es 21