Date post: | 14-Jun-2015 |
Category: |
Technology |
Upload: | felpe33 |
View: | 830 times |
Download: | 1 times |
4 LENGUAJE ESTRUCTURADO DE CONSULTA –SQL
4.1 INTRODUCCION
SQL, sigla proveniente de Structured Query
Language, es una interfase interactiva que
proporciona acceso en linea a la base de datos. Esta
diseñado para usarse en consultas, manejo, creación
y control de datos. Es una herramienta para
organizar, gestionar y recuperar datos almacenados
en una base de datos.
SQL fue el resultado del proyecto de investigación
System R de IBM. Al final de los setenta, SQL pasó a
formar parte del /dominio público y estuvo primero
disponible como lenguaje para un sistema comercial
de Oracle Corporation. SQL-92 es una mejora
significativa de las primeras versiones del estándar
SQL.
No es en sí mismo un sistema de gestión de base de
datos, ni un producto autónomo. Es parte integral de
un sistema de gestión de base de datos, un lenguaje
y una herramienta para comunicarse con el DBMS
(Database Management System) típico. Es un
sublenguaje de base de datos, consistente en unas
treinta sentencias especializadas para tareas de
gestión de base de datos.
50
Existe un estandar SQL, lo que permite portabilidad
hasta cierto punto, pero no garantiza la portabilidad
una portabilidad completa. Diferencias como códigos
de error, tipos de datos, tablas del sistema, SQL
interactivo, interfaz de programa, SQL dinámico,
diferencias semánticas, secuencias de ordenamiento
y estructura de la base de datos, que son
significativas obligan a ubicarse en el sistema en
particular.
SQL-92, a diferencia de las versiones anteriores,
permite a los usuarios definir esquemas múltiples. Los
esquemas múltiples se pueden agrupar en catálogos
(colecciones de esquemas), los cuales van muy
vinculados con cada usuario.
Podemos tomar varios grupos de sentencias SQL,
algunas relacionadas con el Lenguaje de Definición de
Datos (DDL) y otras con el Lenguaje de Manipulación
de Datos (DML).
El DDL consta de instrucciones como CREATE, DROP
y ALTER, para crear estructura y objetos, eliminarlos
y modificarlos.
51
Las proposiciones de DML permiten la consulta de la
base de datos SELECT, adición de datos INSERT,
supresión de datos DELETE y actualización de la base
de datos UPDATE.
El lenguaje SQL define un panorama general de la
seguridad de la base de datos. El esquema de
seguridad SQL se basa en tres conceptos principales:
Los usuarios, los objetos de las bases de datos y los
privilegios. Las sentencias usadas son GRANT y
REVOKE y en ocasiones se les agrupa dentro de un
sublenguaje de datos conocido como DCL (Data
Control Language).
Entre los tipos de datos definidos por SQL-92 se
encuentran los siguientes:
Integer: para números enteros
Small integer: enteros pequeños
Numeric(p,e): numéricos con p dígitos en total, de
los cuales e dígitos son están a la derecha del punto
decimal.
Decimal(p,e)
Real
Double precision
Float
52
Caracter(n): cadenas de caracteres de longitud n
Date: tipo fecha
Time: tipo hora
4.2 DEFINICIÓN DE DATOS
SQL-92 permite la definición de un esquema, de la
siguiente manera:
CREATE SCHEMA BIBLIOTECA
AUTHORIZATION LUZ_MARINA
Definición de dominios
Definición de tablas
Definición de vistas ...
SQL-92 permite la creación de dominios como por
ejemplo:
CREATE DOMAIN IDENTIFICADOR NUMERIC (3)
DEFAULT 0
CHECK (VALUE IS NOT NULL)
Lo anterior quiere decir que el dominio
IDENTIFICADOR corresponde a un tipo de datos
numérico de tres dígitos, su valor por defecto es cero
y no puede ser nulo. Después de definido, una
53
columna puede definirse con este dominio en lugar de
usar un tipo de dato convencional.
En algunos productos comerciales, los esquemas
pueden ser creados implícitamente, cada vez que se
crea un usuario, y todo lo que este cree, pertenece a
su propio esquema.
Las tablas se definen dando el nombre de la tabla,
definiendo cada columna, posiblemente incluyendo
restricciones sobre ella y definiendo las restricciones
sobre la tabla.
4.2.1 Esquema y tablas de un caso
Para crear un esquema para una tienda de video,
consistente de las tablas Almacén, Unidad (de
producto de video), Producto (el identificado en el
mercado), Título, Categoría y Actores, se puede
proceder de la siguiente manera:
CREATE SCHEMA DISTRIBUIDORA_VIDEO
AUTHORIZATION JGARCIA
Definiciones de dominios...
CREATE TABLE ALMACEN (COD_ALMACEN NUMERIC(2,0) PRIMARY KEY
54
NOMBRE CARACTER(12))
CREATE TABLE CATEGORÍA (CLASIFICACION CARACTER(3) PRIMARY KEY,DESCRIPCIÓN CARACTER(12))
CREATE TABLE TITULO (COD_TITULO CARACTER(4) PRIMARY KEY, DESC_TITULO CARACTER(30),CLASIFICACION CARACTER(3),COLOR_S_N CARACTER(1) DEFAULT ‘S’
CHECK COLOR_S_N=’S’ OR COLOR_S_N=’N’,DURACIÓN NUMERIC(3)FOREIGN KEY CLASIFICACION REFERENCES CATEGORIA)
CREATE TABLE PRODUCTO (COD_PRODUCTO CARACTER(6) PRIMARY KEY,PRECIO NUMERIC(6,0),CANT NUMERIC(2,0),COD_TITULO CARACTER(4),FOREIGN KEY COD_TITULO REFERENCES TITULO)
CREATE TABLE UNIDAD (NUM_UNIDAD NUMERIC(4) PRIMERY KEY, COD_PRODUCTO CARACTER(6),COD_ALMACEN NUMERIC(2,0),FOREIGN KEY COD_PRODUCTO REFERENCES PRODUCTO,FOREIGN KEY COD_ALMACEN REFERENCES ALMACEN)
CREATE TABLE ACTORES (NOMBRE CARACTER(20) PRIMARY KEY,COD_TITULO CARACTER(4),FOREIGN KEY COD_TITULO REFERENCES TITULO)
La instrucción CREATE TABLE identifica el nombre de
la tabla, que debe ser única dentro del esquema.
Después de CREATE TABLE van entre paréntesis y
separadas por coma las instrucciones que definen las
columnas y las restricciones sobre la tabla.
55
Cada columna se define dando su nombre, su tipo de
dato, opcionalmente su valor por defecto y algunas
restricciones propias de la columna, tales como NOT
NULL (atributo con valor diferente de nulo), PRIMARY
KEY para llave primaria o restricciones CHECK para
limitar los posibles valores que pueden asignarse a la
columna.
La cláusula FOREIGN KEY sirve para identificar llaves
foráneas, las cuales permiten establecer relaciones
con otras tablas.
Junto con la instrucción CREATE TABLE para definir
una nueva tabla, SQL-92 ofrece también instrucciones
para modificar la estructura de una tabla tal como
ALTER TABLE para adicionar una columna, modificar
la definición de una columna o eliminar una columna
de una tabla. DROP TABLE es otra instrucción DDL
que permite borrar la estructura de una tabla
completamente.
4.2.2 Las vistas
Una vista es una consulta almacenada que se
convierte en una tabla virtual. Sus beneficios son:
56
Fácil de usar: Algunas consultas resultan
complicadas, luego de ser almacenada en una vista el
usuario obtiene los resultados deseados sin
preocuparse por los mecanismos.
Fácil de compartir: Diferentes usuarios pueden tener
diferentes resultados en una consulta a una misma
tabla. Es una ventana de acceso a los datos.
Independencia de datos: Todos los cambios en los
datos son automáticamente reflejados en la vista.
Para evitar mostrar el precio de los productos,
creamos una vista sobre la tabla producto
proyectando todos sus atributos a excepción del
atributo precio, así:
CREATE VIEW v_producto AS
SELECT cod_producto, cant, cod_titulo
FROM producto
TABLA producto
COD_PRODUCT
O
CANTIDA
D
COD_TITULO PRECIO
P428-V 3 P428 30.000
P428-B 1 P428 20.000
P781-C 1 P781 32.000
57
VISTA v_producto
La instrucción SELECT cod_producto, cant, cod_titulo
FROM producto, genera una proyección de estas
columnas sobre la tabla producto. (la instrucción
SELECT se verá en la siguiente sección).
En general, el formato para crear una vista es de la
siguiente manera:
CREATE VIEW nombre_vista AS
SELECT columna1, ..., columnan
FROM tabla1, ..., tablam
WHERE condiciones.
El proceso de selección (SELECT) se analizará en
detalle en la siguiente sección.
4.3 MANIPULACIÓN DE DATOS
La manipulación de datos abarca tanto la consulta
como la actualización. SQL-92 soporta las operaciones
de selección, proyección y producto de una manera
elemental e implementa directamente las
operaciones del álgebra relacional como la unión, la
58
intersección, la diferencia y el join. La división, de
acuerdo con Hansen y Hansen, es soportada de una
manera engorrosa.
Datos ilustrativos para las consultas
ALMACEN (COD_ALMACEN, NOMBRE)10 VISION12 CINEASTA
UNIDAD (NUM_UNIDAD, COD_PRODUCTO, COD_ALMACEN) 1 P428-V 10
2 P428-V 103 P428-V 124 P428-B 125 P781-C 12
PRODUCTO (COD_PRODUCTO, PRECIO, CANT, COD_TITULO)P428-V 30.000 3 P428P428-B 20.000 1 P428
5 P781-C 32.000 1 P781
TITULO (COD_TITULO,DESC_TITULO,CLASIF,COLOR_S_N, DURACIÓN )
P428 LA Z... FIC S 95P781 EL AMOR… ROM N 120
CATEGORÍA (CLASIFICACION, DESCRIPCIÓN) FIC FICCIÓN ROM ROMÁNTICA
ACTORES (NOMBRE, COD_TITULO)ANNA... P428HENRY... P428JIM... P781
4.3.1 Consultas simples
Lças consultas en SQL se hacen con el comando
SELECT. La forma general del comando SELECT es:
59
SELECT lista-del-select FROM nombres-tablas
[WHERE condición]
[GROUP BY lista-columnas] [HAVING condición]
[ORDER BY nombre-columna]
[INTO TEMP nombre-tabla]
Sólo son obligatorias las cláusulas SELECT y FROM. Si
se usan otras cláusulas ellas deben aparecer en el
orden que se muestra.
La cláusula INTO TEMP es usada para crear una tabla
temporal que puede ser usada en queries posteriores.
La tabla temporal puede ser juntada a las
permanentes de la base de datos. la tabla es borrada
automáticamente del disco cuando se hace salida del
RDBMS.
Una consulta simple es una consulta sobre una única
tabla de la base de datos. Ejemplos:
Obtener los nombres de todos los almacenes:
SELECT nombre FROM almacen
Resultado:
NOMBRE
VISIONCINEASTA
60
Si se requiere la consulta de registros bajo
condiciones especiales, es posible mediante la
cláusula WHERE, por ejemplo:
Obtener los títulos de las películas en blanco y negro:
SELECT desc_titulo FROM titulo
WHERE color_s_n = ‘N’
Resultado:
DESC_TITULO
EL AMOR…
Se debe tener presente que para las tablas que
contienen un gran número de filas, cualquier
instrucción que tiene una cláusula WHERE será más
eficiente si la columna en la cláusula WHERE es
indexada.
Las condiciones pueden ser de igualdad (=),
desigualdad (<>), mayor que (>), menor que (<),
mayor o igual a (>=) o menor o igual a (<=).
Para múltiples condiciones se pueden usar los
operadores lógicos AND, OR, IN (incluidos) y NOT. Se
sigue las reglas del álgebra booleana:
Listar los números de unidad de los almacenes 10 y
12:
61
SELECT num_unidad FROM unidad
WHERE cod_almacen = 10 OR cod_almacen =
12
Resultado:
NUM_UNIDAD12345
También se puede consultar así:
SELECT num_unidad FROM unidad
WHERE cod_almacen IN (10,12)
Es posible usar el comodín asterisco (*), para
significar que todas las columnas deben desplegarse.
Ejemplo: Obtener toda la información sobre unidades
de video:
SELECT * FROM unidad
Resultado:
NUM_UNIDAD COD_P COD_A1 P428-V 102 P428-V 103 P428-V 124 P428-B 125 P781-C 12
62
Dentro del SELECT se puede hacer uso de
expresiones, por ejemplo para calcular el precio total
de cada producto en existencia. Además podemos
ordenarlo ascendentemente por código de producto:
SELECT cod_producto, precio*cant FROM
producto
ORDER BY cod_producto
Resultado:
COD_PRODUCTO PRECIO*CANT P428-B 20.000 P428-V 90.000 P781-C 32.000
El ORDER BY ordena por defecto en forma
ascendente. La sintaxis para el ordenamiento es:
SELECT ...
ORDER BY columna o expresión [ASC/DESC]
Para obtener resultados entre rangos se permite el
operador BETWEEN, y se puede usar de la siguiente
manera para obtener los números de unidad entre el
2 y el 4:
SELECT * FROM unidad
WHERE num_unidad BETWEEN 2 AND 4
Resultado:
NUM_UNIDAD COD_P COD_ALM
63
2 P428-V 103 P428-V 124 P428-B 12
En general se puede usar así:
WHERE columna o expresión BETWEEN mínimo AND
máximo.
También se permite usar el operador NOT BETWEEN.
Se pueden usar caracteres comodines que son
símbolos especiales que valen lo que cualquier
cadena no especificada de caracteres, usando la
cláusula LIKE. El comodín % se usa para cero o más
caracteres mientras el comodín _ se utiliza para
exactamente un carácter.
Encontrar los títulos de películas que comienzan por
la partícula ‘LA’:
SELECT desc_titulo FROM titulo
WHERE desc_titulo LIKE ‘LA%’
Encontrar los títulos y duraciones de las películas que
comienzan por A y terminan en R pero sólo tienen
cuatro letras.
SELECT desc_titulo, duracion FROM titulo
64
WHERE desc_titulo LIKE ‘A_ _R’
Para algunos casos es probable que el valor de una
columna sea innecesario o desconocido, el valor NULL
puede ser asignado. El valor NULL no es igual a cero.
La comparación se usa de la siguiente forma:
SELECT …
WHERE columna ó expression IS [NOT] NULL
La cláusula DISTINCT facilita la supresión de valores
duplicados en una columna seleccionada para la
salida:
SELECT DISTINCT cod_titulo FROM producto
Resultado:
COD_TITULO
P428P781
4.3.2 Funciones integradas
Existen diversas funciones tanto estadísticas como de
manejo de cadenas de caracteres para dar mayor
flexibilidad al manejo de SQL.
65
En ocasiones se requiere de examinar un conjunto de
filas en una tabla y producir un valor. Para esto se
requiere de uso de funciones como SUM, AVG,
COUNT, MAX y MIN.
SUM sirve para calcular la sumatoria de los valores de
una columna o una expresión basada en columnas.
Así, podemos calcular la cantidad de películas en
existencia:
SELECT SUM(cant) FROM producto
Resultado:
SUM(cant)5
También podemos calcular el valor total de las
películas en existencia:
SELECT SUM(precio*cant) FROM producto
Resultado:
SUM(precio*cant)142.000
AVG sirve para calcular el valor promedio sobre una
columna.
MAX encuentra el valor máximo de una columna.
MIN encuentra el valor mínimo de una columna.
COUNT sirve para contar, pero tiene las siguientes
connotaciones:
66
COUNT (*): Cuenta el número de filas, incluyendo
nulos.
COUNT (columna): Cuenta los valores no nulos en
una simple columna.
COUNT (DISTINCT columna): Cuenta los valores
distintos no nulos de una simple columna.
Ejemplo: Contar el número de unidades de video del
almacén número 12.
SELECT COUNT(*) FROM unidad
WHERE cod_almacen = 12
Resultado:
COUNT(*)3
En las expresiones pueden aparecer los operadores
aritméticos convencionales: +, *, -, /
Entre las funciones que manejan cadenas de
caracteres se encuentran las siguientes:
cad1||cad2: Concatena las cadenas de caracteres. Los
nombres de columnas son cadenas validas.
LENGTH (cadena): Encuentra la longitud de la
cadena.
67
SUBSTR (cad,posic_inicial [,long]): Encuentra la
subcadena de "long" caracteres, empezando en
"posic_inicial".
UPPER (cadena): Cambia los caracteres minúsculas
por mayúsculas.
LOWER (cadena): Cambia los caracteres mayúsculas
por minúsculas.
TO_NUMBER (cadena): Convierte los datos carácter
(compuestos por números) en valore numéricos.
TO_CHAR (cadena): Convierte un campo numérico en
tipo carácter.
LPAD (cadena,long_n [,carac]): Rellena la izquierda
de la cadena con el "carac" especificado (por
defecto blancos), hasta que la longitud de la cadena
nueva sea "long_n".
RPAD (cad,long_n [,caract]): Rellena la derecha de la
cadena con el "carac" especificado (por defecto
blancos), hasta que la longitud de la cadena nueva
sea "long_n".
NVL (cad1,cad2): Si cad1 es nulo retorna cad2. En
otro caso retorna cad1.
DECODE (cadena,caso1,rcad1, .,defecto): La salida es
el resultado "rcad1" donde la cadena iguale la
ocurrencia de caso1 y asi sucesivamente. El último
argumento es el valor por defecto.
INITCAP(cadena): Vuelve mayúscula la letra inicial de
la cadena.
68
LTRIM(cadena,grupo): Va removiendo de izquierda a
derecha los caracteres que se encuentran en el
grupo.
RTRIM(cadena,grupo): Va removiendo de derecha a
izquierda los caracteres que se encuentran en el
grupo.
TO_CHAR (fecha,formato): Convierte una fecha a
cadena de caracteres para poder imprimirse.
TO_DATE (fecha,formato): Convierte cadena de
caracteres a fechas.
4.3.3 Manejo de grupos: GROUP BY y HAVING
La cláusula GROUP BY nos entrega resúmenes de
datos. Un registro de información resumida es
retornado para cada valor distinto encontrado en la
columna sobre la cual se hizo la agrupación:
Un grupo es un conjunto de filas que contienen el
mismo valor en una columna dada.
Cuando se agrupen datos, sólo las columnas incluidas
en la cláusula GROUP BY o las funciones agregadas
pueden aparecer en la lista del SELECT. Sinembargo
una columna en la lista del GROUP BY no necesita
estar en la lista del SELECT.
69
La cláusula HAVING se usa para restringir los grupos
que son seleccionados para la salida después de que
los datos han sido agrupados mediante GROUP BY.
Ejemplo: Contar el número de unidades de video de
cada almacén. Para resolver este problema, se deben
dividir las unidades en grupos, en las que en cada
grupo estén las unidades que tengan el mismo código
de almacén (cod_almacen). Luego se determina el
número de registros en cada grupo. Esto se hace en
SQL de la siguiente manera:
SELECT cod_almacén, COUNT(*) FROM unidad
GROUP BY cod_almacen
Resultado:
Cod_almacen COUNT(*)10 312 2
Ejemplo: Contar el número de unidades de video de
cada almacén pero teniendo en cuenta aquellos
almacenes que tengan por lo menos tres unidades.
SELECT cod_almacén, COUNT(*) FROM unidad
GROUP BY cod_almacen
HAVING COUNT(*) >= 3
Resultado:
70
Cod_almacen COUNT(*)10 3
También se puede involucrar la cláusula WHERE, la
cual verifica la restricción antes de proceder a
agrupar. Así por ejemplo: Calcular la cantidad de
unidades de video, en formato VHS, de cada almacén
para aquellos almacenes que tengan por lo menos
dos de éstas unidades. Se asume que las de formato
VHS son las que tienen una V como último caracter en
el código.
SELECT cod_almacén, COUNT(*) FROM unidad
WHERE cod_producto LIKE ‘%V’
GROUP BY cod_almacen
HAVING COUNT(*) >= 2
Resultado:
Cod_almacen COUNT(*)10 2
La diferencia entre la cláusula WHERE y la cláusula
HAVING es que la cláusula WHERE se aplica a las filas,
mientreas que la cláusula HAVING se aplica a los
grupos.
4.3.4 Consultas multi-tablas
71
En el álgebra relacional la conexión entre tablas se
logra mediante el uso del JOIN. En SQL se debe
verificar, igual que en álgebra relacional, que existan
campos relacionadores entre las tablas objeto de la
consulta.
Ejemplo: Seleccionar el número de unidad y el nombre del almacén de todas las películas.
SELECT num_unidad, nombreFROM almacen, unidadWHERE almacen.cod_almacen =
unidad.cod_almacen
Resultado:
NUM_UNIDAD NOMBRE1 VISION2 VISION3 CINEASTA4 CINEASTA5 CINEASTA
La condición de la cláusula WHERE constituye el Join:
almacen.cod_almacen = unidad.cod_almacen. La
columna sobre la cual se hace el join no
necesariamente debe ser seleccionada.
¿Cómo se procesa la instrucción del join? Como es
usual, la cláusula FROM se ejecuta primero. Pero
como hay dos tablas en la cláusula, el sistema crea
un producto cartesiano entre las filas de las tablas
72
almacén y unidad. En este caso como hay cinco filas
de la tabla unidad y dos filas de la tabla almacén, se
genera una tabla de diez filas (el producto entre las
cardinalidades). Y como hay tres columnas en unidad
y dos columnas en almacén, el número de columnas
es de cinco.
Después de crear la tabla resultante del producto
cartesiano, se aplica la restricción de la cláusula
WHERE, descartando las filas que no satisfacen la
condición. Finalmente se seleccionan las columnas
relacionadas en la cláusula SELECT.
Un alias es un nombre alternativo que se da a una
relación con el fin de evitar escribir repetidamente los
nombre de las tablas y abreviar la escritura de la
instrucción. Se pueden dar a los nombres de las
tablas alias en la cláusula FROM. Debe entonces
usarse el nombre del alias en todas las cláusulas del
comando SELECT.
Ejemplo: Obtener el número de unidad y título para todas las películas blanco y negro
SELECT num_unidad, desc_tituloFROM unidad u, producto p, titulo tWHERE u.cod_producto=p.cod_productoAND p.cod_titulo=t.cod_tituloAND color_s_n='N'
73
En el ejemplo anterior, en la cláusula WHERE, la
columna color_s_n no necesita alias ya que no
presenta ambigüedad, pues es claro que pertenece a
la tabla título. Obsérvese también que de las tres
condiciones de la cláusula WHERE, las dos primeras
corresponden al join mientras que la tercera es una
restricción propia del problema: las películas que no
son de color (color_s_n=’N’).
El Join sobre una misma tabla (self-join) se forma con
base en columnas que tengan el mismo tipo de
información.
Finalmente, por razones de desempeño, cuando los
joins afectan el rendimiento, las columnas del join
deben ser indexadas.
4.3.5 Subconsultas
Una subconsulta es una consulta dentro de otra
consulta también conocida como consulta anidada.
Puede ponerse dentro de la cláusula WHERE de una
consulta y es encerrada entre paréntesis. Esta es
evaluada primero.
El formato general de una subconsulta puede ser:
74
SELECT colum1, ..., column FROM tabla1, ...,
tablam
WHERE columi = (SELECT colum1,… column FROM
tabla
WHERE criterio de selección)
AND join sobre tabla1,... tablam o restricción
consulta
Las consultas internas pueden retornar un simple
resultado y este es usado como una constante en la
consulta externa.
Las subconsultas pueden retornar una lista de
valores. En tales casos los operadores IN y NOT IN
deberán ser usados para encadenar la consulta
externa con la lista de valores resultado de la
subconsulta.
Las consultas pueden ser enlazadas por más de una
columna. Se requiere que el orden de la columnas
nombradas en la cláusula WHERE de la consulta
externa corresponda al orden de las columnas
seleccionadas por la consulta interna. Se encadenan
con IN y NOT IN.
75
Seleccionar la descripción de la categoría de la
película titulada ‘EL AMOR...’:
SELECT descripcion FROM categoría
WHERE clasificacion=(SELECT clasificacion
FROM titulo
WHERE desc_titulo=’EL
AMOR...’)
De acuerdo con los datos ilustrativos del comienzo y
teniendo en cuenta que la consulta interna se ejecuta
primero arrojando el valor ‘ROM’, la subconsulta se
convierte, durante su ejecución, en la siguiente
consulta simple:
SELECT descripcion FROM categoría
WHERE clasificacion=’ROM’
El resultado final es ‘ROMANTICA’.
Veamos un ejemplo de subconsulta donde se
involucra un join y además un operador relacional
diferente de la igualdad:
Listar número de producto, título, en formato VHS, de las películas que cuestan menos de 50.000 y que duran menos que la película GHOSTBUSTERS
76
SELECT p.cod_producto, desc_tituloFROM producto p, titulo tWHERE p.cod_titulo=t.cod_tituloAND p.cod_producto LIKE '%V'AND precio < 50000AND duracion < (SELECT duracion FROM titulo
WHERE desc_titulo='Ghostbusters')
4.3.6 Comandos Adicionales del DML
Además del SELECT hay otros tres comandos del
Lenguje de Manipulación de Datos y junto con sus
opciones se listan a continuación. Estos comandos
son usados para ingresar, borrar, y modificar los
datos almacenados.
Para ingresar una fila en una tabla:
INSERT INTO nombre-tabla [(lista-columnas)]
VALUES (lista-valores)
Ejemplo:
INSERT INTO almacen (cod_almacen, nombre)
VALUES (15, ‘VIDEOCLUB’)
Como en la instrucción anterior se insertaron valores
para todas las columnas, se puede omitir la lista de
77
columnas y la instrucción se puede convertir en la
siguiente:
INSERT INTO almacen
VALUES (15, ‘VIDEOCLUB’)
Cuando sólo se genera una fila incompleta, se debe
especificar la lista de columnas en las que se
insertarán datos. En este caso las demás columnas
asumirán valores nulos.
Para modificar un subconjunto de columnas de un
subconjunto de filas de una tabla:
UPDATE nombre-tabla
SET nombre-columna=expresión
[WHERE condición]
Ejemplo:
UPDATE almacen
SET nombre=’CENTRO CULTURAL’
WHERE cod_almacen=15;
Si se omite la cláusula WHERE, modificaría el nombre
en todos los registros. Por otra parte, si la fila
especificada en la cláusula del WHERE no existe, no
78
se modifica ningún dato pero tampoco se genera
error alguno.
Para eliminar un subconjunto de filas de una tabla:
DELETE FROM nombre-tabla
[WHERE condición]
Ejemplo:
DELETE FROM almacen
WHERE cod_almacen=15;
De manera similar a la instrucción UPDATE, si se
omite la cláusula WHERE, el DELETE eliminaría todos
los registros de la tabla almacén. Por otra parte, si la
fila especificada en la cláusula del WHERE no existe,
no se elimina ningún registro y tampoco se generaría.
4.4 EJERCICIOS PROPUESTOS
1. Cantidad de ejemplares por cada película de
ficción
2. La cantidad de unidades por cada categoría
3. Listado de actores de las películas del almacén
número 1
79
4. Títulos de películas que cuestan más del precio
promedio de las películas en formato Beta
5. Todos los actores, sin repetir, ordenados
alfabéticamente en forma descendente
6. Títulos de películas románticas ordenadas
alfabéticamente
7. Títulos de los que no hay existencias en la tienda 2
8. Listado de títulos (descripciones) distribuidos por
el almacén “LE CINEMA”
9. La cantidad de unidades por cada almacén
10. La película con mayor duración por cada
categoría
11. El valor total a cargo de cada almacén
12. Los códigos de producto que tienen existencias
superiores al promedio de cintas por producto
13. Nombres de los almacenes donde hay películas
del actor BEN MURPHY
80