el lenguaje sql - inicio - kybele - grupo de investigación€¦ · © 2008 grupo kybele 2 Índice...

70
TEMA 9. EL LENGUAJE SQL

Upload: others

Post on 28-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

TEMA 9.

EL LENGUAJE SQL

© 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