Вы находитесь на странице: 1из 39

Aprenda SQL con SQLite

Aprenda SQL con SQLite.


ISC Ral Oramas Bustillos.
roramas@gmail.com

Este obra est bajo una Licencia Creative Commons Atribucin-NoComercial 2.5 Mxico.

Aprenda SQL con SQLite

Descripcin del curso.


En este curso se estudian los fundamentos del lenguaje de consultas estructurado SQL
(Structured Query Language) utilizando la herramienta SQLite a travs de ejemplos
prcticos.

Audiencia.
Este curso est dirigido a estudiantes, profesionistas, y desarrolladores de software que
desean conocer los fundamentos del lenguaje de consultas estructurado SQL.

Requisitos.
Ninguna, ya que en este curso iniciamos desde los fundamentos bsicos de SQL.

Objetivos del curso.


Despus de completar este curso, sers capaz de:

Crear bases de datos y tablas.


Manipular la informacin contenida en una base de datos.
Aplicar las reglas de integridad referencial.
Utilizar vistas ,triggers y procedimientos almacenados.

Aprenda SQL con SQLite

Tabla de contenidos:
1. Introduccin a Java.........................................................................................................5
1.1. El lenguaje Java......................................................................................................5
1.2. Etapas de desarrollo de un programa en Java.......................................................5
1.3. Software para el desarrollo de programas en Java................................................6
1.4. Estructura bsica de un programa en Java............................................................6
1.5. Instrucciones bsicas para imprimir texto...............................................................8
2. Programas simples.......................................................................................................11
2.1. Escribir un programa simple..................................................................................11
2.2. Leer datos desde el teclado..................................................................................12
2.3. Identificadores.......................................................................................................15
2.4. Variables................................................................................................................16
2.5. Operador de asignacin y expresin de asignacin.............................................18
2.6. Constantes con nombre........................................................................................19
2.7. Tipos de datos primitivos.......................................................................................21
2.8. Operadores aritmticos.........................................................................................22
2.9. Literales en Java...................................................................................................24
2.10. La evaluacin de expresiones en Java...............................................................25
2.11. Operadores abreviados de incremento/decremento...........................................26
2.12. Conversin de tipo (type casting)........................................................................28
2.13. Ejercicios resueltos..............................................................................................31
3. Bibliografa consultada...............................................................................................159

Aprenda SQL con SQLite

1. Instalacin de SQLite.
Al finalizar esta leccin, sers capaz de:

Descargar e instalar el software para SQLite.


Utilizar la herramienta de la lnea de comandos sqlite3.

1.1. La base de datos SQLite.


SQLite es un motor de base de datos relacional con transacciones atmicas, aisladas y
consistentes, que no requiere instalacin ni administracin y que implementa la mayor parte
del estndar SQL92.
SQLite es un motor que se incrusta en aplicaciones para iPhone, Android, Skype, Firefox
entre muchos otros. Tambin se utiliza para programar aplicaciones con C++, Java, C#,
Python, Perl, Ruby, Visual Basic y funciona en distintos sistemas operativos con una
arquitectura de 32 o 64 bits. Adems el cdigo fuente de SQL es de dominio pblico.
Para poder trabajar con SQLite necesitamos descargar la distribucin que est disponible en:
http://www.sqlite.org/download.html
Si estamos en el ambiente Windows el archivo a descargar es el sqlite-shell-win.32.zip en el
apartado Precompiled Binaries for Windows, luego descomprimimos este archivo en algn
directorio (por ejemplo en c:\sqlite) y finalmente desde la lnea de comandos ejecutamos el
archivo sqlite3.exe.

1.2. La herramienta de linea de comandos: sqlite3.


Aprender a trabajar con bases de datos en SQLite es muy sencillo. Lo que tenemos que
hacer es ubicar el archivo ejecutable sqlite3.exe que descargamos anteriormente y ejecutarlo
desde la lnea de comandos.
C:\>bd\sqlitepruebita.bd
SQLiteversion3.7.132012061102:05:22
Enter".help"forinstructions
EnterSQLstatementsterminatedwitha";"
sqlite>

La instruccin anterior inicia la herramienta de lnea de comandos y crea una base de datos
con el nombre pruebita si esta no existe. Si ya existe entonces la usa como la base de datos
principal. Como recomendacin, debemos de agregar una extensin de archivo fcil de
reconocer, como ".db" o ".sqlite".
4

Aprenda SQL con SQLite


Podemos escribir ".help" para consultar los comandos del programa, o empezar a escribir las
instrucciones SQL para empezar a con la herramienta. Es importante que tengas en cuenta
que los comandos empiezan con un punto, y no terminan con el punto y coma final. Si
queremos terminar la sesin escribiremos el comando .quit o .exit.
Con el comando .databases podemos ver las bases de datos que hemos creado hasta el
momento.
sqlite>.databases

A continuacin vamos a crear una tabla que nos va a servir para mostrar otros comandos de
la herramienta de lnea de comandos sqlite3. La instruccin SQL siguiente, crea una tabla de
nombre miTablita con un campo de tipo INT.
sqlite>CREATETABLEmiTablita(idINT);

Observa que las instrucciones de SQL terminan con un punto y coma. Para listar las tablas
disponibles para la base de datos que esta como principal en este momento utilizamos el
comando .tables.
sqlite>.tables
miTablita

Si queremos conocer la estructura de una tabla utilizamos el comando .schema que nos
mostrar como fue creada esa tabla.
sqlite>.schemamiTablita
CREATETABLEmiTablita(idINT);

Existen otros comandos que utilizaremos conforme lo necesitemos.

Aprenda SQL con SQLite

2. Crear, modificar y borrar tablas.


Al finalizar esta leccin, sers capaz de:

Crear, modificar y borrar tablas de una base de datos.

2.1. Lenguaje de Definicin de datos.


El lenguaje de definicin de datos (DDL, Data Definition Language) comprende las
instrucciones que podemos utilizar para crear, modificar y eliminar tablas. Las instrucciones
DDL para SQLite son:

CREATE
ALTER TABLE
DROP

2.2. Crear una tabla.


