FANDOM


Enlaces Editar

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 INT 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 INT 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 INT 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 INT 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 INT NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(64) NOT NULL,
  idsoporte INT NOT NULL,
  idgenero INT 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 INT NOT NULL,
  idactor INT 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 INT NOT NULL,
  iddirector INT 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_';

Operadores lógicos Editar

SELECT
  0 AND 0,
  0 AND 1,
  1 AND 0,
  1 AND 1;

Precedencia de operadores Editar

SELECT
  2 + 2 * 5,
  (2 + 2) * 5;

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;

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.