67 - CLI: crear bases de datos, tablas, insertar filas y efectuar consultas

En el concepto anterior instalamos la herramienta sqlite3.exe que nos permite administrar bases de datos SQLite desde la línea de comandos:

SQLite CLI

Una vez que se inicia la aplicación podemos crear nuestra primer base de datos mediante el comando ".open [nombre de la base de datos]":

SQLite CLI .open

Como dicho nombre de base de datos no existe, podemos ver que en la misma carpeta donde se encuentra "sqlite3.exe" se crea el archivo "base1.db".

La siguiente vez que ingresemos a "sqlite3.exe" y ejecutemos el comando ".open base1.db" se abrirá la base de datos creada anteriormente.

El nombre del archivo de la base de datos puede ser cualquiera que permita el sistema operativo donde se ejecuta.

Crearemos la tabla articulos desde la línea de comandos:

SQLite CLI create table

Normalmente hay muchos comandos SQL que requieren la escritura de varias líneas como el 'create table', en estos casos cada vez que presionamos la tecla 'Enter' se continúa con el mismo comando SQL hasta ingresar un punto y coma. El programa "sqlite3.exe" interpreta el punto y coma como la finalización del comando.

Insertamos dos filas en la tabla articulos:

SQLite CLI insert

Ejecutamos ahora el comando SQL select para recuperar todas las filas:

SQLite CLI insert

Cerremos ahora la ventana del "sqlite3.exe" y lo volvamos a ejecutar, tratemos de imprimir nuevamente la tabla "articulos":

SQLite CLI sin abrir base de datos

Se muestra un error porque no hemos abierto la base de datos "base1.db". Abramos la base de datos "base1.db" y procedemos nuevamente a ejecutar el comando 'select':

SQLite CLI .open

Problema propuesto

Ingresar al CLI de SQLite y abrir la base de datos "base1.db".

  1. Crear las tablas con las siguientes estructuras:

    create table generos(
    	codigo integer primary key,
    	descripcion text
    );
    
    create table peliculas (
    	codigo integer primary key,
    	titulo text,
    	actor text,
    	duracion integer,
    	genero integer
    );
    
  2. Insertar las siguientes filas en las tablas:

    insert into generos(descripcion) values ('Aventura');
    insert into generos(descripcion) values ('Romance');
    insert into generos(descripcion) values ('Acción');
    
     insert into peliculas (titulo,actor,duracion,genero)
      values('Mision imposible','Tom Cruise',120, 3);
     insert into peliculas (titulo,actor,duracion,genero)
      values('Harry Potter y la piedra filosofal','Daniel R.',180, 1);
     insert into peliculas (titulo,actor,duracion,genero)
      values('Harry Potter y la camara secreta','Daniel R.',190, 1);
     insert into peliculas (titulo,actor,duracion,genero)
      values('Mision imposible 2','Tom Cruise',120, 3);
     insert into peliculas (titulo,actor,duracion,genero)
      values('Mujer bonita','Richard Gere',120, 2);
     insert into peliculas (titulo,actor,duracion,genero)
      values('Elsa y Fred','China Zorrilla',110, 2); 
    
  3. Imprimir todos los datos de las películas inclusive su género.

Solución
drop table if exists generos;
drop table if exists peliculas;

create table generos(
	codigo integer primary key,
	descripcion text
);

create table peliculas (
	codigo integer primary key,
	titulo text,
	actor text,
	duracion integer,
	genero integer
);

insert into generos(descripcion) values ('Aventura');
insert into generos(descripcion) values ('Romance');
insert into generos(descripcion) values ('Acción');

 insert into peliculas (titulo,actor,duracion,genero)
  values('Mision imposible','Tom Cruise',120, 3);
 insert into peliculas (titulo,actor,duracion,genero)
  values('Harry Potter y la piedra filosofal','Daniel R.',180, 1);
 insert into peliculas (titulo,actor,duracion,genero)
  values('Harry Potter y la camara secreta','Daniel R.',190, 1);
 insert into peliculas (titulo,actor,duracion,genero)
  values('Mision imposible 2','Tom Cruise',120, 3);
 insert into peliculas (titulo,actor,duracion,genero)
  values('Mujer bonita','Richard Gere',120, 2);
 insert into peliculas (titulo,actor,duracion,genero)
  values('Elsa y Fred','China Zorrilla',110, 2);  


 select titulo, actor, duracion, descripcion 
   from peliculas as p
   inner join generos as g on g.codigo=p.genero;

SQLite CLI