La instruccin CREATE se utiliza para crear tablas pero tambin para crear ndices, vistas y
triggers. La instruccin SQL siguiente, crea una tabla de nombre contactos con tres campos
en la base de datos pruebita.
sqlite>CREATETABLEcontactos(nombreTEXT,apellidosTEXT,edadINTEGER);

El tipo de dato para un campo puede incluir:

NULL.
INTEGER.
REAL.
TEXT.
BLOB.

Para verificar que la tabla ha sido creada escribimos el comando .tables.


sqlite>.tables
contactomiTablita

2.3. Modificar una tabla.


La instruccin ALTER TABLE en SQLite permite cambiar el nombre de una tabla o agregar
una nueva columna pero no es posible renombrar o eliminar una columna. La instruccin
SQL siguiente, agrega una columna de tipo text a la tabla contacto:
6

Aprenda SQL con SQLite

sqlite>ALTERTABLEcontactoADDCOLUMNemailTEXT;

Para verificar los cambios utilizamos el comando .schema.


sqlite>.schemacontacto
CREATETABLEcontacto(nombreTEXT,apellidosTEXT,edad,INT,email,
TEXT);

Para renombrar la tabla contacto escribimos:


sqlite>ALTERTABLEcontactoRENAMETOagenda;

Para verificar los cambios, escribimos el comando .schema.


sqlite>.schemacontacto
CREATETABLE"agenda"(nombreTEXT,apellidosTEXT,edad,INT,email,
TEXT);

2.4. Eliminar una tabla.


La instruccin DROP TABLE nos permite borrar una tabla de la basa de datos. La instruccin
SQL siguiente, borra la tabla que acabamos de renombrar como agenda de la base de datos.
sqlite>DROPTABLEagenda;

Para listar las tablas y verificar que la tabla agenda ya no est, escribimos el comando .table.
sqlite>.tables;
miTablita

Aprenda SQL con SQLite

3. Expresiones en SQLite.
Al finalizar esta leccin, sers capaz de:

Conocer los tipos de expresiones disponibles en SQLite.

3.1. Definicin de expresin.


Una expresin es un clculo que regresa un valor. Una expresin en SQLite contiene valores
literales, operadores aritmticos, booleanos, relacionales y de igualdad, de manipulacin de
bits, concatenacin, pertenencia a un conjunto o a un rango y comparacin de patrones que
se evaluan de acuerdo con las reglas de precedencia de los operadores.

3.2. Literales.
Un valor literal es una constante de algn tipo que puede ser un nmero entero, en punto
flotante, una cadena, un tipo abstracto (BLOB) o un valor nulo (NULL). La instruccin SQL
siguiente, demuestra el uso de valores literales.
sqlite>SELECT38,'ProfesorJava',270.25;
38|ProfesorJava|250.9

En una instruccin SELECT, el formato de salida por defecto es un separador |. Es posible


cambiar ese formato con el comando .separator. Por ejemplo:
sqlite>.separator:
sqlite>SELECT38,'ProfesorJava',270.25;
38:ProfesorJava:250.9

El comando .nullvalue muestra un valor NULL como NULL. Las cadenas vacas por default
se muestran con valores NULL por defecto.
sqlite>.nullvalueNULL
sqlite>SELECTNULL;
NULL

Las literales BLOB son literales de cadena que contiene nmeros hexadecimales e inician
con un caracter "x" minscula "X" mayscula.
sqlite>SELECTx'1FB34ACDE897A34A';

Aprenda SQL con SQLite

3.3. Operadores aritmticos.


Los operadores aritmticos se aplican a valores numricos. SQLite dispone de los
operadores aritmticos habituales (*, /, +, -, %) adems de los unarios +/-. La instruccin
SQL siguiente, demuestra el uso de los operadores unarios.
sqlite>SELECT(312);
9

La instruccin SQL siguiente, demuestra el uso de los operadores aritmticos y la


precedencia de los operadores.
sqlite>SELECT3*3/9+1;
2

La instruccin SQL siguiente, demuestra que la divisin de enteros produce un nmero


entero.
sqlite>SELECT10/3;
2

Si queremos conservar la parte fraccionaria entonces tenemos que dividir los nmeros en
punto flotante. La instruccin SQL siguiente, demuestra lo anterior.
sqlite>SELECT10.0/3;
3.33333333333333

La instruccin SQL siguiente, utiliza el operador de mdulo para obtener el residuo de una
divisin.
sqlite>SELECT10/3;
1

3.4. Operadores lgicos.


SQLite cuenta con los siguientes operadores lgicos: AND, OR y NOT. El valor cero se
considera falso, y cualquier valor distinto de cero se considera verdadero.
El operador lgico AND se evala como verdadero cuando ambos operandos son verdaderos
y como falso en caso contrario. La instruccin SQL siguiente, demuestra lo anterior.

Aprenda SQL con SQLite

sqlite>SELECT0AND0,0AND1,1AND0,1AND1;
0|0|0|1

El operador OR se evala como verdadero, si al menos uno de los operandos es verdadero.


La instruccin SQL siguiente, demuestra lo anterior.
sqlite>SELECT0OR0,0OR1,1OR0,1OR1;
0|1|1|1

El operador NOT convierte lo verdadero en falso y viceversa. La instruccin SQL siguiente,


demuestra lo anterior.
sqlite>SELECTNOT1,NOT0;
0|1

3.5. Los operadores relacionales.


Los operadores relacionales (<, <=, >, >=, =, !=) se utilizan para comparar valores. Estos
operadores regesan un valor booleano. La instruccin SQL siguiente, demuestra el uso de
los operadores relacionales.
sqlite>SELECT10>3,10<3,10>=3,10<=3,10=3,10!=3;
1|0|1|0|0|1

3.6. Operadores de bits.


Los operadores de bits incluyen las operaciones bsicas, AND (&), OR (|) y NOT (~), adems
de los operadores de desplazamiento a izquierda (<<)y derecha (>>).
Veamos como funcionan los operadores de bit. Considera los nmeros 6 (que en binario se
representa como 00110) y 3 (que en binario es 00011). Al aplicar el operador AND (&) el
resultado que se obtiene es un nmero 2 (00010) ya que se compara bit por bit los dos
nmeros y cuando se encuentra 1 y 1 el bit resultante es 1 y 0 en caso contrario.
sqlite>SELECT6&3;
2

10

Aprenda SQL con SQLite


