TEMA
4
CREAR TABLAS
Introduccin
Probablemente sea usted un usuario experto en un sistema de gestin de base de datos o DBMS (Database Management System). Puede encontrar un DBMS en una biblioteca, en una Web de internet, o en cualquier otro lugar donde se recuperen datos utilizando un ordenador. En este captulo empezaremos a estudiar SQL (Structured Query Language), que es uno de los lenguajes ms populares y utilizados para recuperar y manipular datos de una base de datos. A mediados de los aos 70, se desarroll SQL como el lenguaje de manipulacin de datos para el prototipo de modelo relacional DBMS, System R, bajo el nombre de SEQUEL, en las instalaciones de investigacin de IBM en San Jos (EE. UU.). En 1980, el lenguaje fue renombrado como SQL (aunque tambin se sigue pronunciando secuel, en este libro se utiliza la pronunciacin igualmente popular es-quiu-el) para evitar confusiones con un producto de hardware que no tiene nada que ver llamado SEQUEL. La mayora de los DBMS utilizan una versin de SQL como lenguaje de manipulacin de datos. En este captulo aprenderemos los fundamentos de SQL. Veremos cmo crear tablas y asignar tipos de datos a las columnas. Tambin veremos un tipo especial de valor, llamado valor nulo, y aprenderemos a gestionar estos valores en las tablas. Aprenderemos a insertar datos en las tablas una vez creadas. Por ltimo, aprenderemos a describir el diseo de una tabla utilizando SQL.
31
Figura 3.1. Pgina de inicio de Oracle Database Express Edition. Nota: En la figura vemos que el usuario SYSTEM (administrador) est conectado actualmente. Su profesor podra asignarle otro nombre de usuario al conectarse, en cuyo caso este ser el nombre que aparecer en su pantalla. Existen dos maneras de utilizar las herramientas en Oracle Database Express Edition. Podemos hacer clic en la flecha para que el cono despliegue un men y despus seleccionar una opcin del men. En la figura 3.2 vemos el resultado de hacer clic en la flecha del cono SQL y despus seleccionar la opcin Archivos de Comandos SQL del men SQL. Aparecer un submen de comandos para trabajar con archivos de comandos SQL. Por ejemplo, para crear un archivo de comandos siguiendo esta opcin, haramos clic en la flecha y seleccionaramos Archivos de Comandos SQL>Crear. (Ms adelante veremos ms sobre archivos de comandos.)
32
Asignatura: Sistemas de Base de Datos Tambin podemos hacer clic en el cono para mostrar las opciones como conos en lugar de como submens. Por ejemplo, si hacemos clic en el cono SQL de la pgina de inicio, veremos la pgina SQL de la figura 3.3. Si hacemos clic en la flecha de uno de los conos se desplegar un submen. En la figura vemos los resultados de hacer clic en la flecha del cono Archivos de Comandos SQL, que muestra el submen Archivos de Comandos SQL. Para crear un archivo de comandos con esta opcin, haga clic en el cono SQL de la pgina de inicio, y clic en la flecha del cono Archivos de Comandos>Crear. La opcin elegida depende de sus preferencias.
33
Introducir Comandos
Los comandos se introducen en la pgina de comandos SQL. Para acceder a la pgina de Comandos SQL, haga clic en la flecha del cono SQL y selecciones Comandos SQL como vemos en la figura 3.4.
Figura 3.4. Iniciar un nuevo comando SQL. Despus de seleccionar la opcin Introducir Comando en el submen Comandos SQL, se abrir la pgina Comandos SQL que vemos en la figura 3.5. Introducimos el comando en la parte superior de esta pgina, llamada Panel de Edicin SQL y despus hacemos clic en el botn Ejecutar para ejecutar el comando y mostrar sus resultados en la parte inferior de la pgina, llamada panel de resultados.
34
Asignatura: Sistemas de Base de Datos Despus de hacer clic en el botn Ejecutar, los resultados aparecen en el Panel de resultados. Observe que los comandos Inicio>SQL>Comandos SQL se refieren a la parte superior del Panel de Edicin de SQL. Esta referencia se denomina ruta. Podemos hacer clic en las pginas de la ruta para volver hacia atrs una o ms pginas. Por ejemplo, para volver a la pgina de inicio, haga clic en Inicio dentro de la ruta.
Figura 3.6. Iniciar un nuevo comando SQL. Este comando CREATE TABLE, que utiliza las funciones de definicin de datos de SQL, describe una tabla llamada tVendedor. La tabla contiene 7 columnas: codiVende, apeVende, nombreVende, direcVende, ciudadVende, comiToVende y porCoVende. La columna codiVende puede almacenar dos caracteres y es la clave principal de la tabla. La columna apeVende puede almacenar hasta 15 caracteres. La columna comiToVende puede almacenar slo nmeros, los cuales estn limitados a siete dgitos, incluyendo dos posiciones decimales. De manera similar, la columna porCoVende puede almacenar tres nmeros, incluyendo dos posiciones decimales. Se puede pensar en el comando SQL de la figura 3.6 como crear una tabla vaca con encabezados de columnas para cada nombre de columna. En SQL, los comandos son de formato libre, es decir, no hay ninguna regla que indique que una tabla en concreto deba comenzar en una posicin en concreto de la lnea. Por ejemplo, podemos haber escrito el comando CREATE TABLE que vemos en la figura 3.6 de esta manera:
35
La manera en que el comando CREATE TABLE de la figura 3.6 se escribi hace que el comando sea ms legible. En este libro haremos hincapi en la legibilidad al escribir comandos SQL. Nota: SQL no es sensible a las maysculas, podemos escribir comandos, utilizando maysculas o minsculas. Sin embargo, hay una excepcin a esta regla. Cuando insertamos caracteres como valores en una tabla, tenemos que utilizar correctamente las maysculas o minsculas, segn proceda. Para crear la tabla tVendedor de Oracle, haga clic en el panel de edicin de SQL, escriba el comando CREATE TABLE que vemos en la figura 3.7, y haga clic en el botn Ejecutar de la parte derecha del panel de edicin de SQL para ejecutar el comando y crear la tabla. En la figura 3.7 tambin vemos el mensaje que aparece en el Panel de resultados una vez ejecutado el comando, que indica que la tabla fue creada.
Figura 3.7. Ejecutar el comando CREATE TABLE para la tabla tVendedor. Nota para usuarios de SQL Server Microsoft SQL Server 2008 es un DBMS diseado para ser utilizado en aplicaciones clienteservidor. Podemos ejecutar Microsoft SQL Server 2008 desde nuestro propio equipo a travs de un conjunto de herramientas de cliente de base de datos llamadas SQL Server Management Studio. Management Studio incluye una ventana de edicin de consultas que podemos utilizar para ejecutar comandos SQL. Si utiliza Management Studio y se conecta a una base de datos de su equipo local, acepte los valores predefinidos para el tipo de servidor, el nombre de servidor y la autenticacin, y despus haga clic en el botn Conectar del cuadro de dilogo Conectar con el servidor. Cuando aparece Management Studio, haga doble clic en Base de Datos, abra la base de datos en la que quiere ejecutar comandos SQL y despus haga clic en el botn Nueva Consulta de
36
Asignatura: Sistemas de Base de Datos la barra de herramientas. Escriba el comando SQL en la ventana de edicin de consultas que se abra, y despus haga clic en el botn Ejecutar de la barra de herramientas para ejecutar el comando. El comando que vemos en la figura 3.9 crea la tabla tVendedor y muestra un mensaje en el panel Mensajes para indicar que el comando tuvo xito.
Figura 3.9. Microsoft SQL Server 2008 para crear una tabla.
37
Al eliminar una tabla tambin se borran todos los datos que hubiera escrito en ella. Es necesario comprobar cuidadosamente los comandos CREATE TABLE antes de ejecutarlos y corregir cualquier problema antes de aadir datos. Ms adelante veremos cmo cambiar la estructura de una tabla sin tener que borrarla entera. Preguntas y Respuestas Pregunta: Cmo puedo corregir un error que comet al crear una tabla? Respuesta: Ms adelante veremos cmo cambiar una tabla para hacer las correcciones necesarias. De momento, la manera ms sencilla es eliminar la tabla utilizando el comando DROP TABLE y despus ejecutando el comando correcto CREATE TABLE.
Tipos de datos
Para cada columna de una tabla, debemos especificar el tipo de datos a utilizar para almacenar el tipo de datos que contendr la columna. En la tabla 3.1 se describen los tipos de datos ms habituales en la base de datos.
38
Asignatura: Sistemas de Base de Datos Tabla 3.1. Tipos de datos utilizados habitualmente. Tipo de Dato Descripcin
Almacena una serie de caracteres de longitud n. Este tipo de datos se utiliza para columnas que contienen letras y caracteres especiales y para columnas que contienen nmeros que no se utilizan en ningn clculo. Por ejemplo, cmo ni el cdigo de vendedor ni de cliente se utilizarn para ningn clculo, las columnas codiVende y codiClien tendrn asignadas el tipo de datos CHAR. Alternativa a CHAR que almacena una serie de caracteres de hasta n caracteres de longitud. A diferencia de CHAR, slo se almacena la serie real de caracteres. S, por ejemplo, una seria de 20 caracteres se almacena en una columna CHAR(30), ocupar 30 caracteres (20 caracteres ms 10 espacios en blanco). Si se almacena en una columna VARCHAR(30), slo ocupar 20 espacios. En general, las tablas que utilizan VARCHAR en lugar de CHAR ocupan menos espacio, pero el DBMS no las procesar tan rpidamente durante las consultas y actualizaciones. Sin embargo, ambas son opciones legtimas. En este texto utilizaremos VARCHAR y CHAR. Almacena datos de fecha. El formato especfico en el que se almacenan las fechas vara en funcin de la implantacin de SQL. En Oracle las fechas se ponen entre comillas simples y tienen el formato DD-MM-AAAA (por ejmplo, 15-10-2010 es 15 de octubre de 2010). En SQL Server, utilice el tipo de datos DATETIME para almacenar fechas. Almacena un nmero decimal de p dgitos de longitud, siendo q de esos dgitos posiciones decimales a la derecha del punto decimal. Por ejemplo, el tipo de datos DECIMAL(5,2) representa un nmero con tres posiciones a la izquierda y dos a la derecha del decimal (por ejemplo, 100.00). El contenido de las columnas de DECIMAL, se pueden usar para hacer clculos. Tambin se puede usar el tipo de datos NUMBER(p,q) tanto en Oracle como en SQL Server para almacenar un nmero decimal. Almacena integrales, que son nmeros sin ninguna parte decimal. El rango vlido es desde -2147483648 hasta 2147483647. Se puede utilizar el contenido de las columnas INT para clculos. Si escribimos AUTO_INCREMENT detrs de INT, crearemos una columna para la que SQL generar automticamente un nmero secuencial nuevo cada vez que aadamos una nueva fila. Esta sera la opcin adecuada para que, si quisiramos, por ejemplo, el DBMS generara un valor para una clave principal. Almacena integrales, pero utiliza menos espacio que el tipo de datos INT. El rango vlido es desde -32768 hasta 32767. SMALLINT es una opcin mejor que INT cuando estamos seguros de que esa columna almacenar nmeros dentro del rango indicado. El contenido de las columnas SMALLINT se puede utilizar para clculos.
CHAR(n)
VARCHAR(n)
DATE
DECIMAL(p,q)
INT
SMALLINT
Valores nulos
De vez en cuando, cuando introducimos una fila nueva a una tabla o modificamos una ya existente, los valores para una o ms columnas son desconocidos o no estn disponibles. Por ejemplo, podemos aadir el nombre y direccin de un cliente a una tabla aunque el cliente no tenga un valor asignado o un lmite de crdito establecido. En otros casos, algunos valores pueden no llegar conocidos nunca, por ejemplo, puede haber un cliente que no tenga vendedor. En SQL esta situacin se gestiona utilizando un valor especial para representar casos en que el valor real es desconocido, no disponible o no aplicable. Este valor especial se denomina valor de datos nulo, o simplemente un cero. Al crear una tabla, podemos especificar si permitir ceros en las columnas individuales o no. 39
Preguntas y respuestas Pregunta: Debera permitirse que un usuario pudiera introducir valores nulos en la clave principal? Respuesta: No, la clave principal debe identificar en exclusiva a una fila determinada, lo cual sera imposible si se permitieran los ceros. Por ejemplo, si almacenamos dos registros de clientes sin valores en la columna de la clave principal, no tendramos forma de diferenciarlos. En SQL se utiliza la clusula NOT NULL en un comando CREATE TABLE para indicar columnas que no pueden contener valores nulos. Por defecto se permiten los ceros, las columnas para las que no especificamos NOT NULL pueden aceptar valores nulos. Por ejemplo, imaginemos que las columnas apeVende y nombreVende de la tabla tVendedor no pueden aceptar valores nulos, pero todo el resto de columnas de la tabla tVendedor s pueden. Esto se consigue con el siguiente comando CREATE TABLE:
CREATE TABLE tVendedor (codiVende CHAR(2) PRIMARY KEY, apeVende VARCHAR(15) NOT NULL, nombreVende VARCHAR(15) NOT NULL, direcVende VARCHAR(15), ciudadVende VARCHAR(15), comiToVende DECIMAL(7,2), porCoVende DECIMAL(3,2));
Si cresemos la tabla tVendedor con este comando CREATE TABLE, el DBMS rechazara cualquier intento de almacenar un valor nulo tanto en la columna apeVende como en la columna nombreVende. Sin embargo, el sistema aceptara un intento de almacenar un valor nulo en la columna direcVende, porque la columna direcVende puede aceptar valores nulos. Como la columna de la clave principal no puede aceptar valores nulos, no es necesario que especifiquemos la columna codiVende como NOT NULL.
Comando INSERT
El comando INSERT aade filas a una tabla. Escribiremos INSERT INTO seguido del nombre de la tabla en la que estamos aadiendo datos. Despus, escribimos la palabra VALUES seguida de los valores especficos que se insertarn entre parntesis. Al aadir filas a las columnas de caracteres, asegrese, de que los valores vayan entre comillas simples (por ejemplo, kaiser). Tambin hay que poner atencin a las maysculas y minsculas, pues los datos de caracteres se almacenan tal y como los introducimos.
40
Nota: Los datos deben ir entre comillas simples si el tipo de datos de la columna es carcter (CHAR), aunque los datos contengan nmeros. Si necesitamos introducir un apstrofe (comilla simple) en una columna, escribiremos dos comillas simples. Por ejemplo, para escribir el nombre OToole en la columna apeVende, tendramos que escribir OToole como valor en el comando INSERT.
Ejemplo 2 Aadir el vendedor 20 a la tabla tVendedor En la figura 3.11 vemos el comando para este ejemplo. Observe que las series de caracteres (20,kaiser,Valerie, etc.) van entre comillas simples. Cuando ejecutamos el comando, el registro se aade a la tabla tVendedor.
INSERT INTO tVendedor VALUES ('20','Kaiser','Valerie','624 Randall','Grove',20542.50,0.05);
Figura 3.11. Comando INSERT para el primer registro de la tabla tVendedor. Nota: Asegrese de escribir los valores con maysculas o minsculas tal y como aparecen en las figuras, para evitar ms tarde problemas al recuperar los datos de la base de datos.
Ejemplo 3 Aada los vendedores 35 y 65 a la tabla tVendedor. Podramos introducir y ejecutar nuevos comandos INSERT para aadir las filas nuevas a la tabla. Sin embargo, una manera ms sencilla y rpida de aadir esas nuevas filas a la tabla es utilizando el ratn y el teclado para modificar el comando INSERT anterior y ejecutarlo para aadir el registro para el segundo vendedor, como vemos en la figura 3.12.
Figura 3.12. Comando INSERT para aadir la segunda fila a la tabla tVendedor.
Para aadir la tercera fila a la tabla, se puede modificar y ejecutar el comando INSERT de nuevo para el tercer vendedor, como vemos en la figura 3.13.
Figura 3.13. Comando INSERT para aadir la tercera fila a la tabla tVendedor.
41
Figura 3.14. Insertar una fila en la tabla tVendedor que contiene valores nulos.
42
Figura 3.20. Comando UPDATE para cambiar un valor. El comando SELECT de la figura 3.21 muestra los resultados del comando UPDATE de la figura 3.21, donde el apellido correspondiente al cdigo de vendedor 85 es Perry.
SELECT * FROM tVendedor;
Figura 3.21. Apellido cambiado para el cdigo de vendedor 85. Si tenemos que eliminar una fila en una tabla, podemos utilizar el comando DELETE. El comando DELETE de la figura 3.22 elimina todas las filas en que el cdigo de vendedor sea 85. El comando SELECT de la figura 3.23 muestra los datos actualizados.
DELETE FROM tVendedor WHERE codiVende = '85';
43
Preguntas y respuestas Pregunta: Cmo podemos corregir errores en nuestros datos? Respuesta: El mtodo para corregir un error depende del tipo de error que hay que corregir. Si aadimos una fila que no debera estar en la tabla, utilizamos un comando DELETE para eliminarla. Si olvidamos aadir una fila, podemos utilizar el comando INSERT para aadirla. Si aadimos una fila que contiene datos incorrectos, podemos utilizar un comando UPDATE para hacer las correcciones necesarias. Tambin se puede utilizar un comando DELETE para eliminar la fila que contiene el error y despus utilizar un comando INSERT para insertar la fila correcta.
Asignatura: Sistemas de Base de Datos comandos. Se abrir la pgina Resultados de gestin de archivos de comandos y mostrar el nombre del archivo de comandos y un icono en la columna ver resultados. Para ver los resultados del comando guardado en el archivo de comandos, haga clic en el icono de la columna Ver resultados. Cuando haya terminado de utilizar un archivo de comandos o ya no necesite almacenarlo, puede borrarlo. Para borrar un archivo de comandos siga estos pasos: 1) Siga las instrucciones anteriores para ver el archivo de comandos. 2) Haga clic en el botn Suprimir de la pgina Editor de archivo de comandos. 3) Haga clic en el botn Aceptar para confirmar la supresin. Para descargar un archivo de comandos del repositorio de archivos de comandos para guardarlo como un archivo, se debe cumplir con los siguientes pasos: 1) Siga las instrucciones anteriores para ver el archivo de comandos. 2) Haga clic en el botn Descargar. Se abrir el cuadro de dilogo Descarga de archivos. 3) Haga clic en el botn Guardar del cuadro de dilogo, y despus guarde el archivo en la ubicacin deseada. 4) Haga clic en el botn Cerrar para cerrar el cuadro de dilogo Descarga completa. Para cargar un archivo de comandos al repositorio de archivos de comandos, realice los siguientes pasos: 1) Abra la pgina de inicio de Oracle Database Express Edition y conctese. 2) Haga clic en la flecha del icono SQL y seleccione Archivos de comandos SQL>Cargar. Se abrir la pgina Cargar archivo de comandos. 3) Haga clic en el botn Examinar. Se abrir el cuadro de dilogo Elegir archivo. Navegue y seleccione el archivo de comandos para cargar. Haga clic en el botn Abrir. (Si quiere cargar el archivo de comandos con un nombre diferente, escriba el nuevo nombre en el cuadro de texto nombre.) 4) Haga clic en el botn Cargar de la pgina Cargar archivo de comandos. Aparecer un icono para el archivo de comandos en la pgina Archivos de comandos SQL.
45
Para ver, editar o ejecutar un archivo de comandos existente, siga los siguientes pasos: 1) Abra el SQL Server Management Studio y haga clic en el botn Conectar del cuadro de dilogo Conectar con el servidor. 2) Abra la base de datos adecuada y despus haga clic en el botn Nueva consulta. 3) Haga clic en el botn Abrir archivo de la barra de herramientas. 4) Navegue hasta la carpeta que contiene el archivo de comandos, seleccione el archivo de comandos y haga clic en el botn Abrir del cuadro de dilogo Abrir archivo. (Si se abre el cuadro de dilogo Conectarse al motor de base de datos, haga clic en el botn Conectar.) El archivo de comandos aparece en la ventana de edicin de consultas. El contenido del archivo de comandos se puede ver, as se facilita su edicin. Si edita un archivo de comandos, haga clic en el botn Guardar para guardar los cambios. 5) Para ejecutar un archivo de comandos, haga clic en el botn Ejecutar.
Figura 3.24. Comando CREATE TABLE para la tabla tCliente. Una vez creada la tabla tCliente, podemos crear otro archivo de comandos que contenga los comandos INSERT para aadir las filas de clientes a la tabla. Cuando un archivo de comandos contiene ms de un comando, cada uno debe terminar con un punto y coma. En la figura 3.25 vemos los comandos INSERT para aadir filas a la tabla tCliente. Ya hemos visto que para introducir un apstrofe (comilla simple) en el valor de un campo, hay que escribir dos comillas simples, como vemos en el nombre del primer comando INSERT (Als Appliance and Sport) de la figura 3.25.
46
Asignatura: Sistemas de Base de Datos En la figura 3.26 a 3.31 vemos los archivos de comandos para los comandos CREATE TABLE e INSERT para crear e insertar datos en las tablas tPedido, tArtculo y tDetalleArticulo de la base de datos Premiere Products. En la figura 3.26 tenemos el comando CREATE TABLE para la tabla tPedido. En la figura 3.27 vemos los comandos INSERT para cargar datos en la tabla tPedido. Observe como se introducen las fechas. La figura 3.28 contiene el comando CREATE TABLE para la tabla tArticulo. La figura 3.29 contiene los comandos INSERT para cargar datos a la tabla tArticulo.
INSERT INTO tCliente VALUES
('148','Al''s Appliance and Sport','2837 Greenway','Fillmore',6550.00,7500.00,'20');
Figura 3.26. Comando CREATE TABLE para la tabla tPedido. La figura 3.30 contiene el comando CREATE TABLE para la tabla tDetallePedido. Observe como est definida la clave principal cuando consiste en ms de una columna. La figura 3.31 contiene los comandos INSERT para cargar datos en la tabla tDetallePedido.
INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO tPedido tPedido tPedido tPedido tPedido tPedido tPedido VALUES VALUES VALUES VALUES VALUES VALUES VALUES ('21608','10/20/2010','148'); ('21610','10/20/2010','356'); ('21613','10/21/2010','408'); ('21614','10/21/2010','282'); ('21617','10/23/2010','608'); ('21619','10/23/2010','148'); ('21623','10/23/2010','608');
47
48
49