Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
• LENGUAJE DE:
* Definición
* Manipulación
- Consulta interactiva
- Programación
* Control
Estado actual y
futuro del SQL
SQL:2003 +
• Multisets, BigInt
• XML …
SQL:1999
SQL 92
+
La Arquitectura ANSI/X3/SPARC
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
Actualizaciones
• Modificaciones UPDATE...
Consultas SELECT...
Recuperación y
control de concurrencia
COMMIT
ROLLBACK
Seguridad y protección
GRANT
REVOKE
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> ]
NOT NULL
DEPARTAMENTO (num_dep, localidad, …, jefe_dep)
NOT NULL
EMPLEADO (cod_emp, nombre,…, departamento)
EJEMPLO:
TABLAS:
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
ESQUEMA:
Alumno
num_mat nombre ciudad cod_grupo
Grupo
cod_grupo curso turno
VISTAS:
ÍNDICES:
26
DROP ASSERTION ciudad_turno;
© 2008 Grupo Kybele
2.1 Lenguaje de Definición de Datos
LMD: Actualizaciones
Altas
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
GRUPO_M
cod_grupo curso turno
I11 1 M
I12 2 M
LMD: Actualizaciones
Altas
GRUPO_Curso
Codigo turno
I11 M
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
LMD: Actualizaciones
Modificaciones
UPDATE alumno
SET cod_grupo=‘I22’
WHERE nombre>‘Pérez’;
LMD: Consultas
LMD: Consultas
LMD: Consultas
Proyección
SELECT nombre, ciudad
FROM 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
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
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)
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
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
LMD: Consultas
SELECT *
FROM alumno
Selección WHERE cod_grupo=‘I21’;
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º
LMD: Consultas
RANGO DE VALORES:
• BETWEEN … AND
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.
OPERADOR IN:
Permite comprobar si un valor pertenece a un conjunto de valores determinados.
• expresión IN (lista de valores)
LMD: Consultas
Ejemplos:
SELECT *
FROM Documento
WHERE Titulo LIKE '%DB%';
LMD: Consultas
Funciones de Agrupación
MAX(precio)
SELECT MAX(precio)
Máximo 80000
FROM alumno
MIN(precio)
SELECT MIN(precio)
Mínimo FROM alumno 20000
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
LMD: Consultas
ORDEN DE EJECUCIÓN:
1º) FROM
2º) WHERE
3º) GROUP BY
4º) HAVING
5º) SELECT
6º) ORDER BY
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
DOCUMENTO
TIPO COD_DOC TITULO IDIOMA NOMBRE_E AÑO ISBN
LMD: Consultas
Producto Cartesiano
SQL-89 SQL-92
SELECT Documento.*, Editorial.* SELECT *
FROM Documento, Editorial; FROM Documento CROSS JOIN Editorial;
LMD: Consultas
Combinación
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
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
LMD: Consultas
LMD: Consultas
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 - - - - -
--
LMD: Consultas
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
--
LMD: Consultas
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 - - - - -
LMD: Consultas
SELECT *
Consultas FROM alumno
anidadas WHERE cod_grupo IN
(SELECT cod_grupo
FROM grupo
WHERE curso=‘1’)
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):
ð 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
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).
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
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
LMD: Consultas
Declaración de Cursor
LMD: Consultas
SQL Dinámico
Recuperación y
control de concurrencia COMMIT
ROLLBACK
Seguridad y protección
GRANT
REVOKE
ühhttp://www.lc.leidenuniv.nl/awcourse/oracle/server.920/a96540/toc.htm
70 © 2008 Grupo Kybele