Publicado el 3 de Noviembre del 2019
768 visualizaciones desde el 3 de Noviembre del 2019
359,4 KB
34 paginas
Creado hace 20a (07/10/2004)
Departamento de Lenguajes y Ciencias de la
Computación Universidad de Málaga
Bases de Datos
(Ingeniería Técnica en Informática de Sistemas)
Tema 2. Bases de Datos Relacionales:
SQL
E.T.S.I. Informática
J. Galindo Gómez y E. Soler Castillo
SQL (Structured Query Language)
SQL
SQL está en continua evolución: Es una evolución del lenguaje
SEQUEL de D.D. Chamberlin y R.F. Boyce (1974) y fue implementado
por primera vez por IBM en su BDR llamado SYSTEM R.
– ISO (International Standards Organization) y ANSI (American National
Standards Institute) desarrollaron una versión estándar en 1986,
llamada SQL86 o SQL1. Posteriormente, se desarrolló SQL92 o
SQL2. Actualmente se desarrolla SQL3, que incluye conceptos de BD
orientadas a objetos.
SQL es un lenguaje estándar para GESTIÓN de BDR:
– Está incluido en muchos SGBD (DBMS), como DB2 (de IBM),
Oracle, Ingres, Informix, Sybase, Access, SQL Server...
Las mismas sentencias sirven en distintos SGBD.
Si se usan sólo las características estándares facilita la tarea de
migrar de SGBD →→→→ Hay funciones no estándar en algunos SGBD.
– Fácil de usar y aprender: Tiene similitudes con el Álgebra
Relacional, aunque se parece más al Cálculo y es más fácil e intuitivo
que ambos lenguajes formales.
– Aquí se incluye una introducción a SQL estándar con algunos
comentarios sobre el SGBD Oracle.
2
1
SQL
SQL (Structured Query Language)
SQL es un lenguaje COMPLETO: Incluye sentencias para
– DDL y DML: Permite definir esquemas, consultar, borrar, actualizar...
– Definición de vistas: Para ver la BD de distintas formas.
– Seguridad: Permisos de acceso distintos para cada usuario.
– Definir restricciones de integridad: Integridad referencial...
– Especificar control de transacciones: Para grandes empresas,
recuperación de errores, archivos históricos...
– Puede incrustarse en lenguajes de alto nivel (C, C++, Pascal, COBOL...).
– Permite operaciones tan complejas que su total definición es complicada:
Sólo veremos un subconjunto de las operaciones posibles.
ESQUEMA (schema): Conjunto de elementos (tablas, vistas,
permisos...) que pertenecen a la misma BD. Cada esquema tiene un
nombre y un usuario propietario del esquema.
CATÁLOGO (catalog): Conjunto de esquemas. Tiene un esquema es-
pecial llamado INFORMATION_SCHEMA que provee información sobre los
demás esquemas, usuarios autorizados, definiciones de dominio, restric-
ciones de integridad referencial (sólo entre tablas del mismo catálogo)...
SQL (Structured Query Language)
SQL
TIPOS de DATOS de los atributos de las relaciones:
– Enteros de distintos tamaños: INTEGER o INT y SMALLINT.
– Reales de distinta precisión: FLOAT(p), REAL, DOUBLE PRECISION, o el más
genérico DECIMAL(precisión, escala)
En Oracle:
NUMBER(p,s), donde p=“número total de dígitos” (de 1 a 38
en Oracle) y s=“número de decimales” (de -84 a 127 en
Oracle, con valor 0 por defecto).
NUMBER(p,0)
NUMBER
ENTERO
COMA FLOTANTE
Actual Data Specified As
7456123.89 NUMBER
7456123.89 NUMBER(9)
7456123.89 NUMBER(9,2)
7456123.89 NUMBER(9,1)
7456123.89 NUMBER(6)
7456123.89 NUMBER(7,-2)
7456123.89 NUMBER(-7,2)
Stored As
7456123.89
7456124
7456123.89
7456123.9
exceeds precision
7456100
exceeds precision
3
4
2
SQL (Structured Query Language)
SQL
TIPOS de DATOS de los atributos de las relaciones:
– Caracteres: CHAR(n) o CHARACTER(n), n=longitud fija (por defecto n=1).
También VARCHAR(n), n=longitud máxima
En Oracle, se recomienda:
VARCHAR2(n) con n=4000 como máximo.
Para cadenas más largas usar LONG (máximo 2GB) o
CLOB (Character Large OBject, máx. 4GB).
NCHAR y NVARCHAR2 usan el juego de caracteres
Nacional definido al crear la BD.
Diferencia entre CHAR y VARCHAR
– Cadenas de bits (para gráficos, sonidos, ficheros binarios...): BIT(n),
n=longitud fija o BIT VARYING(n), con n=longitud máxima. Por defecto n=1.
En Oracle, se recomienda:
RAW(tamaño_fijo_máx_2000bytes) o LONG RAW (sin argumento y con un
tamaño máximo de 2GB). Últimamente Oracle aconseja usar LOB o BLOB
(Binary Large OBject, máximo 4GB), o también BFILE para almacenar la
localización de un fichero binario.
SQL (Structured Query Language)
SQL
TIPOS de DATOS de los atributos de las relaciones:
– Fecha y Hora: DATE (año, mes, día: YYYY-MM-DD). TIME (horas, minutos,
segundos: HH:MM:SS). TIMESTAMP incluye ambos
En Oracle,
DATE incluye fecha y hora
Se usan las funciones TO_CHAR y TO_DATE para
convertir un dato de tipo fecha a texto y viceversa.
TO_DATE(’27-OCT-98’, ’DD-MON-YY’)
to_char(to_date('27-10-03','dd-mm-yy'),'dd-mon-yyyy')
27-oct-2003
5
6
3
SQL (Structured Query Language)
SQL
Aritmética del tipo DATE:
Se puede sumar y restar constantes numéricas así como otras
fechas a las fechas. Oracle interpreta las constantes como
número de días.
Ejemplos: SYSDATE + 1 mañana
SYSDATE - 7 hace una semana
SYSDATE + (10/1440) dentro de 10 minutos
Restar en atributo FechaAlquiler de SYSDATE devuelve el
número de días desde que fue alquilado.
Existe muchas otras funciones como ADD_MONTHS,
MONTHS_BETWEEN, NEXT_DAY, ROUND, etc.
DML de SQL: Consultas con SELECT
DML de SQL
• SELECT <Lista_Atributos>
FROM <Lista_Tablas>
WHERE <Condición>;
Esquema Conceptual:
Suministrador (S#, NombreS, Dirección, Ciudad);
Pieza (P#, NombreP, Peso, Cantidad);
Suministros (S#,P#);
Suministrador
S# NombreS
2
3
4
Juan
Luis
Pablo
Pieza
P# NombreP
2
Tornillo
4 Tuerca
8 Clavos
Dirección
C/ Pelayo
C/ Pato
C/Alfonso X
Ciudad
Málaga
Málaga
Granada
Peso
16
8
7
Cantidad
20
20
30
Suministros
S# P#
4
2
8
2
4
2
2
3
7
8
4
DML de SQL: Consultas con SELECT
DML de SQL
Ejemplos:
– Proyección:
“Nombre y Dirección de todos los suministradores”
SELECT NombreS, Direccion
FROM Suministrador;
Ojo al ;
– Selección:
“Todos los datos de los suministradores de Málaga”
SELECT * FROM Suministrador
WHERE NombreS= ‘Malaga’;
CASE SENSITIVE
“Piezas que pesen más de 15 gramos y que su Cantidad sea menor o
igual que 30”:
SELECT * FROM Pieza
WHERE Peso>15 AND Cantidad<=30;
“Piezas de las que se ignore el Peso”:
SELECT * FROM Pieza
WHERE Peso IS NULL;
No usar Peso=NULL.
Cada NULL es distinto
a otro.
Consultas con SELECT: Observaciones
Cláusula SELECT:
– Puede ponerse un * para indicar que se recuperen todos los
atributos de todas las tablas de la cláusula FROM.
– Puede usarse también el formato <Tabla>.* para referirse a todos
DML de SQL
los atributos de esa tabla.
– Pueden renombrarse los nombres de las columnas del resultado,
poniendo el nuevo nombre justo después del atributo (usar comillas
dobles si son varias palabras).
SELECT nombrep “Nombre de la pieza”, peso/1000 Kg
FROM Pieza;
Nombre de la pieza
Tornillo
Tuerca
Clavos
Kg
0.016
0.008
0.007
9
10
5
DML de SQL
Consultas con SELECT: Observaciones
Cláusula FROM: Para especificar tablas, vistas o
instantáneas (snapshot).
– Pueden ir varias tablas (vistas o instantáneas)
– Pueden ponerse alias a las tablas: <Tabla> <Alias>.
– Pueden usarse los alias en el SELECT (delante) y en el WHERE (detrás)
SELECT p.nombrep, p.peso FROM pieza p
WHERE p.cantidad>= 20;
Cláusula WHERE:
– Se usan los operadores relacionales <,>,<=,>=,<>,!=,=,LIKE
Comparación de Fechas, Caracteres, Números
Caracteres: UPPER, LOWER, LIKE ‘_ose%’
– La condición puede usar los op. lógicos NOT, AND y OR.
– Si no existe cláusula WHERE: Se supone que se recuperan todas las tuplas
(como si la condición fuese siempre verdad).
Si no existe cláusula WHERE y en la cláusula FROM hay varias tablas, se
obtiene el Producto Cartesiano: Por tanto, si hay varias tablas la
condición establece una selección de tuplas del Producto Cartesiano.
Las condiciones de una operación de REUNIÓN hay que explicitarlas.
11
Consultas con SELECT: Observaciones
– Null en Funciones SQL
DML de SQL
Todas las funciones escalares (excepto NVL y TRANSLATE) devuelven
null cuando se les pasa un null
argumento. Se puede usar la función NVL para devolver un valor cuando
hay un null.
NVL(COMM,0) devuelve 0 si COMM es null o el valor de COMM si no es
null.
La mayoría de las funciones de agregación ignoran nulls.
Media de 1000, null, null, null, y 2000 (1000+2000)/2 = 1500.
– Nulls con Operadores de Comparación
Usar IS NULL y IS NOT NULL.
Al usar otros operadores UNKNOWN
Oracle considera 2 nulls iguales si aparecen en claves
compuestas.
12
6
Ejemplos:
– “Números de Suministradores que Suministren una Pieza de 16 gramos”:
DML de SQL
SELECT S# FROM Pieza, Suministros;
Suministros
S# P#
4
2
8
2
2
4
3
2
SELECT S# FROM Pieza,
Suministros
WHERE Peso = 16;
Pieza
P# NombreP
2
Tornillo
4 Tuerca
8 Clavos
P# NombreP
Tornillo
2
Tornillo
2
Tornillo
2
2
Tornillo
Tuerca
4
Tuerca
4
Tuerca
4
4
Tuerca
8 Clavos
8 Clavos
8 Clavos
8 Clavos
Peso
16
8
7
Peso
16
16
16
16
8
8
8
8
7
7
7
7
Cantidad
20
20
30
Cantidad S# P#
2 4
20
2 8
20
4 2
20
20
3 2
2 4
20
2 8
20
4 2
20
20
3 2
2 4
30
2 8
30
4 2
30
30
3 2
Ejemplos:
– “Números de Suministradores que Suministren una Pieza de 16 gramos”:
DML de SQL
SELECT S# FROM Pieza, Suministros
WHERE Pieza.P# = Suministros.P#;
P# NombreP
Tornillo
2
Tornillo
2
4
Tuerca
8 Clavos
Peso
16
16
8
7
Cantidad S# P#
4 2
20
3 2
20
20
2 4
2 8
30
SELECT S# FROM Pieza, Suministros
WHERE Pieza.P# = Suministros.P# AND Peso=16;
S#
4
3
13
14
7
DML de SQL: Consultas con SELECT
DML de SQL
Ejemplos:
– “Nombres de Suministradores que Suministren una Pieza de 16 gramos”:
SELECT NombreS FROM Suministrador, Pieza, Suministros
WHERE Suministros.P# = Pieza.P#
AND Suministros.S# = Suministrador.S# AND Peso=16;
Juan
Luis
Pablo
Suministrador
S# NombreS
2
3
4
Pieza
P# NombreP
2
Torn
Comentarios de: Tema2. Bases de Datos Relacionales: SQL (0)
No hay comentarios