Contenido:
El lenguaje SQL | Sentencias
de selección o consultas | Cláusula
SELECT | Funciones
de agrupamiento | Cláusula
FROM |
Cláusula WHERE | Cláusula
GROUP BY | Cláusula
HAVING | Operador
UNION | Cláusula
ORDER BY | Enlace
de varias Tablas |
Expresiones SQL | Nombres
de campos | Constantes
| Operadores
Numéricos | Operadores
de caracteres | Operadores
de relación |
Operadores Lógicos | Prioridad
de los operadores |Funciones
| Creación
de una tabla | Destrucción
de una tabla | Sentencia
INSERT |
Sentencia UPDATE | Sentencia
DELETE | Llave
primaria | Llave
Foranea | Sentencias
para crear o destruir índices |
Creacion de Vistas | Transacciones
|
SQL es una herramienta para organizar,
gestionar y recuperar datos almacenados en una base de datos informática.
El nombre "SQL" es una
abreviatura de Structured Query Languaje (Lenguaje de consultas
estructurado). Como su propio nombre indica, SQL es un lenguaje informático que
se puede utilizar para interaccionar con una base de datos y más concretamente
con un tipo especifico llamado base de datos relacional.
SQL es a la vez un lenguaje fácil de
aprender y una herramienta completa para gestionar datos. Las peticiones sobre
los datos se expresan mediante sentencias, que deben escribirse de acuerdo con
unas reglas sintácticas y semánticas de este lenguaje.
Su aprendizaje no solo sirve para esta
aplicación sino , también, para todas las existentes en el mercado que soporten
este lenguaje ya que es un lenguaje estándar por haberse visto consolidado por
el Instituto Americano de Normas (ANSI) y por la Organización de Estándares
Internacional (ISO).
Sentencias
de selección o consultas
Las consultas son el corazón del lenguaje
SQL. La sentencia SELECT, que se utiliza para expresar consultas en SQL, es la
más potente y compleja de las sentencias SQL.
La sentencia SELECT recupera datos de una
base de datos y los devuelve en forma de resultados de la consulta. Consta de
seis cláusulas: las dos primeras (SELECT y FROM) obligatorias y las otras
cuatro opcionales.
La forma de la sentencia SELECT es:
SELECT [DISTINCT] {* | expresión_columna,
...}
FROM nombretabla [alias_tabla]
...
[WHERE expresión1 operador expresion2]
[GROUP BY {expresión_columna, ...} ]
[HAVING {condición}
]
[UNION
[ALL] (SELECT ...)]
[ORDER BY {expresión_orden [DESC |
ASC], ... ]
La cláusula SELECT lista los datos a
recuperar. Los elementos o datos a seleccionar pueden ser columnas de la base
de datos o columnas a calcular por SQL cuando efectúa la consulta o también el
asterisco (*) para recuperar todos los campos de una tabla.
expresión_columna puede ser un simple nombre de campo (por ejemplo
CLAVE). Expresiones más complejas pueden incluir operaciones matemáticas o de
manipulación de caracteres. Mas adelante se verán estas expresiones de forma
más amplia.
Las expresiones de columnas deben ir
separadas por comas si existen más de una (por ejemplo CLAVE, DESCRIPCION,
TIPO, ...).
Los nombres de campos pueden ir precedidos
por el nombre de la tabla o su alias. Por ejemplo ACTIVOS.CLAVE o A.CLAVE donde
A es el alias para la tabla ACTIVOS.
El operador DISTINCT, si se incluye, debe preceder la primera expresión
de columna. Este operador elimina las filas o registros duplicados del
resultado de la consulta. Por ejemplo la sentencia:
SELECT DISTINCT FREGISTRO FROM ACTIVOS
mostrará las distintas fechas de las
altas de los activos.
Las funciones de agrupamiento pueden ser
también parte de una cláusula SELECT. Devuelven un único valor de un conjunto
de registros.
Pueden usarse con un nombre de campo (por
ejemplo, AVG(PROY_COSTO) o en combinación con una expresión de columna más
compleja (por ejemplo, AVG(PROY_COSTO* 1.07).
La expresión de columna puede ir precedida
por el operador DISTINCT. El operador DISTINCT eliminará los valores repetidos
de una expresión de agrupamiento. Por ejemplo,
SELECT COUNT(DISTINCT RESP_CLAVE) FROM
ACTIVOS
En este ejemplo, sólo aparecerán el nº de
los responsables que se encuentran en ACTIVOS
Las funciones de agrupamiento permitidas
son:
SUM Devuelve la suma total de los valores de
una expresión de columna o campo numérica . Por ejemplo, SUM(COSTOS) devolverá
el total costos de los proyectos.
AVG Devuelve la media de los valores de una
expresión de columna. Por ejemplo, AVG(COSTOS) devolverá la media de costos de
los proyectos.
COUNT Devuelve el número de valores en una
expresión de columna. Por ejemplo, COUNT(AREA_CLAVE) devolverá el número de
registros con valores no nulos en ese campo. Un ejemplo especial es COUNT(*),
que nos devuelve el número de registros incluyendo aquellos registros con
valores nulos.
MAX Devuelve el valor más alto de los
contenidos en una expresión de columna. Por ejemplo, MAX(FREGISTRO) devolverá
la fecha de registro mas lata que existe en el tabla ACTIVOS.
MIN Devuelve el valor más bajo de los
contenidos en una expresión de columna. Por ejemplo, SELECT MIN(FREGISTRO) FROM
ACTIVOS nos devolverá la fecha de mas antigua.
La cláusula FROM lista las tablas que
contienen los datos a recuperar por la consulta. El formato de esta cláusula
es:
FROM nombre_tabla
[alias_tabla] ...
nombre_tabla puede el nombre de una o mas tabla.
alias_tabla es un nombre que se usa para referirse a la tabla en
el resto de la sentencia SELECT para abreviar el nombre original y hacerlo más
manejable, en el caso de existir más de una tabla en la consulta y, también
para poder realizar consultas uniendo varias veces la misma tabla. Por ejemplo,
SELECT CLAVE, DESCRIPCION FROM EQUIPOS E,
ACTIVOS A WHERE E.ACTIVO_CLAVE = A.CLAVE AND E.MARCA='Alaska'
es mucho más práctico y sencillo que:
SELECT CLAVE, DESCRIPCION FROM EQUIPOS,
ACTIVOS WHERE EQUIPOS.ACTIVO_CLAVE = ACTIVOS.CLAVE AND EQUIPOS.MARCA='Alaska'
Las dos sentencias son idénticas y nos
devolverían los clave y descripcion del activo cuya marca sea Alaska.
El nombre de tablas junto al nombre de campo
es obligatorio cuando existan campos con nombre idéntico en las tablas que
formen parte de la sentencia. Así en el ejemplo anterior CLAVE y ACTIVO_CLAVE
no lo necesitarían (aunque este puesto) pero si tuviera CLAVE la tabla EQUIPO
si lo necesitaria porque en las dos tablas existe un campo con ese nombre.
La cláusula WHERE dice a SQL que incluya
solo ciertas filas o registros de datos en los resultados de la consulta, es
decir, que tienen que cumplir los registros que se desean ver. La cláusula
WHERE contiene condiciones en la forma:
WHERE expresión1 operador expresion2
expresión1 y expresion2 pueden ser nombres de campos,
valores constantes o expresiones.
operador es un operador relacional que une dos expresiones.
Más tarde se verán los distintos operadores que se puede utilizar.
Por ejemplo, la siguiente sentencia nos
muestra el nº de proyectos que terminaran con posterioridad a 1996.
SELECT COUNT(*)
FROM PROYECTOS WHERE YEAR(FTERMINO) > 1996
La cláusula GROUP BY especifica una consulta
sumaria. En vez de producir un fila de resultados por cada fila de datos de la
base de datos, una consulta sumaria agrupa todas las filas similares y luego
produce una fila sumaria de resultados para cada grupo.
Seguido de la cláusula GROUP BY se
especifican los nombres de uno o más campos cuyos resultados se desean
agrupados. Tiene la forma:
GROUP BY expresión_columna
expresión_columna debe coincidir con la expresión de columna utilizada
en la cláusula SELECT. Puede ser uno o más nombres de campo de una tabla,
separados por coma o una o más expresiones separadas por comas.
SELECT RUBRO_CLAVE, COUNT(*)
FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE
Esta sentencia nos devolverá una fila por
cada area RUBRO_CLAVE, y el numero de veces de cada uno.
La cláusula HAVING dice a SQL que incluya
solo ciertos grupos producidos por la cláusula GROUP BY en los resultados de la
consulta. Al igual que la cláusula WHERE, utiliza una condición de búsqueda
para especificar los grupos deseados. En otras palabras, especifica la
condición que deben de cumplir los grupos. Sólo es válida si previamente se ha
especificado la cláusula GROUP BY. La cláusula HAVING tiene la forma:
HAVING expresión1 operador expresión2
expresión1 y expresión2 pueden ser nombres de campos,
valores constantes o expresiones y estas deben coincidir con una expresión de
columna en la cláusula SELECT.
operador es un operador relacional que une las dos
expresiones. Más tarde se verán los distintos operadores que se pueden
utilizar.
La sentencia siguiente nos mostrará el
número de RUBRO_CLAVE, y el numero de los mismos en cada RUBRO_CLAVE cuyo
numero supera el 1:
SELECT
RUBRO_CLAVE, COUNT(*) FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE
HAVING RUBRO_CLAVE > 1
El operador UNION combina el resultado de
dos sentencias SELECT en un único resultado. Este resultado se compone de todos
los registros devueltos en ambas sentencias. Por defecto, los registros
repetidos se omiten. Para no quitarlos se empleará la palabra ALL. Tiene la
forma:
SELECT sentencia UNION [ALL] SELECT sentencia
Cuando se utilice el operador UNION, la
lista de selección para cada sentencia SELECT debe tener el mismo número de
expresiones de columnas con el mismo tipo de datos y en el mismo orden. Por
ejemplo,
SELECT ACTIVO_CLAVE, TITULO FROM LIBROS
UNION
SELECT ACTIVO_CLAVE, NOMBRE FROM REVISTAS
Este ejemplo tiene el mismo nº de columnas y
cada columna en orden con el mismo tipo de datos. Nos devolverá una lista única
de ACTIVOS_CLAVE, TITULO.
La cláusula ORDER BY ordena los resultados
de la consulta en base a los datos de una o más columnas. Si se omite, los
resultados saldrán ordenados por el primer campo que sea clave en el índice que
se haya utilizado.
Por tanto, indica como deben clasificarse
los registros que se seleccionen. Tiene la forma:
ORDER BY {expresión_orden [DESC |
ASC], ... ]
expresión_orden puede ser el nombre de un campo, expresión o el
número de posición que ocupa la expresión de columna en la cláusula SELECT.
Por defecto se ordenan ASCendentemente (de
menor a mayor). Si se deseará de mayor a menor se empleará DESC (DESCendente).
Por ejemplo, para mostrar los proyectos
ordenados de mayor a menor fecha de terminacion, se utilizaría:
SELECT CLAVE, NOMBRE FTERMINO FROM PROYECTOS
ORDER BY FTERMINO DESC
Para obtener un listado de los proyectos por
su clave y nombre ordenado por rubros_clave y clave_lania :
SELECT CLAVE, DESCRIPCION, CLAVE_LANIA,
RUBRO_CLAVE FROM ACTIVOS ORDER BY RUBRO_CLAVE, CLAVE_LANIA
Los ejemplos visto hasta el momento solo
extraen datos de una única tabla y pocas cosas podríamos hacer si no pudiéramos
interrelacionar varios ficheros para obtener las consultas que deseáramos.
Para unir o relacionar dos tablas para
realizar una consulta, se conoce con el término de JOIN.
Por ejemplo, deseamos un listado alfabético
con los Clave y Descripcion de todos los activos existentes.
El fichero de ACTIVOS contiene todos los
datos generales del ACTIVO, entre ellos Clave y Descripcion, y el fichero PROYECTOS
los distintos datos de los diferentes proyectos, entre ellos el clave_proyecto
y nombre
Para extraer los datos deseados deberemos de
buscar un campo que contenga información común en los dos ficheros, es decir,
aquel por el que están relacionados ambos. Este campo es la clave, que da la
casualidad que tiene el mismo nombre en las dos tablas: PROYECTOS y ACTIVOS
será este campo el que nos sirva para efectuar el JOIN:
SELECT ACTIVOS.CLAVE, DESCRIPCION, NOMBRE
FROM ACTIVOS, PROYECTOS WHERE ACTIVOS.PROY_CLAVE = PROYECTOS.CLAVE ORDER BY
NOMBRE
El Join se indica en la cláusula WHERE
como otra condición más, en este caso, el nº de CLAVE en las dos tabla debe
existir y, si no es así, el ACTIVO no aparecerá en la relación, aunque figure
en uno de las dos.
Los alias son un instrumento para
abreviar los nombres de las tablas o ficheros y poder referirse a ellos en toda
la sentencia. En el ejemplo anterior podríamos emplear alias de la siguiente
forma:
SELECT ACTIVOS.CLAVE, DESCRIPCION, NOMBRE
FROM ACTIVOS A, PROYECTOS P WHERE A.PROY_CLAVE = P.CLAVE ORDER BY NOMBRE
Los campos que tienen nombre único en las
sentencias no necesitan ir precedidos por el nombre de la tabla o su alias. En
el ejemplo DESCRIPCION y NOMBRE solo existen en el fichero ACTIVO y por esa
razón no se les ha precedido por ACTIVO o su alias A.
Orden de las tablas en
la cláusula FROM
Especial mención merece el orden de
enumeración de las tablas en la cláusula FROM. El manejador de SQL, cuando
existe un JOIN entre dos tablas, recorre la tabla que figura en primer lugar, y
por cada registro que encuentra que satisface el resto de restricciones,
comprueba si existe correspondencia en la otra tabla.
Pongamos un ejemplo práctico: Si tenemos en
la tabla de ACTIVOS 500 registros y en la tabla PROYECTOS 150, de los cuales
solo 10 son del año 1996 y del tipo oficial, el manjador realiza 10 lecturas
del fichero PROYECTOS y 10 más de ACTIVOS. Si los enumeráramos al revés, se
realizarían 500 lecturas de ACTIVOS y 500 más de PROYECTOS.
SELECT Complejas
Pueden existir consultas a la Base de Datos que
requieran una restricción que sea el resultado de otra consulta.
Por ejemplo: Deseamos saber la descripcion
de un activo y nombre del proveedor relacionados entre si.
§
SELECT
A.DESCRIPCION, P.NOMBRE FROM ACTIVOS A, FACTURAS F, PROVEEDORES P WHERE A.FACTURA_CLAVE
= F.CLAVE AND F.PROVEEDOR_CLAVE = P.CLAVE
Las expresiones se utilizan en las cláusulas
WHERE, HAVING y ORDER BY de las sentencias SELECT.
Las expresiones nos permiten utilizar
operaciones matemáticas como también cadenas de caracteres y operadores de
manipulación de fechas para construir consultas complejas.
Los elementos que compones las expresiones
son:
Las expresiones más comunes son los nombres
de campos. Se pueden combinar con otros elementos de las expresiones
Las constantes son valores que no cambian.
Por ejemplo, en la expresión FECHA_NACIMIENTO + 30, el valor 30 es una
constante y FECHA NACIMIENTO es un nombre de campo.
Las constantes de caracteres se deben
encerrar con una comilla simple (‘) o una doble (‘‘). Para que
una comilla simple o doble aparezca en una constante se pone doble.(Por
ejemplo, si la constante deseada es O’Donnel deberá figurar como ‘O‘‘Donnel‘.
Las constantes de fechas deberán estar
encerradas entre comillas simples (‘ ‘), por ejemplo, ‘01/30/89‘
representa la fecha 30 de Enero de 1989. El formato de las fechas es MM/DD/YY o
MM/DD/YYYY (MM = mes, DD = día y YY = Año).
Para realizar operaciones numéricas se puede
utilizar los operadores:
operador significado
+ Suma
- Resta
* Multiplicación
/ División
** o ^ Exponenciación
Las expresiones de caracteres pueden incluir
los siguientes operadores:
operador significado
|| Concatenación manteniendo espacios en blanco
Si por ejemplo, NOMBRE contiene ‘Antonio ‘ y
APELLIDOS ‘Rodríguez ‘
ejemplo
Valor resultado
NOMBRE || APELLIDOS ‘Antonio Rodríguez ‘
Los operadores de relación que pueden
separar dos expresiones pueden ser cualquiera de los siguientes:
Operador Significado
= Igual a
<> Distinto de
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
Like Coincidencia con un patrón
Not Like No coincidencia con un patrón
Is Null Igual a nulo (vacío)
Is Not Null No es nulo (no está vacío)
Between Rango de valores entre una cota inferior y otra
superior
In Pertenencia a un conjunto de valores o ser miembro de una subconsulta
Exist Cierto si una subconsulta devuelve como mínimo un registro
Any Compara un valor con cada valor devuelto por una subconsulta retornando
cierto si uno cualquiera de ellos cumple la condición. Any debe ir precedido de
=, <>, <, >, >= o >=. = Any es equivalente a In.
All Compara un valor con cada valor devuelto por una subconsulta retornando
cierto si todos ellos cumplen la condición. All debe ir precedido de =,
<>, <, >, >= o >=.
Ejemplos que utilizan operadores de
relación:
evaluacion = ‘F’
Apellidos LIKE ‘Rodri%’
Grupo IS NULL
Anno BETWEEN 1985 AND 1995
WHERE M.ESTUDIOS = ANY (SELECT ESTUDIO FROM
ESTUDIOS WHERE NIVEL = ‘1’)
WHERE NOTA > ALL (SELECT NOTA FROM
CALIFICA WHERE VALOR1 > 4)
COMPARACION
DE CADENAS DE CARACTERES:
[NOT] LIKE
Like permite utilizar los siguientes
caracteres especiales en las cadenas de comparación:
% comodín para seleccionar cualquier cadena
de 0 o más caracteres
_ comodín para seleccionar cualquier
carácter
Las mayúsculas y minúsculas son
significativas.
Ejemplo: LIKE 'MART%' cualquier cadena que
empiece con MART...
Dos o más condiciones pueden ser combinadas
para formar expresiones más complejas con distintos criterios. Cuando existen
dos o más condiciones deberán estar unidas por AND o OR. Por ejemplo,
CLAVE = 15 AND TIPO = ‘Compra’
deben de cumplirse las dos condiciones para
que sea cierta la condición total.
TIPO = ‘Compra’ OR PROY_CLAVE IS NOT NULL
Basta con que una de las dos sea cierta para
que lo sea la condición total.
El operador lógico NOT es útil para poner al
contrario una condición. Por ejemplo:
NOT (CLAVE = 15 AND TIPO = ‘Compra’)
En expresiones con mas de una condición el
orden en el que se evalúan es muy importante. La siguiente tabla muestra el
orden en el que son evaluados los operadores. Los operadores que figuran en la
primera línea se evalúa primero, luego los de la segunda y así sucesivamente.
Los operadores que figuren en la misma línea
se evalúan de izquierda a derecha según aparezcan en la expresión.
prioridad operador
1 - unario, + unario
2 ** o ^
3 *, /
4 +, -
5 =, <>, <, >, >=, >=,
Like, Not Like, Is Null, Is Not Null,
Between, In, Exists, Any, All
6 NOT
7 AND
8 OR
El siguiente ejemplo muestra la importancia
de la prioridad de los operadores:
WHERE TIPO = ‘Compra’ OR FREGISTRO >
'3/30/1996' AND RESP_CLAVE > 3
Ya que el AND se evalúa primero, esta
consulta nos devuelve la clave de los responsables con nº mayor que 3 y que
hayan sido registrado con posterioridad al 30 de marzo de 1996 y que la TIPO
haya sido 'Compra'.
Las funciones permiten realizar con los
datos operaciones adicionales a las ya vistas, pudiendo participar como
operadores en las expresiones.
Una función representa un valor único que se
obtiene aplicando unas determinadas operaciones a otros valores dados, que se
llaman argumentos. Se especifica como una palabra predefinida seguida de los
argumentos entre paréntesis y separados por comas.
El lenguaje SQL dispone de un conjunto de
funciones que pueden usarse en las consultas y que aparecen aquí agrupadas por
el tipo de valores que devuelven.
Funciones que devuelven
una cadena de caracteres:
Función Descripción
CHR Convierte un Código ASCII en una cadena
de carácter
RTRIM o TRIM Quita los blancos que existan
por la derecha en una cadena
LTRIM Quita los blancos por la izquierda que
tenga una cadena
UPPER Convierte cada letra de una cadena a
mayúscula
LOWER Convierte a minúscula cada letra de
una cadena
SUBSTR Devuelve una subcadena de una cadena.
Los parámetros son la cadena, la posición del primer carácter a extraer y el
número de caracteres a extraer.
Funciones que devuelven
números
Función Descripción
MOD Divide dos números y devuelve el resto
de la división.
LENGTH Devuelve la longitud de una cadena.
Funciones que devuelven
fechas:
Función Descripción
SYSDATE Devuelve la fecha de hoy (SISTEMA).
TO_DATE Convierte una cadena de caracteres a
una fecha.
TO_DATE (‘01/30/89’, 'DD,MM/YY')
La sentencia para crear una tabla tiene la
forma:
CREATE TABLE nombre_tabla (definición_columna,
...)
nombre_tabla puede ser únicamente el nombre del fichero o el
nombre completo con su camino..
definición_columna esta compuesto por el nombre de la columna o campo,
seguida del tipo de dato de dicha columna.
Los nombres de columna no deben tener
espacios en blanco y los tipos de datos disponibles son :
NUMBER(p,s)
define un número de presición p con parte decimal de hasta s dígitos. NUMBER(p)
define un número entero de presición p. NUMBER
define un número de punto flotante con 38
dígitos de precisión
Ejemplo:
almacenamiento del número 123456.789 |
|
Si se define
como |
es almacenado
como |
number(6,2) |
123456.79 |
number(6) |
123457 |
number(6,-2) |
123500 |
number |
123456.789 |
·
CHAR(l)
. Es de longitud fija (0<l<256) VARCHAR2<(l)
. Cadena de longitud variable, cuyo máxima
longitud es l . LONG
. Puede almacenar cadenas de longitud variable
de hasta 2 GB. Para usarlo hay que tomar en cuenta que: NULL, FALSE,
y TRUE
.
Ejemplo de creación de una tabla de RUBROS:
CREATE TABLE RUBROS (
CLAVE NUMBER(8,0) NOT NULL,
NOMBRE VARCHAR2(45) NOT NULL
);
El formato para destruir o borrar un tabla
es
DROP TABLE nombretabla
nombre_tabla puede ser únicamente el nombre de la tabla.
La sentencia para borrar la tabla antes
creada es
DROP TABLE ACTIVOS
La sentencia de INSERT se utiliza para
añadir registros a las tablas de la base de datos. El formato de la sentencia
es:
INSERT INTO nombre_tabla [(nombre_columna,
...)] VALUES (expr, ...)
nombre_tabla puede ser únicamente el nombre de la tabla.
nombre_columna es una lista opcional de nombres de campo en los que
se insertarán valores en el mismo número y orden que se especificarán en la
cláusula VALUES. Si no se especifica la lista de campos, los valores de expr
en la cláusula VALUES deben ser tantos como campos tenga la tabla y en el mismo
orden que se definieron al crear la tabla.
expr es una lista de expresiones o valores constantes, separados por comas,
para dar valor a los distintos campos del registro que se añadirá a la tabla.
Las cadenas de caracteres deberán estar encerradas entre comillas ‘.
Ejemplo para añadir un registro a una tabla:
INSERT INTO RUBROS (CLAVE, NOMBRE) VALUES 9,
'Otros');
Cada sentencia INSERT añade un único
registro a la tabla. En el ejemplo solo se han especificado 2 campos con sus respectivos
valores, el resto de campos quedaran a nulo. Un valor nulo NULL no significa
blancos o ceros sino simplemente que el campo nunca ha tenido un valor.
La sentencia UPDATE se utiliza para cambiar
el contenido de los registros de una tabla de la base de datos. Su formato es:
UPDATE nombre_tabla SET nombre_columna
= expr, ...
[WHERE { condición }]
nombre_tabla puede ser únicamente el nombre de la tabla.
nombre_columna es el nombre de columna o campo cuyo valor se desea
cambiar.
En una misma sentencia UPDATE pueden
actualizarse varios campos de cada registro de la tabla.
expr es el nuevo valor que se desea asignar al campo que le precede. La
expresión puede ser un valor constante o una subconsulta. Las cadenas de
caracteres deberán estar encerradas entre comillas ‘ . Las subconsultas
entre paréntesis.
La cláusula WHERE sigue el mismo formato que
la vista en la sentencia SELECT y determina que registros se modificarán.
Por ejemplo, cambiar los nombres de los de
la tabla RUBROS de aquellos de aquelos cuya clave sea mayor que 2, sería:
UPDATE RUBROS SET NOMBRE = 'Nuevo' WHERE
CLAVE = 9,
La sentencia DELETE se utiliza para borrar
registros de una tabla de la base de datos. El formato de la sentencia es:
DELETE FROM nombre_tabla [WHERE { condición
}]
nombre_tabla puede ser únicamente el nombre de la tabla.
La cláusula WHERE sigue el mismo formato que
la vista en la sentencia SELECT y determina que registros se borrarán.
Cada sentencia DELETE borra los registros
que cumplen la condición impuesta o todos si no se indica cláusula WHERE.
DELETE FROM RUBROS WHERE CLAVE = 9
Con el ejemplo anterior se borrarían todos
los registros de la tabla rubros cuya clave sea igual a 2.
Una llave primaria en una tabla está
compuesta de uno o más campos consecutivos de la tabla, Una tabla solo puede
tener una llave primaria.
La clave primaria de una tabla identifica a
cada registro en la tabla, por tanto, dos registros cualesquiera no pueden
tener los mismos valores en los campos que forman la clave primaria.
Esta se crea cuando se crea la tabla indicandole
en el campo que se desea que se llave, o despues de creada alterando la tabla e
indicandole cual sera la llave
CREATE TABLE RUBROS (
CLAVE NUMBER(8,0) NOT NULL, PRIMARY KEY
NOMBRE VARCHAR2(25) NOT NULL
);
Esta seria la instruccion necesaria para
indicar que el campo CLAVE sea llave primaria, despues de que la tabla RUBROS
fue creada
ALTER TABLE RUBROS ADD CONSTRAINT RUBRO_PK
PRIMARY KEY (CLAVE)
Cuando un campo en un tabla hace referencia
a otra tabla se le llama llave foranea,
(esto iria despues de la declaracion de los
campos de la tabla ACTIVOS, para hacer la llave foranea relacionada con la
tabla RUBROS)
FOREING KEY RUBRO_CLAVE REFERENCES RUBROS
(CLAVE)
Cuando se ha creado la tabla y se desea
agregar una llave foranea se introduce la siguiente instruccion:
ADD CONSTRAINT
ACTIVO_RUBRO_FK FOREIGN KEY (RUBRO_CLAVE) REFERENCES RUBROS (CLAVE)
Sentencias para crear o destruir índices
Las tablas de la aplicación disponen de sus
propios índices que no deben ser modificados ni destruidas. Si el usuario lo
hiciera es bajo su propia responsabilidad. No obstante se da la posibilidad de
crearse los índices para sus propias tablas o añadir otros a las de la
aplicación. Como también borrar los propios.
La sentencia para crear un índice es
CREATE INDEX CLAVE
y para destruirlo
DROP INDEX CLAVE.
Creacion de Vistas
Una vista es un objeto que no contiene datos
por si mismo, Es una clase de tabla cuyos contenidos son tomados de otras
tablas por medio de la ejecucion de una consulta.
CREATE VIEW VREVISTAS AS SELECT A.*, R.*
FROM ACTIVOS A, REVISTAS R WHERE R.ACTIVO_CLAVE = A.CLAVE
Para borrar una vista:
DROP VIEW VREVISTAS;
Una transacción es una serie de cambios en
la base de datos que deben ser tratadas como una sola. En otras palabras, que
se realicen todos o que no se haga ninguno, pues de lo contrario se podrían
producir inconsistencias en la base de datos.
Cuando no se tiene activada una transacción
el gestor de base de datos ejecuta inmediatamente cada sentencia INSERT, UPDATE
o DELETE que se le encomiende, sin posibilidad de deshacer los cambio en caso
de ocurrir cualquier percance.
Cuando se activa una transacción los cambios
que se van realizando quedan en un estado de provisionalidad hasta que se
realiza un COMMIT, el cual hará definitivos los cambios o hasta realizar un
ROLLBACK que deshará todos los cambios producidos desde que se inició la
transacción.