Aller au menu - Aller au contenu

Introduction aux jointures SQL

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Pseudo Commentaire
Page 1 
Hors ligne christophetd # Posté le 02/02/2010 à 06:52:02
Regardez-moi !
Avatar
Flux RSS

Ville : Gap
Pays : France métropolitaine

Un tuto sur les jointures externes, internes, naturelles, etc., c'est ce qu'il manquait ! ;)
Je le lirai en détails dès que j'aurai le temps, mais à la lecture rapide il m'a l'air bien. :)
 
Hors ligne Ghostaunt # Posté le 02/02/2010 à 09:31:18
Avatar

j'ai pas très bien compris la différence entre les jointures internes et externes :p

Image utilisateur
PHPxHTML/CSS
- Fontion PHP - Validator xHTML/CSS

 
Hors ligne cali26 # Posté le 02/02/2010 à 09:49:25
Avatar

Ville : Lyon
Pays : France métropolitaine

Tuto qui va mettre très utile depuis le temps que je cherchais à comprendre les jointures. Première lecture et plein d'espoir :)
Pour moi c'est autant une joie qu'une déception : Je vais devoir refaire toutes mes tables ! ^^

Merci pour ce travail

L'expérience est le nom que chacun donne à ses erreurs. ;)
 
Connecté Triviak # Posté le 02/02/2010 à 10:28:56
vous aime !
Avatar

Avis : Très bon

Très bon tuto avec un très bon exemple !
Il va falloir y réfléchir à deux fois avant de créer de nouvelles tables après lecture ce tuto.

Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur
Image utilisateur
 
Hors ligne G-rom # Posté le 02/02/2010 à 11:30:40
Avatar

Ville : Rennes
Pays : France métropolitaine
Études : ISTIC

Pas mal du tout. Tu pourrais encore améliorer ton tuto je pense.

Gros point négatif, tu utilises 2 exemples au lieu de reprendre le même. C'est plus simple pour le lecteur de n'en avoir qu'un seul.

Tu mets en "info" un "warning" sur le fait que tu utilises SELECT * et qu'il vaut mieux ne pas le faire. Dis le juste avant que tu n'utilises SELECT * la première fois, pas 10 lignes après. C'est important.

Il manque une explication un peu plus clair pour dire au lecteur que la table du FROM est considérée comme celle à gauche, et celle du JOIN comme droite (petit dessin limite) avant d'attaquer cette partie du tuto.

La partie sur les Alias arrive un peu comme un cheveux sur la soupe, intercalée entre deux parties plus importante. Le lien est difficile et certaines personnes vont peut être avoir du mal à comprendre la différence entre jointure interne et externe pas assez mis en avant. Trouve peut être un meilleur moyen d'en parler, ou de la caser. Limite fais lui une partie à part. Elle aurait peut être été mieux avant la partie sur les jointures interne. Puis consacrer la partie jointure interne à seulement la clause where, puis le inner join, pour bien finir le chapitre en montrant que le inner join a supprimé le client n°2 et enfin dire qu'il existe un autre type de jointure pour ne pas perdre des données (transition). Début du chapitre sur les jointures externes, t'en remets une couche pour bien expliquer, etc.

C'est un tuto indispensable bravo pour t'y être attaqué et j'espère qu'il aidera beaucoup de gens.

***Born to Burn***
 
Hors ligne Serialtueur # Posté le 02/02/2010 à 11:34:02
\_o< ~ Koin ?
Avatar
Groupe : Bannis

Ville : Marseille
Pays : France métropolitaine

Je sais pas comment vous faites tous pour créer des tutos EXACTEMENT au moment ou j'en ai besoin. C'est vraiment incroyable, j'étais en train de faire des recherches dessus, j'ai 3 onglets ouverts sur les JOIN :p

Merci !

Des statistiques pour votre site ! | Le protocole HTTP avec QtNetwork
Le nolife, c'est le pendant obscur du geek, la tare de réputation dont il n'arrive pas à se débarrasser. -- ordiclic
IRC : #kamoulbox@irc.freenode.net
 
Hors ligne Cassoulet # Posté le 02/02/2010 à 12:33:02
Je suis sur Windows et ça rox
Avatar
Groupe : Bannis