Si aplicamos el operador |, la comparacin bit a bit es la siguiente: si se encuentra un 1 en
cualquiera de los nmeros el bit resultante es 1 y 0 en caso contrario. Por esta razn 6 | 3 da
como resultado 7.
sqlite>SELECT6|3;
7

El operador de negacin NOT (~) intercambia los 1 por los ceros y viceversa. La instruccin
SQL siguiente, demuestra lo anterior.
sqlite>SELECT~6,~(7);
7|6

El operador de desplazamiento a la derecha (<<) recorre una determinada cantidad de veces


los bits de un nmero. La instruccin SQL siguiente, realiza un corrimiento a la derecha y
luego a la izquierda del nmero 6.
sqlite>SELECT6>>1,6<<1;
3|12

3.7. Concatenacin.
SQLite dispone del operador (||) para concatenar (unir) cadenas. El cdigo SQL siguiente,
concatena 3 valores en uno solo.
sqlite>SELECT'Bienvenido'||'a'||'SQLite';
BienvenidoaSQLite

3.8. Pertenencia a un conjunto.


El operador IN comprueba si un valor determinado est dentro de un conjunto dado. El
cdigo SQL siguiente, demuestra lo anterior.
sqlite>SELECT'a'IN('a','e','i','o','u');
1

El operador IN regresa un valor 1 (verdadero) si el valor se encuentra dentro del conjunto, 0


en caso contrario.
sqlite>SELECT'x'IN('a','e','i','o','u');
0

11

Aprenda SQL con SQLite

3.9 Comparacin con patrones.


Para comparar patrones en SQLite utilizamos el operador LIKE y GLOB (para los que
conocen el entorno UNIX). Una de las diferencias entre LIKE y GLOB es la distincin entre
minsculas y maysculas. La instruccin SQL siguiente, demuestra el uso y la diferencia
entre LIKE y GLOB.
sqlite>SELECT'OSOOSA'LIKE'%a','OSOOSA'GLOB'%a';
1|0

Ms adelante en el curso utilizaremos los operadores LIKE y GLOB.

3.10. Pertenencia a un rango.


El operador de rango BETWEEN permite verificar si un valor est includo en un rango
definido por un valor mximo y un valor mnimo. La instruccin SQL siguiente, ilustra lo
mencionado anteriormente.
sqlite>SELECT2BETWEEN0AND4;
1

12

Aprenda SQL con SQLite

4. Insertar, actualizar y borrar datos.


Al finalizar esta leccin, sers capaz de:

Escribir instrucciones SQL para insertar, actualizar y borrar datos de una tabla.

4.1. Insertar datos.


La instruccin INSERT se utiliza para agregar datos en una tabla. Para demostrar como
funciona primero vamos a crear una nueva base de datos de nombre agenda.
C:\>bd\sqliteagenda.bd
SQLiteversion3.7.132012061102:05:22
Enter".help"forinstructions
EnterSQLstatementsterminatedwitha";"
sqlite>

A continuacin vamos a crear la tabla amigo. La instruccin sql siguiente, crea la tabla con
dos campos, nombre y telefono de tipo STRING.
sqlite>CREATETABLEamigo(nombreSTRING,telefonoSTRING);

Verificamos que la tabla se ha creado con el comando .schema.


sqlite>.schema
CREATETABLEamigo(nombreSTRING,telefonoSTRING);

Podemos insertar datos utilizando la instruccin INSERT especificando los nombres de las
columnas despus del nombre de la tabla y todos los valores despus de la palabra
VALUES.
sqlite>INSERTINTOamigo(nombre,telefono)VALUES('Ana','6671505816');

Al utilizar la instruccin INSERT en este formato podemos especificar el nmero de columnas


que deseamos agregar a la tabla. La instruccin SQL siguiente, inserta solo un campo a la
tabla amigo.
sqlite>INSERTINTOamigo(nombre)VALUES('Pedro');

Realizamos una consulta para verificar los datos de la tabla.

13

Aprenda SQL con SQLite

sqlite>.nullvalueNULL;
sqlite>SELECT*FROMamigo;
Ana|6671505816
Pedro|NULL

Recuerda que el comando .nullvalue le indica a SQLite que muestre los valores NULL como
NULL ya que de otra forma se muestra un carcter vaco.
Tambin podemos agregar datos a la tabla amigo de la siguiente manera:
sqlite>INSERTINTOamigoVALUES('Diana','6677131484');

La diferencia con la instruccin INSERT clsica es que aqu no especificamos los campos y
los valores que se especifiquen en VALUES deben de coincidir con los campos de la tabla.
En ocasiones es til crear una tabla temporal y asignarle los valores de otra tabla con el fin
de realizar pruebas. La instruccin SQL siguiente, crea una tabla temporal.
sqlite>CREATETEMPTABLEold_amigo(nombreSTRING,telefonoSTRING);

La instruccin SQL siguiente, agrega los datos de la tabla amigo a la tabla temporal
old_amigo:
sqlite>INSERTINTOold_amigoSELECT*FROMamigo;

A continuacin, utilizaremos el comando .dump para ver los datos que hemos insertado en la
tabla amigo.
sqlite>.dump
PRAGMAforeign_keys=OFF;
BEGINTRANSACTION;
CREATETABLEamigo(nombreSTRING,telefonoSTRING);
INSERTINTO"amigo"VALUES('Ana',6671505816);
INSERTINTO"amigo"VALUES('Pedro',NULL);
INSERTINTO"amigo"VALUES('Diana',6677131484);
COMMIT;

Utilizando el comando .dump en combinacin con el comando .output, es posible guardar


estos datos en un archivo de texto. La instruccin SQL siguiente, demuestra lo anterior.
sqlite>.outputrespaldo.sql

14

Aprenda SQL con SQLite


sqlite>.dump
sqlite>.outputstdout

4.2 Actualizar datos.


La instruccin UPDATE cambia los datos existentes en una tabla ya sea un slo rengln, un
grupo de renglones o toda la tabla. La instruccin SQL siguiente, modifica el contenido de un
campo de la tabla amigo.
sqlite>UPDATEamigoSETtelefono='9999999999'WHEREnombre='Diana';

Verificamos si la instruccin modifico el campo.


sqlite>SELECT*FROMamigo;

