Mis hijos aprenden SQL y Oracle (3)

Vamos a aprender ahora cómo mostrar los registros que cumplen cierta condición de entre todos los registros de una tabla. Se hace uso de la cláusula where. Algunos ejemplos serían:
  select * from juguetes where año=2001;
  select marca,nombre from juguetes where color='Azul';

En la primera consulta recuperamos todos los datos de aquellos juguetes comprados en el año 2001. En la segunda mostramos únicamente la marca y nombre de todos los juguetes de color azul.

Es posible incluir simultáneamente varias condiciones, sin más que separarlas con la palabra and. Por ejemplo todos los juguetes blancos del año 2002:
  select * from juguetes where color='Blanco' and año=2002;

Hemos hecho todas las comprobaciones usando el operador igual (=) para obtener los registros que cumplían que eran de idéntico valor al que queríamos, pero también se pueden usar otros operadores relacionales para indicar valor distinto a (<>), mayor (>), menor (<), mayor o igual (>=) o menor o igual (<=). Como siempre con ejemplos se entiende todo mejor:
  select * from juguetes where color='Rojo' and año>2002;
  select * from juguetes where color<>'Azul' and año<=2005;
En la primera consulta recuperamos los juguetes rojos comprados a partir del 2003 (mayor que 2002). En la segunda obtenemos los que no son de color azul adquiridos hasta el 2005 (incluído).

Mis nenes "se están quejando": ¡hay registros insertados en la tabla que no se corresponden con la realidad, queremos borrarlos para dejarlo todo bien!. ¿Cómo se hace?. Con el comando delete (o truncate table).  La diferencia entre delete y truncate es que esta última libera todo el espacio en disco, y ya no es posible "recuperar" dichos registros borrados aunque quisiéramos. Con delete sí se podría pero eso lo veremos más adelante. Este comando debéis entender que es delicado, ya que podéis eliminar información que no queríais borrar, así que si deseáis borrar todos los registros de la tabla basta con hacer:
  delete from juguetes;
  ó
  truncate table juguetes;

Pero en la mayoría de las ocasiones vais a querer borrar solo un registro o un conjunto de registros que cumplan cierta condición. Pues eso, que ya os imagináis como sería ¿verdad?. Ejemplos:
  delete from juguetes where año=2001;  
  delete from juguetes where color='Rojo';
En la primera sentencia se borran los juguetes del año 2001. En la segunda se hace lo propio con todos los juguetes rojos.

Ahí les dejo haciendo sus experimentos y pruebas con la tabla, insertando registros, borrando algunos, etc. ¡A ver si dejan su base de datos al día, y aprovechamos sus padres para convencerles de depositar los más antiguos en uno de los contenedores de Madre Coraje!. Se hace una buena acción con otros niños...¡y sus dormitorios vuelven a parecer dormitorios, jajajaja!. Hasta la próxima.

Mis hijos aprenden SQL y Oracle (2)

En este segundo día de curso vamos a aprender a insertar datos en las tablas. Dani y Chris quieren tener en el ordenador todos sus juguetes para en cualquir momento consultarlos (¿tendrán suficiente espacio en disco sus portátiles? jejejeje, les aviso que con un par de ellos será suficiente...). La sintaxis para conseguir lo que quieren es la siguiente:
  insert into juguetes(nombre,color,marca,año) values ('Barco','Marrón','Playmobil',2008);
  insert into juguetes(nombre,color,marca,año) values ('Coche','Rojo','Scalextric',2009);

Tras hacer un select * from juguetes;  se obtiene lo esperado:

Como hemos visto a la hora de insertar nuevos registros se han introducido "en orden" respecto a las columnas de la tabla. Esto no tiene porqué ser así. En ocasiones nos puede interesar insertar columnas en distinto orden o incluso no en todas las columnas, ya que algunas no tengan valor que asignar. En esos casos es posible encontrarse casos como estos:
   insert into juguetes(nombre,color,año) values ('Lince','Blanco',2002);
   insert into juguetes(color,nombre,marca) values ('Azul','Peluche','Disney');

Volvemos a consultar la tabla con select * from juguetes;  y aparece esto:

Los campos en los que no se establece ningún valor aparece null, que significa vacío. Veremos más adelante cómo permitir o no permitir tener campos con la posibilidad de valores vacíos. Por otro lado debemos saber que en ocasiones sólo necesitaremos conocer los valores de algunos campos pudiendo seleccionar dichas columnas en la consulta, aunque de momento listamos todos los registros (veremos pronto cómo mostrar sólo los que cumplan cierta condición). Por ejemplo:
  select nombre,color from juguetes;

Mis hijos aprenden SQL y Oracle (1)

Voy a dar comienzo este curso de introducción a Oracle para mis nenes. Espero que a alguien más le pueda servir. Si es así, se agradecerán todo tipo de comentarios, sugerencias, propuestas de nuevos ejercicios, etc. Y ahora...¡manos a la obra!. Lo primero: abrir el Sqldeveloper.exe y crear una nueva conexión.

1) Menú "Archivo"/"Nuevo"/"Conexión a Base de Datos". Pulsamos Aceptar.
2) Introducimos el nombre que queramos darle a la conexión. El usuario introducimos SYSTEM y la contraseña la misma que indicamos al instalar Oracle. Pulsamos el botón Conectar.

3) Probamos a ejecutar nuestra primera sentencia, en el apartado "Hoja de Trabajo". Ahí tecleamos:
                               select * from all_tables;
Y justo a continuación (con el cursor al final de la línea), pulsamos Control+Intro, o bien clickamos sobre el primer botón de la izquierda del menú justamente arriba (triángulo verde). También es posible usar F5, o su equivalente, el segundo botón de la izquierda (triángulo verde pequeño), que realmente ejecuta todo el script que tengamos en la ventana.
El resultado es el esperado. Se listan todas las tablas, con sus atributos (Nombre, Owner, Estado, etc). Vamos a proceder a crear una nueva tabla. Mis nenes piden que se llame "juguetes". Se hace así:
         create table juguetes(
           nombre varchar2(50),
           color varchar2(30),
           marca varchar2(40),
           año number(4,0)
         );
Les explico que interesa guardar información en columnas de los distintos datos de un juguete en concreto. En este ejemplo sería la descripción, el color, la marca y el año de compra. Los tres primeros campos son alfanuméricos (cadenas de caracteres), varchar2, de longitud máxima 50,30 y 40 respectivamente, mientras que el año es un campo de tipo numérico de longitud máxima 4(incluyendo decimales) y en este ejemplo sin decimales (parámetros entre paréntesis del tipo number). Ejemplos para un campo definido como number(5,2) correctos serían 123.45, 9.00, pero no 7788.32 (longitud 6).
En cualquier momento es posible consultar la estructura de una tabla creada, usando el comando describe:
       describe juguetes;
Ahora quieren borrar la tabla y crearla con otros datos. No hay problema. Les pido que ejecuten:
       drop table juguetes;
Como primer día para ellos creo que está bien. Han aprendido a crear la conexión a la base de datos, y usando dicha conexión a usar de forma básica el generador/analizador de consultas. También ya saben crear y eliminar tablas. ¡Hasta la próxima!.

Buscar en el Blog: