BASES DE DATOS I UNIDAD III . MODELO RELACIONAL

Anuncio
Bases de Datos I Unidad III
BASES DE DATOS I
UNIDAD III
MODELO RELACIONAL.
Este modelo opera en los niveles conceptual y de vision, tiene la característica de que los
resultados de un diseño muestran caracteristicas bien definidas que seran utiles para la
implementación del nivel conceptual.
3.1 ESTRUCTURA DE LAS BASES DE DATOS RELACIONALES.
3.2 LENGUAJES DE CONSULTAS FORMALES O PUROS.
Existe un sistema de DML conocido como algebra relacional que permite especificar
operaciones de consulta a traves de pasos intermedios de generación de tablas utilizando
formatos especiales. En el algebra relacional no son validos los operadores logicos.
Existen dos clasificaciones de procesos en algebra relacional; en cada uno de ellos se toma
una o dos tablas como entrada y se obtiene una tabla de salida.
Estas clasificaciones son:
Operaciones tradicionales
o
o
o
o
Union(union)
Intersección(intersect)
Diferencia(minus)
Producto cartesiano (times)
Instituto Tecnológico de Ciudad.Juárez
25
Bases de Datos I Unidad III
Operadores especiales
o
o
o
o
Select
Project
Join
Divide
Operadores tradicionales: Estas requieren que las tablas a operar tengan la misma cantidad
de atributos y que sus dominios correspondientes sean semejantes o congruentes.
a. UNION.- Constituye una tabla que contiene a todas las tuplas que aparecen en una o
ambas tablas <tabla1>union<tabla2>
b. INTERSECCION.- Produce un atabla que contiene a aquellas tuplas que aparecen en
ambas tablas <tabla1>intersec<tabla2>
c. DIFERENCIA.-Produce un atabla que contiene todas las tuplas de la primera tabla
operando que no aparecen en la segunda <tabla1>minus<tabla2>
d. PRODUCTO CARTESIANO.- Produce una tabla que contiene todas las posibles
concatenaciones entre los elementos de las tablas involucradas <tabla1>times<tabla2>
Operaciones especiales:
a. SELECT.- Es un formato qu epermite extraer tuplas que satisfacen una condición
<tabla>where<condición>
b. PROJECT.- Es un formato que nos permite filtrar atributos en la tabla resultante,
especificando aquellos que se desea obtener. <tabla>[<lista de atributos>]
c. JOIN.- Construye una tabla a partir de dos tablas especificas, obteniendo todas las
posibles combinaciones entre los elementos de estas y mostrando aquellas que
satisfagan una condición determinada <tabla1>join<tabla2>where<condicion>
Nota: Esta operación es semejante a una consulta sobre tabla global cuando se
involucran dos tablas y una condicion de filtro.
d. DIVIDE.-Toma dos tablas una de grado (M+N) y la otra de grado(N). construye una tabla
de grado M que contiene todos los valores m de la relacion (M+N) cuyo complemento es
igual a todos los valores de la relación de orden N. <tabla1>DIVIDE<tabla2>
Ejercicios:
a. Mostrar una lista que contenga los nombres y costos de las peliculas en existencia:
videos[nombre,costo]
b. Se desea conocer el nombre y domicilio de todos los clientes infantiles
(clientes where estado = 'infantil')[nombre,domicilio]
c. Se desea conocer el nombre de las peliculas que no son para niños
(videos where clasificacion ¬ = 'a')[titulo]
d. Se desea la lista de los titulos que cuestan mas de 10.00 de peliculas para adultos
((videos where costo>10.00)where clasif='c')[titulo]
Instituto Tecnológico de Ciudad.Juárez
26
Bases de Datos I Unidad III
3.2.1 Álgebra Relacional.
El álgebra relacional es un lenguaje de consulta procedimental. Consta de un conjunto de
operaciones que toman como entrada una o dos relaciones y producen como resultado una
nueva relación. Las operaciones fundamentales del álgebra relacional son selección,
proyección, unión, diferencia de conjuntos, producto cartesiano, y renombramiento. Además de
las operaciones fundamentales hay otras operaciones, por ejemplo, intersección de conjuntos,
reunión natural, división y asignación. Estas operaciones se definirán en términos de las
operaciones fundamentales.
Operaciones
Proyectar (π)
Seleccionar ()
Producto cartesiano (×)
Join ó Reunir ( )
Operaciones de conjuntos
Unir ()
Intersectar (∩)
Restar (–)
Proyección (π)
 Selecciona el valor de ciertos atributos de
