Está en la página 1de 70

TEMA 9.

EL LENGUAJE SQL
Í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
2 © 2008 Grupo Kybele
1. Introducción

¿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


3 © 2008 Grupo Kybele
1. Introducción

Estado actual y
futuro del SQL

SQL:2003, actual estándar:

capacidades de Orientación al Objeto (SQL:1999)


capacidades multicolecciones y XML

4 © 2008 Grupo Kybele


1. Introducción

SQL:2003 +
• Multisets, BigInt
• XML …

SQL:1999

SQL 92
+

+ • Mejor tratamiento • Disparadores


SQL 89 de restricciones • L. procedimental...
• Sintaxis de dominios • Orientación al Objeto
SQL 86-87 + IEF
• Tablas temporales TAD
Intersección de Integridad Encapsulamiento
• Nuevos tipos de datos
implementaciones Referencial Jerarquías
• L. manipulac. esquema
existentes básica Herencia
• Combinación externa
• SQL dinámico... IDO...

5 © 2008 Grupo Kybele


2. Sintaxis Básica del SQL-92

La Arquitectura ANSI/X3/SPARC

NIVEL ESQUEMA ESQUEMA


EXTERNO EXTERNO 1 EXTERNO n

Correspondencia
Externa/Conceptual

NIVEL ESQUEMA
CONCEPTUAL
CONCEPTUAL/ CONCEPTUAL
LÓGICO GLOBAL Correspondencia
Conceptual/Interna

NIVEL ESQUEMA
INTERNO INTERNO

DATOS ALMACENADOS
6 © 2008 Grupo Kybele
2. Sintaxis Básica del SQL-92

Lenguaje de Definición de Datos - LDD

Nivel lógico global Nivel externo Nivel físico

CREATE DOMAIN CREATE VIEW CREATE INDEX


Definición del esquema CREATE TABLE
CREATE ASSERTION

ALTER DOMAIN DROP VIEW DROP INDEX


ALTER TABLE
Evolución del esquema
DROP DOMAIN
DROP TABLE
DROP ASSERTION

7 © 2008 Grupo Kybele


2. Sintaxis Básica del SQL-92

Lenguaje de Manipulación de Datos - LMD

Actualizaciones

•  Altas INSERT INTO...

•  Bajas DELETE FROM...

•  Modificaciones UPDATE...

Consultas SELECT...

8 © 2008 Grupo Kybele


2. Sintaxis Básica del SQL-92

Lenguaje de Control de Datos - LCD

Recuperación y
control de concurrencia
COMMIT

ROLLBACK

Seguridad y protección
GRANT

REVOKE

9 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

Tipos de datos del SQL-92:


CHARACTER [VARYING] (n)
BIT [VARYING] (n)
NUMERIC (p,s)
DECIMAL (p,s)
INTEGER
SMALLINT
REAL
DOUBLE PRECISION
FLOAT (p)
DATE
TIME
TIMESTAMP
INTERVAL

10 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

DOMINIOS: Sintaxis
<definición de dominio> ::=
CREATE DOMAIN <nombre de dominio> [ AS ] <tipo de datos>
[ DEFAULT <opción por defecto> ]
[ <restricción de dominio> ] literal,
función de valor tiempo
o fecha, o bien USER,
<restricción de dominio> ::= SYSTEM USER o
[ <definición de nombre de restricción> ] NULL
< 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>)
11 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global ¡ORACLE no soporta
la creación de dominios!
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’));
12 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

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.
<atributos de restricción> ::= <tiempo de verificación de restricción> ::=
<tiempo de verificación de restricción> [ [NOT] DEFERRABLE] INITIALLY DEFERRED
| INITIALLY INMEDIATE
|[[NOT]DEFERRABLE] <tiempo de verificación de restricción>

NOT NULL
DEPARTAMENTO (num_dep, localidad, …, jefe_dep)

NOT NULL
EMPLEADO (cod_emp, nombre,…, departamento)

13 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

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> ]
14 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

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>
15 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

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
16 | SET DEFAULT © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

EJEMPLO:

ALUMNO (num_mat, nombre, ciudad, cod_grupo)


Modificación: Cascada
Borrado: Puesta a nulos
GRUPO (cod_grupo, curso, turno)

17 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

TABLAS:

CREATE TABLE grupo


CREATE TABLE grupo
(cod_grupo CHAR(3),
(cod_grupo CHAR(3) PRIMARY KEY,
curso CHAR(1) NOT NULL,
curso CHAR(1) NOT NULL,
turno TURNO_VALIDO, ó
turno TURNO_VALIDO,
PRIMARY KEY (cod_grupo),
CHECK (curso > ‘0’ AND curso < ‘4’)
CHECK (curso > ‘0’ AND curso < ‘4’)
);
);

18 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

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

19 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

ON DELETE
CASCADE
INTEGRIDAD SET NULL
REFERENCIAL
SET DEFAULT
NO ACTION

ON UPDATE
Por defecto:
CASCADE borrado y actualización restringidos
SET NULL
SET DEFAULT
¡ORACLE no soporta
NO ACTION ON UPDATE ni
ON DELETE SET DEFAULT!
20 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global

ESQUEMA:
Alumno
num_mat nombre ciudad cod_grupo

Grupo
cod_grupo curso turno

21 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

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)

22 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel lógico global ¡ORACLE no soporta
la creación de aserciones!
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’));
23 © 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel externo

VISTAS:

CREATE VIEW nombre_de_vista


[(lista de columnas)]
AS <claúsula SELECT>

CREATE VIEW alumnos_madrid


AS (SELECT *
FROM alumno
WHERE ciudad=‘Madrid’);

24 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Definición del esquema


Nivel físico

ÍNDICES:

CREATE INDEX ind_alumno


ON alumno (ciudad, cod_grupo);
o
CREATE UNIQUE INDEX ind_alumno
ON alumno (ciudad, cod_grupo);

25 © 2008 Grupo Kybele


2.1 Lenguaje de Definición de Datos

LDD: Evolución del esquema


Nivel lógico global

Borrar el nombre de los alumnos:


ALTER TABLE alumno
DROP COLUMN nombre;

Añadir el precio que cada alumno paga al matricularse:


ALTER TABLE alumno
ADD (precio INTEGER);

DROP DOMAIN turno_valido;

DROP TABLE alumno;

26
DROP ASSERTION ciudad_turno;
© 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos

LDD: Evolución del esquema


Nivel externo

DROP VIEW alumnos_madrid;

LDD: Evolución del esquema


Nivel físico

DROP INDEX ind_alumno;

27 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Altas

INSERT INTO <nombre_tabla> [(lista_columnas)]


VALUES (lista_columnas_inserción);
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

GRUPO
cod_grupo curso turno

I11 1 M
I12 2 M
28 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Altas

INSERT INTO Grupo_m


SELECT * FROM Grupo
WHERE turno='M';

GRUPO_M
cod_grupo curso turno

I11 1 M
I12 2 M

29 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Altas

INSERT INTO Grupo_Curso1 (Codigo, Turno)


SELECT cod_grupo, turno FROM Grupo
WHERE curso=‘1’;

GRUPO_Curso
Codigo turno

I11 M

30 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Altas

Alumno:
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

Grupo:
cod_grupo curso turno
I11 1 M
I12 2 M
I13 3 M
I21 1 T
I22 2 T
31 I31 3 T
© 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Bajas

DELETE FROM grupo;


cod_grupo curso turno

DELETE FROM grupo


WHERE curso=‘1’;

cod_grupo curso turno


I12 2 M
I13 3 M
I22 2 T
32 I23 3 T © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Modificaciones

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

33 I21 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

SELECT [ALL|DISTINCT] {lista-atributos | *}


FROM nombre_tabla [, nombre_tabla, …]
[WHERE condición]
[cláusula GROUP BY]
[cláusula HAVING]
[cláusula ORDER BY];

34 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Todos los atributos


de la tabla en el orden
De qué tabla/s de su creación
se selecciona SELECT *
la información
FROM alumno;

ð Todos los atributos de la tabla ALUMNO (todas las tuplas).

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
35 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Proyección
SELECT nombre, ciudad
FROM alumno

ð  Selección de los atributos nombre y ciudad de la tabla ALUMNO.

nombre ciudad
Juan Madrid
Ana Leganés
María Leganés
Pedro Getafe
Salomé Madrid
36 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas
ALL: valor que se DISTINCT:
asume por omisión Eliminación de
duplicados

SELECT ciudad SELECT DISTINCT ciudad


FROM alumno; FROM alumno;

ciudad ciudad
Madrid Getafe
Leganés Leganés
Leganés Madrid
Getafe
Madrid

