Lenguajes comerciales de consulta
En forma comercial existen diversos paquetes y/o lenguajes mediante los cuales se puede construir un modelo relacional. El lenguaje que se considera estándar 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 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
(
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/whereCOUNT(*) conteo
SUM(<campo>) total(acumulador)
AVG(<campo>) promedio
MAX(<campo>) maximo
MIN(<campo>) minimo 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>
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),
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:
Muestre el nombre y estado de los clientes cuyo numero de credencial es mayor a 100
select nombre estado
form clientes
where nc>100
Se desea conocer la cantidad de clientes de cada estado
select estado, count(*)
from clientes
grop by estado
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 condicion 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.
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 subconsultasselect 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.
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/*> 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’ |