el lenguaje sql - inicio - kybele - grupo de investigación€¦ · © 2008 grupo kybele 2 Índice...
Post on 28-Jun-2020
5 Views
Preview:
TRANSCRIPT
© 2008 Grupo Kybele 2 2
Índice
1. INTRODUCCIÓN q 1.1.- ¿Qué es SQL? q 1.2.- Estado actual y futuro del SQL
2. SINTÁXIS BÁSICA DEL SQL-92 q 2.1.- Lenguaje de Definición de Datos
◦ 2.1.1.- Definición del esquema ◦ 2.1.2.- Evolución del esquema
q 2.2.- Lenguaje de Manipulación de Datos ◦ 2.2.1.- Actualizaciones ◦ 2.2.2.- Consultas
q 2.3.- Lenguaje de Control de Datos ◦ 2.3.1.- Recuperación y concurrencia ◦ 2.3.2.- Seguridad y confidencialidad
3. BIBLIOGRAFIA
© 2008 Grupo Kybele 3 3
¿QUÉ ES SQL? Structured Query Language
• Evolución de SEQUEL de IBM para prototipo System R (1977) • LENGUAJE DE:
* Definición * Manipulación
- Consulta interactiva - Programación
* Control
• OPERA CON CONJUNTOS DE REGISTROS • LENGUAJE RELACIONAL y DECLARATIVO
1. Introducción
© 2008 Grupo Kybele 4 4
Estado actual y futuro del SQL
SQL:2003, actual estándar:
capacidades de Orientación al Objeto (SQL:1999) capacidades multicolecciones y XML
1. Introducción
© 2008 Grupo Kybele 5 5
SQL 86-87 Intersección de implementaciones existentes
SQL 89
+ IEF Integridad Referencial básica
SQL 92
+ • Mejor tratamiento de restricciones • Sintaxis de dominios • Tablas temporales • Nuevos tipos de datos • L. manipulac. esquema • Combinación externa • SQL dinámico...
SQL:1999
+
• Disparadores • L. procedimental... • Orientación al Objeto
TAD Encapsulamiento Jerarquías Herencia IDO...
1. Introducción
SQL:2003 + • Multisets, BigInt • XML …
© 2008 Grupo Kybele 6 6
2. Sintaxis Básica del SQL-92
La Arquitectura ANSI/X3/SPARC
ESQUEMA EXTERNO 1
ESQUEMA EXTERNO n
ESQUEMA CONCEPTUAL
ESQUEMA INTERNO
DATOS ALMACENADOS
NIVEL EXTERNO
Correspondencia Externa/Conceptual
NIVEL CONCEPTUAL
Correspondencia Conceptual/Interna
NIVEL INTERNO
ESQUEMA EXTERNO 1
ESQUEMA EXTERNO n
ESQUEMA CONCEPTUAL
ESQUEMA INTERNO
DATOS ALMACENADOS
NIVEL EXTERNO
Correspondencia Externa/Conceptual
NIVEL CONCEPTUAL/ LÓGICO GLOBAL Correspondencia
Conceptual/Interna
NIVEL INTERNO
© 2008 Grupo Kybele 7
Nivel lógico global Nivel externo Nivel físico
Lenguaje de Definición de Datos - LDD
CREATE DOMAIN CREATE TABLE CREATE ASSERTION
CREATE VIEW CREATE INDEX
ALTER DOMAIN ALTER TABLE DROP DOMAIN DROP TABLE DROP ASSERTION
DROP VIEW DROP INDEX
Definición del esquema
Evolución del esquema
2. Sintaxis Básica del SQL-92
© 2008 Grupo Kybele 8
Lenguaje de Manipulación de Datos - LMD
Actualizaciones
• Altas • Bajas • Modificaciones
Consultas
INSERT INTO...
DELETE FROM...
UPDATE...
SELECT...
2. Sintaxis Básica del SQL-92
© 2008 Grupo Kybele 9
Lenguaje de Control de Datos - LCD
Recuperación y control de concurrencia
Seguridad y protección
COMMIT ROLLBACK
GRANT REVOKE
2. Sintaxis Básica del SQL-92
© 2008 Grupo Kybele 10
CHARACTER [VARYING] (n) BIT [VARYING] (n) NUMERIC (p,s) DECIMAL (p,s) INTEGER SMALLINT REAL DOUBLE PRECISION FLOAT (p) DATE TIME TIMESTAMP INTERVAL
Tipos de datos del SQL-92:
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 11
DOMINIOS: Sintaxis
<definición de dominio> ::= CREATE DOMAIN <nombre de dominio> [ AS ] <tipo de datos> [ DEFAULT <opción por defecto> ] [ <restricción de dominio> ] <restricción de dominio> ::= [ <definición de nombre de restricción> ] < definición de restricción de verificación> [ <atributos de restricción> ] <definición de nombre de restricción> ::= CONSTRAINT <nombre de restricción> <definición de restricción de verificación> ::= CHECK ( <condición>)
LDD: Definición del esquema Nivel lógico global
literal, función de valor tiempo o fecha, o bien USER, SYSTEM USER o NULL
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 12
DOMINIOS:
• CREATE DOMAIN nomb_valido AS CHAR(20); • CREATE DOMAIN nota_valida INTEGER
CHECK (VALUE BETWEEN 0 AND 10); • CREATE DOMAIN turno_valido CHAR(1)
DEFAULT ‘M’ CONSTRAINT Mañana_o_Tarde
CHECK (VALUE IN (‘M’,’T’));
LDD: Definición del esquema Nivel lógico global ¡ORACLE no soporta
la creación de dominios!
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 13
<atributos de restricción> ::=
<tiempo de verificación de restricción> [ [NOT] DEFERRABLE]
|[[NOT]DEFERRABLE] <tiempo de verificación de restricción>
Tiempo de acción de una restricción: Los atributos de restricción, sirven para indicar si la restricción es inmediata o diferida.
• Modo de verificación es inmediato: la restricción se verificará al finalizar cada sentencia
• Modo de verificación diferido: se verificará al finalizar la transacción.
<tiempo de verificación de restricción> ::= INITIALLY DEFERRED | INITIALLY INMEDIATE
DEPARTAMENTO (num_dep, localidad, …, jefe_dep) EMPLEADO (cod_emp, nombre,…, departamento)
NOT NULL
NOT NULL
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 14
TABLAS: Sintaxis (I) <definición de tabla> ::=
CREATE [TEMPORARY ] TABLE <nombre de tabla> <lista de elementos de tabla>
<lista de elementos de tabla> ::=
(<elemento de tabla> [{<coma> <elemento de tabla>} ... ] )
<elemento de tabla> ::= <definición de columna> | <definición de restricción de tabla>
<definición de columna> ::= <nombre de columna> { <tipo de datos> | <nombre de dominio>} [ <claúsula de defecto> ] [ <definición de restricción de columna> .... ]
<definición de restricción de columna> ::= [ <definición de nombre de restricción> ] <restricción de columna> [ <atributos de restricción> ]
LDD: Definición del esquema Nivel lógico global
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 15
TABLAS: Sintaxis (II) <<restricción de columna> ::=
NOT NULL | <especificación de unicidad> | <especificación de referencia> | <definición de restricción de verificación>
<definición de restricción de tabla> ::= [ <nombre de definición de restricción> ] <restricción de tabla> [ <atributos de restricción> ] <restricción de tabla> ::=
<definición de restricción de unicidad> | <definición de restricción referencial>
| <definición de restricción de verificación> <definición de restricción de unicidad> ::=
<especificación de unicidad> <parent. izq.> <lista de columnas únicas> <parent. dcho.>
<especificación de unicidad> ::= UNIQUE | PRIMARY KEY
<lista de columnas únicas> ::= <lista de nombre de columnas>
LDD: Definición del esquema Nivel lógico global
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 16
TABLAS: Sintaxis (III) <definición de restricción referencial> ::=
FOREIGN KEY <parent. izq.> <columnas que ref.> <parent. dcho.> <especificación de la referencia>
<especificación de la referencia> ::= REFERENCES <columnas y tabla referenciadas> [ <acción referencial disparada> ]
<columnas que ref.> ::= <lista de columnas de referencia> <columnas y tabla referenciadas> ::=
<nombre de tabla> [ <parent. izq.> <lista de columnas de referencia> <parent. dcho.> ] <lista de columnas de referencia> ::= <lista de nombres de columnas> <acción referencial disparada> ::=
<regla de modificación> [ <regla de borrado> ] | <regla de borrado> [regla de modificación]
<regla de modificación> ::= ON UPDATE <acción referencial> <regla de borrado> ::= ON DELETE <acción referencial> <acción referencial> ::=
CASCADE | SET NULL | SET DEFAULT
LDD: Definición del esquema Nivel lógico global
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 17
EJEMPLO:
ALUMNO (num_mat, nombre, ciudad, cod_grupo) GRUPO (cod_grupo, curso, turno)
Modificación: Cascada Borrado: Puesta a nulos
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 18
TABLAS:
CREATE TABLE grupo (cod_grupo CHAR(3), curso CHAR(1) NOT NULL, turno TURNO_VALIDO, PRIMARY KEY (cod_grupo), CHECK (curso > ‘0’ AND curso < ‘4’) );
LDD: Definición del esquema Nivel lógico global
CREATE TABLE grupo (cod_grupo CHAR(3) PRIMARY KEY, curso CHAR(1) NOT NULL, turno TURNO_VALIDO, CHECK (curso > ‘0’ AND curso < ‘4’) );
ó
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 19
CREATE TABLE alumno ( num_mat CHAR(3), nombre NOMB_VALIDO UNIQUE, ciudad CHAR(25) NOT NULL, cod_grupo CHAR(3), PRIMARY KEY (num_mat), FOREIGN KEY (cod_grupo) REFERENCES grupo ON UPDATE CASCADE ON DELETE SET NULL);
LDD: Definición del esquema Nivel lógico global
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 20
INTEGRIDAD REFERENCIAL
ON DELETE CASCADE SET NULL SET DEFAULT NO ACTION
ON UPDATE CASCADE SET NULL SET DEFAULT NO ACTION
Por defecto: borrado y actualización restringidos
LDD: Definición del esquema Nivel lógico global
¡ORACLE no soporta ON UPDATE ni
ON DELETE SET DEFAULT!
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 21
num_mat nombre ciudad cod_grupo
cod_grupo curso turno
ESQUEMA: Alumno
Grupo
LDD: Definición del esquema Nivel lógico global
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 22
LDD: Definición del esquema Nivel lógico global Para ver la estructura
de una tabla en ORACLE: ð DESC nombre_tabla;
SQL> desc alumno; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- NUM_MAT NOT NULL CHAR(3) NOMBRE VARCHAR2(20) CIUDAD NOT NULL CHAR(25) COD_GRUPO CHAR(3) SQL> desc grupo; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- COD_GRUPO NOT NULL CHAR(3) CURSO NOT NULL CHAR(1) TURNO CHAR(1)
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 23
ASERCIONES:
Todos los alumnos de Madrid tienen que estar matriculados en el turno de tarde.
CREATE ASSERTION madrid_tarde CHECK (NOT EXISTS (SELECT * FROM ALUMNO, GRUPO WHERE alumno.cod_grupo=grupo.cod_grupo AND alumno.ciudad=‘MADRID’
AND grupo.turno<>‘T’));
LDD: Definición del esquema Nivel lógico global ¡ORACLE no soporta
la creación de aserciones!
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 24
VISTAS:
CREATE VIEW nombre_de_vista [(lista de columnas)] AS <claúsula SELECT>
LDD: Definición del esquema Nivel externo
CREATE VIEW alumnos_madrid AS (SELECT * FROM alumno WHERE ciudad=‘Madrid’);
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 25
ÍNDICES:
CREATE INDEX ind_alumno ON alumno (ciudad, cod_grupo);
o CREATE UNIQUE INDEX ind_alumno ON alumno (ciudad, cod_grupo);
LDD: Definición del esquema Nivel físico
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 26
Añadir el precio que cada alumno paga al matricularse: ALTER TABLE alumno
ADD (precio INTEGER);
DROP DOMAIN turno_valido; DROP TABLE alumno; DROP ASSERTION ciudad_turno;
ALTER TABLE alumno DROP COLUMN nombre;
LDD: Evolución del esquema Nivel lógico global
Borrar el nombre de los alumnos:
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 27
DROP VIEW alumnos_madrid;
DROP INDEX ind_alumno;
LDD: Evolución del esquema Nivel externo
LDD: Evolución del esquema Nivel físico
2.1 Lenguaje de Definición de Datos
© 2008 Grupo Kybele 28
LMD: Actualizaciones Altas
INSERT INTO grupo VALUES (‘I11’, ‘1’, DEFAULT); ð Todas las columnas de la tabla y en el mismo orden
INSERT INTO grupo (curso, cod_grupo) VALUES (‘2’,‘I12’); ð Clave primaria tiene que estar incluida
cod_grupo curso turno
I11 1 M
INSERT INTO <nombre_tabla> [(lista_columnas)] VALUES (lista_columnas_inserción);
I12 2 M
GRUPO
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 29
LMD: Actualizaciones Altas
INSERT INTO Grupo_m SELECT * FROM Grupo WHERE turno='M';
cod_grupo curso turno
I11 1 M
I12 2 M
GRUPO_M
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 30
LMD: Actualizaciones Altas
INSERT INTO Grupo_Curso1 (Codigo, Turno) SELECT cod_grupo, turno FROM Grupo WHERE curso=‘1’;
Codigo turno
I11 M
GRUPO_Curso
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 31
cod_grupo curso turno
Alumno:
Grupo:
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 8 María Leganés I22 30000 2 Pedro Getafe I21 20000 5 Salomé Madrid I21 25000
I11 I12 I13 I21 I22 I31
1 2 3 1 2 3
M M M T T T
LMD: Actualizaciones Altas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 32
cod_grupo curso turno
DELETE FROM grupo;
cod_grupo curso turno I12 I13 I22 I23
2 3 2 3
M M T T
DELETE FROM grupo WHERE curso=‘1’;
LMD: Actualizaciones Bajas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 33
UPDATE alumno SET cod_grupo=‘I22’ WHERE nombre>‘Pérez’;
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 8 María Leganés I22 30000 2 Pedro Getafe I21 20000 5 Salomé Madrid I22 25000
LMD: Actualizaciones Modificaciones
I21
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 34
SELECT [ALL|DISTINCT] {lista-atributos | *} FROM nombre_tabla [, nombre_tabla, …] [WHERE condición] [cláusula GROUP BY] [cláusula HAVING] [cláusula ORDER BY];
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 35
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 8 María Leganés I22 30000 2 Pedro Getafe I21 20000 5 Salomé Madrid I22 25000
SELECT * FROM alumno;
LMD: Consultas
Todos los atributos de la tabla en el orden
de su creación De qué tabla/s se selecciona la información
ð Todos los atributos de la tabla ALUMNO (todas las tuplas).
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 36
nombre ciudad Juan Madrid Ana Leganés María Leganés Pedro Getafe Salomé Madrid
SELECT nombre, ciudad FROM alumno
Proyección
LMD: Consultas
ð Selección de los atributos nombre y ciudad de la tabla ALUMNO.
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 37
ciudad Madrid Leganés Leganés Getafe Madrid
SELECT ciudad FROM alumno;
SELECT DISTINCT ciudad FROM alumno;
ciudad Getafe Leganés Madrid
Proyección???? Proyección!!!
LMD: Consultas DISTINCT:
Eliminación de duplicados
ALL: valor que se asume por omisión
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 38
ORDER BY {lista_columnas | lista_posiciones} [DESC|ASC ]
LMD: Consultas Por omisión: ASC
Valores nulos son los más altos
Columna/s debe/n estar incluida/s en la cláusula SELECT
Posición: nº de orden de la columna dentro de la
lista de columnas seleccionadas (izda a
dcha)
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 39
ciudad Getafe Leganés Leganés Madrid Madrid
SELECT ciudad FROM alumno ORDER BY ciudad ASC;
LMD: Consultas
“ciudad” debe estar incluida
en la cláusula SELECT
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 40
SELECT nombre, precio*0.10 FROM alumno ORDER BY 2, nombre;
LMD: Consultas
Ordenación por una columna calculada y
por nombre
nombre precio*0.10 PEDRO 2000 JUAN 2500 SALOME 2500 MARIA 3000 ANA 8000
2 1
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 41
SELECT * FROM alumno WHERE cod_grupo=‘I21’; Selección
num_mat nombre ciudad cod_grupo precio
3 Ana Leganés I21 80000 2 Pedro Getafe I21 20000
LMD: Consultas
Condición: combinación de una o más expresiones (usando operadores lógicos) que da como
resultado: CIERTO, FALSO o DESCONOCIDO
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 42
OPERADORES DE COMPARACIÓN: • igual (“=“), distinto (“<>“), menor que (“<“), mayor que (“>“), menor o igual a (“<=“) y mayor o igual a (“>=“) (ðNo hay espacio entre los símbolos)
OPERADORES ARITMÉTICOS:
• Suma (“+“), resta (“-“), multiplicación (“*“) y división (“/“)
• OPERADORES LÓGICOS: • AND, OR y NOT SELECT * FROM Alumno WHERE precio >20000 AND (ciudad = ‘MADRID’ OR ciudad=‘GETAFE’); SELECT * FROM Alumno WHERE precio >20000 AND ciudad = ‘MADRID’ OR ciudad=‘GETAFE’;
• VALORES NULOS (desconocido): • IS [NOT] NULL SELECT * FROM Alumno WHERE ciudad IS NULL; SELECT * FROM Alumno WHERE cod_grupo IS NOT NULL;
Predicados LMD: Consultas
Primero condiciones con AND y luego OR
1º 2º
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 43
RANGO DE VALORES: • BETWEEN … AND SELECT * FROM Alumno WHERE precio BETWEEN 20000 AND 25000; SELECT * FROM Alumno WHERE precio NOT BETWEEN 20000 AND 25000; ~ SELECT * FROM Alumno WHERE NOT (precio BETWEEN 20000 AND 25000);
OPERADOR LIKE:
Se emplea para comparar el contenido de una columna con una serie de caracteres. Caracteres comodín
• Subrayado (_): sustituye a un carácter en la misma posición • Tanto por ciento (%): sustituye a n caracteres, donde n puede ser 0.
SELECT * FROM Alumno WHERE nombre LIKE ‘_E%O’:
OPERADOR IN: Permite comprobar si un valor pertenece a un conjunto de valores determinados. • expresión IN (lista de valores)
SELECT * FROM Alumno WHERE ciudad IN (‘BARCELONA’,’MADRID’): ~ SELECT * FROM ALUMNO WHERE ciudad =‘BARCELONA’ OR ciudad=‘MADRID’; SELECT * FROM Alumno WHERE ciudad NOT IN (‘BARCELONA’,’MADRID’):
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 44
SELECT * FROM Documento WHERE Titulo LIKE '%DB%';
TIPO COD_DOC TITULO IDIOMA NOMBRE AÑO ISBN
L 002 INTRODUCTION TO DBS I ADDISON-WESLEY 1995 0-201-54329-XL 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X
A
SELECT * FROM Documento WHERE Isbn IS NULL;
SELECT Titulo, Idioma, Nombre_E, Año FROM Documento WHERE Año BETWEEN 1976 AND 1993;
LMD: Consultas
Ejemplos:
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 45
SELECT COUNT(*) FROM alumno WHERE precio=25000
SELECT MAX(precio) FROM alumno
SELECT MIN(precio) FROM alumno
SELECT AVG(precio) * 0.1 FROM alumno
SELECT SUM(precio) FROM alumno
COUNT(*)
2
MAX(precio) 80000
MIN(precio)
20000
AVG(precio)*0.1 3600
SUM(precio) 180000
Funciones de Agrupación LMD: Consultas
Cuenta líneas incluyendo NULOS
Máximo
Mínimo
Promedio
Suma
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 46
cod_grupo curso turno
Alumno:
Grupo:
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 8 María Leganés I22 30000 2 Pedro Getafe I21 20000 5 Salomé Madrid I21 25000
I11 I12 I13 I21 I22 I31
1 2 3 1 2 3
M M M T T T
LMD: Actualizaciones Altas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 47
SELECT ciudad, AVG(precio) FROM alumno GROUP BY ciudad
ciudad AVG(precio)
MADRID LEGANÉS GETAFE
25000 55000 20000
SELECT ciudad, AVG(precio) FROM alumno WHERE num_mat<5 GROUP BY ciudad
ciudad AVG(precio)
MADRID LEGANÉS GETAFE
25000 80000 20000
SELECT ciudad, AVG(precio) FROM alumno WHERE num_mat<5 GROUP BY ciudad HAVING AVG(precio)>20000
ciudad AVG(precio)
MADRID LEGANÉS
25000 80000
Cláusulas de Agrupación LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 48
ORDEN DE EJECUCIÓN: 1º) FROM 2º) WHERE 3º) GROUP BY 4º) HAVING 5º) SELECT 6º) ORDER BY
WHERE: la condición se aplica a todas las filas de la tabla HAVING: es una condición del grupo
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 49
CODIGO NOMBRE DIRECCION CIUDAD001 RAMA CARRETERA DE CANILLAS 144 MADRID002 ADDISON-WESLEY SUNSET ST. 4 READING003 McGRAW-HILL 181 AVENUE NEW YORK004 PARANINFO SOL 3 MADRID005 ANAYA GOYA 8 MADRID
CODIGO NOMBRE DIRECCION CIUDAD
001 RAMA CARRETERA DE CANILLAS 144 MADRID002 ADDISON-WESLEY SUNSET ST. 4 READING004 PARANINFO SOL 3 MADRID
EDITORIAL
LIBRERIA
CODIGO NOMBRE DIRECCION CIUDAD003 McGRAW-HILL 181 AVENUE NEW YORK005 ANAYA GOYA 8 MADRID
EDITORIAL - LIBRERIA
SELECT* FROM Editorial EXCEPT SELECT * FROM Librería;
Diferencia LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 50
TITULO IDIOMA AÑOMIMO E 1996ENEAS E 1996
HERACLITO I 1995A
PROYECTOS
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-SL 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-XL 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-IL 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-XL 005 ANALISIS SI E RAMA 1996 84-7897-233-IL 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-IL 007 COMPILADORES E PARANINFO 1992 84-7884-033-IA 001 ER MODEL I - 1976 -A 002 RELATIONAL MODEL I - 1970 -A 003 LENGUAJE SQL3 E - 1995 -A 004 SQL3 TRADEOFFS I - 1995 -A 005 BASES DE DATOS E - 1996 -
DOCUMENTO
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 51
SELECT * FROM Proyectos UNION CORRESPONDING (titulo, idioma, año) SELECT * FROM Documento;
TITULO IDIOMA AÑOCONCEPCION Y DISEÑO DE BD E 1993
AN INTRODUCTION TO DATABSE SYSTEMS I 1995A GUIDE TOSQL STANDARD I 1996
RELATIONAL DATABASE : SELECTED WRITINGS I 1995ANALISIS Y DISEÑO DE APLICACIONES E 1996
ANALISIS DE SI E 1993COMPILADORES E INTERPRETES E 1992ENTITY RELATIONSHIP MODEL I 1976
THE RELATIONAL MODEL I 1970LENGUAJE SQL3 E 1995
SQL3 TRADEOFFS I 1995BASES DE DATOS E 1996
MIMO E 1996ENEAS E 1996
HERACLITO I 1995A
PROYECTOS UNION DOCUMENTO
Unión
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 52
SELECT Documento.*, Editorial.* FROM Documento, Editorial;
SQL-89 SELECT * FROM Documento CROSS JOIN Editorial;
SQL-92
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN COD NOMBRE_E DIR CIUDADL 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 RAMA CTRA CANILLAS 144 MADRIDL 002 INTRODUCTION DBS I ADDISON 1995 0-201-54329-X 002 ADDISON SUNSET 4 READINGL 003 A GUIDE TO SQL I ADDISON 1996 0-201-58432-I 003 Mc GRAW 181 AV NEW YORKL 004 RELATIONAL DB I ADDISON 1995 0-201-55483-X 004 PARANINFO SOL 3 MADRID
A
Producto Cartesiano LMD: Consultas
SELECT * FROM Documento, Editorial;
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 53
SELECT alumno.nombre, alumno.ciudad, grupo.curso FROM alumno, grupo WHERE (alumno.cod_grupo=grupo.cod_grupo)
Combinación
nombre ciudad curso
Juan Madrid Ana Leganés María Leganés Pedro Getafe Salomé Madrid
1 1 2 1 2
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 54
SELECT Documento.*, Codigo, Dir, Ciudad FROM Documento, Editorial WHERE Documento.Nombre_E = Editorial.Nombre;
SQL-89
SELECT * FROM Documento NATURAL JOIN Editorial ON Documento.Nombre_E = Editorial.Nombre;
SQL-92
SELECT * FROM Documento NATURAL JOIN Editorial;
Si las dos columnas que representan nombre de editorial (Documento.Nombre_E y Editorial.Nombre) se llamaran igual:
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN CODIGO
DIRECCION CIUDAD
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 CTRA CANILLAS 144 MADRIDL 002 INTRODUCTION DBS I ADDISON 1995 0-201-54329-X 002 SUNSET ST. 4 READINGL 003 A GUIDE TO SQL I ADDISON 1996 0-201-58432-I 002 SUNSET ST. 4 READINGL 004 RELATIONAL DB I ADDISON 1995 0-201-55483-X 002 SUNSET ST. 4 READINGL 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 CTRA CANILLAS 144 MADRIDL 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 GOYA 8 MADRIDL 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 SOL 3 MADRID
A
Combinación Natural LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 55
SELECT nombre, ciudad, curso FROM alumno A, grupo G WHERE (A.cod_grupo=G.cod_grupo)
AND (G.turno=‘M’)
Combinación
nombre ciudad curso
Juan Madrid 1
ALIAS
LMD: Consultas
SELECT alumno.nombre, alumno.ciudad, grupo.curso FROM alumno NATURAL JOIN grupo WHERE G.turno=‘M’;
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 56
cod_grupo curso turno
Alumno:
Grupo:
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 8 María Leganés I22 30000 2 Pedro Getafe I21 20000 5 Salomé Madrid I21 25000
I11 I12 I13 I21 I22 I31
1 2 3 1 2 3
M M M T T T
LMD: Actualizaciones Altas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 57
SELECT G.curso, G.cod_grupo, A.nombre FROM alumno A, grupo G WHERE (A.cod_grupo=G.cod_grupo)
G.curso G.cod_grupo A.nombre Juan Ana María Pedro Salomé
I11 I21 I22 I21 I22
1 1 2 1 2 ¿¿¿ I12, I13, I23???
ðSe pierden.
Combinación
“Queremos obtener los grupos y los alumnos matriculados en los mismos.”
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 58
G.curso G.cod_grupo A.nombre Juan Ana Pedro María Salomé
I11 I12 I13 I21 I21 I22 I22 I23
1 2 3 1 1 2 2 3
SELECT G.curso, G.cod_grupo, A.nombre FROM alumno A, grupo G WHERE (G.cod_grupo = A.cod_grupo(+ ))
Combinación externa
Combinación externa derecha
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 59
SELECT * FROM Documento LEFT OUTER JOIN Editorial ON Documento.Nombre_E = Editorial.Nombre;
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN CODIGO NOMBRE_E DIR CIUDAD
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 RAMA CTRA. CANILLAS, 144 MADRIDL 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READINGL 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READINGL 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READINGL 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRIDL 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRIDL 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRIDA 001 ER MODEL I - 1976 - - - - -A 002 RELATIONAL MODEL I - 1970 - - - - -A 003 LENGUAJE SQL3 E - 1995 - - - - -A 004 SQL3 TRADEOFFS I - 1995 - - - - -A 005 BASES DE DATOS E - 1996 - - - - -
--
Combinación Externa Izquierda LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 60
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN CODIGO NOMBRE_E DIR CIUDAD
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 RAMA CTRA. CANILLAS, 144 MADRIDL 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READINGL 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READINGL 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READINGL 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRIDL 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRIDL 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRID
003 Mc GRAW 181 AVENUE NEW YORK
--
SELECT * FROM Documento RIGHT OUTER JOIN Editorial ON Documento.Nombre_E = Editorial.Nombre;
Combinación Externa Derecha
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 61
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN CODIGO NOMBRE_E DIR CIUDAD
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 RAMA CTRA. CANILLAS, 144 MADRIDL 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READINGL 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READINGL 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READINGL 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRIDL 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRIDL 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRIDA 001 ER MODEL I - 1976 - - - - -A 002 RELATIONAL MODEL I - 1970 - - - - -A 003 LENGUAJE SQL3 E - 1995 - - - - -A 004 SQL3 TRADEOFFS I - 1995 - - - - -A 005 BASES DE DATOS E - 1996 - - - - -
003 Mc GRAW 181 AVENUE NEW YORK--
SELECT * FROM Documento FULL OUTER JOIN Editorial ON Documento.Nombre_E = Editorial.Nombre;
Combinación Externa Completa LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 62
num_mat nombre ciudad cod_grupo precio 1 Juan Madrid I11 25000 3 Ana Leganés I21 80000 2 Pedro Getafe I21 20000
SELECT * FROM alumno WHERE cod_grupo IN
(SELECT cod_grupo FROM grupo WHERE curso=‘1’)
Consultas anidadas
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 63
PREDICADO ALL: ALL significa que la comparación de la expresión con el resultado de la subconsulta será CIERTA si lo es para todos los valores devueltos por la subconsulta; es decir, la condición se satisface cuando la comparación es CIERTA para TODOS los valores devueltos por la subconsulta. ð Obtener los alumnos que paguen menos matrícula que todos los demás alumnos. SELECT * FROM Alumno a WHERE precio < ALL
(SELECT precio FROM ALUMNO aa WHERE a.num-mat<>aa.num-mat):
PREDICADOS ANY o SOME (sinónimos): ANY significa que la comparación de la expresión con el resultado de la subconsulta será CIERTA si lo es para uno de los valores devueltos por la subconsulta; es decir, la condición se satisface cuando la comparación es CIERTA para AL MENOS UNO de los valores devueltos por la subconsulta. ð Obtener los alumnos que paguen más que alguno de los alumnos de MADRID. SELECT * FROM Alumno WHERE precio > ANY
(SELECT precio FROM ALUMNO WHERE ciudad=‘MADRID’):
LMD: Consultas
Predicados
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 64
PREDICADO EXISTS: La condición EXISTS será CIERTA si la subconsulta devuelve una fila que satisfaga las condiciones impuestas en la cláusula WHERE (se puede expresar con el operador IN). ðObtener los alumnos que estén matriculados en algún grupo. SELECT * FROM Alumno a WHERE EXISTS
(SELECT * FROM GRUPO g WHERE a.cod_grupo=g.cod_grupo);
OTROS PREDICADOS: • Unique. Es similar a EXISTS, sin embargo, con UNIQUE solamente se considera como verdadera la condición cuando la sub-búsqueda regresa un sólo valor. • Overlaps. Se utiliza para determinar si dos intervalos de tiempo se sobreponen. • Match. Verifica que coincidan los valores (aunque algunos valores pueden ser nulos). Ejemplo:
SELECT * FROM alumnos WHERE (96491, 'Biblioteca') MATCH (SELECT num_cuenta, tipo FROM adeudos);
LMD: Consultas
Predicados
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 65
Ejemplo de vistas
CREATE VIEW alumnos_madrid AS (SELECT * FROM alumno WHERE ciudad=‘Madrid’);
SELECT * FROM alumnos_madrid;
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000 5 Salomé Madrid I22 25000
Alumnos_madrid
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 66
Sentencia del lenguaje anfitrión EXEC SQL BEGIN DECLARE SECTION; Año Date; ISBN Char(12); ... EXEC SQL END DECLARE SECTION; Sentencia del lenguaje anfitrión
Sentencia del lenguaje anfitrión EXEC SQL SELECT Año INTO :Año FROM DOCUMENTO WHERE ISBN = :ISBN; IF SQLSTATE = ... ... Sentencia del lenguaje anfitrión
Sentencia del lenguaje anfitrión WHENEVER SQLERROR | NOT FOUND ... CONTINUE | GOTO <objetivo> ... Sentencia del lenguaje anfitrión
SQL Embebido
Sección de Declaración de Variables
Sección de Tratamiento de Excepciones
Cuerpo
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 67
DECLARE cursor_e CURSOR FOR
SELECT Código, Nombre, Dir, Ciudad FROM Editorial
ORDER BY Ciudad DESC;
Declaración de Cursor
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 68
SELECT Nombre, Dirección FROM Editorial WHERE Ciudad = ?;
SQL Dinámico
LMD: Consultas
2.2 Lenguaje de Manipulación de Datos
© 2008 Grupo Kybele 69
Lenguaje de Control de Datos
Recuperación y control de concurrencia
Seguridad y protección
COMMIT ROLLBACK
GRANT REVOKE
2.3 Lenguaje de Control de Datos
© 2008 Grupo Kybele 70
ü Tecnología y Diseño de Bases de Datos M. Piattini, E. Marcos, C. Calero y B. Vela Ed.: RA-MA, 2006 Octubre Parte II, capítulo 8
ü Fundamentos y Modelos de Bases de Datos A. de Miguel y M. Piattini Ed.: RA-MA, 1997 Capítulo 7 (Pág. 215-265) y Apéndice A (Pág. 453-468)
ü Introducción al SQL para Usuarios y Programadores
Rivero, E. et al. Ed.: Thomson, Segunda Edición, 2003
ü Diseño de Bases de Datos. Problemas Resueltos. A. de Miguel et al.
Ed.: RA-MA, 2001 ühhttp://www.lc.leidenuniv.nl/awcourse/oracle/server.920/a96540/toc.htm
3. Bibliografía
top related