Escolar Documentos
Profissional Documentos
Cultura Documentos
Este obra est bajo una Licencia Creative Commons Atribucin-NoComercial 2.5 Mxico.
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.
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
1. Instalacin de SQLite.
Al finalizar esta leccin, sers capaz de:
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
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);
CREATE
ALTER TABLE
DROP
NULL.
INTEGER.
REAL.
TEXT.
BLOB.
sqlite>ALTERTABLEcontactoADDCOLUMNemailTEXT;
Para listar las tablas y verificar que la tabla agenda ya no est, escribimos el comando .table.
sqlite>.tables;
miTablita
3. Expresiones en SQLite.
Al finalizar esta leccin, sers capaz de:
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
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';
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
sqlite>SELECT0AND0,0AND1,1AND0,1AND1;
0|0|0|1
10
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
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
11
12
Escribir instrucciones SQL para insertar, actualizar y borrar datos de una tabla.
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);
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');
13
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;
14
Nota: Si olvidamos especificar la instruccin WHERE, todos los registros de la tabla sern
modificados.
Debemos de tener cuidado en no borrar todas las filas de la tabla. La instruccin SQL
siguiente, demuestra lo anterior.
sqlite>DELETEFROMamigo;
15
5. Constraints.
Al finalizar esta leccin, sers capaz de:
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
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
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.
17
18
6. La instruccin SELECT.
Al finalizar esta leccin, sers capaz de:
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
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
20
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
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
Jeep5264261064.72
Jetta5712766267.32
Bora97527113131.32
Fiesta90500104980.00
Focus8070093612.00
Civic2900033640.00
Sentra3500040600.00
Corolla2100024360.00
Megane4140048024.00
LandRover91900106604.00
23
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
sqlite>SELECT*FROMautomovilWHEREprecio<30000;
6|Honda|Civic|29000
8|Toyota|Corolla|21000
sqlite>SELECT*FROMautomovilWHEREfabricante='Volskwage'ANDprecio>
90000;
3|Volkswagen|Bora|97527
Descripcin
Cualquier caracter.
[charlist]
[^charlist]
Mostrar a todos los nombres de autos que empiezan con la letra 'c'.
sqlite>SELECTmodeloFROMautomovilWHEREmodeloLIKE'c%';
Civic
25
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
26
sqlite>SELECTmodeloFROMautomovilWHEREfabricanteNOT
IN('Volskwagen','Ford');
Jeep
Civic
Sentra
Corolla
Megane
LandRover
Esos valores
sqlite>SELECTmodeloFROMautomovilWHEREprecioBETWEEN20000AND50000;
Civic
Sentra
Corolla
Megane
sqlite>SELECTmodeloFROMautomovilWHEREprecioNOTBETWEEN20000AND
50000;
Jeep
Jetta
27
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
29
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
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
31
32
7. Funciones SQLite.
Al finalizar esta leccin, sers capaz de:
1056892254869386643
33
34
Esta instruccin SQL devuelve el da actual del mes. Se utiliz la funcin STRFTIME().
sqlite>SELECT'Daactual'||STRFTIME('%d');
Daactual11
35
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
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
Utilizando rollback.
DROPTABLEIFEXISTStest;
CREATETABLEtest(numeroINTEGER);
BEGIN;
INSERTINTOtestVALUES(1);
INSERTINTOtestVALUES(2);
INSERTINTOtestVALUES(3);
...
INSERTINTOtestVALUES(20);
ROLLBACK;
SELECT*FROMtest;
38
9. Bibliografa consultada.
39