El lenguaje SQL es el lenguaje de operación de las bases de datos. En esta presentación veremos las bases de creación, inserción, borrado y consulta de las bases de datos estándar.
Un buen resumen para alumnos de asignaturas de Bases de datos.
Introducción al SQL
Lenguaje estándar ANSI/ISO de definición, manipulación y control
de base de datos relacionales.
Es un lenguaje declarativo, solo se tiene que decir qué es lo que se
quiere hacer (lenguaje procedimental: hay que especificar como se
tiene que hacer cada cosa sobre la base de datos).
Historia:
Años 60: IBM crea SEQUEL (Structured English Query
Language), años después llamado SQL.
Año 1986: ANSI y ISO lo adoptan como lenguaje estándar.
Tipos de sentencias
LDD (definición)
Crear bases de datos, tablas, dominios, aserciones y vistas.
LMD (manipulación)
Introducir, modificar, borrar valores de la BD.
LC (consulta)
Consultas a la BD.
Crear una tabla
CREATE TABLE nombre_tabla (
nombre_columna tipo restricciones_columna
[, nombre_columna tipo restricciones_columna..]
[, restricciones_tabla])
restricciones_columna :=
• PRIMARY KEY
• UNIQUE
• DEFAULT
restricciones_tabla :=
• INDEX (nombre_columna)
• FOREIGN KEY (nombre_columna | REFERENCES tabla_ref (clave_ref))
• PRIMARY KEY (columna [, columna…]) -> para claves compuestas
Tipos de datos
• INT / INT(n) [ZEROFILL]
• INTEGER / INTEGER(n) [ZEROFILL]
• DATE -> formato yyyy/mm/dd
• TIME -> formato hh:mm
• TIMESTAMP -> hora y fecha
• DATETIME
• YEAR
• CHAR/CHAR(n)
Ejemplo de creación de tablas
CREATE TABLE Empresa(
NombreEmpresa CHAR(30) NOT NULL,
NIF CHAR(9) PRIMARY KEY,
Calle CHAR(30),
Numero INTEGER,
TELF CHAR(9)
)
Ejemplo de creación de tablas
CREATE TABLE Empresa(
NombreEmpresa CHAR(30) NOT NULL,
NIF CHAR(9),
Calle CHAR(30),
Numero INTEGER,
TELF CHAR(9),
PRIMARY KEY (NIF)
)
Alterar tabla
ALTER TABLE nombre tabla
ADD COLUMN nombre_columna tipo restricciones
ADD INDEX (nombre_columna,…)
ADD PRIMARY KEY (nombre_columna)
ADD FOREIGN KEY (nombre_columna) REFERENCES tabla(nombre_clave)
ALTER COLUMN nombre_columna SET DEFAULT valor_por_defecti
ALTER COLUMN nombre_columna DROP DEFAULT
DROP COLUMN nombre_columna
CHANGE nombre_columna_antigua nombre_columna_nueva
Insertar filas
INSERT [INTO] nombre_tabla
[(col1, col2,…, coln)]
VALUES (v11,v12,…v1n),
(v21,v22,…, v2n),
…
v1,…,vn deben respetar el orden de definición de
la tabla o el orden especificado en la lista de columnas
(col 1, col2,…)
Insertar filas
INSERT [INTO] nombre_tabla SET
col1 = v1,
col2 = v2,
…
v1,…,vn deben respetar el orden de definición de
la tabla o el orden especificado en la lista de columnas
(col 1, col2,…)
Ejemplos
INSERT persona VALUES
(“Fernando”, “Alonso”),
(“Iker”, “Casillas”)
INSERT persona (nombre, apellidos) VALUES
(“Fernando”, “Alonso”),
(“Iker”, “Casillas”)
INSERT persona SET
nombre = “Fernando”,
apellido = “Alonso”
Borrado de filas
DELETE FROM nom_tabla[WHERE] condiciones;
Si no especificamos la cláusula WHERE,
nos va a borrar todas las filas de la tabla
Modificación de filas
UPDATE nombre_tabla
SET columna = {expresión | DEFAULT | NULL}
[, columna = {expresión | DEFAULT | NULL}…]
WHERE condiciones;
En las condiciones se pueden utilizar los operadores
lógicos AND, OR y los de comparación <, >, …
Modificación de filas
UPDATE Empresa
SET Telefono = “971123456”,
Calle = NULL
WHERE NombreEmpresa = “Carrefour”
Eventos
CREATE EVENT nombre_evento
ON SCHEDULE
- AT CURRENT_TIMESTAMP + INTERVAL n {HOUR|MINUTE…}
- EVERY n {HOUR | MINUTE | …}
DO accion
Puede ser necesario hacer SET GLOBAL event_scheduler=ON
Con SHOW VARIABLES se pueden ver las variables de sistema
Ejemplos
SELECT * FROM trabajadores
INNER JOIN receptores
ON trabajadores.codigo_trabajador = receptores.receptor
Ejemplos
SELECT * FROM trabajadores
INNER JOIN ( receptores INNER JOIN mensajes
ON mensajes.codigo_mensaje = receptores.mensaje)
ON trabajador.codigo_trabajador = receptores.receptor
WHERE trabajador.nombre = “Fernando”
ORDER BY mensajes.fecha_envio
Ejemplos
SELECT * FROM trabajadores
INNER JOIN ( receptores INNER JOIN mensajes
ON mensajes.codigo_mensaje = receptores.mensaje)
ON trabajador.codigo_trabajador = receptores.receptor
ORDER BY mensajes.fecha_envio
Ejemplos
SELECT * FROM trabajadores
INNER JOIN ( receptores INNER JOIN mensajes
ON mensajes.codigo_mensaje = receptores.mensaje)
ON trabajador.codigo_trabajador = receptores.receptor
ORDER BY mensajes.fecha_envio
LIMIT 2