Aller au menu - Aller au contenu

Icône Les jointures entre tables

Mise à jour : 03/04/2010
Difficulté : Intermédiaire Intermédiaire Creative Commons BY-NC-SA
133 390 visites depuis 7 jours, dont 1 521 sur ce chapitre classé 2/786
MySQL permet de travailler avec plusieurs tables à la fois. Un des principaux intérêts d'une base de données est de pouvoir créer des relations entre les tables, de pouvoir les lier entre elles.

Pour le moment, nous n'avons travaillé que sur une seule table à la fois. Dans la pratique, vous aurez certainement plusieurs tables dans votre base, dont la plupart seront interconnectées. Cela vous permettra de mieux découper vos informations, d'éviter des répétitions et de rendre ainsi vos données plus faciles à gérer.

Tenez, par exemple, dans notre table jeux_video, on répète à chaque fois le nom du possesseur du jeu. Le mot "Patrick" est écrit de nombreuses fois dans la table. Imaginez que l'on souhaite stocker aussi son nom de famille, son adresse, son numéro de téléphone... On ne va quand même pas recopier ces informations pour chaque jeu qu'il possède ! Il est temps de créer une autre table et de la lier ! ;)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Modélisation d'une relation

Si je voulais stocker le nom, prénom et numéro de téléphone de chaque propriétaire de jeu vidéo dans notre table jeux_video, il n'y aurait pas d'autre solution que de dupliquer ces informations sur chaque entrée... Cependant ce serait bien trop répétitif, regardez ce que ça donnerait :

IDnomprenomnom_possesseurtelconsoleprixnbre_joueurs_maxcommentaires
1 Super Mario Bros Florent Dugommier 01 44 77 21 33 NES 4 1 Un jeu d'anthologie !
2 Sonic Patrick Lejeune 03 22 17 41 22 Megadrive 2 1 Pour moi, le meilleur jeu au monde !
3 Zelda : ocarina of time Florent Dugommier 01 44 77 21 33 Nintendo 64 15 1 Un jeu grand, beau et complet comme on en voit rarement de nos jours
4 Mario Kart 64 Florent Dugommier 01 44 77 21 33 Nintendo 64 25 4 Un excellent jeu de kart !
5 Super Smash Bros Melee Michel Doussand 04 11 78 02 00 GameCube 55 4 Un jeu de baston délirant !


Comme vous le voyez, le nom, le prénom et le numéro de téléphone de Florent apparaissent autant de fois qu'il possède jeux vidéo, et il en irait de même pour Patrick et Michel. Il faut à tout prix éviter ces répétitions.

Ce que je vous propose, c'est de créer une autre table, que l'on nommera par exemple proprietaires, qui centralisera les informations des propriétaires des jeux vidéo :

Table proprietaires
IDprenomnomtel
1 Florent Dugommier 01 44 77 21 33
2 Patrick Lejeune 03 22 17 41 22
3 Michel Doussand 04 11 78 02 00


Cette table liste tous les propriétaires de jeux connus et leur attribue à chacun un ID. Les propriétaires n'apparaissent qu'une seule fois, il n'y a pas de doublon.

Maintenant, il faut modifier la structure de la table jeux_video pour faire référence aux propriétaires. Pour cela, le mieux est de créer un champ ID_proprietaire qui indique le numéro du propriétaire dans l'autre table :

Table jeux_video
IDnomID_proprietaireconsoleprixnbre_joueurs_maxcommentaires
1 Super Mario Bros 1 NES 4 1 Un jeu d'anthologie !
2 Sonic 2 Megadrive 2 1 Pour moi, le meilleur jeu au monde !
3 Zelda : ocarina of time 1 Nintendo 64 15 1 Un jeu grand, beau et complet comme on en voit rarement de nos jours
4 Mario Kart 64 1 Nintendo 64 25 4 Un excellent jeu de kart !
5 Super Smash Bros Melee 3 GameCube 55 4 Un jeu de baston délirant !


Le nouveau champ ID_proprietaire est de type INT. Il permet de faire référence à une entrée précise de la table proprietaires.

On peut maintenant considérer que les tables sont reliées à travers ces ID de propriétaires.

Relation entre deux tables


MySQL sait donc que l'ID_proprietaire n°1 dans la table des jeux_video correspond à Florent ?


Non, il ne le sait pas. Il ne voit que des nombres et il ne fait pas la relation entre les 2 tables. Il va falloir lui expliquer cette relation dans une requête SQL : on va faire ce qu'on appelle une jointure entre les 2 tables.

Qu'est-ce qu'une jointure ?

Nous avons donc maintenant 2 tables :

  • jeux_video
  • proprietaires


Les informations sont séparées dans des tables différentes et c'est bien. Cela évite de dupliquer des informations sur le disque.

Cependant, lorsqu'on récupère la liste des jeux, si on souhaite obtenir le nom du propriétaire, il va falloir adapter la requête pour récupérer aussi les informations issues de la table proprietaires. Pour cela, on doit faire ce qu'on appelle une jointure.

Il existe plusieurs types de jointures, qui nous permettent de choisir exactement les données que l'on veut récupérer. Je vous propose d'en découvrir 2, les plus importantes :

  • Les jointures internes : elles ne sélectionnent que les données qui ont une correspondance entre les 2 tables
  • Les jointures externes : elles sélectionnent toutes les données, même si certaines n'ont pas de correspondance dans l'autre table.


Il est important de bien comprendre la différence entre une jointure interne et une jointure externe.

Pour cela, imaginons que nous ayons une 4ème personne dans la table des propriétaires, un certain Romain Vipelli, qui ne possède aucun jeu :

Table proprietaires
IDprenomnomtel
1 Florent Dugommier 01 44 77 21 33
2 Patrick Lejeune 03 22 17 41 22
3 Michel Doussand 04 11 78 02 00
4 Romain Vipelli 01 21 98 51 01


Romain Vipelli est référencé dans la table proprietaires mais il n'apparaît nulle part dans la table jeux_video car il ne possède aucun jeu.

Si vous récupérez les données des 2 tables à l'aide :

  • D'une jointure interne : Romain Vipelli n'apparaîtra pas dans les résultats de la requête. La jointure interne force les données d'une table à avoir une correspondance dans l'autre.
  • D'une jointure externe : vous aurez toutes les données de la table des propriétaires même s'il n'y a pas de correspondance dans l'autre table des jeux vidéo, donc Romain Vipelli, qui pourtant ne possède aucun jeu vidéo, apparaîtra.


La jointure externe est donc plus complète car elle est capable de récupérer plus d'informations, tandis que la jointure interne est plus stricte car elle ne récupère que les données qui ont une équivalence dans l'autre table.

Voici par exemple les données que l'on récupérerait avec une jointure interne :

Jointure interne
nom_jeuprenom
Super Mario Bros Florent
Sonic Patrick
... ...


On obtient les jeux et leurs propriétaires, mais Romain qui ne possède pas de jeu n'apparaît pas du tout. En revanche, avec une jointure externe :

Jointure externe
nom_jeuprenom
Super Mario Bros Florent
Sonic Patrick
... ...
NULL Romain


Romain apparaît maintenant. Comme il ne possède pas de jeu, il n'y a aucun nom de jeu indiqué (NULL).

Nous allons maintenant voir dans la pratique comment réaliser ces deux types de jointures.

Les jointures internes

Une jointure interne peut être effectuée de 2 façons différentes :

  • A l'aide du mot-clé WHERE : c'est l'ancienne syntaxe, toujours utilisée aujourd'hui, qu'il faut donc connaître mais que vous devriez éviter d'utiliser si vous avez le choix.
  • A l'aide du mot-clé JOIN : c'est la nouvelle syntaxe qu'il est recommandé d'utiliser. Elle est plus efficace et plus lisible.


Ces deux techniques produisent exactement le même résultat, mais il faut les connaître toutes les deux. ;)

Jointure interne avec WHERE (ancienne syntaxe)



Construction d'une jointure interne pas à pas



Pour réaliser ce type de jointure, on va sélectionner des champs des 2 tables et indiquer le nom de ces 2 tables dans la clause FROM :

Code : SQL
1
SELECT nom, prenom FROM proprietaires, jeux_video


Cependant ça ne fonctionnera pas car ce n'est pas suffisant. En effet, le champ nom apparaît dans les 2 tables : une fois pour le nom du propriétaire, et une autre fois pour le nom du jeu vidéo. C'est ce qu'on appelle une colonne ambigüe car MySQL ne sait pas s'il doit récupérer un nom de personne (comme Dugommier) ou un nom de jeu (comme Super Mario Bros). Bref, il est un peu perdu. :p

L'astuce consiste à marquer le nom de la table devant le nom du champ comme ceci :

Code : SQL
1
SELECT jeux_video.nom, proprietaires.prenom FROM proprietaires, jeux_video


Ainsi, on demande clairement de récupérer le nom du jeu et le prénom du propriétaire avec cette requête.

Le champ prenom n'est pas ambigu, car il n'apparaît que dans la table proprietaires. On pourrait donc se passer d'écrire le préfixe proprietaires devant, mais ça ne coûte rien de le faire et c'est plus clair : on voit immédiatement en lisant la requête de quelle table est issu ce champ.


Il reste encore à lier les 2 tables entre elles. En effet, les jeux et leurs propriétaires ont une correspondance via le champ ID_proprietaire (de la table jeux_video) et le champ ID (de la table proprietaires). On va indiquer cette liaison dans un WHERE comme ceci :

Code : SQL
1
2
3
SELECT jeux_video.nom, proprietaires.prenom
FROM proprietaires, jeux_video
WHERE jeux_video.ID_proprietaire = proprietaires.ID


Comme la requête devient longue, je me permets de l'écrire sur plusieurs lignes. Cette écriture est tout à fait autorisée et a l'avantage d'être plus lisible.


On indique bien que le champ ID_proprietaire de la table jeux_video correspond au champ ID de la table proprietaires. Cela établit la correspondance entre les 2 tables telle qu'on l'avait définie dans le schéma au début du chapitre.

Notre requête est enfin complète, vous pouvez l'essayer. :)

Vous devriez récupérer les données suivantes :

nomprenom
Super Mario Bros Florent
Sonic Patrick
... ...


Utilisez les alias !



Nous avons appris à utiliser les alias lorsque nous avons découvert les fonctions SQL. Cela nous permettait de créer ce que j'appelais des "champs virtuels" pour représenter le résultat des fonctions.

Il est fortement conseillé d'utiliser des alias lorsqu'on fait des jointures. On peut utiliser des alias sur les noms de champs (comme on l'avait fait) :

Code : SQL
1
2
3
SELECT jeux_video.nom AS nom_jeu, proprietaires.prenom AS prenom_proprietaire
FROM proprietaires, jeux_video
WHERE jeux_video.ID_proprietaire = proprietaires.ID


On récupèrera donc 2 champs : nom_jeu et prenom_proprietaire. Ces alias permettent de donner un nom plus clair aux champs que l'on récupère.


nom_jeuprenom_proprietaire
Super Mario Bros Florent
Sonic Patrick
... ...


Il est possible aussi de donner un alias aux noms des tables, ce qui est fortement recommandé pour donner un nom plus court et plus facile à écrire. En général, on crée des alias de tables d'une lettre ou deux correspondant à leurs initiales, comme ceci :

Code : SQL
1
2
3
SELECT j.nom AS nom_jeu, p.prenom AS prenom_proprietaire
FROM proprietaires AS p, jeux_video AS j
WHERE j.ID_proprietaire = p.ID


Comme vous le voyez, la table jeux_video a pour alias la lettre j et proprietaires la lettre p. On réutilise ces alias dans toute la requête, ce qui la rend plus courte à écrire (et plus lisible aussi au final :D ).

Notez que le mot-clé AS est en fait facultatif, les développeurs ont tendance à l'omettre. Vous pouvez donc tout simplement le retirer de la requête :

Code : SQL
1
2
3
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p, jeux_video j
WHERE j.ID_proprietaire = p.ID


Jointure interne avec JOIN (nouvelle syntaxe)



Bien qu'il soit possible de faire une jointure interne avec un WHERE comme on vient de le voir, c'est une ancienne syntaxe et on recommande aujourd'hui d'utiliser plutôt JOIN. Il faut dire que nous étions habitués à utiliser le WHERE pour filtrer les données, alors que nous l'utilisons ici pour associer des tables et récupérer plus de données.

Pour éviter de confondre le WHERE "traditionnel" qui filtre les données et le WHERE de jointure que l'on vient de découvrir, on va utiliser la syntaxe JOIN.

Pour rappel, voici la requête qu'on utilisait avec un WHERE :

Code : SQL
1
2
3
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p, jeux_video j
WHERE j.ID_proprietaire = p.ID


Avec un JOIN, on écrirait cette même requête de la façon suivante :

Code : SQL
1
2
3
4
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
INNER JOIN jeux_video j
ON j.ID_proprietaire = p.ID


Cette fois, on récupère les données depuis une table principale (ici proprietaires) et on fait une jointure interne (INNER JOIN) avec une autre table (jeux_video). La liaison entre les champs est faite dans la clause ON un peu plus loin.

Le fonctionnement reste le même, on récupère les mêmes données que tout à l'heure avec la syntaxe WHERE.

Si vous voulez filtrer (WHERE), ordonner (ORDER BY) ou limiter les résultats (LIMIT), vous devez le faire à la fin de la requête, après le "ON j.ID_proprietaire = p.ID". Par exemple :

Code : SQL
1
2
3
4
5
6
7
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
INNER JOIN jeux_video j
ON j.ID_proprietaire = p.ID
WHERE j.console = 'PC'
ORDER BY prix DESC
LIMIT 0, 10


Traduction (inspirez un grand coup avant de lire) : "Récupère le nom du jeu et le prénom du propriétaire dans les tables proprietaires et jeux_video, la liaison entre les tables se fait entre les champs ID_proprietaire et ID, prends uniquement les jeux qui tournent sur PC, trie-les par prix décroissant et ne prends que les 10 premiers."

Faut s'accrocher avec des requêtes de cette taille-là. :soleil:

Les jointures externes

Les jointures externes permettent de récupérer toutes les données, même celles qui n'ont pas de correspondance. On pourra ainsi obtenir Romain Vipelli dans la liste même s'il ne possède pas de jeu vidéo.

Cette fois, la seule syntaxe disponible est à base de JOIN. Il y a deux écritures à connaître : LEFT JOIN et RIGHT JOIN. Cela revient pratiquement au même, avec une subtile différence que nous allons voir.

LEFT JOIN : récupérer toute la table de gauche



Reprenons la jointure à base de INNER JOIN et remplaçons tout simplement INNER par LEFT :

Code : SQL
1
2
3
4
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
LEFT JOIN jeux_video j
ON j.ID_proprietaire = p.ID


proprietaires est appelée la "table de gauche" et jeux_video la "table de droite". Le LEFT JOIN demande à récupérer tout le contenu de la table de gauche (donc tous les propriétaires) même s'ils n'ont pas d'équivalence dans la table jeux_video.

nom_jeuprenom_proprietaire
Super Mario Bros Florent
Sonic Patrick
... ...
NULL Romain


Romain apparaît désormais dans les résultats de la requête grâce à la jointure externe. Comme il ne possède aucun jeu, la colonne du nom du jeu est vide.

RIGHT JOIN : récupérer toute la table de droite



Le RIGHT JOIN demande à récupérer toutes les données de la table dite "de droite", même si celle-ci n'a pas d'équivalent dans l'autre table. Prenons la requête suivante :

Code : SQL
1
2
3
4
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
RIGHT JOIN jeux_video j
ON j.ID_proprietaire = p.ID


La table de droite est jeux_video. On récupèrerait donc tous les jeux, même ceux qui n'ont pas de propriétaire associé.

Comment est-ce possible qu'un jeu n'ait pas de propriétaire associé ?


Il y a 2 cas possibles :
  • Soit le champ ID_proprietaire contient une valeur qui n'a pas d'équivalent dans la table des propriétaires, par exemple "56".
  • Soit le champ ID_proprietaire vaut NULL, c'est-à-dire que personne ne possède ce jeu. C'est le cas notamment du jeu Bomberman dans la table que vous avez téléchargée (voir tableau ci-dessous).


IDnomID_proprietaireconsoleprixnbre_joueurs_maxcommentaires
1 Super Mario Bros 1 NES 4 1 Un jeu d'anthologie !
2 Sonic 2 Megadrive 2 1 Pour moi, le meilleur jeu au monde !
3 Zelda : ocarina of time 1 Nintendo 64 15 1 Un jeu grand, beau et complet comme on en voit rarement de nos jours
4 Mario Kart 64 1 Nintendo 64 25 4 Un excellent jeu de kart !
5 Super Smash Bros Melee 3 GameCube 55 4 Un jeu de baston délirant !
... ... ... ... ... ... ...
51 Bomberman NULL NES 5 4 Un jeu simple et toujours aussi passionnant !


Dans ce cas, Bomberman n'appartient à personne. Avec la requête RIGHT JOIN que l'on vient de voir, on obtiendra toutes les lignes de la table de droite (jeux_video) même si elles n'ont aucun lien avec la table proprietaires, comme c'est le cas ici pour Bomberman.

On obtiendra donc les données suivantes :

nom_jeuprenom_proprietaire
Super Mario Bros Florent
Sonic Patrick
... ...
Bomberman NULL

Q.C.M.

Quel type de jointure est susceptible de récupérer le plus de données ?
Peut-on donner un alias à un nom de table ?
Quel type de jointure permet de faire la syntaxe à base de WHERE ?
D'après la requête suivante qui effectue une jointure externe, nous récupèrerons toutes les données d'une des tables même si celles-ci n'ont pas d'équivalence dans l'autre table. Quel est le nom de cette table dont on récupèrera toutes les données ?


Code : SQL
1
2
3
4
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM jeux_video j
RIGHT JOIN proprietaires p
ON j.ID_proprietaire = p.ID

Statistiques de réponses au QCM

Cette introduction aux jointures devrait vous avoir permis de comprendre comment on peut séparer les informations dans différentes tables pour éviter de répéter inutilement des informations. Cette plus grande séparation des données nous donne plus de flexibilité : ainsi, on peut récupérer seulement la liste des propriétaires puisqu'elle est stockée dans une table à part.

Vous devriez, pour vous entraîner, faire la même séparation par exemple pour la liste des consoles. Vous pourriez créer une table consoles qui contiendrait le nom de la console, son année de sortie, le nom de son fabricant (Nintendo, Sega, Microsoft...). Et pour aller plus loin vous pourriez aussi stocker les fabricants dans une table fabricants !

Enfin, sachez qu'il est possible d'aller plus loin dans l'association des tables avec MySQL. Si on utilise des tables de type InnoDB (contrairement au type MyISAM qu'on a utilisé par défaut jusqu'ici), MySQL peut connaître la relation entre les tables à tout instant, et pas seulement au moment de la requête. Cela permet de faire par exemple en sorte que si on supprime un propriétaire, cela supprime automatiquement tous les jeux vidéo qu'il possède dans l'autre table.
Chapitre précédent Sommaire Chapitre suivant

Partager

33 commentaires pour "Les jointures entre tables"
Note moyenne : 3.61 / 4 (2518 votes)
Pseudo Commentaire
Hors ligne marwakhodor # Posté le 10/11/2011 à 13:39:50
Avatar

Bonjour,

je travaille avec mysql en java
j'ai deux tables :

create table livraison_f(n_livraison_f int(4) ZEROFILL not null auto_increment , cle_fournisseur varchar(30), date DATE, tva double ,t_ht double, t_ttc double,primary key (n_livraison_f));

et

create table concerne_fact_f(n_facture_f varchar(30) not null , n_livraison_f varchar(30) not null primary key, cle_fournisseur varchar(30) not null);

et je veux obtenir les n_livraison_f qui se trouve dans livraison_f et pas dans concerne_fact_f
j'ai excecuté ;

SELECT n_livraison_f from livraison_f where n_livraison_f != (select n_livraison_f from concerne_fact_f );

mais elle me donne aucun numero alors qu'il ya

quesque vous me proposez

merci d'avance
Hors ligne LepetitReveur # Posté le 16/02/2012 à 21:11:31

Bonjour tout le monde,

J'ai juste une petite question dont je me pose encore..
Est-ce qu'il est possible d’insérer au lieux de sélectionné dans les bases de données?( en utilisant : "INSERT INTO" au lieux de "SELECT" )

Et si possible, de savoir comment définir l'id_proprietaire par rapport a l'ID de la table commentaires.
J'ai trouvé une petite solution, mais le problème est que quand j'insère les les mêmes données dans les requêtes, cela fait quand même une répétition...
Voici mon code :

table proprietaires (les noms ) : id ; nom ; prenom ; numero.
table jeux_video : id_proprietaire ; nom ( rien a voir avec le nom de la table proprietaires )

Index.php :

<!DOCTYPE html>
<html>


<H2>Formulaire a remplir</h2>


<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test','root','',$pdo_options);
$req = $bdd->query('SELECT id FROM proprietaires ORDER BY id DESC');
$donnees = $req->fetch()

?> <form method="post" action="formulaire.php?prop=<?php echo $donnees['id'] + 1; ?>">

<div>
<label id="nom">nom </label><input type="text" id="nom" name="nom"/><br/>
<label id="prenom">prenom </label><input type="text" id="prenom" name="prenom"/><br/>
<label id="numero">numero</label><input type="text" id="numero" name="numero"/><br/><br/>
<input type="submit" value="Enregistrer" />
</div>

</form>
<?php }
catch(exception $e)
{
die('erreur:'. $e->getmessage());
}
?>



</html>






formulaire.php :


<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test','root','',$pdo_options);
$req = $bdd->prepare('SELECT nom FROM proprietaires WHERE id=? ORDER BY id DESC');
$req->execute(array($_GET['prop']));




//On insert les informations ds la table proprietaire
$req = $bdd->prepare('INSERT INTO proprietaires(nom,prenom,numero) VALUES(?,?,?)');
$req->execute(array($_POST['nom'],$_POST['prenom'],$_POST['numero']));
echo ' Les informations on bien été enregistrer!<br/>';



// On affiche la table proprietaire





//On insert ds la table jeux_video l'id_propri qui sera egale au id ds le lien.
$insertJV = $bdd->prepare('INSERT INTO jeux_video(id_proprietaire,nom) VALUES(?,?)');
$insertJV->execute(array($_GET['prop'],$_POST['nom']));




}
catch(exception $e)
{
die('erreur:'. $e->getmessage());
}



?>




Cordialement Benjamin T
Hors ligne pchoo # Posté le 22/02/2012 à 10:35:34

Bonjour à tous !

Je sais que ce sujet a été plusieurs fois évoqué, mais je ne trouve pas la réponse à ma question. De plus, j’apprends le MySQL depuis une semaine, je ne sais donc pas encore toutes les astuces et subtilités de ce langage.
J’utilise PhpMySQL…
Voici mon cas :
J'ai trois tables
- une "injection" (inj_id, inj_site)
- une "equipement" (eqpt_id, eqpt_nom)
- une table de liaison "lien_inj_eqpt" (lie_id, lie_inj_id, lie_eqpt_id).
Comme vous pouvez vous en douter :
lien_inj_eqpt . lie_eqpt_id = equipement . eqpt_id
et lien_inj_eqpt . lie_inj_id = injection . inj_id .
Ce que je recherche c'est alimenter ma table de liaison (vide) avec les éléments des autres tables voisines (ici équipement et injection) pleines.
J’ai essayé toute les techniques données dans les tuto PHP/MySQL, mais aussi les tuto comme celui-ci, et rien y fait, la liaison est certes faite, mais les données ne sont pas copiées. Dois-je donc utiliser une fonction spéciale.

