FANDOM


Inserción de datos en el nuevo modeloEditar

En el modelo de datos anterior, una inserción era bastante. El nuevo modelo requiere muchos más pasos. Veámoslo con Blade Runner:
1. Inserción del soporte:

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

2. Inserción del género:

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

3. Inserción del actor:

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

4. Inserción del director:

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

5. Inserción de la película:

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

6. Asociación película-actor:

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

7. Asociación película-director:

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

OperadoresEditar

Podemos utilizar diferentes operadores con MySQL:
1. Aritméticos: por ejemplo, sumas.

SELECT 2 + 2;

Hemos de tener cuidado con los problemas de rango. Creemos una tabla en la base de datos de prueba:

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

Esta pareja de inserción/selección devuelve valores correctos:

INSERT INTO operadores VALUES(3,7);
SELECT uno + otro FROM operadores;

Sin embargo, ésta no:

INSERT INTO operadores VALUES(300,500);
SELECT uno + otro FROM operadores;

Hemos superado el rango de valores permitidos. Algo similar ocurre con esta selección:

SELECT 18446744073709551615 * 2;

Sin embargo, ésta no:

SELECT 18446744073709551615 * 2.0;

2. Comparación: los valores nulos son muy graciosos:

SELECT 7 = 7, NULL = NULL;

Necesitan su propio operador de igualdad:

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

El operador LIKE permite realizar comparaciones con cadenas parciales:

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

3. Lógicos: puede hacer pruebas con estos operadores. Por ejemplo, así:

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

4. Precedencia: es posible cambiar el orden en el que se evaluan las operaciones:

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

Manipulación de bases de datosEditar

Puede encontrar más información sobre las operaciones de manipulación de bases de datos en los siguientes enlaces:

  1. creación.
  2. borrado.

Consultas de selecciónEditar

Veamos algunas consultas interesantes que podemos utilizar con nuestra base de datos. La primera es sencilla: un listado de actores.

USE videoteca;
SELECT * FROM actor;

Escojamos ahora los campos:

SELECT id,nombre,apellidos FROM actor;

Podemos realizar operaciones sobre los campos obtenidos:

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

Incluso es posible cambiar el nombre de las columnas devueltas:

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

El resultado de las consultas puede ser ordenado:

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

Se puede indicar la posición de la columna por la que ordenar el resultado:

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

Las consultas de cuenta de elementos son muy frecuentes:

SELECT
  COUNT(*)
FROM
  actor;

La misma que antes, pero renombrando las columnas:

SELECT
  COUNT(*) actores
FROM
  actor;

Ahora, utilicemos más de una tabla para las consultas. No es a esto a lo que nos referimos:

SELECT
  *
FROM
  pelicula,actores_por_pelicula,actor;

Más bien, queremos algo así:

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;

Esta consulta devuelve una lista de películas con sus correspondientes actores. Podemos añadir los directores a ese listado:

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;

Veamos cuántas películas ha protagonizado cada actor:

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;

Esta consulta no nos muestra información sobre los actores que no tienen películas, pero esta otra sí:

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;

Enlaces interesantesEditar

Las normas seguidas durante las descripciones de la sintaxis de las diferentes sentencias SQL son las mismas que las establecidas por MySQL. Si desea consultarlas directamente de las fuentes, puede hacerlo en la sección Conventions Used in This Manual de la documentación de MySQL.
Si desea más información sobre la sintaxis completa de la consulta de selección, puede consultar la documentación relacionada con SELECT.

El contenido de la comunidad está disponible bajo CC-BY-SA a menos que se indique lo contrario.