Tema 39 – Lenguajes para la definición y manipulación de datos en sistemas de bases de datos relacionales.

Tema 39 – Lenguajes para la definición y manipulación de datos en sistemas de bases de datos relacionales.

1. INTRODUCCIÓN

2. LENGUAJES PARA LA DEFINICIÓN Y MANIPULACIÓN DE DATOS. 1

2.1 Álgebra relacional 2

2.2 Cálculo relacional de tuplas. 2

2.3 Cálculo relacional de dominios. 2

3. LENGUAJES COMERCIALES. 2

3.1 QBE. 3

3.2 Quel 3

4. SQL. 5

4.1 DDL. 5

4.2 DML. 6

1. INTRODUCCIÓN

Entre los modelos existentes de sistemas gestores el relacional es el más común.

Este modelo relacional cuenta con 3 lenguajes formales (el álgebra relacional, el cálculo relacional de tuplas y el cálculo relacional de dominios)

SQL es el lenguaje más utilizado, aunque también existen (QBE, QUEL)

2. LENGUAJES PARA LA DEFINICIÓN Y MANIPULACIÓN DE DATOS

Los sistemas gestores de bases de datos relacionales incluyen lenguajes para la definición de datos y la manipulación de esos datos, el DDL, que constituye el lenguaje para la definición de datos y DML, que constituye el lenguaje para la manipulación de los mismos.

image

Los lenguajes relacionales pueden ser clasificados en:

Procedimentales: El usuario debe indicar las operaciones a realizar, y la secuencia en la que se llevan a cabo.

No procedimentales: Permiten que el usuario se limite a describir los datos y efectuar consultas sin indicar el modo en que se llevará a cabo.

2.1 Álgebra relacional

Constituye un lenguaje de consulta procedimental y cuenta con un conjunto de operaciones básicas para consultar una BD.

2.1.1 Operación seleccionar

image

2.2 Cálculo relacional de tuplas

Es no procedimental, lo que significa que no se indica la secuencia de operaciones, sino una descripción de lo que deseamos.

Las consultas se representan mediante lo siguiente:

{t|P(t)} à t= variable libre P= una fórmula

2.3 Cálculo relacional de dominios

No es procedimental. Usamos varias variables que toman valores en el dominio de un atributo en lugar de emplear variables de tupla como en el caso anterior. Las expresiones utilizadas en el cálculo relacional de dominios son:

{<x1,…,xn> | P (x1,…,xn)} à x: son variables anónimas P(x1,…xn) es una fórmula

3. LENGUAJES COMERCIALES

Los lenguajes estudiados anteriormente son lenguajes formales que sirven como base para el desarrollo de lenguajes comerciales que basados en los anteriores acompañan a productos comerciales para la consulta y definición de datos en sistema de gestión de bases de datos relacional.

SQL, relacionado con el álgebra relacional.

QUEL, relacionado con el cálculo relacional de tuplas.

QBE, relacionado con el cálculo relacional de dominios.

3.1 QBE

· Lenguaje de manipulación de datos desarrollado por Watson de IBM en los 70.

· Lenguaje no procedimental con sintaxis bidimensional.

· Las columnas representan los atributos de la relación.

· En las filas, aparecen constantes y variables de dominio precedido por (_)

· Para mostrar impreso un determinado atributo se emplea la orden “P” que debe aparece bajo la columna del atributo que nos interesa.

Ejemplo:

Profesor

Dni

Nombre

Apellidos

Especialidad

Localidad

P._x

P._y

P._z

Historia

P._w

La ordenación: P.AO (ascendente) P.DO (descendente)

Profesor

Dni

Nombre

Apellidos

Especialidad

Localidad

P.

P.AO(2)

P.AO(1)

Historia

Sevilla

La eliminación: D.

Profesor

Dni

Nombre

Apellidos

Especialidad

Localidad

D.

11.111.111

La inserción: I.

Profesor

Dni

Nombre

Apellidos

Especialidad

Localidad

I.

22.222.222

Pedro

García Gar

Historia

Villanueva

Modificación: U.

Profesor

Dni

Nombre

Apellidos

Especialidad

Localidad

11.111.111

U. C/Olmo 1

3.2 Quel

· Lenguaje de manipulación de datos no procedimental incluido en la BD Ingres y desarrollado en la Uni de Berkeley Californida. La estructura general de una consulta es la siguiente:

range of t1 is r1

range of t2 is r2

……………………………..

…………………………….

range of tm is rm

retrieve (ti1.aj1, ti2.aj2, …….., tim.ajm)

where p

donde t1,…..,tm son las tuplas que usamos para la consulta, r1,…,rm son las relaciones correspondientes a t1,…,tm.

La cláusula RETRIEVE es equivalente a la cláusula SELECT de SQL, y P es el predicado de selección.

· Ejemplo: Obtener todos los clientes que tienen cuenta en la sucursal principal.

RANGE OF t IS deposito RETRIEVE (t.nombre_cliente) WHERE t.nombre_sucursal = “Principal”.