Proyección???? Proyección!!!
37 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas
Por omisión: ASC
Valores nulos son los más
altos

ORDER BY {lista_columnas | lista_posiciones} [DESC|ASC ]

Columna/s debe/n
estar incluida/s en Posición: nº de orden de
la cláusula SELECT la columna dentro de la
lista de columnas
seleccionadas (izda a
dcha)

38 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

SELECT ciudad
FROM alumno
ORDER BY ciudad ASC;

ciudad
“ciudad” debe estar
incluida Getafe
en la cláusula Leganés
SELECT Leganés
Madrid
Madrid

39 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

1 2
SELECT nombre, precio*0.10
FROM alumno
ORDER BY 2, nombre;

nombre precio*0.10
Ordenación por una
columna calculada y PEDRO 2000
por nombre
JUAN 2500
SALOME 2500
MARIA3000
ANA 8000

40 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas
SELECT *
FROM alumno
Selección WHERE cod_grupo=‘I21’;

Condición: combinación de una o más expresiones


(usando operadores lógicos) que da como
resultado: CIERTO, FALSO o DESCONOCIDO

num_mat nombre ciudad cod_grupo precio


3 Ana Leganés I21 80000
2 Pedro Getafe I21 20000

41 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Predicados
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 (“/“)
Primero
condiciones con
• OPERADORES LÓGICOS:
AND y luego OR
•  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’;
1º 2º

• VALORES NULOS (desconocido):


•  IS [NOT] NULL
SELECT * FROM Alumno WHERE ciudad IS NULL;
SELECT * FROM Alumno WHERE cod_grupo IS NOT NULL;

42 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

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’):
43 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Ejemplos:
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-X
A
L 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X

SELECT * SELECT Titulo, Idioma, Nombre_E, Año


FROM Documento FROM Documento
WHERE Isbn IS NULL; WHERE Año BETWEEN 1976 AND 1993;

44 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas
Funciones de Agrupación

SELECT COUNT(*) COUNT(*)


Cuenta líneas
FROM alumno 2
incluyendo NULOS
WHERE precio=25000

MAX(precio)
SELECT MAX(precio)
Máximo 80000
FROM alumno

MIN(precio)
SELECT MIN(precio)
Mínimo FROM alumno 20000

SELECT AVG(precio) * 0.1 AVG(precio)*0.1


Promedio FROM alumno 3600

SELECT SUM(precio) SUM(precio)


Suma
45 FROM alumno 180000
© 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos
LMD: Actualizaciones
Altas

Alumno:
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

Grupo:
cod_grupo curso turno
I11 1 M
I12 2 M
I13 3 M
I21 1 T
I22 2 T
46 I31 3 T
© 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas
Cláusulas de Agrupación

ciudad AVG(precio)
SELECT ciudad, AVG(precio)
MADRID 25000
FROM alumno
LEGANÉS 55000
GROUP BY ciudad
GETAFE 20000

SELECT ciudad, AVG(precio) ciudad AVG(precio)


FROM alumno MADRID 25000
WHERE num_mat<5 LEGANÉS 80000
GROUP BY ciudad GETAFE 20000

SELECT ciudad, AVG(precio)


FROM alumno ciudad AVG(precio)
WHERE num_mat<5 MADRID 25000
GROUP BY ciudad LEGANÉS 80000
47
HAVING AVG(precio)>20000 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

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


48 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas SELECT* FROM Editorial


EXCEPT Diferencia
SELECT * FROM Librería;

EDITORIAL
CODIGO NOMBRE DIRECCION CIUDAD
001 RAMA CARRETERA DE CANILLAS 144 MADRID
002 ADDISON-WESLEY SUNSET ST. 4 READING
003 McGRAW-HILL 181 AVENUE NEW YORK
004 PARANINFO SOL 3 MADRID
005 ANAYA GOYA 8 MADRID

LIBRERIA
CODIGO NOMBRE DIRECCION CIUDAD
001 RAMA CARRETERA DE CANILLAS 144 MADRID
002 ADDISON-WESLEY SUNSET ST. 4 READING
004 PARANINFO SOL 3 MADRID

EDITORIAL - LIBRERIA
CODIGO NOMBRE DIRECCION CIUDAD
003 McGRAW-HILL 181 AVENUE NEW YORK
49 005 ANAYA GOYA 8 MADRID © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

PROYECTOS

TITULO IDIOMA AÑO