C'est pas trop mal, mais ça vient à point nommé vu le gros manque sur le sujet qu'on peut ressentir en lisant le forum.
J'espère que les gens vont le lire et commencer à comprendre.

Une discussion assez comique. :)

Le Show : jeu en 2D dédié à un grand artiste ! (C++, SFML)
|||||||||| 100% C++
|||||||||| 90% SFML
|||||||||| 37% JAVA
 
Hors ligne patami # Posté le 02/02/2010 à 15:48:45
Avatar

Avis : Très bon

Merci pour vos commentaires constructifs :)

G-rom je suis d'accord avec la plupart de tes propositions, par contre j'hésite sur la nécessité de n'utiliser qu'un exemple.

Je pense que tu trouves cela négatif du fait que cela demande plus d'efforts de la part du lecteur qui doit s'imaginer 2 situations différentes qu'il risque de mélanger.

Cependant les 2 exemples sont utilisés pour des sujets différents (d'une part les bases de données relationnelles, et d'autre part les jointures), qui ne nécessitent pas de comparaison (si j'avais utilisé un exemple différent pour les jointures internes et les jointures externes, ça aurait effectivement été un problème, mais ici je ne pense pas que ça le soit).
 
Hors ligne patami # Posté le 03/02/2010 à 02:25:42
Avatar

Avis : Très bon

Je suis en train d'appliquer les modifications, je bloque sur le déplacement de la partie Alias. Je parle dans celle-ci des requêtes multi-tables (nécessaires pour illustrer correctement le concept d'alias comme on l'utilise par après), il m'est donc nécessaire de placer cette partie après les explications sur les requêtes multi-tables >_<
 
Hors ligne G-rom # Posté le 03/02/2010 à 17:09:15
Avatar

Ville : Rennes
Pays : France métropolitaine
Études : ISTIC

Oui je pense que la mettre plutôt vers le début du tuto, dans une partie à part un peu comme un "rappel" pour ceux qui ne sont pas trop familier avec le SQL serait plus simple.

***Born to Burn***
 
Hors ligne maxima # Posté le 03/02/2010 à 22:34:20
C’est pas faux.
Avatar

Avis : Très bon

Études : Lycée du Parc - Lyon

Merci beaucoup, je connaissais les jointures, mais je ne connaissais pas la différence entre une jointure interne, une jointure externe, le "LEFT JOIN", le "INNER JOIN"... ;)

Par contre il est vrai qu'il est difficile de comprendre avec plusieurs exemples, et qu'il faudrait peut-être n'en mettre qu'un seul ( bon je n'ai que survolé le tuto mais bon .. ).
Hors ligne redMM # Posté le 04/02/2010 à 13:17:11
Avatar

Tuto très clair. cela dit je suis d'accord avec les remarques de G-rom.

J'ajouterais qu'à la fin de la lecture, il me reste une question taraudante (?). Je perçois une différence entre la situation d'une table A qui contiendrait plusieurs éléments d'une table B qui elle même contiendrait plusieurs éléments d'une table C et la situation d'une table A qui contiendrait à la fois plusieurs éléments d'une table B et plusieurs éléments d'une C (mais ou B et C n'auraient aucun rapport). Comment résoudre ce problème avec des jointures?

Merci d'avance s'il quelqu'un à la réponse à ma question.

Je voudrais changer le monde, mais je n'arrive pas à mettre la main sur le code source.
 
Hors ligne G-rom # Posté le 04/02/2010 à 17:51:25
Avatar

Ville : Rennes
Pays : France métropolitaine
Études : ISTIC

Si justement B et C n'ont aucun rapport, faire une jointure multiple A->B->C n'a aucun sens. Même si B et C sont liés à A. Tu vas te retrouver avec un nombre de lignes égal à la hauteur de B x C sans pour autant avoir de lien entre les données affichées sur une ligne !!

Il faut que tu fasses deux jointures distinctes pour ressortir A->B et A->C libre à toi de les cumuler mais pas de cross join inutile !

Ah et MySQL Workbench c'est mieux que Microsoft Access ;)

***Born to Burn***
 
Hors ligne cetheph # Posté le 07/02/2010 à 17:39:13
Avatar

Études : Lycée du Parc - Lyon

Bon tuto bien clair :)
Connecté SoftDeath # Posté le 13/03/2010 à 22:56:50
ben...euh...j'sais plus :s
Avatar

Ville : Toulouse
Pays : France métropolitaine
Études : Université Paul Sabatier Toulouse

Je viens de lire le tutoriel, je le trouve magnifique. Bonne continuité à l'auteur ;)

Découvrez Krama, un framework JEE/Ajax, entièrement open source !
Image utilisateur
 
Hors ligne Birdimol # Posté le 13/04/2010 à 09:35:30
Avatar

Ville : Marcinelle
Pays : Belgique

Un grand merci à l'auteur, j'ai beaucoup appris en peu de temps. C'est la définition d'un cours efficace :p
Hors ligne patami # Posté le 18/04/2010 à 12:13:09
Avatar

Avis : Très bon

Merci :)