· Como ejemplo de una consulta en la que aparezcan dos tuplas de dos relaciones distintas podríamos usar el siguiente: ” Obtener todos los nombres de los clientes y sus ciudades de residencia que tienen préstamo en la sucursal principal.”

RANGE OF t IS cliente RANGE OF s IS prestamo RETRIEVE (s.nombre_cliente, t.ciudad_cliente) WHERE s.nombre_sucursal = “Principal” AND t.nombre_cliente = s.nombre_cliente

QUEL no incluye eliminación de duplicados por defecto, si se quiere conseguir ésta, es necesario indicarlo mediante la cláusula UNIQUE.

RANGE …………. RETRIEVE UNIQUE (………….) WHERE …….

A) Inserción.

· Para la inserción de tuplas individuales:

APPEND TO deposito (lista de atributos con valores nuevos).

Ej: APPEND TO deposito (num_cuenta = 287, nombre_sucursal = “Murcia”….)

· A continuación, podemos ver un ejemplo de inserción de tuplas de una relación en otra relación.

RANGE OF t IS prestamo

APPEND TO temp (t.nombre_cliente)

WHERE t.nombre_sucursal = “Principal”

Donde temp quedará formada como una relación cuyo único atributo es nombre_cliente. Si temp ya existiera cuando se realizó la inserción, entonces los atributos que tenga temp deben coincidir con los atributos que insertamos en la cláusula APPEND.

B) Modificación.

· Por su sencillez, veremos la modificación mediante un ejemplo por el cual aumentaremos en un 5% los saldos de la relación deposito.

RANGE OF t IS deposito

REPLACE t (saldo = t.saldo x 1.05)

C) Eliminación.

· Para la eliminación usamos el comando DELETE que borra tuplas completas.

Ej: Eliminar todas las tuplas de prestamo para todos los clientes cuyo nombre sea López.

RANGE OF t IS prestamo

DELETE (t) WHERE nombre_cliente = “López”.

4. SQL

El modelo relacional nace gracias a las aportaciones de E.F Codd que trabaja en IBM.

En 1974 SEQUEL(Structured English Query Language) à ahora SQL

4.1 DDL

Lenguaje de definición de datos, que nos permite la definición de los componentes de la BD, como las tablas, índices y vistas.

4.1.1 Creación de tablas

CREATE TABLE Person (
    PersonID int, NOT NULL UNIQUE PRIMARY KEY
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

4.1.2 Modificación de tablas

ALTER TABLE Person
ADD (DateOfBirth date)

4.1.3 Eliminación de tablas

DROP TABLE Shippers;

4.1.4 Vistas

Permiten definir subconjuntos de datos formados con una o varias tablas y/o vistas.

Tienen apariencia de tabla, pero ocupa menos espacio porque se almacena solo la definición de la vista y no los datos que la forman.

Muestra al usuario una visión parcial de los datos.

4.1.4.1 Creación de vistas

CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued = No;

4.1.4.2 Eliminación de vistas
DROP VIEW view_name;
4.1.5 Índices

Permiten acceder a la información de una tabla, mediante un determinado orden de forma rápida, aumentado el rendimiento de los accesos a la información.

4.1.5.1 Creación de índices

CREATE INDEX idx_lastname
ON Persons (LastName);

4.1.5.2 Eliminación de índices

DROP INDEX index_name;

4.2 DML

Nos permiten introducir, eliminar, modificar y consultar datos contenidos en la BD.

4.2.1 Insertando valores en una tabla

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES (‘Cardinal’, ‘Tom B. Erichsen’, ‘Skagen 21’, ‘Stavanger’, ‘4006’, ‘Norway’);

4.2.2 Borrando registros en una tabla

DELETE FROM Customers
WHERE CustomerName=’Alfreds Futterkiste’;

4.2.3 Modificando registros

UPDATE Customers
SET ContactName = ‘Alfred Schmidt’, City= ‘Frankfurt’
WHERE CustomerID = 1;

4.2.4 Consultas

SELECT * FROM Customers
ORDER BY Country;

La opción DISTINCT la usamos para evitar duplicados

SELECT DISTINCT Country FROM Customers;


4.2.4.2 Operadores de conjunto

El lenguaje SQL cuenta con las operaciones de unión, intersección y diferencia definidas en el álgebra relacional, de modo que podemos operar sobre dos consultas como si se tratara de conjunto de tuplas.


Unión (o uno o el otro)

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

Intersección (uno y el otro)

SELECT ProductID

FROM Production.Product

INTERSECT

SELECT ProductID

FROM Production.WorkOrder

Diferencia (tuplas que pertenecen a un conjunto y no al segundo)

SELECT supplier_id

FROM suppliers

MINUS

SELECT supplier_id

FROM orders;

4.2.4.3 Predicados

Se recuperan tuplas que cumplen dicha condición.

image

Agregación:

image

SELECT Avg(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100;