MIMO E 1996
ENEAS E 1996
HERACLITO I 1995
A

DOCUMENTO
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN

L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S


L 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X
L 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I
L 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X
L 005 ANALISIS SI E RAMA 1996 84-7897-233-I
L 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I
L 007 COMPILADORES E PARANINFO 1992 84-7884-033-I
A 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 -

50 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

SELECT * FROM Proyectos

Unión UNION CORRESPONDING (titulo, idioma, año)


SELECT * FROM Documento;

PROYECTOS UNION DOCUMENTO


TITULO IDIOMA AÑO
CONCEPCION Y DISEÑO DE BD E 1993
AN INTRODUCTION TO DATABSE SYSTEMS I 1995
A GUIDE TOSQL STANDARD I 1996
RELATIONAL DATABASE : SELECTED WRITINGS I 1995
ANALISIS Y DISEÑO DE APLICACIONES E 1996
ANALISIS DE SI E 1993
COMPILADORES E INTERPRETES E 1992
ENTITY RELATIONSHIP MODEL I 1976
THE RELATIONAL MODEL I 1970
LENGUAJE SQL3 E 1995
SQL3 TRADEOFFS I 1995
BASES DE DATOS E 1996
MIMO E 1996
ENEAS E 1996
HERACLITO I 1995
51 A

© 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Producto Cartesiano
SQL-89 SQL-92
SELECT Documento.*, Editorial.* SELECT *
FROM Documento, Editorial; FROM Documento CROSS JOIN Editorial;

SELECT * FROM Documento, Editorial;


TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN COD NOMBRE_E DIR CIUDAD
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 RAMA CTRA CANILLAS 144 MADRID
L 002 INTRODUCTION DBS I ADDISON 1995 0-201-54329-X 002 ADDISON SUNSET 4 READING
L 003 A GUIDE TO SQL I ADDISON 1996 0-201-58432-I 003 Mc GRAW 181 AV NEW YORK
L 004 RELATIONAL DB I ADDISON 1995 0-201-55483-X 004 PARANINFO SOL 3 MADRID

52 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación

SELECT alumno.nombre, alumno.ciudad, grupo.curso


FROM alumno, grupo
WHERE
(alumno.cod_grupo=grupo.cod_grupo)

nombre ciudad curso


Juan Madrid 1
Ana Leganés 1
María Leganés 2
Pedro Getafe 1
53 Salomé Madrid 2 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación Natural
SQL-89
SQL-92
SELECT Documento.*, Codigo, Dir, Ciudad SELECT *
FROM Documento, Editorial FROM Documento NATURAL JOIN Editorial
WHERE Documento.Nombre_E = Editorial.Nombre; ON Documento.Nombre_E = Editorial.Nombre;

Si las dos columnas que representan nombre de editorial (Documento.Nombre_E y Editorial.Nombre) se llamaran igual:

SELECT *
FROM Documento NATURAL JOIN Editorial;

TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN CODIG DIRECCION CIUDAD
O
L 001 CONCEPCION BD E RAMA 1993 84-7894-083-S 001 CTRA CANILLAS 144 MADRID
L 002 INTRODUCTION DBS I ADDISON 1995 0-201-54329-X 002 SUNSET ST. 4 READING
L 003 A GUIDE TO SQL I ADDISON 1996 0-201-58432-I 002 SUNSET ST. 4 READING
L 004 RELATIONAL DB I ADDISON 1995 0-201-55483-X 002 SUNSET ST. 4 READING
L 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 CTRA CANILLAS 144 MADRID
L 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 GOYA 8 MADRID
A
L 54 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 SOL 3 © 2008 Grupo
MADRID
Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

SELECT alumno.nombre, alumno.ciudad, grupo.curso


FROM alumno NATURAL JOIN grupo
Combinación WHERE G.turno=‘M’;

SELECT nombre, ciudad, curso


FROM alumno A, grupo G
WHERE (A.cod_grupo=G.cod_grupo)
AND (G.turno=‘M’)

ALIAS nombre ciudad curso


Juan Madrid 1

55 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Actualizaciones
Altas

Alumno:
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

Grupo:
cod_grupo curso turno
I11 1 M
I12 2 M
I13 3 M
I21 1 T
I22 2 T
56 I31 3 T
© 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación 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 “Queremos obtener los grupos y


