lunes, 15 de junio de 2009

SQL

Antes de comenzar la clase una Reflexión: LA CULPA ES DE LA VACA.

Se estaba promoviendo la exportación de artículos colombiano de cuero a Estados Unidos, y un investigador de la firma Monitor decidido entrevistar a los representantes de dos mil almacenes en Colombia. La conclusión de la encuesta fue determinante: los precio de tales productos son altos , y calidad muy baja.
El investigador se dirigió entonces a los fabricantes para preguntarle sobre esta conclusión. Recibió esta respuesta: no es culpa nuestra; las curtiembres tienen una tarifa arancelaria de protección de quince por ciento para impedir la entrada de cueros argentinos.
A continuación . le pregunto a los propietarios de las curtiembres, ellos contestaron: no es culpa nuestra; el problema radica en los mataderos, porque sacan cueros de mala calidad. Como la venta de carne les reporta mayores ganancias con menor esfuerzo, los cueros les importan muy poco.
Entonces el investigador, armado de toda su paciencia. Se fue a un matadero. Allí le dijeron : no es culpa nuestra; el problema es que los ganaderos gastan muy poco en venenos contra las garrapatas y además marcan por todas partes a las reses `para evitar que se las roben, practicas que destruyen los cueros.
Finalmente, el investigador decidió visitar a los ganaderos. Ellos también dijeron : no es culpa nuestra; esas estúpidas vacas se restriegan contra los alambres de púas para aliviarse de las picaduras.
La conclusión del consultor extranjero fue muy simple: los productores colombianos de carteras de cuero no pueden competir en el mercado de Estado Unidos “¡ porque sus vacas son estúpidas!

1. Entrar al SQL PLUS de ORACLE. Para ello ir a “Inicio”, “Programas”, “Oracle”, “Application Development”, “SQL Plus”.


2. Cuando solicite “User Name” responder “scott” y el “Password” es “tiger”. Luego seleccionar “OK”.


En estas Notas lo primero que el estudiante aprenderá, será a crear una Tabla en la Base de Datos, con el objetivo de que pueda crear sus propias tablas para luego realizar los Ejercicios.
En este orden de ideas, tenemos que el nombre de una tabla en ORACLE debe cumplir con las reglas y estándares para cualquier objeto in ORACLE.
REGLAS
1. La longitud debe estar entre 1 – 30 caracteres, el primer carácter debe ser alfabético.
2. Debe contener sólo caracteres.
3. No debe ser una palabra reservada de ORACLE
4. No debe existir otro objeto con el mismo nombre y del mismo usuario.
NOTA
Las letras mayúscula y minúsculas son tratadas de igual manera.
CREANDO UNA TABLA
La sintaxis para crear una Tabla puede ser exigente debido al Grupo de Parámetros opcionales que puede llevar. Vamos a revisar la Sintaxis completa, pero se hará un uso sencillo en esta parte inicial.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-4
Sintaxis
CREATE TABLE Nombre (
Columna1 TIPO NOT NULL,
Columna2 TIPO NOT NULL,
Columna3 TIPO NOT NULL,
Columna4 TIPO NOT NULL,
Columna5 TIPO NOT NULL,
Columna6 TIPO NOT NULL,
Columna7 TIPO ,
Columna8 TIPO ,
Columna9 TIPO ,
PRIMARY KEY (columna1, columna2) CONSTRAINT ConPrimNombre,
FOREING KEY (columna3)
REFERENCES tabla (columna) CONSTRAINT ConForNombre,
UNIQUE (columna5, columna6) CONSTRAINT ConUniNombre,
CHECK (columna7 condición) );
Ahora bien, utilizando una sintaxis sencilla podemos en esta parte resumir la creación de una tabla como sigue:
CREATE TABLE Nombre (
Columna1 TIPO,
Columna2 TIPO,
Columna3 TIPO);
Por ello, para crear la Tabla de Clientes se haría lo siguiente:
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-5
Los otros parámetros de la Instrucción se describen a continuación:
CONSTRAINT
USO
PRIMARY KEY
Para identificar a una o varias columnas como clave primaria de la tabla.
CHECK
Para especificar que el contenido de una columna debe cumplir con una condición dada.
FOREIGN KEY
Para identificar a una o varias columnas como clave foránea de una tabla. La (s) columna (s) debe (n) estar definidas como clave primaria en la tabla referenciada.
NOT NULL
Especifica que la columna tiene que tener un valor no nulo.
UNIQUE
Para especificar a una o varias columnas como clave única o clave alterna.
ESTRUCTURA DE UNA TABLA
Para revisar la estructura de una tabla, se utiliza la siguiente instrucción:
DESCRIBE Nombre de la Tabla
En este caso se pude resumir el comando como: DESC Nombre de la Tabla. ORACLE responderá con la estructura de la Tabla.
Ejemplo
6.3 SALIR DEL SQL/PLUS DE ORACLE.
La Instrucción para salir es EXIT.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-6
INCLUYENDO INFORMACION EN UNA TABLA
La instrucción INSERT permite insertar filas en una tabla.
Sintaxis
INSERT INTO nombre_tabla [(columna1, columna2 . . . )]
VALUES (valor1, valor2 . . . )
Incluyendo algunas columnas
Cuando la información que se va a incluir en una tabla no corresponde a todas las columnas de dicha tabla, se deben especificar todas las columnas de dicha tabla, es decir, se deben especificar todas las columnas que vamos a utilizar. Debe existir una correspondencia univoca entre las columnas que se van a incluir y los valores especificados en la cláusula VALUES.
Sintaxis
SQL> INSERT INTO nombre_tabla (columna1, columna2, . . , columnaN)
2 VALUES (valor1, valor2, . . . , valorN);
Ejemplo
Incluir un nuevo Cliente en la tabla Clientes, del cual solo tenemos su Código y su nombre y por supuesto su estatus será ‘A’. En este caso no conocemos su Límite de crédito.
Incluyendo todas las columnas
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-7
Insertando valores en todas las columnas. Si no se especifican las columnas, se asume, que las columnas están en el mismo orden en que se suministran lo valores.
Sintaxis
SQL> INSERT INTO nombre_tabla
2 VALUES (valor1, valor2, . . . , valorN);
Ejemplo
Incluir los Datos Completos de un Cliente.
6.5 CONSULTANDO LA INFORMACION EN UNA TABLA
Ahora bien, hemos ejecutado dos instrucciones de Inclusión, pero todavía no hemos constatado si se está incluyendo correctamente. Para ello, necesitamos revisar si las Filas o Registros creados, realmente se encuentran en la Tabla de Clientes. En consecuencia, vamos a revisar un Comando que en mi opinión es el mas poderoso de SQL. Me refiero al comando SELECT, el cual permite seleccionar Filas de cualquier Tabla, aunado al hecho, de que este comando es capaz de ejecutar un grupo importante de funciones adicionales.
La instrucción SELECT nos permite obtener información de una o varias tablas. Cuando utilizamos varias tablas en la instrucción SELECT y necesitamos hacer referencia a una columna que se encuentra definida con el mismo nombre en dos o más tablas debemos cualificar las columnas, que no es más que preceder a dicha columna con el nombre de la tabla.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-8
Sintaxis
SELECT campo1, campo2. . . . . , campoN
FROM tabla
Ejemplo
Mostrar el código y el nombre de todos los clientes que se encuentran en la tabla CLIENTES.
La cláusula WHERE en el SELECT
Adicionando la Cláusula WHERE a una Instrucción SELECT, podemos restringir la consulta a valores específicos que deseamos consultar.
Ejemplo
Mostrar el Código, Nombre y Límite de Crédito del Cliente cuyo Código es igual a 0007.
Mas adelante se verá en detalle, que la cláusula WHERE tiene un abanico importante de opciones para ser utilizada en conjunto con el SELECT.
Ya en este punto se ha aprendido a crear una Tabla y se le han agregado valores a esa Tabla. Adicionalmente, se sabe como consultar los Datos en la Tabla. Por ello, se puede aprender como Modificar y Agregar Columnas a una Tabla.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-9
MODIFICAR Y AGREGAR COLUMNAS A UNA TABLA
Una vez creada una Tabla, se puede Modificar su estructura mediante el uso del ALTER TABLE.
Sintaxis
ALTER TABLE Tabla
[ ADD Tipo de datos de la Columna]
[Modify Columna (Tipo de datos)]
Ejemplo
Ya se sabe la estructura de la Tabla de Clientes:
Como ejemplo, se desea adicionar la columna Teléfono a la Tabla de Clientes:
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-10
Seguidamente se desea que la columna Nombre sea de 30 caracteres:
Surge una incógnita. ¿Qué pasa si se desea dejar la Tabla de Clientes como estaba?. Es decir sin la Columna Teléfono y el Nombre de tipo VARCHAR2 de 25. El lector debe investigar como lograrlo.
Volviendo a la Inclusión de Datos.
En este momento, ya el lector ha colocado la Tabla de Clientes en su forma original:
En consecuencia, se seguirá trabajando con esta estructura.
Incluyendo usando parámetro
Cuando se desea incluir información de manera iterativa se emplea la macrosustitución.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-11
Sintaxis
&codigo me permite leer el código, va entre comillas porque es Alfanumérico. &limcre me permite leer el Límite de Crédito no lleva comillas. El estatus en una Inclusión siempre será de valor A para que quede activo.
Para revisar todos los Campos de una tabla utilizo el comodín * en la Instrucción SELECT como sigue:
Incluyendo Múltiples Filas usando Query.
Cuando se desea incluir información proveniente de otra tabla, se procede de la siguiente manera:
Sintaxis
SQL> INSERT INTO nombre_tabla_destino (C1, C2, C3)
2 SELECT c1, c2, c3
2 FROM nombre_tabla_fuente
3 WHERE condicion;
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-12
Ejemplo
Imaginemos que nos piden crear una tabla de Proveedores con una estructura idéntica a la de Clientes. Luego nos piden que pasemos a todos nuestros clientes a la Tabla de proveedores. Eso lo podemos realizar de manera automática de la siguiente forma:
1. Usted debe crear una Tabla idéntica a la de Clientes, pero ahora llamarla Proveedores.(Ya sabe como hacerlo).
2. Crear una Secuencia, que puede comenzar en 1 e incrementarse de 1 en uno. Los Proveedores no van a quedar con los mismos códigos que los clientes, pero se van a incluir de manera automática.
3. Ejecutar el comando SELECT necesario para realizar la Inclusión automática.
4. Revisar si se hizo la inclusión de manera correcta.
En este momento ya se conoce una vía para respaldar una Tabla utilizando una secuencia. Ahora bien, existe otra vía para emitir un respaldo de una tabla sin utilizar una secuencia. En este caso, la intención sería respaldar una Tabla de manera idéntica a la existente. Para ello existe una instrucción que me permite realizar este proceso de una manera sencilla. La sintaxis es la siguiente:
CREATE TABLE NombreTablaRespaldo
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-13
AS SELECT * FROM TablaExistente;
Se requiere respaldar la Tabla de Clientes mediante una instrucción que haga lo siguiente:
1. Cree una Tabla idéntica a la Tabla que se desea respaldar.(Clientes en este caso).
2. Pase las Filas de una manera idéntica desde la Tabla ya existente a una Tabla de respaldo.
Para lograr los puntos 1 y 2, se procede como sigue:
Ya se ha creado un respaldo de la Tabla de Clientes denominado respaldo_clientes. Ya en esta tabla han sido incluidos los clientes existentes. Para verificar si se hizo la inclusión, se escribe:
6.6 MODIFICANDO INFORMACIÓN DE UNA TABLA
La instrucción UPDATE permite modificar la información contenida en una tabla.
Sintaxis
UPDATE nombre_tabla
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-14
SET campo1 = valor1,
Campo2 = valor2,
C3 = (select A
From nombre_tabla
Where condición),
(c4, c5) = (Select A, B
From nombre_tabla
Where condicion)
[ WHERE condición ]
Modificando una Fila(Un registro).
Ejemplo
Se desea cambiarle el Límite de Crédito al Proveedor SIDETUR cuyo código es 2. Para ello se procede como sigue:
Para chequear la actualización:
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-15
NOTA: el uso del WHERE en el UPDATE para un caso como este, es muy importante, de lo contrario habría cambiado todas las Filas (Registros) de la Tabla.
Modificando varias Filas.
Ejemplo
A los Proveedores que tengan un Límite de crédito Inferior a 3000, colocarlo en Cero y además cambiar su Estatus a la letra E.
Luego:
Ahora bien, se generó una diferencia en los Datos que tiene BECO como cliente y los que tiene como Proveedor. Como ejemplo se van a traer los datos que tiene como proveedor y se le colocarán al cliente, para así ejemplificar el uso del UPDATE utilizando datos de otra Tabla.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-16
6.7 ELIMINANDO INFORMACION DE UNA TABLA
La instrucción DELETE elimina las filas de una tabla.
Sintaxis
DELETE FROM Nombre_Tabla
WHERE Condición;
Ejemplo
lo
Eliminar todos los Proveedores cuyo Estatus sea igual a E. Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-17
NOTA: el uso del WHERE en el DELETE para un caso como este, es muy importante, de lo contrario habría Eliminado todas las Filas (Registros) de la Tabla.
Luego:
6.8. ELIMINACIÓN FÍSICA VS ELMINACIÓN LÓGICA.
Ya se ha visto la manera de Eliminar Filas(Registros) de una Tabla utilizando el Comando DELETE. Es necesario acotar, que este tipo de Eliminación no deja pistas de lo ocurrido, porque la Información se Elimina Físicamente, es decir, deja de existir en las Tablas de la Base de Datos. Este proceso desde el punto de vista de Integridad y Seguridad de los datos se considera inadecuado.
Todo profesional de las Ciencias de la Computación, debe aprender que las eliminaciones en las Tablas deben hacerse de manera lógica. Es decir, la Fila (o Registro) va a seguir físicamente en la Tabla, pero no se tomará en cuenta desde el punto de vista lógico. Para ello, el profesional en cuestión se puede valer de la Columna (Campo) Estatus. Por lo general, se entiende que cuando una Fila tiene
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-18
la Columna estatus en A es porque se encuentra activa y cuando tiene una E, se encuentra eliminada.
En otras palabras, si se usa la Eliminación Lógica, para eliminar una Fila de una Tabla, no se utilizará el comando DELETE, sino, el Comando UPDATE para cambiar la Columna Estatus por una E. Cambiar este Paradigma, presenta las siguientes ventajas:
1. Se deja una pista de que el Registro existió y fue eliminado en un proceso ejecutado por un usuario del Sistema. Algunas veces ocurre, que los usuarios culpan al Sistema por desapariciones de información, lo cual afecta también la imagen de sus Diseñadores. Cuando esto ocurre, se puede demostrar que el Registro no ha sido eliminado por error, porque todavía va a existir físicamente en la Tabla. Mas aún, en el futuro el Estudiante aprenderá que además del Estatus cada Tabla debe llevar una Columna(Campo) que identifique el código del usuario que le hizo la última actualización, otra columna para la hora en que se hizo la última actualización y, por supuesto, otra columna que identifique la fecha de la última actualización. Así se sabrá, quién lo borró a que hora y en que fecha.
2. Es una operación mas rápida. Cuando se elimina una Columna(Registro), el Manejador tiene que reordenar las otras columnas, tanto en el área de datos como en el (las) área(s) de Indices asociada(s). En cambio al realizar una Eliminación Lógica solo se cambia el valor de una Columna por ende
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-19
la respuesta es inmediata. En el ambiente académico no suele notarse esa diferencia porque los estudiantes utilizan tablas, por lo general, con pocos datos. En el ambiente empresarial, cuando los volúmenes de Datos crecen es cuando puede notarse esta diferencia de manera significativa.
3. Se trabaja con estilo y dominio de la Arquitectura de la Base de Datos y sus Tablas. Con regularidad, le insisto a mis alumnos que son estos detalles los que diferencia a los Profesionales de los Empíricos, porque de esta manera se implementan soluciones tecnológicas mas eficientes.
En consecuencia, una operación de eliminación, en lo sucesivo se hará de la siguiente manera:
Ejemplo
Se desea Eliminar el Proveedor cuyo código es 1.
Luego para consultar, tendremos que agregar obligatoriamente la cláusula WHERE a la instrucción SELECT. Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-20
De ahora en adelante, las Filas(Registros) que existen, son aquellas cuyo Estatus es igual a A, el resto existe físicamente, pero desde el punto de vista lógico no existen.
Los Registros Eliminados de manera Lógica, ¿se quedarán en sus Tablas para Siempre?.La respuesta es NO. Cada cierto tiempo, se ejecutará un proceso de depuración que pasará los Registros con estatus E a una tabla Histórica y luego los eliminará físicamente de su tabla original. Este proceso será ejecutado, en la mayoría de los casos, por el Administrador de la Base de Datos en un horario no laborable para no molestar en lo posible a los usuarios del Sistema.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-21
PRACTICA I.
1. Crear una Tabla de Facturas con la Siguiente Estructura:
2. Crear una tabla llamada DetFact, con la siguiente estructura:
3. Crear una Tabla llamada Artículos con la siguiente estructura:
4. Insertar Filas en la Tabla de Clientes para que quede como sigue: Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-22
5. Insertar Filas en la Tabla de Facturas para que quede como sigue:
6. Insertar Filas en la Tabla de Artículos para que quede como sigue:
7. Insertar Filas en la Tabla DetFacturas para que quede como sigue:
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-23
8. Colocar a todos los clientes como Proveedores y que queden con el mismo código en ambas tablas. Utilice un Query sin generar ninguna secuencia. Así también aprenderá a respaldar el contenido de una tabla en otra tabla.
9. Coloque el Límite de Crédito en 7500 al Proveedor SIDETUR.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-24
Ahora bien, usted ha creado las tablas necesarias para trabajar en el resto del curso, sin embargo, al cambiarse de Computador tendría que crear nuevamente esas tablas, lo cual no es eficiente. Lo ideal es que usted se puede llevar las tablas creadas en un Diskette y colocarlas en cualquier Base de datos que se encuentre en cualquier Computador. Para ello, debe proceder como sigue:
1. Ingresar a los Comandos MS-DOS. Para ello, ir por Inicio, Ejecutar, colocar CMD y Aceptar. Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-25
2. Al estar en la Pantalla de Comandos del MS-DOS, ya puede exportar las tablas que desee desde la Base de Datos a un Archivo intermedio. Para ello debe realizar lo siguiente:
2.1. Cambiarse a la Unidad A: para Grabar las Tablas en un Diskette.
2.2. Luego ejecutar el comando EXP que sirve para exportar las Tablas que se desean llevar a otra Base de Datos (U otra Computadora). 2.3 Para verificar que Archivo de respaldo existe en el Diskette, se utiliza el Comando DIR, y mostrará un Archivo llamado respaldo.DMP, el cual contiene las Tablas exportadas.
2.4 Luego para llevar las Tablas a otra Base de Datos (U otra Computadora). Debe ingresar el Diskette en la Unidad de la
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.
Texto: Tópicos de Bases de Datos. Tema No. 1
Sección No. 1: Ingreso a ORACLE Página No. 1-26
Computadora en donde colocará los datos. De la misma forma anterior, irá al MS-DOS. Cuando esté allí, debe cambiarse a la Unidad A: y ejecutar el Comando IMP que permite Importar los Datos a la otra Base de Datos.
Autor: Ing. Msc. Leonardo Ponte Cordero U.C.L.A. – Venezuela.

No hay comentarios:

Publicar un comentario