SQLite es un sistema de gestión de bases de datos relacional, contenida en una relativamente pequeña (~275 kiB) biblioteca escrita en C.
SQLite es un proyecto de dominio público creado por D. Richard Hipp.
sudo apt install sqlite3
Es una interfaz gráfica para el manejo de SQLite.
Tiene una Licencia GPL (Software Libre)
sudo apt install sqlitebrowser
CREATE TABLE nombre_tabla
( definicion_columna[, definicion_columna...]
[, restricciones_tabla]);
DEFAULT (literal|función|NULL)
- Si se elige la **opción NULL**, entonces indica que la
columna debe admitir valores nulos. - Si se elige la opción literal, entonces indica que la columna tomará el valor indicado por el literal. - Si se elige la opción función, se indicará alguna de las funciones siguientes.
CONSTRAINT nombre_restricción [CHECK(condiciones)]
CREATE TABLE sucursal
(nombre_sucursal VARCHAR2(15) CONSTRAINT suc_PK PRIMARY KEY,
ciudad CHAR(20) NOT NULL CONSTRAINT cl_UK UNIQUE,
activos NUMBER(12,2) default 0);
CREATE TABLE cliente
(dni VARCHAR2(9) NOT NULL,
nombre_cliente CHAR(35) NOT NULL,
domicilio CHAR(50) NOT NULL,
CONSTRAINT cl_PK PRIMARY KEY (dni));
CREATE TABLE cuenta
(numero_cuenta CHAR (20) PRIMARY KEY,
nombre_sucursal char(15)
REFERENCES sucursal,
saldo NUMBER(12,2) default 100,
CONSTRAINT imp_minimo CHECK(saldo >=100))
CREATE TABLE impositor
(dni CHAR(9) CONSTRAINT imp_dni_FK
REFERENCES cliente,
numero_cuenta CHAR(20) NOT NULL,
CONSTRAINT imp_PK PRIMARY KEY (dni, numero_cuenta),
CONSTRAINT imp_ct_FK FOREIGN KEY (numero_cuenta) REFERENCES cuenta)
FOREIGN KEY clave_secundaria REFERENCES nombre_tabla [(clave_primaria)]
[ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
[ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
CREATE TABLE cuenta
(numero_cuenta CHAR (20) PRIMARY KEY,
nombre_sucursal char(15)
CONSTRAINT ct_FK REFERENCES sucursal on delete set null,
saldo NUMBER(12,2) default 100,
CONSTRAINT imp_minimo CHECK(saldo >=100))
CREATE TABLE impositor
(dni CHAR(9) CONSTRAINT imp_dni_FK
REFERENCES cliente on delete cascade,
numero_cuenta CHAR(20),
CONSTRAINT imp_PK PRIMARY KEY (dni, numero_cuenta),
CONSTRAINT imp_ct_FK FOREIGN KEY (numero_cuenta)
REFERENCES cuenta on delete cascade)
ALTER TABLE nombre_tabla
{accion_modificar_columna|accion_modificar_restriccion_tabla};
ALTER TABLE nombre_tabla
ADD nombre_columna TIPO [propiedades]
ALTER TABLE nombre_tabla
DROP COLUMN nombre_columna
ALTER TABLE nombre_tabla
MODIFY (nombre_columna TIPO [propiedades])
ALTER TABLE nombre_tabla
RENAME COLUMN nombre_columna_1 TO nombre_columna_2
ALTER TABLE nombre_tabla
ADD CONSTRAINT nombre_restriccion TIPO (columnas)
ALTER TABLE nombre_tabla
DROP {PRIMARY KEY|UNIQUE(columnas)|CONSTRAINT nombre_restriccion [CASCADE]}
ALTER TABLE nombre_tabla
DISABLE CONSTRAINT nombre_restriccion [CASCADE]
ALTER TABLE nombre_tabla
ENABLE CONSTRAINT nombre_restriccion
ALTER TABLE cuenta ADD comision NUMBER(4,2);
ALTER TABLE cuenta ADD fecha_apertura DATE;
ALTER TABLE cuenta DROP COLUMN nombre_sucursal;
ALTER TABLE cuenta MODIFY comision DEFAULT 1.5;
ALTER TABLE cliente MODIFY nombre_cliente NULL;
ALTER TABLE sucursal ADD CONSTRAINT cd_UK UNIQUE(ciudad);
DROP TABLE nombre_tabla {RESTRICT|CASCADE}
RESTRICT indica que la tabla no se borrará si está referenciada.
CASCADE indica que todo lo que referencie a la tabla se borrará con ésta.
DESCRIBE nombre_tabla
RENAME nombre_tabla_1 TO nombre_tabla_2
TRUNCATE TABLE nombre_tabla
CREATE [unique] INDEX nombre_indice
ON nombre_tabla (col1,...,colk);
INSERT INTO nombre_tabla [(nombres_columnas)]
{VALUES ({v1|DEFAULT|NULL}, ...,
{vn/DEFAULT/NULL})|<consulta>};
Los valores v1, v2, ..., vn se deben corresponder con las columnas de la tabla especificada y deben estar en el mismo orden.
También es posible especificar el nombre de las columnas de la tabla. En este último caso, los valores se deben disponer de forma coherente con el nuevo orden.
Si se quiere especificar que un valor por omisión se usa la palabra reservada DEFAULT, y si se trata de un valor nulo se usa la palabra reservada NULL.
INSERT INTO clientes
VALUES
(10, 'Mercadona', '122233444-C', 'Gran vida 8', 'Madrid', DEFAULT);
INSERT INTO clientes
(nif, nombre_cliente, codigo_cliente, telefono, direccion, ciudad)
VALUES
('122233444-C', 'Mercadona', 10, DEFAULT, 'Gran vida 8', 'Madrid');
DELETE FROM nombre_tabla [WHERE condiciones];
DELETE FROM proyectos;
DELETE FROM proyectos
WHERE codigo_cliente = 12;
DELETE
FROM clientes
WHERE clientes.numero_prestamos NOT IN (
SELECT numero_prestamos
FROM prestamos);
UPDATE nombre_tabla
SET nombre_columna = {expresión|DEFAULT|NULL}
[, nombre_columna = {expresión|DEFAULT|NULL} ...]
WHERE condiciones;
La cláusula SET indica qué columna modificar y los valores que puede recibir, y la cláusula WHERE especifica qué filas deben actualizarse.
La parte WHERE es opcional y, si no se especifica, se actualizarán todas las tuplas de la tabla.
UPDATE empleados SET sueldo = 500
WHERE numero_proyecto = 2;
UPDATE prestamos
SET sucursal= 'Centro'
WHERE sucursal IN (
SELECT sucursal
FROM sucursales_cerradas);
SELECT nombre_columna_1 [[AS] columna_renombrada_1]
[,nombre_columna_N [[AS] columna_renombrada_2]...]
FROM nombre_tabla [[AS] tabla_renombrada];
SELECT codigo_cliente, nombre_cliente, direccion, ciudad
FROM clientes;
SELECT * FROM clientes;
SELECT [DISTINCT|ALL] nombres_columnas
FROM nombre_tabla [WHERE condiciones];
SELECT DISTINCT sueldo FROM empleados;
SELECT * FROM empleados WHERE sueldo> 1000;
SELECT *
FROM proyectos
WHERE codigo_cliente = (
SELECT codigo_cliente
FROM clientes
WHERE nif="444555-E")
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna BETWEEN límite1 AND límite2;
SELECT codigo_empleado
FROM empleados
WHERE sueldo BETWEEN 1000 and 2000;
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna [NOT] IN (valor1, ..., valorN);
SELECT *
FROM clientes
WHERE ciudad IN ('Madrid', 'Zaragoza');
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna LIKE condición;
SELECT * FROM clientes WHERE ciudad LIKE '%d';
SELECT * FROM clientes WHERE ciudad LIKE '_ _ _ _ d';
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna IS [NOT] NULL;
SELECT *
FROM clientes
WHERE telefono IS NULL;
SELECT nombres_columnas
FROM nombre_tabla
WHERE [NOT] EXISTS subconsulta;
SELECT *
FROM empleados
WHERE EXISTS (
SELECT *
FROM proyectos
WHERE codigo_proyectoto = numero_proyecto);
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna operador_comparación {ALL|ANY|SOME} subconsulta;
SELECT * FROM proyectos
WHERE precio > ALL (
SELECT sueldo
FROM empleados
WHERE codigo_proyecto = numero_proyecto);
SELECT * FROM proyectos
WHERE precio > SOME (
SELECT sueldo
FROM empleados
WHERE codigo_proyecto = numero_proyecto);
SELECT nombres_columnas
FROM nombre_tabla
[WHERE condiciones]
ORDER BY nombre_columna_ordenar_1 [DESC]
[, nombre_columna_ordenar_2 [DESC]...];
SELECT *
FROM empleados
ORDER BY nombre_empl, sueldo DESC;
SELECT nombres_columnas
FROM nombre_tabla_1 JOIN nombre_tabla_2
{ON condiciones | USING (nombre_columna [, nombre_columna...])}
[WHERE condiciones];
La opción ON permite expresar condiciones con cualquiera de los operadores de comparación sobre las columnas especificadas.
Es posible utilizar una misma tabla dos veces usando alias diferentes para diferenciarlas.
Puede ocurrir que las tablas consideradas tengan columnas con los mismos nombres. En este caso es obligatorio diferenciarlas especificando en cada columna a que tabla pertenecen.
SELECT p.precio, c.nif
FROM clientes c JOIN proyectos p
ON c.codigo_cliente = p.codigo_cliente
WHERE c.codigo_cliente = 30;
SELECT p.precio, c.nif
FROM clientes c, proyectos p
WHERE c.codigo_cliente = p.codigo_cliente
AND c.codigo_cliente = 30;
SELECT p1.codigo_proyecto
FROM proyectos p1 JOIN proyectos p2
ON p1.precio > p2.precio
WHERE p2.codigo_proyecto = 30;
SELECT nombres_columnas
FROM nombre_tabla_1 NATURAL JOIN nombre_tabla_2
[WHERE condiciones];
SELECT *
FROM empleados NATURAL JOIN departamentos
WHERE ciudad = 'Madrid';
SELECT *
FROM empleados JOIN departamentos
USING (nombre_dep, ciudad_departamento)
WHERE ciudad = 'Madrid';
SELECT nombres_columnas
FROM nombre_tabla_1 INNER JOIN nombre_tabla_2
{ON condiciones || USING (nombre_columna [,nombre_columna...])}
[WHERE condiciones];
SELECT nombres_columnas
FROM nombre_tabla_1 [LEFT|RIGHT|FULL] [OUTER] JOIN nombre_tabla_2
{ON condiciones| [USING (nombre_columna [,nombre_columna...])}
[WHERE condiciones];
SELECT *
FROM empleados e, proyectos p, clientes c
WHERE e.numero_proyecto = p.numero_proyecto
AND p.codigo_cliente = c.codigo_cliente;
SELECT *
FROM (
empleados JOIN proyectos
ON numero_proyecto = codigo_proyecto)
JOIN clientes ON codigo_cliente = codigo_cliente;
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones]
UNION [ALL]
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones];
SELECT ciudad FROM clientes
UNION
SELECT ciudad_departamento FROM departamentos;
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones]
INTERSECT [ALL]
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones];
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna IN (
SELECT nombre_columna
FROM nombre_tabla
[WHERE condiciones]);
SELECT nombres_columnas
FROM nombre_tabla
WHERE EXISTS (
SELECT *
FROM nombre_tabla
WHERE condiciones);
SELECT ciudad FROM clientes
INTERSECT
SELECT ciudad_departamento FROM departamentos;
SELECT c.ciudad
FROM clientes c
WHERE c.ciudad IN (
SELECT d.ciudad_departamento
FROM departamentos d);
SELECT c.ciudad
FROM clientes c
WHERE EXISTS (
SELECT *
FROM departamentos d
WHERE c.ciudad = d.ciudad_departamento);
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones]
EXCEPT
SELECT nombres_columnas FROM nombre_tabla [WHERE condiciones];
SELECT nombres_columnas
FROM nombre_tabla
WHERE nombre_columna NOT IN (
SELECT nombre_columna
FROM nombre_tabla
[WHERE condiciones]);
SELECT nombres_columnas
FROM nombre_tabla
WHERE NOT EXISTS (
SELECT *
FROM nombre_tabla
[WHERE condiciones]);
SELECT ciudad FROM clientes
EXCEPT
SELECT ciudad_departamento FROM departamentos;
SELECT c.ciudad
FROM clientes c
WHERE c.ciudad NOT IN (
SELECT d.ciudad_departamento
FROM departamentos d);
SELECT c.ciudad
FROM clientes c
WHERE NOT EXISTS (
SELECT *
FROM departamentos d
WHERE c.ciudad = d.ciudad_departamento);
SELECT COUNT(*) AS numero_clientes
FROM clientes
WHERE ciudad = 'Madrid';
SELECT nombres_columnas
FROM nombre_tabla [WHERE condiciones]
GROUP BY nombres_columnas_segun_las_cuales_se_quiere_agrupar
[HAVING condiciones_por_grupos]
[ORDER BY nombre_columna_ordenacion [DESC] [, nombre_columna_ordenacion [DESC]...]];
SELECT codigo_cliente, SUM(precio) AS importe
FROM clientes
GROUP BY codigo_cliente;
SELECT codigo_cliente
FROM clientes
GROUP BY codigo_cliente
HAVING SUM(precio)>10000
CREATE VIEW nombre_vista [(lista_columnas)]
AS consulta [WITH CHECK OPTION];
DROP VIEW nombre_vista (RESTRICT|CASCADE);
La opción RESTRICT indica que la vista no se borrará si está referenciada.
La opción CASCADE indica que todo lo que referencie a la vista se borrará con ésta.
CREATE VIEW pedidos_por_cliente (codigo_cliente, num_pedidos) AS
SELECT c.codigo_cliente, COUNT(\*)
FROM pedidos p, clientes c
WHERE p.codigo_cliente = c.codigo_cliente
GROUP BY c.codigo_cliente;