FANDOM


Base de datos de ejemplo Editar

Creación Editar

DROP DATABASE IF EXISTS videoteca;
CREATE DATABASE videoteca;

USE videoteca;

DROP TABLE IF EXISTS director;
CREATE TABLE director (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(64) NOT NULL,
  apellidos VARCHAR(64) NOT NULL,
  imdb VARCHAR(32) NOT NULL DEFAULT '',
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS genero;
CREATE TABLE genero (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(2) NOT NULL,
  descripcion VARCHAR(32) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS actor;
CREATE TABLE actor (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(64) NOT NULL,
  apellidos VARCHAR(64) NOT NULL,
  imdb VARCHAR(32) NOT NULL DEFAULT '',
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS soporte;
CREATE TABLE soporte (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(3) NOT NULL,
  descripcion VARCHAR(32) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS pelicula;
CREATE TABLE pelicula (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(64) NOT NULL,
  idsoporte INTEGER UNSIGNED NOT NULL,
  idgenero INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  INDEX p_FK1(idsoporte),
  INDEX p_FK2(idgenero),
  FOREIGN KEY(idsoporte)
    REFERENCES soporte(id),
  FOREIGN KEY(idgenero)
    REFERENCES genero(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS actores_por_pelicula;
CREATE TABLE actores_por_pelicula (
  idpelicula INTEGER UNSIGNED NOT NULL,
  idactor INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(idpelicula, idactor),
  INDEX app_FK1(idpelicula),
  INDEX app_FK2(idactor),
  FOREIGN KEY(idpelicula)
    REFERENCES pelicula(id),
  FOREIGN KEY(idactor)
    REFERENCES actor(id)
)
ENGINE = InnoDB;

DROP TABLE IF EXISTS directores_por_pelicula;
CREATE TABLE directores_por_pelicula (
  idpelicula INTEGER UNSIGNED NOT NULL,
  iddirector INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(idpelicula, iddirector),
  INDEX dpp_FK1(idpelicula),
  INDEX dpp_FK2(iddirector),
  FOREIGN KEY(idpelicula)
    REFERENCES pelicula(id),
  FOREIGN KEY(iddirector)
    REFERENCES director(id)
)
ENGINE = InnoDB;

Inserciones Editar

USE videoteca;

DELETE FROM actores_por_pelicula;
DELETE FROM directores_por_pelicula;
DELETE FROM actor;
DELETE FROM director;
DELETE FROM pelicula;
DELETE FROM soporte;
DELETE FROM genero;

INSERT INTO soporte(nombre, descripcion)
VALUES('DVD', 'Digital Versatile Disc');

INSERT INTO soporte(nombre, descripcion)
VALUES('VHS', 'Video Home System');

INSERT INTO genero(nombre, descripcion)
VALUES('CF', 'Ciencia Ficción');

INSERT INTO genero(nombre, descripcion)
VALUES('A', 'Aventuras');

INSERT INTO genero(nombre, descripcion)
VALUES('D', 'Drama');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Harrison', 'Ford', 'nm0000148');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Russell', 'Crowe', 'nm0000128');

INSERT INTO director(nombre, apellidos, imdb)
VALUES('Ridley', 'Scott', 'nm0000631');

INSERT INTO director(nombre, apellidos, imdb)
VALUES('Mike', 'Nichols', 'nm0001566');

INSERT INTO pelicula(titulo, idsoporte, idgenero)
VALUES('Blade Runner', 1, 1);

INSERT INTO pelicula(titulo, idsoporte, idgenero)
VALUES('Gladiator', 1, 2);

INSERT INTO pelicula(titulo, idsoporte, idgenero)
VALUES('A propósito de Henry', 2, 3);

INSERT INTO actores_por_pelicula(
  idpelicula, idactor
)
VALUES(1, 1);

INSERT INTO actores_por_pelicula(
  idpelicula, idactor
)
VALUES(2, 2);

INSERT INTO actores_por_pelicula(
  idpelicula, idactor
)
VALUES(3, 1);

INSERT INTO directores_por_pelicula(
  idpelicula, iddirector
)
VALUES(1, 1);

INSERT INTO directores_por_pelicula(
  idpelicula, iddirector
)
VALUES(2, 1);

INSERT INTO directores_por_pelicula(
  idpelicula, iddirector
)
VALUES(3, 2);

Más inserciones:

USE videoteca;

INSERT INTO soporte(nombre, descripcion)
VALUES('LD', 'Laser Disc');

INSERT INTO genero(nombre, descripcion)
VALUES('C', 'Comedia');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Lee', 'Marvin', 'nm0001511');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Clint', 'Eastwood', 'nm0000142');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Jean', 'Seberg', 'nm0781029');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Bruce', 'Dern', 'nm0001136');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Bruce', 'Boxleitner', 'nm0000310');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Rutger', ' Hauer', 'nm0000442');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Sean', 'Young', 'nm0000707');

INSERT INTO actor(nombre, apellidos, imdb)
VALUES('Matthew', 'McConaughey', 'nm0000190');

INSERT INTO director(nombre, apellidos, imdb)
VALUES('Robert', 'Zemekis', 'nm0000709');

INSERT INTO director(nombre, apellidos, imdb)
VALUES('Douglas', 'Trumbull', 'nm0874320');

INSERT INTO pelicula(titulo, idsoporte, idgenero)
VALUES('Naves misteriosas', 1, 1);

Operadores Editar

Operadores aritméticos Editar

Base de datos para pruebas:

DROP DATABASE IF EXISTS pruebas;
CREATE DATABASE pruebas;

Tabla para operadores:

USE pruebas;

DROP TABLE IF EXISTS operadores;
CREATE TABLE operadores(
  uno TINYINT UNSIGNED,
  otro TINYINT UNSIGNED
);

Valores para las pruebas:

USE pruebas;

INSERT INTO operadores VALUES(3, 7);

Operación de prueba:

USE pruebas;

SELECT uno + otro FROM operadores;

Otra inserción:

USE pruebas;

INSERT INTO operadores VALUES(300, 500);

Otra operación de prueba:

USE pruebas;

SELECT uno + otro FROM operadores;

Operadores de comparación Editar

NULL no es igual a NULL:

SELECT 7 = 7, NULL = NULL;

NULL sí es igual a NULL:

SELECT 7 <=>7, NULL <=>NULL;

Buscar al protagonista de Gladiator:

USE videoteca;

SELECT
  *
FROM
  actor
WHERE
  apellidos = 'Crow';

Nuevo intento:

USE videoteca;

SELECT
  *
FROM
  actor
WHERE
  apellidos LIKE 'Crow%';

Obtención del mismo resultado:

USE videoteca;

SELECT
  *
FROM
  actor
WHERE
  apellidos LIKE 'Crow_';

Consultas de selección Editar

Lista de actores:

USE videoteca;
SELECT * FROM actor;

Sólo algunos campos de la tabla de actores:

USE videoteca;

SELECT
  id,
  nombre,
  apellidos
FROM
  actor;

Concatenando campos:

USE videoteca;

SELECT
  id,
  CONCAT(nombre,' ',apellidos)
FROM
  actor;

Cambio del nombre de una columna del resultado:

USE videoteca;

SELECT
  id,
  CONCAT(nombre,' ',apellidos) AS nombre
FROM
  actor;

Ordenada por apellidos:

USE videoteca;

SELECT
  id,
  CONCAT(nombre,' ',apellidos) AS nombre
FROM
  actor
ORDER BY
  apellidos;

Ordenar por la concatenación:

USE videoteca;

SELECT
  id,
  CONCAT(nombre,' ',apellidos) AS nombre
FROM
  actor
ORDER BY
  2;

Número de elementos en una tabla:

USE videoteca;

SELECT
  COUNT(*)
FROM
  actor;

Renombrar la columna del resultado:

USE videoteca;

SELECT
  COUNT(*) actores
FROM
  actor;

Listados de varias tablas Editar

Esta consulta no es útil para obtener información dispersa entre varias tablas:

USE videoteca;

SELECT
  *
FROM
  pelicula,
  actores_por_pelicula,
  actor;

Pero ésta sí:

USE videoteca;

SELECT
  titulo,
  CONCAT(nombre,' ',apellidos) AS interprete
FROM
  pelicula p
  JOIN actores_por_pelicula app
    ON p.id=app.idpelicula
  JOIN actor a
    ON app.idactor=a.id;

También el director:

USE videoteca;

SELECT
  p.titulo,
  CONCAT(a.nombre,' ',a.apellidos) AS interprete,
  CONCAT(d.nombre,' ',d.apellidos) AS director
FROM
  pelicula p
  JOIN actores_por_pelicula app
    ON p.id=app.idpelicula
  JOIN actor a
    ON app.idactor=a.id
  JOIN directores_por_pelicula dpp
    ON p.id=dpp.idpelicula
  JOIN director d
    ON dpp.iddirector=d.id;

Número de películas interpretadas por cada actor:

USE videoteca;

SELECT
  CONCAT(a.apellidos,', ',a.nombre) actor,
  COUNT(app.idpelicula) peliculas
FROM
  actor a
  JOIN actores_por_pelicula app
    ON a.id=app.idactor
GROUP BY
  a.id
ORDER BY
  a.apellidos,
  a.nombre;

Películas interpretadas por cada actor, incluso si no tienen:

USE videoteca;

SELECT
  CONCAT(a.apellidos,', ',a.nombre) actor,
  COUNT(app.idpelicula) peliculas
FROM
  actor a
  LEFT JOIN actores_por_pelicula app
    ON a.id=app.idactor
GROUP BY
  a.id
ORDER BY
  a.apellidos,
  a.nombre;

Identificador de la película Blade Runner:

USE videoteca;

SELECT
  id
FROM
  pelicula
WHERE
  titulo = 'Blade Runner';

Identificador de Rutger Hauer:

USE videoteca;

SELECT
  id
FROM
  actor
WHERE
  nombre = 'Rutger' AND
  apellidos = ' Hauer';

Y el de Sean Young:

USE videoteca;

SELECT
  id
FROM
  actor
WHERE
  nombre='Sean' AND
  apellidos='Young';

Actualizaciones Editar

Cambio del apellido de un actor:

USE videoteca;

UPDATE
  actor
SET
  apellidos = 'Hauer'
WHERE
  nombre = 'Rutger';

Eliminación de todos los espacios sobrantes:

USE videoteca;

UPDATE
  actor a,
  director d
SET
  a.nombre = TRIM(a.nombre),
  a.apellidos = TRIM(a.apellidos),
  d.nombre = TRIM(d.nombre),
  d.apellidos = TRIM(d.apellidos);

Inserciones Editar

Añadir actores a una película:

USE videoteca;

INSERT INTO actores_por_pelicula(
  idpelicula,idactor
)
VALUES(1, 8);

También se puede hacer así:

USE videoteca;

INSERT INTO actores_por_pelicula
VALUES(1, 9);

Comprobar el resultado de estas operaciones:

USE videoteca;

SELECT
  titulo,
  CONCAT(nombre,' ',apellidos) AS interprete
FROM
  pelicula p
  JOIN actores_por_pelicula app
    ON p.id = app.idpelicula
  JOIN actor a
    ON app.idactor = a.id
WHERE
  p.titulo = 'Blade Runner';

Intérpretes por película:

USE videoteca;

SELECT
  p.titulo,
  COUNT(app.idactor) interpretes
FROM
  pelicula p
  LEFT JOIN actores_por_pelicula app
    ON p.id = app.idpelicula
GROUP BY
  p.id;

No más actores sin películas:

USE videoteca;

INSERT INTO
  actores_por_pelicula(idpelicula,idactor)
VALUES(4, 6);

Borrados Editar

Lista de soportes:

USE videoteca;

SELECT
  *
FROM
  soporte;

¿Existen películas en todos los soportes?

USE videoteca;

SELECT
  s.nombre,
  COUNT(p.id) peliculas
FROM
  soporte s
  LEFT JOIN pelicula p
    ON s.id=p.idsoporte
GROUP BY
  s.id;

Fuera el Laser Disc:

USE videoteca;

DELETE FROM
  soporte
WHERE
  id=3;
El contenido de la comunidad está disponible bajo CC-BY-SA a menos que se indique lo contrario.