Merci d’avance pour l’aide et le temps que vous-pourrez me donner !
A très Vite
Hors ligne darkreen # Posté le 18/05/2012 à 12:56:23
Avatar

Avis : Très bon

Bonjour à tous!!!
Juste une question peut être débile mais comment savoir si la table est à gauche ou à droite?????
Hors ligne yok8k # Posté le 21/05/2012 à 19:53:38

Avis : Très bon

Il manque surtout plusieurs champs pour faire ce tuto , tu aurais simplement pu envoyer le nouveau fichier sql , car ça fait perdre du temps pour comprendre qui manque des choses , je suis arrivé jusqu'à "Jointure interne avec WHERE (ancienne syntaxe)"

Pour me rendre compte que c'était impossible de le comprendre sans avoir réécrit les champs et certain en avoir rajouté , par exemple la table proprietaires ont doit la créer au final ca donne ca:

table1:

id prenom nom tel



table2:

ID nom ID_proprietaire proprietaires console prix nbre_joueurs_max commentaires


La table 2 on l'avais déjà en partie avec les autres chapitres du tuto , mais il manque surtout la partie ID_proprietaire ,
y a aussi une erreur au champ proprietaire parce que dans l'autre chapitre elle ne porté pas se nom
Bref à vous de créer les 2 tables pour comprendre le tuto


Je viens de finir ce tuto je me rend compte qu'il aurait pu faire autrement dans le but que le débutant y comprenne au moins quelques choses

Au lieu de mettre des alias:

SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
RIGHT JOIN jeux_video j
ON j.ID_proprietaire = p.ID

Si tu avais mis les noms de tables complète c'est plus simple à comprendre ,
en lisant cette requête je ne comprends rien , en remplaçant ton raccourci j.nom par le vrai nom de la table je comprends tout

html 5 , 47 effets en action 47 Amazing CSS3 Animation Demos
 

Voir tous les commentaires