SQL
Structured Query Language
Juan Gabriel Gomila Salas
1
Introducción al SQL
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.
Lenguaje de Definición de
Datos
Crear una base de datos relacional
CREATE {SCHEMA | DATABASE} [nombre_bd]
SHOW CREATE DATABASE nombre_bd
Eliminar una base de datos relacional
DROP DATABASE [nombre_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)
Restricciones sobre las columnas
• DEFAULT
• AUTO_INCREMENT
• NULL
• NOT NULL
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)
)
Eliminar tablas
DROP TABLE nombre_tabla
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
Eliminar tablas
RENAME TABLE nombre_antiguo TO nombre_nuevo
Cómo se ha creado la tabla
SHOW CREATE TABLE nombre_tabla
Lenguaje de Manipulación de
Datos
Operaciones básicas de manipulación
Alta: INSERT
Baja: DELETE
Modificación: UPDATE
Consulta: SELECT
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
Borrado de filas
DELETE FROM Proyecto
WHERE fechaInicio < = “2015-12-01”
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”
Vistas
CREATE VIEW nombre_vista AS SELECT …
ALTER VIEW nombre_vista AS SELECT …
DROP VIEW nombre_vista
Vistas
CREATE VIEW Ingleses AS
SELECT * FROM persona where pais = “Inglaterra”
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
Eventos
DROP EVENT nombre_evento
ALTER EVENT nombre_evento
[especificar cambio a SCHEDULE o a DO]
Eventos
CREATE EVENT mi_evento
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO UPDATE edad SET edad = edad + 1
Eventos
CREATE EVENT mi_evento_2
ON SCHEDULE EVERY 1 MINUTE
STARTS “2015-12-03 23:32:15”
DO INSERT INTO persona SET nombre = “José Antonio”
Trigger
CREATE TRIGGER nombre_trigger
BEFORE INSERT ON persona
FOR EACH ROW
INSERT INTO trabajadores SET …
Trigger
CREATE TRIGGER ombre_trigger
{BEFORE | AFTER}
{INSERT | UPDATE | DELETE}
ON nombre_tabla FOR EACH ROW
{[BEGIN] acciones_sql [end]}
DROP TRIGGER nombre_trigger
Lenguaje de Consulta
Consultas
SELECT [ALL | DISTINCT | DISTINCTROW]
expresion_select [, expresion_select…]
[FROM tablas_referenciadas
[WHERE condiciones]
[GROUP BY {nombre_col} [ASC | DESC]
[HAVING condiciones]]
[ORDER BY {nombre_col} [ASC | DESC]]
[LIMIT {num_filas}]
Consultas
SELECT campos FROM
tabla_1 INNER JOIN tabla_2
ON tabla_1.campo1 comp tabla_2.campo2
Ejemplos
SELECT * FROM trabajadores
WHERE trabajadores.codigo_trabajador = 1
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
Ejemplos
SELECT DISTINCT receptor FROM receptores
Ejemplos
SELECT CONCAT(username, ‘’, password)
as nombre_completo
FROM trabajadores
Ejemplos
SELECT *, CONCAT(username, ‘’, password)
as nombre_completo
FROM trabajadores
Ejemplos
SELECT COUNT(*) AS total_registros
FROM trabajadores
Ejemplos
SELECT AVG(codigo_trabajador),
SUM(codigo_trabajador),
MAX(codigo_trabajador),
COUNT(username)
FROM trabajadores
Ejemplos
SELECT * FROM trabajadores LIMIT 2,6
Inner Join
SELECT * FROM TablaA
INNER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
Full Outer Join
SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
Left Outer Join
SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
Cross Join
SELECT * FROM TablaA
CROSS JOIN TablaB
Muestra la lista de todos los registros de A
combinados con cada uno de los registros de B

SQL - Structured Query Language

  • 1.
    SQL Structured Query Language JuanGabriel Gomila Salas 1
  • 2.
  • 3.
    Introducción al SQL Lenguajeestá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.
  • 4.
    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.
  • 5.
  • 6.
    Crear una basede datos relacional CREATE {SCHEMA | DATABASE} [nombre_bd] SHOW CREATE DATABASE nombre_bd
  • 7.
    Eliminar una basede datos relacional DROP DATABASE [nombre_bd]
  • 8.
    Crear una tabla CREATETABLE 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
  • 9.
    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)
  • 10.
    Restricciones sobre lascolumnas • DEFAULT • AUTO_INCREMENT • NULL • NOT NULL
  • 11.
    Ejemplo de creaciónde tablas CREATE TABLE Empresa( NombreEmpresa CHAR(30) NOT NULL, NIF CHAR(9) PRIMARY KEY, Calle CHAR(30), Numero INTEGER, TELF CHAR(9) )
  • 12.
    Ejemplo de creaciónde tablas CREATE TABLE Empresa( NombreEmpresa CHAR(30) NOT NULL, NIF CHAR(9), Calle CHAR(30), Numero INTEGER, TELF CHAR(9), PRIMARY KEY (NIF) )
  • 13.
  • 14.
    Alterar tabla ALTER TABLEnombre 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
  • 15.
    Eliminar tablas RENAME TABLEnombre_antiguo TO nombre_nuevo
  • 16.
    Cómo se hacreado la tabla SHOW CREATE TABLE nombre_tabla
  • 17.
  • 18.
    Operaciones básicas demanipulación Alta: INSERT Baja: DELETE Modificación: UPDATE Consulta: SELECT
  • 19.
    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,…)
  • 20.
    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,…)
  • 21.
    Ejemplos INSERT persona VALUES (“Fernando”,“Alonso”), (“Iker”, “Casillas”) INSERT persona (nombre, apellidos) VALUES (“Fernando”, “Alonso”), (“Iker”, “Casillas”) INSERT persona SET nombre = “Fernando”, apellido = “Alonso”
  • 22.
    Borrado de filas DELETEFROM nom_tabla[WHERE] condiciones; Si no especificamos la cláusula WHERE, nos va a borrar todas las filas de la tabla
  • 23.
    Borrado de filas DELETEFROM Proyecto WHERE fechaInicio < = “2015-12-01”
  • 24.
    Modificación de filas UPDATEnombre_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 <, >, …
  • 25.
    Modificación de filas UPDATEEmpresa SET Telefono = “971123456”, Calle = NULL WHERE NombreEmpresa = “Carrefour”
  • 26.
    Vistas CREATE VIEW nombre_vistaAS SELECT … ALTER VIEW nombre_vista AS SELECT … DROP VIEW nombre_vista
  • 27.
    Vistas CREATE VIEW InglesesAS SELECT * FROM persona where pais = “Inglaterra”
  • 28.
    Eventos CREATE EVENT nombre_evento ONSCHEDULE - 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
  • 29.
    Eventos DROP EVENT nombre_evento ALTEREVENT nombre_evento [especificar cambio a SCHEDULE o a DO]
  • 30.
    Eventos CREATE EVENT mi_evento ONSCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO UPDATE edad SET edad = edad + 1
  • 31.
    Eventos CREATE EVENT mi_evento_2 ONSCHEDULE EVERY 1 MINUTE STARTS “2015-12-03 23:32:15” DO INSERT INTO persona SET nombre = “José Antonio”
  • 32.
    Trigger CREATE TRIGGER nombre_trigger BEFOREINSERT ON persona FOR EACH ROW INSERT INTO trabajadores SET …
  • 33.
    Trigger CREATE TRIGGER ombre_trigger {BEFORE| AFTER} {INSERT | UPDATE | DELETE} ON nombre_tabla FOR EACH ROW {[BEGIN] acciones_sql [end]} DROP TRIGGER nombre_trigger
  • 34.
  • 35.
    Consultas SELECT [ALL |DISTINCT | DISTINCTROW] expresion_select [, expresion_select…] [FROM tablas_referenciadas [WHERE condiciones] [GROUP BY {nombre_col} [ASC | DESC] [HAVING condiciones]] [ORDER BY {nombre_col} [ASC | DESC]] [LIMIT {num_filas}]
  • 36.
    Consultas SELECT campos FROM tabla_1INNER JOIN tabla_2 ON tabla_1.campo1 comp tabla_2.campo2
  • 37.
    Ejemplos SELECT * FROMtrabajadores WHERE trabajadores.codigo_trabajador = 1
  • 38.
    Ejemplos SELECT * FROMtrabajadores INNER JOIN receptores ON trabajadores.codigo_trabajador = receptores.receptor
  • 39.
    Ejemplos SELECT * FROMtrabajadores 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
  • 40.
    Ejemplos SELECT * FROMtrabajadores INNER JOIN ( receptores INNER JOIN mensajes ON mensajes.codigo_mensaje = receptores.mensaje) ON trabajador.codigo_trabajador = receptores.receptor ORDER BY mensajes.fecha_envio
  • 41.
    Ejemplos SELECT * FROMtrabajadores 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
  • 42.
  • 43.
    Ejemplos SELECT CONCAT(username, ‘’,password) as nombre_completo FROM trabajadores
  • 44.
    Ejemplos SELECT *, CONCAT(username,‘’, password) as nombre_completo FROM trabajadores
  • 45.
    Ejemplos SELECT COUNT(*) AStotal_registros FROM trabajadores
  • 46.
  • 47.
    Ejemplos SELECT * FROMtrabajadores LIMIT 2,6
  • 48.
    Inner Join SELECT *FROM TablaA INNER JOIN TablaB ON TablaA.nombre = TablaB.nombre
  • 49.
    Full Outer Join SELECT* FROM TablaA FULL OUTER JOIN TablaB ON TablaA.nombre = TablaB.nombre
  • 50.
    Left Outer Join SELECT* FROM TablaA LEFT OUTER JOIN TablaB ON TablaA.nombre = TablaB.nombre
  • 51.
    Cross Join SELECT *FROM TablaA CROSS JOIN TablaB Muestra la lista de todos los registros de A combinados con cada uno de los registros de B