Voilà je crois avoir trouvé le bon compromis, j'ai déplacé la partie Alias dans une rubrique dédiée, afin qu'elle ne sépare plus l'ancienne et la nouvelle syntaxe dans la partie sur les jointures internes. Ca devrait prochainement être validé ;)
 
Hors ligne TerresMinees # Posté le 17/07/2010 à 14:24:25
Avatar

Avis : Très bon

Totalement d'accord avec Birdimol, c'est très bien expliqué, j'ai beaucoup mieux compris qu'avec la partie du cours PHP /SQL officiel, lequel m'avait laissé des doutes.
Le tutoriel se concentre sur le contenu et n'est pas infecté, ou plutôt encombré, de phrases et smileys totalement inutiles qui font perdre du temps à la lecture et un côté sérieux.

Bravo patami, ca déchire!

Quelques questions en vrac


  • Est-il conseiller d'utiliser les ` ` qui entourent certains mots ? Puisque c'est la première fois que je les vois sur des requêtes SQL, sur les autres tutoriels que j'ai pu lire, ils ne les mettaient pas. (Si oui, autour de quels mots doit-on les mettre ? Seulement les noms des tables?)
  • Pour les jointures croisées, doit-on mettre autant de CROSS JOIN qu'il n'y a de tables - 1 ?
    (exemple : SELECT * FROM `table1` CROSS JOIN `table2` CROSS JOIN `table3` )
  • (Aurais-tu des exemples pour comprendre l'utilité des auto-jointures )


Voila, merci pour ce tutoriel, à bientôt!
Hors ligne patami # Posté le 18/07/2010 à 12:24:23
Avatar

Avis : Très bon

Salut

Merci :)

Pour la première question, j'ai pris l'habitude de le faire, explications ici : http://mysql.developpez.com/faq/?page= [...] S_apostrophes

Pour la seconde question oui, mais ça fait une requête hyper lourde, ce qui est déconseillé.

Pour la dernière question, tout dépend de la conception des tables. Ca peut par exemple être utilisé pour un système de sous-catégories si toutes les catégories, quel que soit leur niveau, sont stockées dans la même table.
 
Hors ligne TerresMinees # Posté le 18/07/2010 à 13:17:00
Avatar

Avis : Très bon

Merci de la réponse.

Dans pour la deuxième question, comment sommes-nous sensés procéder alors ?
Hors ligne patami # Posté le 18/07/2010 à 14:18:00
Avatar

Avis : Très bon

Dans le tutoriel j'explique que la jointure croisée (requête multi-tables) renvoie l'ensemble des relations/combinaisons possibles entre les tables. Son utilisation est donc très rare, on s'intéresse en général à une relation entre les tables (via la condition de jointure).

Si tu as un cas concret à soumettre, je t'invite à le faire sur le forum, cet espace étant réservé aux commentaires sur le tuto :)
 
Connecté Craw # Posté le 03/08/2010 à 05:19:59
Rien n'est parfait !
Avatar
Modérateurs

Salut,

Bon tutoriel qui explique assez bien les jointures SQL, même si j'ai du mal à faire la différence entre les jointures internes et externes.
Hors ligne icewind # Posté le 19/08/2010 à 11:05:05
made in electronic
Avatar