Nota: Si olvidamos especificar la instruccin WHERE, todos los registros de la tabla sern
modificados.

4.3 Borrar datos.


La instruccin DELETE se usa para eliminar las filas de una tabla. Se puede indicar una
instruccin WHERE para limitar o seleccionar qu filas se borrarn. La instruccin anterior
borrar al usuario Diana de la tabla.
sqlite>DELETEFROMamigoWHEREnombre='Diana';

Debemos de tener cuidado en no borrar todas las filas de la tabla. La instruccin SQL
siguiente, demuestra lo anterior.
sqlite>DELETEFROMamigo;

15

Aprenda SQL con SQLite

5. Constraints.
Al finalizar esta leccin, sers capaz de:

Utilizar los constraints para implementar las reglas de integridad referencial.

5.1. Introduccin.
Las constraints son las encargadas de asegurar la integridad referencial en la base de datos.
En SQLite contamos con los siguientes tipos de constraints:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

5.2. Constraint NOT NULL.


Por default, una columna de una tabla puede almacenar valores NULL. El constraint NOT
NULL permite asegurar que una columna tenga datos.
C:\>bd\sqlitepruebas.bd
SQLiteversion3.7.132012061102:05:22
Enter".help"forinstructions
EnterSQLstatementsterminatedwitha";"
sqlite>CREATETABLEpersona(nombreTEXTNOTNULL,edadINTEGERNULL);

Agregamos tres filas:


sqlite>INSERTINTOpersonaVALUES('Ral',15);
sqlite>INSERTINTOpersona(nombre)VALUES('Diana');
sqlite>INSERTINTOpersona(edad)VALUES(17);
Error:persona.nombremaynotbeNULL

Las primeras instrucciones SELECT se ejecutan bien pero la tercera falla. El error de SQL
dice, la columna nombre no puede ser nula (vaca).

16

Aprenda SQL con SQLite

5.3. Constraint UNIQUE.


El constraint UNIQUE identifica de forma nica a un registro en la tabla de la base de datos.
Los constraints UNIQUE y PRIMARY KEY garantizan que una columna o conjunto de
columnas sean nicos. El constraint PRIMARY KEY automticamente tiene un constraint
UNIQUE definido en el. Observa que podemos tener muchos contrainst UNIQUE por tabla,
pero solo un constraint PRIMARY KEY por tabla.
sqlite>CREATETABLEcurso(nombreTEXTUNIQUE);

Aqu hemos creado una tabla con el nombre curso. La columna nombre es UNIQUE. No
puede haber dos cursos con un mismo nombre.
sqlite>INSERTINTOcursoVALUES('Java');
sqlite>INSERTINTOcursoVALUES('SQLite');
sqlite>INSERTINTOcursoVALUES('SQLite');
Error:columnsnombreisnotunique

Obtenemos un error SQL 'El nombre en la columna no es nico. No podemos insertar otro
curso con el nombre SQLite.

5.4. Constraint PRIMARY KEY.


El constraint PRIMARY KEY identifica de manera nica a cada registro en la tabla de la base
de datos. Las llaves primarias deben contener valores nicos. Una llave primaria no puede
contener valores nulos. Cada tabla deber tener una llave primaria, y en cada tabla solo
puede tener una llave primaria. Por un descuido en la codificacin, en SQLite las llaves
primarias pueden incluir el valor NULL.
sqlite>CREATETABLEpersona(nombreTEXTPRIMARYKEYNOTNULL,edad
INTEGERNULL);
sqlite>INSERTINTOpersonaVALUES('Ana',17);
sqlite>INSERTINTOpersonaVALUES('Ana',17);
Error:persona.nombremaynotbeNULL

En SQLite si una columna es un entero y la clave principal, tambin es incrementado


automticamente.
sqlite>CREATETABLEcurso(idTEXTPRIMARYKEYNOTNULL,nombreTEXT
NULL);
sqlite>INSERTINTOcurso(nombre)VALUES('Java');
sqlite>INSERTINTOcurso(nombre)VALUES('SQLite');
sqlite>SELECT*FROMcurso;

17

Aprenda SQL con SQLite


1|Java
2|SQLite

5.5. Constraint FOREIGN KEY.


