SQL Server est un système de gestion de base de données relationnelle. L’un des principes clés d’une base relationnelle est que les données sont réparties sur plusieurs tables.
Pour extraire les informations dont nous avons besoin, nous devons pouvoir joindre ces tables. On utilise des clés primaires et étrangères pour effectuer ces jointures.
Clé primaire
Une clé primaire est une colonne qui identifie de façon unique chaque ligne d’une table. Cette unicité peut être obtenue via un entier séquentiel (colonne identité). Parfois, des colonnes existantes contiennent naturellement des valeurs uniques et peuvent être utilisées.
Dans l’exemple ci-dessous, on voit les premières lignes de la table artist. Elle comporte deux colonnes, artist_id et name. La colonne artist_id sert de clé primaire pour cette table : c’est une colonne entière et chaque valeur est différente.
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+Propulsé par
Regardons maintenant la table album. Reconnaissez-vous la clé primaire ? Oui, c’est la colonne album_id. Il est courant de nommer une clé primaire « nom-de-table underscore id ». Mais vous aurez aussi remarqué la présence d’une colonne artist_id. Elle contient également des entiers et porte le même nom que la colonne artist_id de la table artist. Qu’est-ce que cela implique ?
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+Propulsé par
Clés étrangères
D’après ce résultat, il est clair que la colonne artist_id de la table artist joue le rôle de Foreign_key pour la table album. La contrainte FOREIGN KEY empêche les actions qui briseraient les liens entre tables.
table artist
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+Propulsé par
table album
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+Propulsé par
Cela signifie que lorsque l’artist_id de la table album correspond à l’artist_id de la table artist, ces lignes peuvent être reliées via une JOIN.
Joindre album et artist
Les lignes 1 et 4 de la table artist ont un artist_id égal à 1. L’artist_id 1 dans la table artist correspond à AC/DC. Ainsi, en joignant les deux tables, on récupère les informations d’album depuis la table album et les informations d’artiste correspondantes depuis la table artist, reliées via le champ artist_id, commun aux deux tables.
C’est ce qu’on appelle une jointure inner.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist ON artist.artist_id = album.artist_id
WHERE album.artist_id =1;Propulsé par
+----------+-------------------------+-----------+-------------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC|+----------+-------------------------+-----------+-------------|Propulsé par
Nous avons joint les tables album et artist en faisant correspondre l’artist_id de la table artist avec l’artist_id de la table album.
Lorsque vous sélectionnez des colonnes portant le même nom dans des tables différentes, vous devez qualifier entièrement le nom de la colonne. Sinon, SQL Server ne saura pas de quelle table SELECT la colonne.
Pour qualifier une colonne, préfixez-la du nom de la table concernée, suivi d’un point.
Syntaxe d’une jointure interne
Voici un exemple générique pour vous rappeler la syntaxe. On sélectionne les colonnes pertinentes depuis la table principale, ici table_A, puis toute colonne supplémentaire de la table à joindre, ici table_B. Ensuite, on précise la jointure avec les mots-clés INNER JOIN et ON, en fournissant les colonnes clés nécessaires des deux tables.
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ,FROM table_A
INNERJOIN table_B ON table_B.foreign_key = table_A.primary_key;Propulsé par
Sans clause WHERE
Dans cet exemple, nous ne précisons pas de clause WHERE, nous renvoyons donc TOUTES les combinaisons de TOUTES les correspondances entre les tables artist et album, toujours sur la base de la colonne artist_id, commune aux deux.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist on artist.artist_id = album.artist_id;Propulsé par
+----------+---------------------------------------+-----------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC||2| Balls To The Wall |2| Accept ||3| Restless and Wild |2| Accept |+----------+---------------------------------------+-----------+Propulsé par
Jointures internes multiples
Vous pouvez également joindre plus de deux tables avec des INNER JOINS. Il suffit d’ajouter une clause INNER JOIN pour chaque combinaison de tables. Dans le code ci-dessous, nous joignons les tables A et B, puis B et C.
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ table_C columnW
FROM table_A
INNERJOIN table_B ON table_B.foreign_key = table_A.primary_key
INNERJOIN table_C ON table_C.foreign_key = table_B.primary_key;Propulsé par
Pour aller plus loin sur les jointures, regardez cette vidéo issue de notre cours Introduction to SQL Server.
Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Débloquez tout le potentiel de vos données grâce à des requêtes SQL avancées et préparez des jeux de données robustes avec PostgreSQL pour la data science.
SQL Server est un système de gestion de base de données relationnelle. L’un des principes clés d’une base relationnelle est que les données sont réparties sur plusieurs tables.
Pour extraire les informations dont nous avons besoin, nous devons pouvoir joindre ces tables. On utilise des clés
primairesetétrangèrespour effectuer ces jointures.Clé primaire
Une clé primaire est une colonne qui identifie de façon unique chaque ligne d’une table. Cette unicité peut être obtenue via un entier séquentiel (colonne identité). Parfois, des colonnes existantes contiennent naturellement des valeurs uniques et peuvent être utilisées.
Dans l’exemple ci-dessous, on voit les premières lignes de la table
artist. Elle comporte deux colonnes,artist_idetname. La colonneartist_idsert de clé primaire pour cette table : c’est une colonne entière et chaque valeur est différente.Regardons maintenant la table
album. Reconnaissez-vous la clé primaire ? Oui, c’est la colonnealbum_id. Il est courant de nommer une clé primaire « nom-de-table underscore id ». Mais vous aurez aussi remarqué la présence d’une colonneartist_id. Elle contient également des entiers et porte le même nom que la colonneartist_idde la table artist. Qu’est-ce que cela implique ?Clés étrangères
D’après ce résultat, il est clair que la colonne
artist_idde la table artist joue le rôle deForeign_keypour la table album. La contrainteFOREIGN KEYempêche les actions qui briseraient les liens entre tables.artistalbumCela signifie que lorsque l’
artist_idde la table album correspond à l’artist_idde la table artist, ces lignes peuvent être reliées via uneJOIN.Joindre album et artist
Les lignes 1 et 4 de la table artist ont un
artist_idégal à 1. L’artist_id1 dans la table artist correspond à AC/DC. Ainsi, en joignant les deux tables, on récupère les informations d’album depuis la table album et les informations d’artiste correspondantes depuis la table artist, reliées via le champartist_id, commun aux deux tables.C’est ce qu’on appelle une jointure
inner.Nous avons joint les tables album et artist en faisant correspondre l’
artist_idde la table artist avec l’artist_idde la table album.Lorsque vous sélectionnez des colonnes portant le même nom dans des tables différentes, vous devez qualifier entièrement le nom de la colonne. Sinon, SQL Server ne saura pas de quelle table
SELECTla colonne.Pour qualifier une colonne, préfixez-la du nom de la table concernée, suivi d’un point.
Syntaxe d’une jointure interne
Voici un exemple générique pour vous rappeler la syntaxe. On sélectionne les colonnes pertinentes depuis la table principale, ici
table_A, puis toute colonne supplémentaire de la table à joindre, icitable_B. Ensuite, on précise la jointure avec les mots-clésINNER JOINetON, en fournissant les colonnes clés nécessaires des deux tables.Sans clause
WHEREDans cet exemple, nous ne précisons pas de clause
WHERE, nous renvoyons donc TOUTES les combinaisons de TOUTES les correspondances entre les tables artist et album, toujours sur la base de la colonneartist_id, commune aux deux.Jointures internes multiples
Vous pouvez également joindre plus de deux tables avec des
INNER JOINS. Il suffit d’ajouter une clauseINNER JOINpour chaque combinaison de tables. Dans le code ci-dessous, nous joignons les tables A et B, puis B et C.Pour aller plus loin sur les jointures, regardez cette vidéo issue de notre cours Introduction to SQL Server.
Ce contenu est tiré du cours Introduction to SQL Server de DataCamp, par John MacKintosh.