- Accueil
- Info légales
- Aide (FAQ)
- Les tags de ce site
- Bloc note
- Articles techniques
- Notes system
- Divers articles
- Drupal
- Notes ITIL 2007
- Notes MS
- Dans le quartier...
- Emploi
- Recettes de cuisine et adresses gourmandes
- mes applis ubuntu préferées
- Divers acronymes du monde social
- Internet 2018
- P2 meublé à louer - quartier du Poteau 75018
- apcos - réseaux sociaux et outils
- Articles techniques
- Divers liens
- Fun
- Mon CV IT
- Nouveautés
jointure
Pur cours SQL - sers ma page de 'liens tuto dev drupal PHP mySQL'
La base des join
jointures internes : elles ne sélectionnent que les données qui ont une correspondance entre les deux tables ; WHERE (ancienne syntaxe) ou JOIN
jointures externes : elles sélectionnent toutes les données, même si certaines n'ont pas de correspondance dans l'autre table. LEFT JOIN et RIGHT-JOIN
ex: User1 existe dans la table "maitre" proprietaires mais il n'apparaît nulle part dans la table jeux_video (il ne possède aucun jeu).
En récupérant les données des deux tables à l'aide :
d'une jointure interne : User1 n'apparaîtra pas dans les résultats.
d'une jointure externe : toutes les données de la table des propriétaires => User1 apparaîtra (et une ligne NULL).
ex de jointure interne avec WHERE
SELECT jeux_video.nom, proprietaires.prenom FROM proprietaires, jeux_video
WHERE jeux_video.ID_proprietaire = proprietaires.ID
alias
avec des alias champs: SELECT jeux_video.nom AS nom_jeu, proprietaires.prenom AS prenom_proprietaire
alias sur les tables :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
idem mais AS est facultatif:
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p, jeux_video j
WHERE j.ID_proprietaire = p.ID
ex2 jointure interne, avec JOIN
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.
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire FROM proprietaires p, jeux_video j WHERE j.ID_proprietaire = p.ID |
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire FROM proprietaires p INNER JOIN jeux_video j ON j.ID_proprietaire = p.ID |
Filtre WHERE, ORDER BY et LIMIT
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 |
Récupère nom du jeu et 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écroissants et ne prends que les 10 premiers |
Jointures externes avec LEFT JOIN ou RIGHT-JOIN
LEFT JOIN pour récupérer la table de gauche (ou maitre, ici proprietaire)
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
LEFT JOIN jeux_video j
ON j.ID_proprietaire = p.ID
récupére tous les propriétaires, même s'ils n'ont pas d'équivalence dans la table jeux_video.
RIGHT JOIN pour récupérer la table "fille" de droite (meme les orphelins)
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
RIGHT JOIN jeux_video j
ON j.ID_proprietaire = p.ID
Orphelin car soit la valeur n'existe pas/plus dans table maitre, soit contient NULL.
Plus sur le web (tuto)
Voir aussi http://fr.openclassrooms.com/informatique/cours/pour-aller-plus-loin-41/traitement-des-null-s et leur pour-aller-plus-loin-41/filtrer-les-donnees-avec-where