Études : ISEN Lille

j'aurai une petite question niveau de la rapidité

si on compare NATURAL JOIN ET JOIN ON tout cours, quelle est le plus rapide?

et j'ai la même au niveau du CROSS JOIN

sinon bon tuto, je connaissais déjà la partie JOIN, mais pas la fin
Hors ligne patami # Posté le 19/08/2010 à 14:38:24
Avatar

Avis : Très bon

Bonne question, pour y répondre il te suffit d'exécuter une requête dans phpmyadmin et de comparer le temps d'exécution, idéalement avec une grosse quantité de données :)

Après un rapide test avec de petites tables (138 enregistrements), j'obtiens une différence de 13% en défaveur du NATURAL JOIN par rapport au JOIN ON. A tester avec de plus grosses quantités de données ...
 
Hors ligne Hologram # Posté le 19/09/2010 à 01:58:06
Avatar

Avis : Très bon

Clair et concis, un tuto qui devrait être mentionné dans le cours sur php/mySql de m@teo21. Super!

Image utilisateur
A noter qu'il existe (entre autre) MySQL Workbench, un petit logiciel pour créer et organiser votre bdd et la relation entre les tables.
Hors ligne istoun # Posté le 01/10/2010 à 01:15:52
Avatar

Avis : Très bon

Ville : Settat
Pays : Maroc

merci bon tuto , à la lecture rapide j'ai pu comprendre plusieurs choses qui me manquaient merci beaucoup pour ce tuto.

Image utilisateur

Inscrivez-vous, c'est gratuit :D
 
Hors ligne Shirotora59 # Posté le 14/11/2010 à 21:57:39
Avatar

Excellent tutoriel!! J'ai appris pas mal de choses qui m'aideront en cours!! ;-)
Hors ligne tonylight # Posté le 18/11/2010 à 12:30:13
Avatar
Flux RSS

Ville : Mayenne
Pays : France métropolitaine

J'aurais une question, et je ne sais pas trop comment la formuler dans une recherche pour ne pas déranger tout le monde, alors je me lance, espérant ne pas avoir eu la réponse sous le nez.
Admettons que j'ai une table "projets" avec deux champs "id_createur" et "id_successeur", comment dois-je faire pour relier ces deux champs à la clé primaire "id" de la table "membres" ?
Je planche sur cette question depuis deux jours sans trouver de réponses, si quelqu'un à la réponse...

1. Si Newton avait reçu une enclume au lieu d'une pomme sur la tête, on n'aurait jamais connu la gravité.
2. Il y a 10 types de personnes : celles qui connaissent le binaire, et celles qui ne le connaissent pas.

Fayden est un Dieu ! (une Déesse ?) Comment ça lèche-pompe ?
 
Hors ligne patami # Posté le 21/11/2010 à 00:19:13
Avatar

Avis : Très bon

Salut tonylight

le tutoriel te permet de trouver une solution. Tout dépend aussi des restrictions que tu veux/dois imposer. Par exemple y a t-il toujours un créateur et un successeur, ou n'y en a t-il parfois qu'un des deux ?

Tu peux faire une seule jointure et jouer dans la condition, mais le plus simple est de faire deux fois la jointure de ta table membres, avec des conditions différentes :)
 
Connecté Zaroide # Posté le 30/04/2011 à 13:51:07
Honneur à l'innocence
Avatar

Avis : Très bon

Études : Lycée Berthollet - Annecy

J'ai pas encore essayé..
Mais j'ai juste un truc à dire (ou deux)..

BRAVO et.. MERCI ^^ !!

Ca faisait pas mal de temps que je cherchais à faire ce type de réquête. Au début, je croyais que c'était faisable avec l'UNION, mais non (hum hum la rime..). Du plus, parmis les dizaines de sites que j'ai visiter, SEULEMENT ton tuto à su expliquer ça pour un nul en php comme moi pour qu'il comprenne (presque) parfaitement tout :P.

Donc, merci encore pour ton aide ! Ca va vraiment me servir ^^.

Cordialement.
Z.

 
Pour accéder à cette section
Connectez-vous !
connexion_rpx