Una clave externa de una tabla apunta a una clave primaria en otra tabla. Se trata de una
restriccin referencial entre dos tablas. La clave fornea identifica una columna o conjunto de
columnas en un (referencia) tabla que hace referencia a una columna o conjunto de
columnas en otra tabla (referenciada).
sqlite>CREATETABLEcolor(nombreTEXTUNIQUE);
sqlite>INSERTINTOcolorVALUES('Verde');
sqlite>INSERTINTOcolorVALUES('Blanco');
sqlite>INSERTINTOcolorVALUES('Rojo');
sqlite>pragmaforeign_keys=ON;
sqlite>CREATETABLEautomovil(modeloTEXT,colorAutoTEXTREFERENCES
color(nombre);
sqlite>INSERTINTOautomovilVALUES('Audi','Rojo');
sqlite>INSERTINTOautomovilVALUES('Camaro','Negro');
Error:foreignkeyconstraintfailed

En SQLite, claves forneas no se hacen cumplir de manera predeterminada. Para hacer


cumplir la clave externa, la biblioteca debe ser compilado con banderas apropiadas, debe ser
al menos la versin 3.6.19 y la clave pragma para claves externas deben establecerse.

5.6. Constraint CHECK.


Una restriccin CHECK es una condicin que define los datos vlidos de una base de datos
relacional. La comprobacin se ejecuta cuando la adicin o actualizacin de los datos de la
columna en cuestin.
sqlite>CREATETABLEpersona(nombreTEXTunique,edadINTEGER,
CHECK(edad>=18));
sqlite>INSERTINTOpersonaVALUES('Ana',19);
sqlite>INSERTINTOpersonaVALUES('Juan',17);
Error:constraintfailed

5.7. Constraint DEFAULT.


sqlite>CREATETABLEpersona(nombreTEXTunique,edadINTEGERDEFAULT
18);
sqlite>INSERTINTOpersona(nombre)VALUES('Ana');

18

Aprenda SQL con SQLite

6. La instruccin SELECT.
Al finalizar esta leccin, sers capaz de:

Realizar consultas con la instruccin SELECT en sus distintas variantes.

6.1. Base de datos y tablas a utilizar.


Para desarrollar los temas de esta leccin vamos a crear una nueva base de datos con el
nombre agencia que va a contener dos tablas que permitirn mantener en una tabla, una lista
de modelos de automovil y en la otra, el nmero de unidades vendidas en una determinada
fecha.
C:\>bd\sqliteagencia.bd
SQLiteversion3.7.132012061102:05:22
Enter".help"forinstructions
EnterSQLstatementsterminatedwitha";"
sqlite>

Las instrucciones SQL para crear e insertar los datos se muestran a continuacin.
CREATE TABLE automovil(id INTEGER PRIMARY KEY, fabricante TEXT, modelo
TEXT,precioINTEGER);
INSERTINTOautomovilVALUES(1,'Chrysler','Jeep',52642);
INSERTINTOautomovilVALUES(2,'Volkswagen','Jetta',57127);
INSERTINTOautomovilVALUES(3,'Volkswagen','Bora',97527);
INSERTINTOautomovilVALUES(4,'Ford','Fiesta',90500);
INSERTINTOautomovilVALUES(5,'Ford','Focus',80700);
INSERTINTOautomovilVALUES(6,'Honda','Civic',29000);
INSERTINTOautomovilVALUES(7,'Nissan','Sentra',35000);
INSERTINTOautomovilVALUES(8,'Toyota','Corolla',21000);
INSERTINTOautomovilVALUES(9,'Renault','Megane',41400);
INSERTINTOautomovilVALUES(10,'LandRover','LandoRover',91900);
CREATETABLEventa(idINTEGERPRIMARYKEY,modelo,TEXT,fechaVentaDATE,
adeudoREAL);
INSERTINTOventaVALUES(1,'Fiesta','20122201',10200.50);
INSERTINTOventaVALUES(2,'Fiesta','20121202',7980.50);
INSERTINTOventaVALUES(3,'Jetta','20120903',7980.00);
INSERTINTOventaVALUES(4,'Fiesta','20121702',1000.00);
INSERTINTOventaVALUES(5,'Focus','20122202',0.0);
INSERTINTOventaVALUES(6,'Civic','20120705',5750.00);
INSERTINTOventaVALUES(7,'Bora','20122201',1450.00);
INSERTINTOventaVALUES(8,'Bora','20122201',0.0);

19

Aprenda SQL con SQLite


INSERTINTOventaVALUES(9,'Fiesta','20122206',0.0);
INSERTINTOventaVALUES(10,'Reanult','20121204',35000.00);

6.2 Consultas simples con la instruccin SELECT.


La instruccin SELECT se utiliza para extraer renglones y columnas de una tabla. La
instruccin SQL siguiente, muestra selecciona todas las filas de la tabla Automovil y muestra
el id, fabricante, nombre y precio.
sqlite>SELECTid,fabricante,modelo,precioFROMautomovil;
1|Chrysler|Jeep|52642
2|Volkswagen|Jetta|57127
3|Volkswagen|Bora|97527
4|Ford|Fiesta|90500
5|Ford|Focus|80700
6|Honda|Civic|29000
7|Nissan|Sentra|35000
8|Toyota|Corolla|21000
9|Renault|Megane|41400
10|LandRover|LandoRover|91900

En la consulta SQL anterior observa que no aparecen los nombres de las columnas. Para
mostrar el nombre de las columnas lo que tenemos que hacer es lo siguiente:
sqlite>.modecolumn
sqlite>.headerson
sqlite>SELECTid,fabricante,modelo,precioFROMautomovil;
idfabricantemodeloprecio

1ChryslerJeep52642
2VolkswagenJetta57127
3VolkswagenBora97527
4FordFiesta90500
5FordFocus80700
6HondaCivic29000
7NissanSentra35000
8ToyotaCorolla21000
9RenaultMegane41400
10LandRoverLandRover91900

Con la instruccin SELECT podemos seleccionar una o ms columnas. La instruccin SQL


siguiente, demuestra lo anterior.

20

Aprenda SQL con SQLite


sqlite>SELECTmodeloFROMautomovil;
Jeep
Jetta
Bora
Fiesta
Focus
Civic
Sentra
Corolla
Megane
LandRover

Con la instruccin SELECT tambin podemos reordenar el orden de las columnas.


instruccin SQL siguiente, demuestra lo anterior.

La

sqlite>SELECTprecio,modeloFROMautomovil;
52642|Jeep
57127|Jetta
97527|Bora
90500|Fiesta
80700|Focus
29000|Civic
35000|Sentra
21000|Corolla
41400|Megane
91900|LandRover

6.3. El comodin *.
El asterisco (*) es una forma rpida de recuperar todas las columnas de una tabla. El orden
de aparicin de las columnas depende de como est definido en la tabla. La instruccin SQL
siguiente, demuestra el uso del comodin *.
sqlite>SELECT*FROMautomovil;
1|Chrysler|Jeep|52642
2|Volkswagen|Jetta|57127
3|Volkswagen|Bora|97527
4|Ford|Fiesta|90500
5|Ford|Focus|80700
6|Honda|Civic|29000
7|Nissan|Sentra|35000
8|Toyota|Corolla|21000
9|Renault|Megane|41400
10|LandRover|LandRover|91900

21

Aprenda SQL con SQLite

6.4. Mostrar renglones no duplicados.


La instruccin DISTINCT en un SELECT elimina renglones duplicados en la salida.
sqlite>SELECTDISTINCT(fabricante)FROMautomovil;
Chrysler
Volkswagen
Ford
Honda
Nissan
Toyota
Renault
LandRover

5.5. Mostrar un conjunto especificado de renglones.


La instruccin LIMIT limita el nmero de filas devueltas en una consulta SQL. La instruccin
SQL siguiente, demuestra lo anterior.
sqlite>SELECT*FROMautomovilLIMIT4;
1|Chrysler|Jeep|52642
2|Volkswagen|Jetta|57127
3|Volkswagen|Bora|97527
4|Ford|Fiesta|90500

Con la instruccin OFFSET podemos indicar, a partir de que fila queremos que muestren las
filas. La instruccin SQL siguiente, demuestra lo anterior.
sqlite>SELECT*FROMautomovilLIMIT4OFFSET2;
3|Volkswagen|Bora|97527
4|Ford|Fiesta|90500
5|Ford|Focus|80700
6|Honda|Civic|29000

Tambin podemos indicar a partir de que fila y cuntas filas mostrar. La instruccin SQL
siguiente, nos demuestra lo anterior.
sqlite>SELECT*FROMautomovilLIMIT4,2;
5|Ford|Focus|80700
6|Honda|Civic|29000

6.5. Renombrar el nombre de una columna.


22

Aprenda SQL con SQLite


Podemos cambiar el nombre de una columna en el resultado de una consulta con la
instruccin AS. La instruccin SQL siguiente, muestra el nombre del automvil, su precio
unitario y precio de venta, este ltimo como un campo calculado (es decir, no existe en la
tabla fsicamente).
sqlite>.modecolumn
sqlite>.headerson
sqlite>SELECTmodelo,precioAS'preciounitario',precio*1.16AS
'precioventa'FROMautomovil;
modelopreciounitarioprecioventa

Jeep5264261064.72
Jetta5712766267.32
Bora97527113131.32
Fiesta90500104980.00
Focus8070093612.00
Civic2900033640.00
Sentra3500040600.00
Corolla2100024360.00
Megane4140048024.00
LandRover91900106604.00

6.6. Ordenar las filas en una consulta.


Con la instruccin ORDER BY podemos ordenar las filas en orden ascendente o
descendente en una instruccin SELECT. La instruccin SQL siguiente, ilustra lo anterior.
sqlite>SELECTmodelo,precioFROMautomovilorderbyprecio;
Corolla|21000
Civic|29000
Sentra|35000
Megane|41400
Jeep|52642
Jetta|57127
Focus|80700
Fiesta|90500
LandRover|91900
Bora|97527

El orden de los resultados es ascendente por defecto. Si queremos mostrar el orden en


forma descendente lo nico que tenemos que hacer es agregar la instruccin DESC como
sigue:

23

Aprenda SQL con SQLite


sqlite>SELECTmodelo,precioFROMautomovilorderbyprecioDESC;
Bora|97527
LandRover|91900
Fiesta|90500
Focus|80700
Jetta|57127
Jeep|52642
Megane|41400
Sentra|35000
Civic|29000
Corolla|21000

6.7 Filtrar renglones con la instruccin WHERE.


La instruccin WHERE limita cuales renglones son extrados. Podemos utilizar las siguientes
condiciones de bsqueda:

Operadores de comparacin (>,<,=,>=,<=,<>)


Rangos (BETWEEN, NOT BETWEEN)
Listas (IN, NOT IN)
Comparacin de cadenas (LIKE, NOT LIKE)
Valores desconocidos (IS NULL, IS NOT NULL)
Negacin (NOT)
Combinaciones (AND,OR)

6.8. Operadores de comparacin.


sqlite>SELECT*FROMautomovilWHEREfabricante='Volkswagen';
2|Volkswagen|Jetta|57127
3|Volkswagen|Bora|97527

sqlite>SELECT*FROMautomovilWHEREprecio>40000;
1|Chrysler|Jeep|52642
2|Volkswagen|Jetta|57127
3|Volkswagen|Bora|97527
4|Ford|Fiesta|90500
5|Ford|Focus|80700
9|Renault|Megane|41400
10|LandRover|LandRover|91900

24

Aprenda SQL con SQLite

sqlite>SELECT*FROMautomovilWHEREprecio<30000;
6|Honda|Civic|29000
8|Toyota|Corolla|21000

6.9. Combinaciones AND y OR.


Los operadores AND y OR se utilizan para conectar dos o ms condiciones. Con el operador
AND regresa un resultado slo cuando todas las condiciones son verdaderos. El operador
OR regresa verdadero cuando alguna de las condiciones son verdaderos.
sqlite>SELECT*FROMautomovilWHEREfabricante='Nissan'OR'Toyota';
7|Nissan|Sentra|35000
8|Toyota|Corolla|21000

sqlite>SELECT*FROMautomovilWHEREfabricante='Volskwage'ANDprecio>
90000;
3|Volkswagen|Bora|97527

6.10. El Operador LIKE.


Utilizada para seleccionar renglones cuyos campos son iguales a la cadena de caracteres
especificada. Utilizada con datos de tipo caracter.
Los SQL Wildcards (carcteres comodines) pueden ser utilizados para buscar datos en una
base de datos y se utilizan con el operador SQL Like.
Wildcars

Descripcin

Cualquier cadena de cero o muchos caracteres.

Cualquier caracter.

[charlist]

Cualquier caracter del conjunto.

[^charlist]

Cualquier caracter que no este dentro del rango


espeficado.

Mostrar a todos los nombres de autos que empiezan con la letra 'c'.

sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'c%';
Civic

25

Aprenda SQL con SQLite


Corolla

El signo '%' pueden ser utilizado para definir wildcards (patrones de letras perdidos) antes o
despus del patrn.
Mostrar a todos nombres de automovil que termina con la letra 'a'.
sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'%a';
Jetta
Bora
Fiesta
Sentra
Corolla

Mostrar a los clientes que viven en la ciudad y que contienen el patrn 'er'.
sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'%er%';
LandRover

Mostrar los fabricantes cuyos nombres tengan como segunda letra la 'o'.
sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'_o%';
Bora
Focus
Corolla

Mostrar los empleados cuyos nombres tengan como tercera letra 'r'.
sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'__r';
Bora
Corolla

Faltara un ejemplo de NOT LIKE.


sqlite>SELECTmodeloFROMautomovilWHEREmodeloNOTLIKE'c%';
Jeep
Jetta
Bora
Fiesta
Focus
Sentra
Megane

26

Aprenda SQL con SQLite


LandRover

6.11. El Operador SQL IN.


Permite seleccionar renglones con columnas cuyo contenido corresponde a alguno de los
valores de la lista.
sqlite>SELECTmodeloFROMautomovilWHEREfabricante
IN('Volskwagen','Ford');
Jetta
Bora
Fiesta
Focus

sqlite>SELECTmodeloFROMautomovilWHEREfabricanteNOT
IN('Volskwagen','Ford');
Jeep
Civic
Sentra
Corolla
Megane
LandRover

6.12. El operador SQL BETWEEN.


El operador BETWEEN selecciona un rango de datos entre dos valores.
pueden ser nmeros, texto o fechas.

Esos valores

Mostrar los autos que cuestan en un rango entre 20000 y 50000.

sqlite>SELECTmodeloFROMautomovilWHEREprecioBETWEEN20000AND50000;
Civic
Sentra
Corolla
Megane

sqlite>SELECTmodeloFROMautomovilWHEREprecioNOTBETWEEN20000AND
50000;
Jeep
Jetta

27

Aprenda SQL con SQLite


Bora
Fiesta
Focus
LandRover

6.13. Agrupar datos.


En SQLite podemos realizar consultas que permitan resumir datos a travs de funciones de
columna y mediante instrucciones GROUP BY y HAVING de la instruccin SELECT.
La instruccin SQL siguiente, cuenta el nmero de unidades que se han vendido.
sqlite>SELECTcount(modelo),modeloFROMventaGROUPBYmodelo;
2|Bora
1|Civic
4|Fiesta
1|Focus
1|Jetta
1|Reanult

La instruccin SQL siguiente, muestra el monto del adeudo que se tiene por cada modelo
vendido.
sqlite>SELECTmodelo,SUM(adeudo)FROMventaGROUPBYmodelo;
Bora|1450.0
Civic|5750.0
Fiesta|19181.0
Focus|0.0
Jetta|7980.0
Reanult|35000.0

La instruccin SQL siguiente, muestra el monto del adeudo mayor a $5000.00 y las muestra
ordenadas de menor a mayor.
sqlite>SELECTmodelo,SUM(adeudo)AScantidadFROMventaGROUPBYmodelo
HAVINGcantidad>5000ORDERBYcantidad;
Civic|5750.0
Jetta|7980.0
Fiesta|19181.0
Reanult|35000.0

28

Aprenda SQL con SQLite

29

Aprenda SQL con SQLite

7. Consultas a tablas mltiples.


Al finalizar esta leccin, sers capaz de:

Realizar consultas con tablas mltiples.

7.1. Joins.
...
sqlite>CREATETABLEcontacto(idINTEGER,nombreTEXT);
sqlite>INSERTINTOcontactoVALUES(1,'Pedro');
sqlite>INSERTINTOcontactoVALUES(2,'Juan');
sqlite>INSERTINTOcontactoVALUES(3,'Ana');
sqlite>INSERTINTOcontactoVALUES(4,'Diana');
sqlite>CREATETABLEtelefono(usuarioIdTEXT,numeroTEXT);
sqlite>INSERTINTOtelefonoVALUES(1,'2217182');
sqlite>INSERTINTOtelefonoVALUES(1,'4929999');
sqlite>INSERTINTOtelefonoVALUES(2,'8364252');
sqlite>INSERTINTOtelefonoVALUES(2,'2714002');
sqlite>INSERTINTOtelefonoVALUES(3,'7371111');
sqlite>INSERTINTOtelefonoVALUES(4,'9694322');
sqlite>SELECT*FROMcontacto;
1|Pedro
2|Juan
3|Ana
4|Diana
sqlite>SELECT*FROMtelefono;
1|2217182
1|4929999
2|8364252
2|2714002
3|7371111
4|9694322

Producto cartesiano.
sqlite>SELECT*FROMcontacto,telefono;
1|Pedro|1|2217182
1|Pedro|1|4929999
1|Pedro|2|8364252
1|Pedro|2|2714002
1|Pedro|3|7371111
1|Pedro|4|9694322
2|Juan|1|2217182

30

Aprenda SQL con SQLite


2|Juan|1|4929999
2|Juan|2|8364252
2|Juan|2|2714002
2|Juan|3|7371111
2|Juan|4|9694322
3|Ana|1|2217182
3|Ana|1|4929999
3|Ana|2|8364252
3|Ana|2|2714002
3|Ana|3|7371111
3|Ana|4|9694322
4|Diana|1|2217182
4|Diana|1|4929999
4|Diana|2|8364252
4|Diana|2|2714002
4|Diana|3|7371111
4|Diana|4|9694322

Utilizando un where...
sqlite>SELECT*FROMcontacto,telefonowherecontacto.id=
telefono.usuarioId;
1|Pedro|1|2217182
1|Pedro|1|4929999
2|Juan|2|8364252
2|Juan|2|2714002
3|Ana|3|7371111
4|Diana|4|9694322

Es equivalente y mucho ms eficiente:


sqlite>SELECT*FROMcontacto,telefonooncontacto.id=
telefono.usuarioId;
1|Pedro|1|2217182
1|Pedro|1|4929999
2|Juan|2|8364252
2|Juan|2|2714002
3|Ana|3|7371111
4|Diana|4|9694322

6.2. Inner Join.


sqlite>SELECTnombre,numeroFROMcontactoJOINtelefonooncontacto.id=
telefono.usuarioId;

31

Aprenda SQL con SQLite

6.3. Natural Inner Join.


sqlite>SELECTnombre,numeroFROMcontactoNATURALJOINtelefono;

6.4. Cross Inner Join.


sqlite>SELECTnombre,numeroFROMcontactoCROSSJOINtelefono;

6.5. Left Outer Join.


sqlite>SELECTnombre,numeroFROMcontactoLEFTJOINtelefonoON
contacto.id=telefono.usuarioId;
sqlite>SELECTnombre,numeroFROMcontactoLEFTJOINtelefono
USING(usuarioId);

6.6. Natural Left Outer Join.


sqlite>SELECTnombre,numeroFROMcontactoNATURALLEFTJOIN;

32

Aprenda SQL con SQLite

7. Funciones SQLite.
Al finalizar esta leccin, sers capaz de:

Realizar consultas con la instruccin SELECT en sus distintas variantes.

7.1. Funcin SQLITE_VERSION.


La funcin SQLITE_VERSION() devuelve la versin de la biblioteca de SQLite.
sqlite>SELECTSQLITE_VERSION()AS'VersinActual';
3.7.13

7.2. Funcin RANDOM.


La funcin RANDOM() devuelve un entero pseudo-aleatorio entre -9223372036854775808 y
9223372036854775807.
sqlite>SELECTRANDOM()ASRandom;
Random

1056892254869386643

7.3. Funcin MAX y MIN.


La funcin MAX() obtiene el valor ms grande de una columna seleccionada. La funcin
MIN() obtiene el valor ms pequeo de una columna seleccionada.
sqlite>SELECTmax(precio),min(precio)FROMautomovil;
350000|9000

7.4. Funcin UPPER.


La funcin upper convierte los caracteres a maysculas.
sqlite>SELECTUPPER(fabricante)FROMautomovil;

7.5. Funcin LENGTH.


La funcin LENGTH() regresa la longitud de una cadena.
sqlite>SELECTLENGTH('SQLite');

33

Aprenda SQL con SQLite


6

7.6. Funcin COUNT.


La funcin COUNT() devuelve el nmero de filas en una tabla.
sqlite>SELECTCOUNT(*)FROMautomovil;
10

7.7. Funcin AVG.


La funcin AVG() regresa el valor promedio de una columna nmerica.
sqlite>SELECTAVG(precio)FROMautomovil;
10

7.8. Funcin SUM.


La funcin SUM() regresa el total de la suma de una columna nmerica.
sqlite>SELECTSUM(precio)FROMautomovil;
10

7.9. La funcin DATE.


La funcin date() con la cadena now regresa la fecha actual del sistema.
sqlite>SELECTdate('now');
20120911

7.10. La funcin DATETIME.


La funcin DATETIME() devuelve la fecha y hora actual del sistema.
sqlite>SELECTDATETIME('now');
2012091100:45:27

7.11. La funcin STRTIME().


La funcin STRFTIME() devuelve una fecha en un formato diferente.

34

Aprenda SQL con SQLite


sqlite>SELECTSTRFTIME('%d%m%Y');
11092012

Esta instruccin SQL devuelve el da actual del mes. Se utiliz la funcin STRFTIME().
sqlite>SELECT'Daactual'||STRFTIME('%d');
Daactual11

35

Aprenda SQL con SQLite

8. Vistas, triggers, transacciones.


Al finalizar esta leccin, sers capaz de:

Trabajar con vistas, triggers y transacciones.

8.1. Vistas.
Ejemplo:
sqlite> CREATE VIEW autoeco AS SELECT fabricante, modelo FROM automovil
WHEREprecio<30000;
sqlite>SELECT*FROMautoeco;
Honda|Civic
Toyota|Corolla

8.2. Triggers.
Ejemplo:
sqlite>CREATETABLELog(modeloTEXTO,precioAntINTEGER,precioAct,fecha
TEXT);
sqlite>CREATETRIGGERpreciosUPDATEOFprecioONautomovilBEGIN
INSERT INTO log(modelo, oldPrecio, newPrecio,Fecha) VALUES(old.modelo,
old.precio,new.precio,datetime('now'));
END;
sqlite>UPDATEautomovilSETprecio=999WHEREmodelo='Civic';
sqlite>SELECT*FROMlog;
sqlite>CREATETABLEnotas(idINTEGERPRIMARYKEY,notaTEXT,fechaDATE);
sqlite>CREATETRIGGERinsertFechaAFTERINSERTONnotasBEGINUPDATEnotas
SETfecha=DATETIME('NOW')WHERErowid=new.rowid;
END;
sqlite>INSERTINTOnotas(nota)VALUES('Holaatodos');
sqlite>SELECT*FROMnotas;

sqlite>CREATETABLEcliente(idINTEGERPRIMARYKEY,nombreTEXT,compraID
INTEGER);

36

Aprenda SQL con SQLite


sqlite>CREATE TABLE venta(id INTEGER PRIMARY KEY, itemID INTEGER,
clienteIDINTEGER,cantidadINTEGER,precioINTEGER);
sqlite>INSERTINTOcliente(nombre)VALUES('Ral');
sqlite>INSERTINTOcliente(nombre)VALUES('Pedro');
sqlite>INSERTINTOcliente(nombre)VALUES('Ana');
sqlite>SELECT*FROMcliente;
sqlite>CREATE TRIGGER nuevaVenta AFTER INSERT ON venta BEGIN UPDATE
clienteSETcompraID=NEW.idWHEREcliente.id=NEW.clienteID;END;
sqlite>SELECT*FROMsqlite_master;
sqlite>INSERTINTOventa(itemID,clienteID,cantidad,precio)
VALUES(1,3,5,2500);
sqlite>INSERTINTOventa(itemID,clienteID,cantidad,precio)
VALUES(2,2,3,1500);
sqlite>INSERTINTOventa(itemID,clienteID,cantidad,precio)
VALUES(3,1,1,4500);
sqlite>SELECT*FROMventa;
sqlite>SELECT*FROMcliente;
sqlite>DROPTRIGGERnuevaVenta;

8.3. Transacciones.
Sin transacciones.
DROPTABLEIFEXISTStest;
CREATETABLEtest(numeroINTEGER);
INSERTINTOtestVALUES(1);
INSERTINTOtestVALUES(2);
INSERTINTOtestVALUES(3);
INSERTINTOtestVALUES(4);
...
INSERTINTOtestVALUES(20);
SELECT*FROMtest;

Utilizando transacciones.
DROPTABLEIFEXISTStest;
CREATETABLEtest(numeroINTEGER);
BEGIN;
INSERTINTOtestVALUES(1);
INSERTINTOtestVALUES(2);
INSERTINTOtestVALUES(3);
...
INSERTINTOtestVALUES(20);
COMMIT;
SELECT*FROMtest;

37

Aprenda SQL con SQLite

Utilizando rollback.
DROPTABLEIFEXISTStest;
CREATETABLEtest(numeroINTEGER);
BEGIN;
INSERTINTOtestVALUES(1);
INSERTINTOtestVALUES(2);
INSERTINTOtestVALUES(3);
...
INSERTINTOtestVALUES(20);
ROLLBACK;
SELECT*FROMtest;

38

Aprenda SQL con SQLite

9. Bibliografa consultada.

Tutorial SQLite: www.zetcode.com/databases/sqlitetutorial/


SQLite con clase: http://c.conclase.net/sqlite/
Tutorial SQLite de Lynda.com en www.youtube.com
Tutorial SQLite: http://www.youtube.com/user/Jaynonymous1

39