todas las tuplas de una relación
πA1,A2,...,An(R) = { t[A1,A2,...,An] : t  R }
 Selecciona columnas completas
Proyección (π) ejemplos
Película
ID_Película
1
2
3
4
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Actor
Año
1977
2001
2004
2001
ID_Actor
1
2
3
4
Nombre
Mark
Cristopher
Javier
Hugo
Apellido
Hamill
Lee
Bardem
Weaving
π Año(Película) ={<1977>,<2001>,<2004>,<2001>}
πID_Película,Año(Película) ={<1,1977>,<2,2001>,<3,2004>,<4,2001>}
πNombre(Actor) ={<Mark>,<Cristopher>,<Javier>,<Hugo>}
Instituto Tecnológico de Ciudad.Juárez
27
Bases de Datos I Unidad III
Proyección (π) en SQL
πA1,A2,...,An(R)
SELECT A1,A2,...,An FROM R
Selección ()
 Selecciona el valor de ciertas tuplas
condición(R) = { tR : condición(t) es cierto}
 Selecciona filas completas
Selección () ejemplos
Película
ID_Película
1
2
3
4
Actor
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Actor
1
2
3
4
Nombre
Mark
Cristopher
Javier
Hugo
Apellido
Hamill
Lee
Bardem
Weaving
Apellido=Lee(Actor) = {<2,Cristopher,Lee>}
Año>2000(Película) = {<2,La comunidad del anillo,2001>, <4,El viaje de Chihiro,2001>}
Proyección () en SQL
condición(R)
SELECT * FROM R WHERE condición
Composición de selección y proyección ,π
Película
ID_Película
1
2
3
4
Actor
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Actor
1
2
3
4
Instituto Tecnológico de Ciudad.Juárez
Nombre
Mark
Cristopher
Javier
Hugo
Apellido
Hamill
Lee
Bardem
Weaving
28
Bases de Datos I Unidad III
πNombre(Apellido=Lee(Actor)) = {<Cristopher>}
πNombre(Año>2000(Película)) = {<La comunidad del anillo>,<El viaje de Chihiro>}
Composición ( y π) en SQL
πA1,A2,...,An (condición(R))
SELECT A1,A2,...,An FROM R WHERE condición
Eliminar duplicados (δ)
Elimina tuplas duplicadas en una relación δ(R)
Película
ID_Película
1
2
3
4
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Estudio
3
2
4
1
δ(π Año(Película) = { 1977, 2001, 2004 }
Operación δ en SQL
δ(R)
SELECT DISTINCT * FROM R
Producto cartesiano (×)
A × B = {(a,b): a  A Λ b  B}
Ejemplo:
 A = {s,t}
 B = {u,v,w}
 A × B = {s,t} × {u,v,w}
{ (s,u),(s,v),(s,w),(t,u),(t,v),(t,w) }
La cardinalidad es |A × B| = |A||B|
Instituto Tecnológico de Ciudad.Juárez
29
Bases de Datos I Unidad III
Producto cartesiano (×)
ejemplos
Película
ID_Película
1
2
3
4
Estudio
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Estudio
3
2
4
1
ID_Estudio
1
2
3
4
Nombre
Ghibli
New Line Cinema
Luscasfilm
Sogecine
Película×Estudio ={<1, La guerra de las galaxias, 1977, 3, 1, Ghibli>,
<1, La guerra de las galaxias, 1977, 3, 2, New Line Cinema>,
<1, La guerra de las galaxias, 1977, 3, 3, Lucasfilms>,
<1, La guerra de las galaxias, 1977, 3 , 4, Sogecine>,
<2, La comunidad del anillo, 2001, 2, 1, Ghibli>,
<2, La comunidad del anillo, 2001, 2, 2, New Line Cinema>,
<2, La comunidad del anillo, 2001, 2, 3, Lucasfilms>,
<2, La comunidad del anillo, 2001, 2, 4, Sogecine>,
<3, Mar adentro, 2004, 4, 1, Ghibli>,
<3, Mar adentro, 2004, 4, 2, New Line Cinema>,...}
Producto cartesiano (×) en SQL
R1× R2
SELECT * FROM R1, R2
Seleccionar combinaciones correctas
Película
ID_Película
1
2
3
4
Estudio
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Estudio
3
2
4
1
ID_Estudio
1
2
3
4
Nombre
Ghibli
New Line Cinema
Luscasfilm
Sogecine
Película.ID_estudio=Estudio.ID_Estudio(Película×Estudio) ={
<1, La guerra de las galaxias, 1977, 3, 3, Lucasfilms>,
<2, La comunidad del anillo, 2001, 2 , 2, New Line Cinema>,
<3, Mar adentro, 2004, 4, 4, Sogecine>,
<4, El viaje de Chihiro, 2001, 1, 1, Ghibli>}
Instituto Tecnológico de Ciudad.Juárez
30
Bases de Datos I Unidad III
Seleccionar combinaciones correctas en SQL
R1.k=R2.k(R1×R2)
SELECT * FROM R1,R2 WHERE R1.k=R2.k
Notación, operación Reunir (JOIN)
R1.k=R2.k(R1×R2)
R1
k
R2
R1
k
R2
Operación JOIN en SQL
SELECT * FROM R1,R2 WHERE R1.k=R2.k
Operación JOIN en MySQL
R1
k
R2
SELECT * FROM R1 JOIN R2 USING(k)
Instituto Tecnológico de Ciudad.Juárez
31
Bases de Datos I Unidad III
JOIN natural
R1
R2

Omitir el subíndice significa:
o Unir según todos los atributos que tengan el mismo nombre en las dos tablas
Operación NATURAL JOIN en MySQL
R1
R2
SELECT * FROM R1 NATURAL JOIN R2
Nota: esto usa todos los atributos que se llamen de la misma manera, a veces no es lo que
nosotros queremos
Comunitat( id_comunitat, nom )
Municipi( id_municipi, id_comunitat, nom )
Queremos unir id_comunitat pero no nom
Ejemplo de NATURAL JOIN
mysql> select comunitat.nom, municipi.nom, municipi.superficie from comunitat natural join
municipi;
+---------+---------+------------+
| nom | nom | superficie
|
+---------+---------+------------+
| Ceuta | Ceuta | 19.52
|
| Melilla | Melilla | 13.96
|
+---------+---------+------------+
2 rows in set (0.14 sec)
mysql> select comunitat.nom, municipi.nom, municipi.superficie from comunitat join municipi
using (ca_id);
+-----------+----------+------------+
| nom | nom | superficie
|
+-----------+----------+------------+
| Andalucía | Abla | 45.28 |
| Andalucía | Abrucena | 83.18 |
| Andalucía | Adra | 89.98 |
….
Instituto Tecnológico de Ciudad.Juárez
32
Bases de Datos I Unidad III
LEFT JOIN


JOIN elimina algunos datos
 Los que no están en las dos tablas
LEFT JOIN reemplaza los eliminados por
valores nulos en la tabla de la izquierda
Operación LEFT JOIN en MySQL
R1
k
R2
SELECT * FROM R1 LEFT JOIN R2 USING(k)
Ejemplo LEFT JOIN
Película
ID_Película
1
2
3
4
Estudio
Nombre
La guerra de las galaxias
El señor de los anillos
Mar Adentro
El viaje de Chihiro
Año
1977
2001
2004
2001
ID_Estudio
3
2
4
1
SELECT count(id_pelicula) AS CNT FROM estudio
JOIN pelicula USING (id_estudio)
SELECT count(id_pelicula) AS CNT FROM estudio
LEFT JOIN pelicula USING (id_estudio)
Instituto Tecnológico de Ciudad.Juárez
ID_Estudio
1
2
3
4
5
Nombre
Ghibli
New Line Cinema
Luscasfilm
Sogecine
Nuevo Estudio
CNT
1
1
1
1
Nombre
Ghibli
New Line Cinema
Lucasfilm
Sogecine
CNT
1
1
1
1
0
Nombre
Ghibli
New Line Cinema
Lucasfilm
Sogecine
Nuevo Estudio
33
Bases de Datos I Unidad III
Otro ejemplo LEFT JOIN
Ciudad
Id_ciudad
1
2
3
4
5
Viaje
Id_salida
1
1
5
5
5
5
2
Nombre
Barcelona
Berlin
Roma
Paris
Budapest
Id_llegada
2
4
3
4
2
1
4
Nombre
Barcelona
Berlin
Budapest
Paris
Roma
SELECT ciudad.nombre, COUNT(viaje.id_salida)
FROM ciudad LEFT JOIN viaje ON
(ciudad.id_ciudad=viaje.id_salida)
GROUP BY ciudad.nombre;
CNT
2
1
4
0
0
Ejemplo múltiples JOIN
Ciudad
Id_ciudad
1
2
3
4
5
Viaje
Id_salida
1
1
5
5
5
5
2
Nombre
Barcelona
Berlin
Roma
Paris
Budapest
SELECT cs.nombre, cl.nombre FROM viaje JOIN
ciudad AS cs ON (viaje.id_salida=cs.id_ciudad)
JOIN ciudad AS cl ON (viaje.id_llegada=cl.id_ciudad);
Id_llegada
2
4
3
4
2
1
4
Nombre
Barcelona
Barcelona
Budapest
Budapest
Budapest
Budapest
Berlin
Nombre
Berlin
Paris
Roma
Paris
Berlin
Barcelona
Paris
Resumen
Proyectar (π): elegir columnas
Seleccionar (): criterio para las filas
Producto cartesiano (×): producto tablas
Join ó Reunir ( ): combinar tablas
Instituto Tecnológico de Ciudad.Juárez
34
Bases de Datos I Unidad III
3.2.2 Cálculo Relacional.
Conceptos
El álgebra relacional dice cómo obtener unos resultados, mientras el cálculo dice qué resultado se desea.
El álgebra es procedimental mientras que el cálculo es no procedimental.
El cálculo relacional es un lenguaje declarativo, es decir no funciona con procedimientos. Es un lenguaje formal, basado en la rama de la lógica
matemática llamado cálculo de predicados. El cual tiene dos adaptaciones: cálculo relacional de tuplas y cálculo relacional de dominios.
4.3.2. Cálculo Relacional de Tuplas
Se basa en la especificación de un cierto número de variables tupla.
Su forma general es:
{ t / P ( t )}
Donde t es la variable tupla. Y P( t ) es cualquier expresión o formula donde interviene t , que representa una condición.
o en forma ampliada:
{t 1 A 1 , t 2 A 2 ,... t n A n / condición(t 1, t 2... t n )}
Lenguajes como Quel (1976) y SQL (1984) se apoyan en este.
4.3.2.1. Cuantificadores
Se pueden usar los cuantificadores Universal ( ? ) y Existencial ( ? ).
Si una variable tupla esta cuantificada se dice que es una variable restringida o ligada.
4.3.2.2. Ejemplos.
Obtener los alumnos con promedio superior a 4.0
{t /t ? alumno ? t[promedio] >4.0}
también:
{t /t ? alumno ? t.promedio >4.0}
El caso anterior pero solo obteniendo los codigos y nombres de los estudiantes:
{t.codigoal, t.nombreal /t ? alumno ? t.promedio >4.0}
Encontrar el nombre de los profesores que tienen asignadas materias.
{t.nombre /t ? profesor ? ? s ? prof_mat ( t.codigoprof = s.codigoprof )}
Encontrar los nombres de los alumnos que tienen notas en todas las materias.
{t.nombreal /t ? alumno ? ? s ? nota ( t.codigoal = s.codigoal) ? v ? materia (s.codigomat = v.codigomat) }
4.3.3. Cálculo relacional de Dominios
Variables de dominio toman valores en los dominios de los atributos.
Forma General:
{<x 1 ,x 2 ... x n > /P(x 1 ,x 2 ... x n )}
Instituto Tecnológico de Ciudad.Juárez
35
Bases de Datos I Unidad III
Donde:
<x 1 ,x 2 ... x n >, representa las variables tuplas.
P(x 1 ,x 2 ... x n ), es el predicado o condiciones sobre las variables.
4.3.3.1. Ejemplos.
Obtener los alumnos con promedio superior a 4.0
{<a,b,c,d> /<a,b,c,d> ? alumno ? d >4.0}
El caso anterior pero solo obteniendo los códigos y nombres de los estudiantes:
{<a,b> /<a,b,c,d> ? alumno ? d >4.0}
4.3.3.4. Ejercicios propuestos.
Conseguir los siguientes resultados tanto con cálculo relacional de tuplas, como de dominios:
• Encontrar los nombres de los monitores y los códigos de las materias que monitorean.
• Encontrar los códigos de los estudiantes que no sean monitores
• Encontrar los alumnos que pertenezcan a ASI o a IE
• Encontrar los nombres de los monitores y sus promedios de carrera para aquellos monitores matriculados en ASI
TRABAJANDO SOBRE LAS RELACIONES CON LOS SIGUIENTES ESQUEMAS
cliente (nclie, nombre, ciudad, dire, telef) proveedor (nprove,nombre,ciudad)
producto (nprod, descr, color, peso, nprove, precio) pedido (nped, nclie, fecha, total)
prodped (nped, nprod, cant, subt)
alumno (codigoal, nombreal,promedio, carrera) monitor (codigoal, codmat)
profesor (codprof, nombre, escalafon,carrera) materia (codmat,nombremat,carrera)
nota (codmat, codigoal, calif)
USANDO ALGEBRA O CALCULO RELACIONAL DE TUPLAS O DOMINIOS, A MENOS QUE SE ESPECIFIQUE UNO EN PARTICULAR:
• Encontrar la carrera que tenga el máximo de los promedios de los estudiantes.
• Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”.
• Borrar de la relación producto los productos que sean de valor inferior a $500.
• Incremente en 20% el precio de todos los productos.
• Encuentre la cantidad de pedidos realizados por cada cliente.
• Conseguir la pareja profesor, monitor para cada materia que tenga monitor.
• Nombre de cliente que sus pedidos sumen más de $150000. Muestre ese valor total para cada uno.
• Valor total y promedio de los productos pedidos fabricados por proveedor CINDU ANDINA.
• Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”. Hacerlo por Calculo
relacional.
Instituto Tecnológico de Ciudad.Juárez
36
Bases de Datos I Unidad III
• Sacar un catalogo de los productos con su descripción, código, nombre del proveedor y precio de los mismos.
4.4. Lenguajes de Consultas.
4.4.1. Query By Example QBE
Lenguaje de manipulación de datos basado en cálculo relacional de dominios. Apareció en 1977.
El lenguaje se basa en una sintaxis bidimensional: Consultas en formas de tabla. Además la consulta se expresa mediante ejemplos.
Ejemplo:
Encontrar los alumnos matriculados en ASI
alumnos
P.
codigoal
nombreal
promedio
carrera
ASI
En Paradox esto se vería así:
Se seleccionan las tablas, se marcan los campos a visualizar y se define las condiciones de join entre las tablas.
4.4.2. QUEL
Basado en el cálculo relacional de tuplas. Data de 1976.
Se basa en tres cláusulas para obtener los resultados:
Range of
Retrieve
Where
Ejemplo:
Encontrar los alumnos matriculados en ASI
range of t is alumno
retrieve (t.codigoal)
where t.carrera=”ASI”
4.4.3. SQL
Es un potente y estándar lenguaje de consultas, basado en cálculo relacional de tuplas.
Por su importancia se ha destinado un capitulo completo a este tema.
Para consultas usa tres cláusulas principales:
Instituto Tecnológico de Ciudad.Juárez
37
Bases de Datos I Unidad III
Select
From
Where
Ejemplo:
Encontrar los alumnos matriculados en ASI
select codigoal
from alumno
where carrera=”ASI”
3.3 MODIFICACIONES DE LAS BASES DE DATOS (Vistas).
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.
1. 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.
2. 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.
3. 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.
3.3.1 Vistas.
Son una especie de tablas virtuales; es decir no existen fisicamente 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 lista previa. Esto significa que pueden crearse dependencia entre las vistas.
Instituto Tecnológico de Ciudad.Juárez
38
Bases de Datos I Unidad III
Formato de definicion 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 extraidos en la consulta.
La operación de consulta permite todos los formatos validos de consulta en SQL con
execepción del groop by.
Cuando una vista es definida en base a otra, se se dice que es dependiente de esta por lo
tanto, se suprimira automaticamente 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.
Instituto Tecnológico de Ciudad.Juárez
39
Bases de Datos I Unidad III
3.4 LENGUAJES DE CONSULTA COMERCIAL (SQL).
En forma comercila existen diversos paquetes y/o lenguajes mediante los cuales se puede
construir un modelo relacional. El lenguaje que se considera estandar para este tipo de
aplicaciones es el SQL(structured query languaje), este lenguaje de consulta estructurado
proporciona formatos y sintaxis para la manipulación y definición de los datos.
FORMATOS SQL
DDL
Crear Tablas
CREATE TABLE<nombre de la tabla>
(
<campo1> (<tipo>[,NO NULL]),
<campo2> (<tipo>[,NO NULL]),...
)
Tipos Validos




CHAR (<LONG>)[VAR]
FLOAT
INTEGER
SMALLINT
Crear Indices
Instituto Tecnológico de Ciudad.Juárez
40
Bases de Datos I Unidad III
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>
Borrar Indices

DROP <nom>indice>
Tablas
CREATE TABLE persona
(
nombre(CHAR(40) VAR, NO NULL),
edad(SMALLINT, NONULL),
estatura(FLOAT, NO NULL),
telefono(CHAR(7))
)
Indices
Por nombre
CREATE INDEX ind_nom ON persona
(
nombre
)
Por estatura sin llaves repetidas, descendente
CREATE UNIQUE INDEX ind_est ON persona
(
Instituto Tecnológico de Ciudad.Juárez
41
Bases de Datos I Unidad III
estatura desc
)
Por edad(primero mas jovenes); edades repetidas, poe estatura(primero la mas alta)
CREATE INDEX ind_ed_est ON persona
(
edad,estatura desc
)
Modificaciones


EXPAND TABLE persona
ADD FIELD direccion(CHAR(30), VAR, NO NULL)
DML
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>]
CONSULTAS
En una tabla
SELECT [UNIQUE] <lista de campos/*>
FROM <nom>tabla>
[WHERE <condicion>]
[ORDER BY <campo> [asc/des]]
Funciones integradas en select/where
COUNT(*) conteo
SUM(<campo>) total(acumulador)
AVG(<campo>) promedio
MAX(<campo>) maximo
MIN(<campo>) minimo
Instituto Tecnológico de Ciudad.Juárez
42
Bases de Datos I Unidad III
Ejemplo:
Insert into persona
< 'juan',15,1,75,'2-15-15','forjadores'>

Íncrementar edad de todas las tuplas
Update persona
Set edad=edad+1

Personas menores a 20 años crecieron 10 centimetros
Update persona
Set estatura = estatura+0.10
Where edad<20
Consulta por coincidencia parcial en cadenas
Select <nombre_tabla>
where<campo char>LIKE <cadena de coincidencia>
Instituto Tecnológico de Ciudad.Juárez
43
Bases de Datos I Unidad III
caracteres validos en <cadena de coincidencia>
"-" un carácter cualquiera.
"%" una secuencia de caracteres cualquiera.
Create table clientes
(
nc(integer,NO NULL),
nombre(char(20)VAR,NO NULL)
domicilio(char(40)VAR,NO NULL)
estado(char(15)VAR,NO NULL)
)
insert into clientes
<320,'juan','forjadores','infantil'>
<145,'pedro','catolica','adulto'>
create tabla videos
(
clave(char(4),NO NULL),
titulo(char(20)VAR,NO NULL),
clasificacion(char(1)VAR,NO NULL),
costo(float,NO NULL)
)
insert into videos
<'A320','la roca','b',12.00>
<'b415','tornado','b',12.00>
Create table renta
(
nc(integer,NO NULL),
Instituto Tecnológico de Ciudad.Juárez
44
Bases de Datos I Unidad III
clave(char(4),NO NULL),
fecha(char(8),NO NULL),
dias(smallint,NO NULL)
)
Insert into renta
<320,'A716','7/10/97',3>
<320','b716','7/10/97'.3>
Ejemplos:
1. Muestre el nombre y estado de los clientes cuyo numero de credencial es mayor a 100
select nombre estado
form clientes
where nc>100
2. Se desea conocer la cantidad de clientes de cada estado
select estado, count(*)
from clientes
group by estado
3. Se desea consultar los nombres de las peliculas que cuestan menos de 15.00 que no
son infantiles.
Select titulo
From videos
Where (costo < 15.00 and clasificacion ù = "a'')
Consultas en varias tablas

En tabla global
select [unique] <lista campos /*>
from <lista de tablas>
where <condicion>
Este tipo de consultas se realiza sobre un atabla global que resulta de todas las combinaciones
posibles entre las tuplas de las tablas involucradas.
La condición en el formato debe aprovecharse para colocar un filtro que permita que solo tas
tuplas o combinaciones de estas que sean requeridas, se muestren; esto se logra por medio de
las columnas con valor semejante o de las relaciones establecidas.
Instituto Tecnológico de Ciudad.Juárez
45
Bases de Datos I Unidad III
Si un campo se encuentra en mas de una tabla, su referencia puede formarse con el formato
tabla campo.
Ejemplo:
Se desea conocer la lista de los distintos titulos rentados el 8 oct 97
Select unique video.tiulo
From renta,videos
Where (renta.fecha = '8/oct/97' and renta.clave = video.clave)
Los discriminadores any/all son opcionales y se pueden combinar con un operador relacional o
con in/not in en este tipo de consultas se procesa primeramente la tabla mas interna(tabla2) de
la cual obtiene una salida determinada; los datos que se obtienen en esta salida se relacionan
mediante el descriminador con los datos de la tabla externa, produciendo asi la salida final.
Ejemplo:

Se desea mostrar los titulos de las peliculas que han sido rentadas por lo mas de dos
dias
Select videos.titulo
From videos,renta
Where (videos.clave=renta.clave) and (renta.dias>2)
En subconsultas
select videos.titulo
form videos
where clave in ( select clave
from rentas
where renta.dias >2)
El formato puede extenderse creando subconsultas en multinivel. Se asume el mismo criterio
de resolver a partir de la tabla mas interna e ir relacionando los resultados con la tabla externa
inmediata sucesivamente.
Instituto Tecnológico de Ciudad.Juárez
46
Bases de Datos I Unidad III
Ejemplo:

se desea conocer el domicilio de los clientes que han rentado peliculas para
adolescentes.
Select clientes.domicilio
Form clientes
Where nc in (select nc
From renta
Where clave in (select clave
From videos
Where clasificacion='b' ))

En uniones
Una union permite consultar los resultados de dos o mas tablas en una sola salida; cuando los
resultados de las tablas son semejantes (muestran la misma informacion) se
suprimen
las salidas redundantes,
operando asi como una union de conjuntos.
Select <lista de campos/*>
From <tabla1>
Where<condicin1>
Select <lista campos2/*>
Union From<tabla2>
Where<condicion2>
Ejemplo:

se desea obtener una lista de clientes y de peliculas se desea incorporar solo alos
clientes infantiles y a las peliculas que pueden ser rentadas por estos.
Select nombre
From clientes
Where estado='infantil'
Union
Select titulo
From videos
Where clasificacion = 'a'
Instituto Tecnológico de Ciudad.Juárez
47
Documentos relacionados
Descargar