3.1 Estructura de las bases de datos
Una B.D. relacional consiste en un conjunto de tablas las cuales tienen asignado
un nombre único. En este modelo los datos y sus relaciones se representan
por medio de tablas.
En terminología relacional una fila en una relación representa
un registro o una entidad; Cada columna en una relación representa un
campo o un atributo.
3.2 Lenguajes formales de consulta
Álgebra relacional
Lenguaje de consulta de procedimientos que cuenta con cinco operaciones fundamentales.
Operador | Descripción |
v | Elegir |
¶ | Proyectar |
X | Producto cartesiano |
U | Unión |
- | Diferencia |
nom-suc | num-préstamo | nom-cliente | importe |
centro | 15 | López | 1500 |
periférico | 25 | Jiménez | 2000 |
sur | 30 | Gutiérrez | 2500 |
norte | 35 | Salas | 2000 |
nun-cuenta | saldo |
100 | 6000 |
150 | 9000 |
Operación elegir ( 1)
Consiste en escoger tuplas que satisfagan cierto predicado.
1nom-suc = "centro" (préstamo)
Resultado:
centro 15 López 1500
Operación proyectar ( 8 )
Consiste en mostrar solo ciertas columnas de una tabla.
8num-prestamo, nom-cliente (préstamo).
Resultado:
15 López
25 Jiménez
30 Gutiérrez
35 Salas
Ejemplo:
8nom-cliente (importe > 1500 (préstamo))
Resultado:
Jiménez
Gutiérrez
Salas
Operación producto cartesiano (X)
Consiste en crear otra tabla a partir del producto cartesiano de 2 tablas.
Ejemplo:
A = |
|
B = |
|
A X B = |
|
PRÉSTAMO X CUENTA
nom-suc | num-prestamo | nom-cliente | importe | num-cuenta | saldo |
Centro | 15 | López | 1500 | 100 | 6000 |
Centro | 15 | López | 1500 | 150 | 9000 |
Periférico | 25 | Jiménez | 2000 | 100 | 6000 |
Periférico | 25 | Jiménez | 2000 | 150 | 9000 |
Sur | 30 | Gutiérrez | 2500 | 100 | 6000 |
Sur | 30 | Gutiérrez | 2500 | 150 | 9000 |
Norte | 35 | Salas | 2000 | 100 | 6000 |
Norte | 35 | Salas | 2000 | 150 | 9000 |
1nom-suc = "centro" ( PRÉSTAMO X CUENTA )
Operación Unión ( U )
Consiste en crear otra tabla a partir de la unión de dos tablas.
nom-suc | num-cuenta | nom-cliente | saldo |
centro | 300 | Ramos | 150 |
sur | 305 | Flores | 450 |
norte | 310 | Aguero | 500 |
centro | 315 | López | 200 |
( 8 nom-cliente ( 1 nom-suc = "centro " ( DEPOSITO )))
U
( 8 nom-cliente ( 1 nom-suc = " centro " ( PRÉSTAMO )))
Resultado :
López
Ramos
Operación Diferencia ( - )
Consiste en encontrar las tuplas que estén en una tabla pero que no estén
en otra.
Ejemplo:
A |
B |
A |
B |
Todo lo que esta en A pero que no esta en B
( 8 nom-cliente ( 1 nom-suc = "centro" ( DEPOSITO ))) -
( 8 nom-cliente ( 1 nom-suc = "centro" ( PRÉSTAMO)))
Resultado:
Ramos.
3.3 Lenguaje de Consulta Comercial
S.Q.L. ( Structured Query Lenguaje )
S.Q.L. Se introdujo como lenguaje de consulta del sistema R, es una combinación del álgebra relacional y construcciones del calculo relacional.
La estructura básica de una expresión en S.Q.L. se compone de
tres cláusulas que son las siguientes:
SELECT ( ELEGIR )
FROM ( DE )
WHERE ( DONDE )
SELECT
Corresponde a la operación de proyección del álgebra relacional.
FROM
Es una lista de tablas que se van a examinar durante la ejecución de
una expresión.
WHERE
Corresponde al predicado de selección del álgebra relacional.
Forma de una consulta en S.Q.L.
SELECT A1, A2.,An.
FROM r1, r2.,rn.
WHERE p1,p2,...,pn.
A : Representan atributos.
r : Representan tablas.
p : Representan predicados.
La forma de una consulta en S.Q.L. equivale a la expresión del álgebra relacional siguiente :
( ¶ A1,A2,...,An ( Tp ( r1 X r2 X r3 X ... X rn.))
Union
Una unión permite consultar los resultados de dos o mas tablas en una
sola salida; cuando los resultados de las tablas son semejantes (muestran la
misma información) se suprimen las salidas redundantes, operando asi
como una unión de conjuntos.
SELECT <lista de campos> FROM <tabla1> WHERE <condicion1>
UNION
SELECT <lista campos2> FROM <tabla2> WHERE <condicion2>
Like
Consulta por coincidencia parcial en cadenas
SELECT <nombre _ campo>
FROM <tablas>
WHERE <campo char> LIKE <cadena de coincidencia>
caracteres validos en <cadena de coincidencia>
"-" un carácter cualquiera.
"%" una secuencia de caracteres cualquiera.
Ejemplos en S.Q.L.
Ejemplo 1
Hacer una consulta que muestre solamente los nombres de sucursales de la tabla
DEPOSITO.
Solución:
SELECT num-suc
FROM deposito
Ejemplo 2
Hacer una consulta que muestre los nombres de los clientes que tienen una cuenta
de deposito en la sucursal centro.
Solución:
SELECT nom-cliente
FROM deposito
WHERE num-suc = " centro "
Ejemplo 3
Nombre de los clientes que tengan una cuenta de deposito, un préstamo
o ambas cosas en la sucursal centro.
Solución:
( SELECT nom-cliente FROM deposito WHERE nom-suc. = " centro " ).
UNION
( SELECT nom-cliente FROM préstamo WHERE nom-suc. = " centro "
).
Ejemplo 4
Nombre de los clientes que tienen tanto un préstamo como una cuenta de
deposito en la sucursal centro.
Solución :
( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )
INTERSECT
( SELECT nom-cliente FROM préstamo WHERE nom-suc = "centro"
)
Ejemplo 5
Nombre de clientes de la sucursal centro que tienen cuenta de deposito ahí
pero que no han recibido préstamo en ese sucursal.
Solución :
( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )
MINUS
( SELECT nom-cliente FROM préstamo WHERE nom-suc = "centro"
)
Nom-cliente | calle | ciudad |
López | Madero | Saltillo |
Jiménez | Allende | Saltillo |
Gutiérrez | Aldama | Torreón |
Salas | Hidalgo | Torreón |
Flores | Abasolo | Saltillo |
Aguero | Madero | Monclova |
Ejemplo 6
Encontrar el nombre del cliente y la ciudad donde viven todos aquellos que tengan
un préstamo en la sucursal centro.
Solución :
SELECT clientes.nom-clientes, ciudad
FROM prestamo, clientes
WHERE (clientes.nom-clientes = préstamo.nom-clientes) AND (nom-suc =
"centro" )
Conectores en S.Q.L.
Permiten comparar un solo valor con los miembros de todo un conjunto
1.- in
2.- any
3.- all
IN
Verifica si pertenece a una tabla. Donde la tabla es un grupo de valores producidos
por la cláusula SELECT.
Ejemplo:
Encontrar los nombres de clientes que tienen préstamo en la sucursal
centro y tienen cuenta de deposito.
SELECT nom-cliente
FROM préstamo
WHERE nom-suc = "centro" AND nom-cliente
IN ( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )
Resultado :
López
ANY
Verifica que el valor de la tupla sea por lo menos un miembro de todos los valores
del conjunto.
Ejemplo:
Encontrar todos los nombres de sucursales que tienen un activo mayor que alguna
de las sucursales situadas en la ciudad de Torreón.
nom-suc | ciudad | activo |
centro | Saltillo | 300000 |
sur | Saltillo | 400000 |
norte | Saltillo | 200000 |
centro | Torreón | 210000 |
sur | Torreón | 270000 |
norte | Torreón | 350000 |
centro | Monclova | 100000 |
sur | Monclova | 150000 |
norte | Monclova | 600000 |
Solución :
SELECT nom-suc
FROM sucursal
WHERE ciudad <> "Torreon"
AND activo > any ( SELECT activo FROM sucursal WHERE ciudad = "Torreón"
)
La comparación > any en la cláusula WHERE del SELECT externo es verdad si el activo de la tupla es mayor que por lo menos un miembro del conjunto de todos los valores del activo de la ciudad de Torreón.
ALL
Verifica que el valor es igual/mayor/menor que todos los miembros de todos los
valores del conjunto.
Ejemplo:
Se modifica ligeramente la consulta anterior, si se buscan todas las soluciones
que tengan un activo mayor que todas las sucursales de Torreón.
SELECT nom-suc
FROM sucursal
WHERE ciudad <> "Torreón" AND activo > all ( SELECT
activo
FROM sucursal
WHERE ciudad = "Torreón" )
Funciones de S.Q.L. standard:
1. AVG Promedio
2. MAX Máximo
3. MIN Mínimo
4. COUNT # de tuplas
ORDER BY
Hace que las tuplas en el resultado de una consulta aparezcan en orden de menor
a mayor.
Ejemplo:
SELECT nom-cliente FROM préstamo ORDER BY nom-cliente
GROUP BY
Sirve para formar grupos, las tuplas que tengan el mismo valor para un atributo
se colocan en grupo.
Ejemplo:
Encontrar el saldo promedio de todas las cuentas de deposito en cada una de
las sucursales incluir el nombre de las sucursales.
Solución :
SELECT nom-suc FROM deposito GROUP BY nom-suc
3.4 Modificación de la base de datos
La modificación de la base de datos se expresa usando el operador asignación.
Las asignaciones se hacen a relaciones ya existentes en la base de datos.
Eliminación
Una solicitud de eliminación se expresa de forma muy parecida a una consulta.
Sin embargo, en vez de presentar tuplas al usuario, quitamos las tuplas seleccionadas
de la base de datos. Sólo podemos eliminar tuplas completas; no podemos
eliminar únicamente valores de determinados atributos.
Inserción
Para insertar datos en una relación, bien especificamos la tupla que
sa va a insertar o escribimos una consulta cuyo resultado sea un conjunto de
tuplas que se va a insertar.
Actualización
En ciertas ocasiones podemos querer cambiar un valor en una tupla sin cambiar
todos los valores de la tupla. Si hacemos estos cambios usando eliminación
e inserción, es posible que no podamos conservar los valores que no queremos
cambiar. En lugar de ello, usamos el operador actualización.
Creación de Tablas
CREATE TABLE<nombre de la tabla>
(
<campo1> (<tipo>[,NO NULL]),
<campo2> (<tipo>[,NO NULL]),...
)Tipos de Datos
CHAR (<LONG>)[VAR]
FLOAT
INTEGER
SMALLINT
Creacion de Indices
CREATE [UNIQUE] INDEX <nom.indice> ON < nom>tabla>
(
<nomcampo1> [ASC/DES],
<nomcampo2> [ASC/DES],...
)Modificar Tablas (expandirlas)
EXPAND TABLE <nom.tabla>
ADD FIELD <nom.campo> (<TIPO>[NO NULL]) Eliminar Tablas
DROP TABLE <nom.tabla> Eliminar Indices
DROP <nom.indice> Ejemplos
Creacion de Tablas (SQL standard)
CREATE TABLE persona
(
nombre(CHAR(40) VAR, NO NULL),
edad(SMALLINT, NONULL),
estatura(FLOAT, NO NULL),
telefono(CHAR(7))
)
Creacion de Tablas (SQL Access)
CREATE TABLA Cuenta (
Num_cuenta integer Not NULL,
Saldo flota
)
Creacion de Indices
Por nombre
CREATE INDEX ind_nom ON persona (
nombre
)
Insertar datos
INSERT INTO <nom.tabla>
[(<campo1>,<campo2>...):]
< <valor1>,<valor2>...>
Modificar datos
UPDATE <nom.tabla>
SET <campo1> = <campo1>,
<campo2> = <campo2>,...
[WHERE <condicion>]
Eliminar datos
DELETE<nom.tabla>
[WHERE <condicion>]Ejemplo Insertar (SQL Standard)
Insert into persona < 'juan',15,1,75,'2-15-15','forjadores'>
Ejemplo Insertar (SQL Access)
INSERT INTO Cuenta (num_cuenta, saldo) VALUES (10, 6000)
Íncrementar edad de todas las tuplas
Update persona
Set edad=edad+1
3.5 Vistas
Son una especie de tablas virtuales; es decir no existen físicamente
sino que forman mediante la selección y/o filtrado de los componentes
de otras tablas, una vista puede ser definida en base a una vista previa. Esto
significa que pueden crearse dependencia entre las vistas.
Formato de definición de vistas
DEFINE VIEW <nombre vista>
[(identif_campo1, identif_campo2,...)]
AS <operación de consulta>
Ejemplo:
se desea crear una vista para obtener los nombres y domicilios de los clientes
adultos es deseable el establecimiento de las cabeceras nombre del cliente,
domicilio del cliente.
DEFINE VIEW cliente_adulto
(nombre del cliente, domicilio del cliente)
AS (SELECT nombre,domicilio FROM clientes WHERE estado = 'adulto')
Como puede verse, la especificación de los identificadores es opcional; si estos se omiten se asumiran los nombres de los campos extraídos en la consulta.
La operación de consulta permite todos los formatos validos de consulta en SQL con execepción del group by.
Cuando una vista es definida en base a otra, se se dice que es dependiente de esta por lo tanto, se suprimira automáticamente la vista dependiente si se suprime la vista original.
Eliminación de vistas
Drop view <nombre tabla>
Ejemplo
suponga que se desea crear una vista dependiente de la vista cliente adulto
que contenga solamente a los clientes que viven sobre forjadores. Se desean
los mismos campos y la vista sera llamada cliente_adulto_forjadores.
DEFINE VIEW cliente_adulto_forjadores
AS (SELECT * FROM cliente_adulto WHERE domicilio_del_cliente like 'forjadores%')
DROP VIEW cliente_adulto
(se eliminara tambien la vista cliente_adulto_forjadores, puesto que es dependiente
de cliente_adulto.)
La eliminación de una tabla provoca tambien la eliminación automatica
de todas las listas que se hayan definido haciendo referencia a ella.
Contenido |
Base de Datos I |
Ing. Flora Gonzalez, Ing. Tomas Lopez, Ing. Cesar
Rodriguez |