Guide for Cavallers i Dracs 7: Primers JOINs


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.

Com abordar aquest problema

Practiques el primer INNER JOIN: cada drac té una columna que diu quin cavaller el va matar, i aquesta columna conté el sobrenom del cavaller (ho explica l'enunciat). Amb un JOIN pots posar a la mateixa fila dades del drac i dades del seu cavaller.

La sintaxi que necessites

SELECT x.columna, y.columna
FROM taula_x x
INNER JOIN taula_y y ON x.columna_que_apunta = y.clau
WHERE condicio_sobre_x_o_y;
  • Els àlies (x, y) són molt útils aquí: les dues taules tenen columnes amb el mateix nom (per exemple, totes dues tenen una data de mort), i sense àlies la consulta seria ambigua.
  • L'ON diu com s'emparellen les files: el valor de la columna que apunta ha de coincidir amb la clau de l'altra taula.
  • Després del JOIN pots filtrar amb WHERE per columnes de qualsevol de les dues taules.

Pregunta per pregunta

Pregunta 1. Un JOIN sense cap filtre. Retorna dues columnes: el nom del drac i el nom de pila del cavaller. Fixa't que Name és del drac i Firstname del cavaller.

Pregunta 2. El mateix JOIN, però ara amb un filtre sobre una columna del cavaller (el títol). Les columnes que es mostren, en canvi, són totes del drac.

Pregunta 3. Altra vegada el JOIN, ara filtrant per una columna del drac, i mostrant una columna de cada taula. Compte: el cognom del cavaller és una columna diferent del nom de pila.

Un exemple semblant

Color de cada drac i títol del cavaller que el va matar, només per a les cavalleres (gènere 'F'):

SELECT d.Color, k.Title
FROM Dragons d
INNER JOIN Knights k ON d.KilledBy = k.Nickname
WHERE k.Gender = 'F';

Una altra situació, fora d'aquesta BD: alumnes i el nom del seu grup.

SELECT al.nom, g.nom_grup
FROM alumnes al
INNER JOIN grups g ON al.grup_id = g.id;

Paranys habituals:

  • Escriure FROM Dragons, Knights sense condició d'unió: cada drac surt combinat amb tots els cavallers.
  • Unir per la columna equivocada (per exemple, igualar el nom del drac amb el nom del cavaller): l'ON ha de fer servir la relació real entre les taules.
  • Els valors de text distingeixen majúscules: 'Red' no és el mateix que 'red'.
  • El jutge no mira els noms de les columnes ni l'ordre de les files, però sí el nombre de columnes i el seu ordre: no afegeixis columnes "de regal" (com l'identificador) si no te les demanen.

Tornar al problema