Lors de l'étude des relations de données, nous avons vu le rôle des clés primaires et étrangères dans le maintien de l'échange d'informations entre les deux tables. Cette technique de lier les tables joue un rôle important lors de la création d'une jointure. Il permet de décider si vous voulez inclure tous les enregistrements ou isoler seulement certains d'entre eux. Afin de respecter la direction d'une relation entre deux tables tel qu'il est appliqué à une requête, Transact-SQL prend en charge trois types de jointures. Une jointure croisée crée une liste de tous les enregistrements des deux tables comme suit : le premier enregistrement de la Table de parent est associé à chaque enregistrement de la Table Enfant, puis le deuxième enregistrement à partir de la table parent est associé à chaque enregistrement de la table enfant et ainsi de suite. Dans ce cas également, il n'est pas nécessaire d'une colonne commune entre les deux tables. En d'autres termes, vous n'utiliserez pas la clause ON. Pour créer une jointure croisée, vous pouvez remplacer le facteur TypeOfJoin de notre formule avec CROSS JOIN ou CROSS OUTER JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.GenderID, Genders.Gender
FROM Persons
CROSS JOIN Genders
GO
Par défaut, dans SQL Server Management Studio, une fois que vous venez d'ajouter un tableau à un autre (si aucune relation n'était déjà établie entre les deux tables), la requête serait automatiquement une jointure croisée. Tout ce que vous avez à faire est de sélectionner les colonnes nécessaires :
Après avoir sélectionné les colonnes, vous pouvez cliquer sur OK et exécuter la requête pour voir le résultat :
Imaginez que vous avez deux tables qui peuvent être liées par le biais de la clé primaire et l'autre clé étrangère :
Notez que certains enregistrements dans la table de personnes n'ont pas une entrée pour la colonne GenderID et ont été marqués avec NULL par le moteur de base de données. Lors de la création d'une requête d'enregistrements de la table de personnes, si vous souhaitez que votre liste inclue uniquement les enregistrements qui ont une entrée, vous pouvez le créer en jointure interne. Par défaut, à partir de SQL Server Management Studio, lors de la création d'une nouvelle requête, si une relation a déjà été établie entre les deux tables, la requête est faite d'une jointure interne. S'il n'y a aucune relation explicitement établie entre les deux tables, vous devez la créer ou modifier l'instruction SQL. Tenez compte des points suivants :
Notez que, parce qu'aucune relation n'est établie entre les deux tables, la jointure est dépassée. Pour créer une jointure interne, vous avez deux options. Vous pouvez faire glisser la clé primaire de la table parente et la déposer sur la clé étrangère dans la table enfant. Voici un exemple :
Alternativement, vous pouvez modifier manuellement l'instruction SQL pour rendre une jointure interne. Pour ce faire, vous spécifiez le facteur TypeOfJoin de notre formule avec l'expression INNER JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName, Persons.GenderID,
Genders.GenderID AS [Gender ID], Genders.Gender
FROM Persons INNER JOIN Genders ON Persons.GenderID = Genders.GenderID
Après avoir créé la jointure, dans la section de schéma, une ligne sera créée pour joindre les tables :
Vous pouvez alors exécuter la requête pour voir le résultat. Cela donnerait :
Nous l'avons mentionné précédemment que vous pourriez inclure toutes les colonnes dans la requête. Dans notre résultat, puisque nous ne sommes plus intéressés par le genre de chaque enregistrement de personnes, nous n'avons pas besoin de la colonne GenderID de la table genres. Voici un exemple :
Comme mentionné précédemment, vous remarquerez que le résultat inclut uniquement les enregistrements qui ont une entrée (une entrée non-NULL) dans la colonne de clé étrangère GenderID de la table de personnes. Une alternative à l'expression INNER JOIN consiste à taper simplement JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.Gender
FROM Persons
JOIN Genders
ON Persons.GenderID = Genders.GenderID
GO
Pour détruire une jointure entre deux tables, si vous travaillez dans la fenêtre de la table, vous pouvez cliquer avec le bouton droit de la souris sur la ligne qui joint les tables et cliquer sur Supprimer. Dans SQL, vous devez modifier les expressions qui composent la jointure (la jointure et les expressions ON).
Au lieu d'afficher uniquement les enregistrements qui ont des écritures dans la table enfant, il se peut que vous vouliez votre requête pour inclure tous les enregistrements, y compris ceux qui sont nuls. Pour obtenir ce résultat, vous devez créer une jointure externe. Vous disposez de trois options.
Une jointure externe gauche produit tous les enregistrements de la table enfant, appelée également la table de droite. Les enregistrements de la table d'enfants qui n'ont pas d'entrée dans la colonne de clé étrangère sont marqués comme NULL. Pour créer une jointure externe gauche, si vous travaillez dans la fenêtre de la table, dans la section de schéma, cliquez avec le bouton droit de la souris sur la ligne qui joint les tables et cliquez sur l'option qui sélectionne tous les enregistrements dans la table enfant (dans ce cas, ce serait de sélectionner toutes les lignes de personnes) :
Alternativement, vous pouvez remplacer le facteur TypeOfJoin de notre formule avec LEFT JOIN ou LEFT OUTER JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.GenderID, Genders.Gender
FROM Persons
LEFT OUTER JOIN Genders
ON Persons.GenderID = Genders.GenderID
GO
Dans les deux cas, le bouton au milieu de la ligne devrait être ajouté à une flèche pointant vers la table Parent. Vous pouvez alors exécuter la requête pour voir le résultat. Voici un exemple :
Notez que le résultat comprend tous les enregistrements de la table de personnes (également appelés la droite) et les enregistrements qui n'ont pas d'entrée dans la colonne GenderID de la table de personnes (droite) sont marqués avec NULL.
Une jointure externe droite considère tous les enregistrements issus de la table parente et trouve un enregistrement correspondant dans la table enfant. Pour ce faire, il commence par le premier enregistrement de la table parente (dans ce cas, la table Genders) et affiche chaque enregistrement de la table enfant (dans ce cas, le tableau Persons), qui possède une entrée correspondante. Cela signifie que, dans notre exemple, une jointure externe droite créerait tout d'abord une liste des enregistrements des personnes qui ont une valeur (femelle) pour la colonne GenderID. Après le premier enregistrement, la jointure externe droite se déplace vers le deuxième enregistrement et ainsi de suite, chaque fois en répertoriant les enregistrements de la table enfant qui ont une entrée correspondante pour la clé primaire de la table parente. Pour créer visuellement une jointure externe droite dans la table de fenêtre, après avoir établi une jointure entre les deux tables, si vous aviez précédemment créé une jointure externe gauche, vous devez la supprimer en cliquant avec le bouton droit de la souris sur la ligne entre les tables et en sélectionnant la deuxième option sous Supprimer. Vous pouvez ensuite cliquer avec le bouton droit de la souris sur la ligne qui les relie et cliquez sur l'option qui sélectionnerait tous les enregistrements dans la table parente. Dans notre exemple, vous devez cliquer sur Select All Rows From Genders. Pour créer une jointure externe droite dans SQL, vous pouvez remplacer le facteur TypeOfJoin de notre formule avec RIGHT JOIN ou RIGHT OUTER JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.GenderID, Genders.Gender
FROM Persons
RIGHT OUTER JOIN Genders
ON Persons.GenderID = Genders.GenderID
GO
Dans les deux cas, le bouton sur la ligne de jonction entre les tables aurait une flèche pointant vers la table enfant. Vous pouvez ensuite exécuter la requête. Voici un exemple :
Notez que le résultat de la requête commence par le premier enregistrement de la table Parente, également appelée la table gauche (dans ce cas, le tableau Genders) et répertorie les enregistrements de la table enfant, appelée également la table de droite (dans ce cas la table Persons), qui ont l'entrée correspondant à ce premier enregistrement. Puis il passe à la prochaine valeur GenderID. Notez également qu'il n'y a aucun enregistrement NULL dans le Gender.
Une jointure externe complète produit tous les enregistrements tant du parent que des tables d'enfants. Si un enregistrement d'une table n'a pas de valeur dans l'autre valeur, la valeur de cet enregistrement est marquée comme NULL. Pour créer visuellement une jointure externe complète, dans la table de fenêtre, cliquez avec le bouton droit de la souris sur la ligne entre les tables et sélectionnez chaque option sous Supprimer afin que les deux soient vérifiées. Pour créer une jointure externe complète en SQL, remplacez le facteur TypeOfJoin de notre formule FULL JOIN ou FULL OUTER JOIN. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.GenderID, Genders.Gender
FROM Persons FULL OUTER JOIN Genders
ON Persons.GenderID = Genders.GenderID
GO
Le bouton sur la ligne entre les tables semble maintenant sous la forme d'un carré. Vous pouvez alors exécuter la requête. Voici un exemple :
Tout comme nous avons impliqué seulement deux tables dans notre jointure jusqu'ici, vous pouvez créer une jointure qui inclut plusieurs tables.
Comme démontré jusqu'ici et dans les leçons précédentes, la raison principale de la création de requêtes est d'isoler les enregistrements. Cette opération est effectuée à l'aide des conditions et critères. Les Jointures améliorent cette fonctionnalité car elles permettent d'envisager des enregistrements de tables différentes et de les inclure dans une instruction SQL commune. Dans les jointures que nous avons créées jusqu'à présent, nous avons considéré comme tous les enregistrements et laissé la liste du moteur de base de données en utilisant uniquement les règles des jointures intégrér le SQL. Pour rendre une telle liste plus utile ou restrictive, vous pouvez poser vos propres conditions qui doivent être respectées pour isoler les enregistrements comme un entonnoir. Comme fait dans les leçons précédentes, pour inclure un critère dans une instruction SELECT, vous pouvez créer une clause WHERE.
Pour créer un critère dans une requête que vous créez à partir du SQL Server Management Studio, sélectionnez d'abord une colonne à afficher dans la section grille. Tout aussi examiné dans les leçons précédentes lors de la création d'une requête, pour spécifier un critère, dans la zone de critères correspondant à la colonne, saisissez la condition à l'aide des opérateurs que nous avons examinés dans les leçons précédentes. Voici un exemple : SELECT Persons.PersonID, Persons.FirstName, Persons.LastName,
Genders.GenderID, Genders.Gender
FROM Persons LEFT OUTER JOIN
Genders ON Persons.GenderID = Genders.GenderID
WHERE Genders.Gender = N'female';
GO
Cela donnerait :
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
||
| Précédent | Copyright © 2009 Yevol | Suivant |
|
|
||