los alumnos matriculados en
1 I11 Juan
los mismos.”
1 I21 Ana
2 I22 María
1 I21 Pedro
2 I22 Salomé
¿¿¿ I12, I13, I23???
ðSe pierden.
57 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación SELECT G.curso, G.cod_grupo, A.nombre


FROM alumno A, grupo G
externa WHERE (G.cod_grupo = A.cod_grupo(+ ))

G.curso G.cod_grupo A.nombre


1 I11 Juan
2 I12 Combinación
3 I13 externa
1 I21 Ana derecha
1 I21 Pedro
2 I22 María
2 I22 Salomé
3 I23
58 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación Externa Izquierda

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 MADRID
L 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READING
L 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READING
L 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READING
L 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRID
L 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRID
L 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRID
A 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 - - - - -

--

59 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación Externa Derecha

SELECT *
FROM Documento RIGHT 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 MADRID
L 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READING
L 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READING
L 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READING
L 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRID
L 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRID
L 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRID
003 Mc GRAW 181 AVENUE NEW YORK

--

60 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Combinación Externa Completa

SELECT *
FROM Documento FULL 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 MADRID
L 002 AN INTRODUCTION DBS I ADDISON-WESLEY 1995 0-201-54329-X 002 ADDISON SUNSET ST,. 4 READING
L 003 A GUIDE TO SQL I ADDISON-WESLEY 1996 0-201-58432-I 002 ADDISON SUNSET ST,. 4 READING
L 004 RELATIONAL DB I ADDISON-WESLEY 1995 0-201-55483-X 002 ADDISON SUNSET ST., 4 READING
L 005 ANALISIS SI E RAMA 1996 84-7897-233-I 001 RAMA CTRA. CANILLAS, 4 MADRID
L 006 ANALISIS DE SI E ANAYA 1993 84-7900-080-I 005 ANAYA GOYA, 8 MADRID
L 007 COMPILADORES E PARANINFO 1992 84-7884-033-I 004 PARANINFO SOL, 3 MADRID
A 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


61
-- © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

SELECT *
Consultas FROM alumno
anidadas WHERE cod_grupo IN
(SELECT cod_grupo
FROM grupo
WHERE curso=‘1’)

num_mat nombre ciudad cod_grupo precio


1 Juan Madrid I11 25000
3 Ana Leganés I21 80000
2 Pedro Getafe I21 20000

62 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Predicados
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’):

63 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Predicados
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);
64 © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

CREATE VIEW alumnos_madrid


Ejemplo AS (SELECT *
FROM alumno
de vistas
WHERE ciudad=‘Madrid’);

SELECT *
FROM alumnos_madrid;

Alumnos_madrid
num_mat nombre ciudad cod_grupo precio
1 Juan Madrid I11 25000
65
5 Salomé Madrid I22 25000
© 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

Sentencia del lenguaje anfitrión


EXEC SQL BEGIN DECLARE SECTION;
Sección de Año Date;
Declaración ISBN Char(12);
de Variables ...
EXEC SQL END DECLARE SECTION;
Sentencia del lenguaje anfitrión
Sentencia del lenguaje anfitrión
EXEC SQL SELECT Año
SQL Embebido INTO :Año
FROM DOCUMENTO
Cuerpo WHERE ISBN = :ISBN;
IF SQLSTATE = ...
...
Sentencia del lenguaje anfitrión
Sentencia del lenguaje anfitrión
Sección de
WHENEVER SQLERROR | NOT FOUND ...
Tratamiento
CONTINUE | GOTO <objetivo> ...
de Excepciones
66 Sentencia del lenguaje anfitrión © 2008 Grupo Kybele
2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

Declaración de Cursor

DECLARE cursor_e CURSOR FOR


SELECT Código, Nombre, Dir, Ciudad
FROM Editorial
ORDER BY Ciudad DESC;

67 © 2008 Grupo Kybele


2.2 Lenguaje de Manipulación de Datos

LMD: Consultas

SQL Dinámico

SELECT Nombre, Dirección


FROM Editorial
WHERE Ciudad = ?;

68 © 2008 Grupo Kybele


2.3 Lenguaje de Control de Datos

Lenguaje de Control de Datos

Recuperación y
control de concurrencia COMMIT

ROLLBACK

Seguridad y protección
GRANT

REVOKE

69 © 2008 Grupo Kybele


3. Bibliografía

ü 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
70 © 2008 Grupo Kybele

También podría gustarte