Manipuilacion de Datos en SQL
Manipuilacion de Datos en SQL
Manipuilacion de Datos en SQL
El primer paso para establecer una base de datos (una vez diseñada según los conceptos
explicados en la unidad 1), es crear una o más tablas. Después de determinar el diseño
de la base de datos, se pueden crear las tablas que almacenarán los datos. Los datos
suelen almacenarse en tablas permanentes.
Contiene toda la información relevante del empleado, y tiene además dos campos
ID_CARGO e ID_CIUDAD que indican los códigos de cargo y ciudad que se
encuentran registrados en otras tablas.
Durante el diseño de la base de datos se consideró separar los datos de Cargo y Ciudad
en tablas separadas, ya que contienen información adicional que era necesario que
quedara identificada de acuerdo al proceso de NORMALIZACION.
Así las cosas, al tener la tabla EMPLEADOS dos llaves foráneas, no podremos ingresar
la información de un empleado si antes no se le ha identificado una ciudad de origen y
cargo que efectivamente EXISTAN en las tablas CARGOS y CIUDADES
respectivamente.
La norma principal de las llaves foráneas es la siguiente: Todo dato que vaya a ser
introducido como valor de un campo que actué de llave foránea, debe existir
previamente y corresponder a un registro de la llave primaria en la tabla a la cual se
hace la referencia. Por ello es que se acostumbra poblar (llenar con información)
primero las tablas que tengan relaciones de llaves foráneas con otra tabla principal, y
por último se puebla la tabla principal.
Para entender mejor esta norma, pongamos el ejemplo de la llave foránea ID_CIUDAD
en la tabla EMPLEADOS. Digamos que queremos insertar un registro de un empleado
con ciudad de origen "Montería". Al momento de inserción en la tabla EMPLEADOS
nos encontramos con la restricción de que la ciudad de "Montería" debe tener un ID.
Pero resulta que en la tabla CIUDADES no aparece ningún ID asociado con la ciudad
de Montería. Por lo tanto, al intentar ingresar un ID de ciudad inválido el sistema nos
dará un mensaje de error.
Por ello concluimos: Todo empleado debe tener un ID_CIUDAD que esté previamente
registrado en la tabla de CIUDADES, y debe tener un ID_CARGO que esté
previamente registrado en la tabla de CARGOS, todo gracias a que ID_CARGO e
ID_CIUDAD son llaves foráneas en la tabla EMPLEADOS.
• Nótese como en la tabla empleados, antes de definir las llaves foráneas, tenemos la
necesidad de especificar en la sintaxis que dichas columnas son llaves. Es por ello que se
indican dos líneas con la restricción KEY, la cual le informa al gestor que esas columnas
servirán como llaves. Luego, en las dos líneas subsiguientes, a esas llaves se les da la
categoría de FOREIGN KEY y se hacen las referencias respectivas con las tablas foráneas.
• Nótese que en la tabla empleados hemos definido dos restricciones de unicidad UNIQUE
KEY. Una es para la llave primaria, la cual como se explico previamente es de carácter
obligatorio. Y la segunda llave UNIQUE es para el campo CODIGO_EMP, ya que desde
el diseño se ha establecido que no puede haber dos empleados con el mismo código. Esta
restricción nace por lo tanto del diseño de la tabla, mas no de la sintaxis como tal, como sí
ocurre con la llave primaria.
• Para que una llave foránea funcione correctamente, ambos campos que se están
referenciando deben OBLIGATORIAMENTE tener el mismo tipo de dato y el mismo
tamaño. Es decir, cuando definimos ID_CARGO e ID_CIUDAD en las tablas CARGOS y
CIUDADES respectivamente, debemos tener la precaución que durante la creación de la
tabla EMPLEADOS, las propiedades de ID_CARGO y ID_CIUDAD en esta tabla sean
exactamente iguales a las propiedades de sus correspondientes en las tablas foráneas.
ALTERAR TABLAS
Una vez que las tablas han sido creadas, puede existir la necesidad de cambiar el
formato de una tabla existente. El comando ALTER TABLE junto con los comandos
auxiliares MODIFY y ADD, puede ser usado para modificar el tamaño máximo de una
columna de tipo NUMBER o CHAR, o para agregar una nueva columna, o para
habilitar o deshabilitar restricciones de columna.
Para ver varios ejemplos práctico, volvamos a las tablas creadas en el capitulo anterior.
Para usar el comando MODIFY adecuadamente, existe una regla que siempre debemos
respetar: La columna de vayamos a alterar debe estar vacía para poder reducir su
tamaño. Si tratamos de reducir el tamaño de una columna que ya contiene datos en ella,
el sistema generará un error y no permitirá el cambio.
Ahora supongamos que quiero alterar la restricción NOT NULL del mismo campo
DIR_EMP que vimos en el ejemplo anterior, para permitir que haya valores nulos en
dicho campo.
Para agregar una nueva columna, usamos el comando ADD. Sin embargo, para agregar
una columna con la restricción NOT NULL, y la tabla ya contiene registros, el sistema
nos dará un error. Esto sucede porque al haber registros existentes, la creación de una
nueva columna implica que cada uno de los registros existentes deberá contener un
valor para la nueva columna, y como estamos indicando que no puede haber valores
nulos, el sistema no tiene de donde inventárselos. Entonces, tenemos dos caminos:
Ejemplo:
Como habíamos explicado, al intentar crear la columna con la restricción NOT NULL,
como nos fue solicitado, el sistema dará error, ya que el sistema se ve obligado a que
para cada uno de los 10 registros existentes haya necesariamente un valor de Código
Postal, y no tiene como inventárselos. Por ello, la restricción NOT NULL no puedo
usarla durante la creación de la columna. (Pero si después de que haya datos en ella).
Procedamos:
Una vez creada, procedemos a llenar los datos correspondientes a esta columna en cada
uno de los 10 registros que tenía la tabla.
Procedamos:
ALTER TABLE CIUDADES MODIFY (COD_ POSTAL INT (5) NOT NULL );
Resumen:
ELIMINAR TABLAS
La eliminación de tablas es una orden poco común en la administración de una base de
datos, ya que ello implica que se pierdan todos los datos contenidos en la tabla.
Una explicación clara de esto la podemos deducir usando nuestras tablas de ejemplo de
los capítulos anteriores. Como recordaremos, las tablas CARGOS y CIUDADES son las
que contienen los datos de ID_CARGO e ID_CIUDAD que se usan como referencia
en la tabla EMPLEADOS. Esto es, la tabla empleados es dependiente de las tablas
CARGOS y CIUDADES, ya que posee dos llaves foráneas que apuntan a ellas.
En resumen:
No se puede utilizar DROP TABLE para quitar una tabla a la que se haga referencia
con una restricción FOREIGN KEY. Primero se debe quitar la restricción FOREIGN
KEY o la tabla de referencia.
Nos ocuparemos del comando INSERT, que nos permite insertar nuevos registros en
una tabla.
1. Después del comando INSER INTO debemos indicar el nombre de la tabla. Esta indicación
es de carácter obligatoria.
2. Luego, de manera opcional (por eso aparece entre corchetes) le indicamos al comando la
lista de las columnas sobre las cuales deseamos insertar datos. En este paso hay que hacer la
siguiente observación. Si nos abstenemos de usar la lista de las columnas, el gestor SQL
entenderá que vamos a ingresar datos para todas y cada una de las columnas, en el estricto
orden en el que están definidas en la tabla, los cuales deven estar definidos en la sección
"Lista de valores" dentro de la cláusula VALUES. Si por alguna queremos insertar registros
definiendo solo valores para algunas columnas y no todas, (o usando un orden distinto)
deberemos especificar cuales columnas estamos manipulando, indicándolas en "Lista de
columnas".
3. Si vamos a introducir valores para todos y cada una de las columnas de una tabla, entonces
no es necesario usar la sección "lista de columnas".
4. Si usamos una "lista de columnas", el orden que usemos deberá ser respetado tal cual en la
"lista de valores". Es decir, si la lista de columnas contiene "ColA, ColB, ColC", la lista de
valores deberá seguir el mismo orden "ValorColA, ValorColB, ValorColC".
5. Si usamos una lista de columnas para la inserción de un nuevo registro, necesariamente las
columnas que no estén dentro de la lista deben tener especificado un valor DEFAULT o un
valor NULL. De lo contrario el sistema nos generará un error, ya que para campos que
desde el diseño de la tabla tengan la restricción NOT NULL, es obligatorio que ingresemos
un valor, es decir, es obligatorio que estos campos NOT NULL estén dentro de la "lista de
columnas" durante la inserción de un nuevo registro.
6. Cuando insertamos un nuevo registro en una tabla, y no especificamos el valor para una
columna determinada, es decir, la columna no esta incluida en la "lista de columnas" en el
comando INSERT, el sistema automáticamente asignará el valor DEFAULT que hayamos
definido durante el diseño de la tabla. Si no existiere un DEFAULT, el valor se asignará
NULL (desde que no haya restricción).
7. Los valores de la "lista de columna" y "lista de valores" deben estar separados por coma.
8. En la sección VALUES, si se trata de valores de carácter, estos deben ir encerrados entre
comillas sencillas. Si se trata de valores numéricos, no es necesario el uso de comillas.
Pero como habíamos explicado, si estoy insertando valores para todos y cada uno de los
campos de la tabla, en el estricto orden en que fueron definidos en la tabla, puedo
abstenerme de usar la lista de columnas.
Resultado:
Nótese que el valor de SALARIO no fue especificado en el comando. Por ello, el gestor
de la base de datos acude al valor por defecto que había sido definido durante la
creación de la tabla, el cual corresponde a un valor de $1000.
Otro ejemplo:
Al igual que el caso anterior, para los campos DESC_CARGO y SALARIO acude a los
valores por defecto, dado que en el comando de inserción no fueron definidos.
Inserción de datos que registros cuando una tabla esta referenciada a otra
Resultado:
ID_EMP CODIGO_EMP NOM_EMP APELL_EMP ID_CARGO DIR_EMP TEL_EMP EMAIL_EMP ID_CIUDAD EDAD_EMP
CR 43 80-
8550000 2505 ANDRES PEREZ 10 80 35551010 aperez@empresa.com BAQ 30
Error: El valor "NEI" no existe como referencia de llave foránea en la tabla CIUDADES.
El usuario estaba intentando ingresar un valor de código de ciudad que era inválido,
dado que no existía previamente en la tabla CIUDADES, y por lo tanto estaba violando
la restricción de FOREIGN KEY para dicho campo.
Resultado:
ID_EMP CODIGO_EMP NOM_EMP APELL_EMP ID_CARGO DIR_EMP TEL_EMP EMAIL_EMP ID_CIUDAD EDAD_EMP
6868686 5200 NOMBRE NOMBRE 48 DIRECCION TELEFONO CORREO BOG 99
Nótese que en el comando INSERT solo ingresamos los valores que eran estrictamente
obligatorios, como aquellos de las llaves primarias, llaves únicas y llaves foráneas. El
resto de valores los dejamos sin definir, para que el gestor usara los valores por defecto
definidos en el diseño de la tabla.
Ejemplos típicos de cuando es necesario usar estos comandos que modifican registros
de las tablas de una base de datos, pueden ser los siguientes:
Cambiar el valor del salario de un cargo, por decisión de la Junta Directiva de una empresa,
o por efectos del crecimiento de la inflación, o por acuerdo con los trabajadores en una
convención de trabajo.
Eliminar el registro de un empleado cuando este ha dejado la compañía.
Cambiar la dirección o teléfono de un empleado. (algo muy común).
Cambiar el nombre de un departamento de la empresa cuando haya una reestructuración.
Eliminar un departamento de la empresa, cuando por reestructuraciones dejen de existir.
Ejemplos hay muchos, y cada base de datos nos ira presentando las distintas
necesidades, para las cuales debemos estar preparados.
Explicación de la sintaxis:
Toda sentencia UPDATE debe obligatoriamente tener una cláusula WHERE, la cual le
indica al gestor cuales son las condiciones de búsqueda de los registros que se van a
cambiar. El equivalente en lenguaje Castellano, en un ejemplo real sería: "Cambie el valor
del NOMBRE donde la CEDULA sea 50505050".
Si no existiera una cláusula de WHERE, el comando UPDATE no tendría elementos para
hacer ningún cambio. Por lo tanto, WHERE actúa como condicionante de una búsqueda en
los registros. Todos los registros resultantes de la búsqueda condicionada con WHERE, son
el objetivo del cambio, es decir, son el objetivo de la acción de UPDATE.
SET es la cláusula que indica cual va a ser el nuevo valor para la columna que seseamos
cambiar. Si en una misma acción deseamos cambiar el valor de varias columnas, separamos
varias cláusulas SET con comas, como se verá en los ejemplos mas adelante.
Ejemplos de UPDATE:
UPDATE CARGOS SET (SALARIO =2500) WHERE (ID_CARGO >20 AND ID_CARGO <30)
BORRADO DE DATOS
De la misma manera como se actualizan registros, estos pueden ser igualmente
borrados, usando el comando DELETE. La sintaxis de DELETE es muy parecida a la
de UPDATE, en el sentido que también usa la cláusula WHERE para encontrar a
través e una búsqueda los registros que cumplen con los criterios de borrado.
La única restricción a la hora de borrar registros tiene que ver con la existencia de
restricciones impuestas a través de las FOREIGN KEY. Esto es, si intentamos borrar un
registro de una tabla que esta referenciada a otra por medio de una llave foránea, el
gestor de la base de datos no permitirá que borremos el registro.
Por lo tanto: Para que un registro pueda ser borrado sin inconvenientes, ninguna tabla
debe estar haciendo referencia a el.
OBSERVACIONES FINALES
Con base en el ejemplo anterior podemos deducir que en el mantenimiento de toda base
de datos siempre tendremos tablas de referencia (tales como CIUDADES y CARGOS)
que por lo general se mantienen inalteradas, y tablas de trabajo, como EMPLEADOS
que son las que se amarran a las tablas de referencia a través de llaves foráneas, y sobre
las cuales ocurre la mayor parte del trabajo de mantenimiento de la base de datos.
Los sistemas modernos de bases de datos poseen distintas herramientas que nos
permiten ver de manera grafica el diseño de la base de datos, las relaciones entre las
tablas, sus llaves primarias y foráneas, y en general, toda la información que nos
permitirán hacer una buena administración y mantenimiento.
Con este tema cerramos la unidad 3, y terminamos el curso básico de diseño en SQL.
Confiamos en que la información suministrada haya sido de su agrado, y recomendamos
que sea complementada con las tutorías a través de los TABLEROS DE DISCUSIÓN,
el material complementario ubicado en la sección de DOCUMENTOS y ENLACES
EXTERNOS, junto con la investigación propia que haga el estudiante sobre el tema, ya
sea en libros, o a través de La Internet.