Options sur les jointures de données
Jointures de données et nullité d'enregistrement
Parfois, vous aurez une table où un champ manque certains enregistrements. Voici un exemple de liste d'employés où certains enregistrements ne précisent pas le service auquel appartient l'employé :
SELECT Employees.EmployeeNumber AS [Employee #], Employees.FirstName, Employees.LastName, Employees.DepartmentCode AS Department FROM Employees;
Cela donnerait :
Si vous créez une requête de jointure interne de deux tables qui ont une relation et que certains enregistrements de la table enfant manquent de certaines valeurs dans la colonne de clé étrangère, la requête produira uniquement les enregistrements qui ont une valeur. Voici un exemple :
SELECT Employees.EmployeeNumber AS [Employee #], Employees.FirstName, Employees.LastName, Departments.DepartmentName AS Department FROM Departments INNER JOIN Employees ON Departments.DepartmentCode = Employees.DepartmentCode;
Cela donnerait :
Notez que la requête produit moins d'enregistrements. Il se trouve que les moteurs de base de données n'aiment pas les enregistrements nuls, en particulier sur les champs partagés, les champs impliqués dans des relations. Pour vous assurer que tous les enregistrements d'une table enfant sont produits par une requête, produisez une valeur par défaut pour les enregistrements dont les valeurs sont manquantes. Si la relation utilise un entier simple, créez un enregistrement avec la valeur 0. Si la relation utilise une chaîne, vous pouvez créer un enregistrement avec une valeur "N/A". Si les enregistrements sont traités par un ordinateur, vous pouvez créer un enregistrement avec une valeur générique/aléatoire telle que 00000 ou quelque chose comme ça.
Apprentissage pratique :gestion des jointures de données et de la nullité des enregistrements
- Démarrer Microsoft Access
- À partir des ressources qui accompagnent ces leçons, ouvrez la base de données Altair Realtors3
- Sur le ruban, cliquez sur Créer, puis sur Conception de requête
- Dans la boîte de dialogue Afficher la table, double-cliquez sur Propriétés et cliquez sur Fermer
- Dans la liste des propriétés, double-cliquez sur PropertyNumber, City et State
- Passez la requête en mode feuille de données :
- Remarquez le nombre d'enregistrements :48.
Passer la requête en mode Création - Cliquez avec le bouton droit sur une zone vide en haut de la fenêtre et cliquez sur Afficher le tableau
- Dans la boîte de dialogue Afficher la table, double-cliquez sur PropertyTypes et cliquez sur Fermer
- Dans la liste PropertyTypes, double-cliquez sur PropertyType
- Basculer la requête vers le mode Feuille de données
- Remarquez le nombre d'enregistrements cette fois :44.
Affichez la vue SQL de la requête et modifiez son code comme suit :SELECT Properties.PropertyNumber, Properties.City, Properties.State, Conditions.Condition FROM Properties INNER JOIN Conditions ON Properties.Condition = Conditions.Condition;
- Basculer la requête vers le mode Feuille de données
- Remarquez le nombre d'enregistrements :38.
Fermer la requête sans l'enregistrer - Dans le volet de navigation, double-cliquez sur le formulaire PropertyTypes
- Créez un nouvel enregistrement comme suit :
Type de propriété Description Inconnu Le type de propriété n'est pas disponible ou n'est pas clair. Illustrations - Fermer la table PropertyTypes
- Dans le volet de navigation, double-cliquez sur le formulaire Conditions
- Créez un nouvel enregistrement comme suit :
Type de propriété Description Inconnu L'état actuel ou l'apparence (intérieure et/ou extérieure) de la propriété n'a pas été vérifiée, n'a pas été évaluée ou n'est pas clairement connue. - Fermer le tableau des conditions
- Dans le volet de navigation, cliquez avec le bouton droit sur le tableau Propriétés et cliquez sur Mode Création
- En haut de la fenêtre, cliquez sur PropertyType
- En bas, cliquez sur Valeur par défaut et saisissez Inconnu
- En haut de la fenêtre, cliquez sur Condition
- En bas, cliquez sur Valeur par défaut et saisissez Inconnu
- Enregistrez le tableau et passez-le en mode Feuille de données
- Dans la colonne PropertyType, pour chaque cellule vide, sélectionnez Inconnu
- Dans la colonne Condition, pour chaque cellule vide, sélectionnez Inconnu
- Notez qu'il existe une valeur par défaut pour les colonnes PropertyType et Condition
- En définissant uniquement les valeurs indiquées, créez de nouveaux enregistrements comme suit :
Numéro de propriété Type de propriété Ville État Code postal Chambres Salle de bain Sous-sol fini Garage intérieur État Valeur marchande 476005 Unifamiliale Hanovre PA 17331 3 2,50 Vérifié 425790 152466 Martinsburg WV 1 1,00 135670 427048 Condominium Alexandria VA 3 2,00 Besoin de réparation 622845 297427 Matinsburg Excellent 729336 Alexandria VA 3 2,50 Besoin de réparation 750000 300618 Harrisburg PA 17109 5 3,50 Vérifié Vérifié Bonne forme 515885 - Fermer le tableau
- Sur le ruban, cliquez sur Créer, puis sur Conception de requête
- Dans la boîte de dialogue Afficher la table, double-cliquez sur Propriétés et cliquez sur Fermer
- Dans la liste des propriétés, double-cliquez sur PropertyNumber, City et State
- Passer la requête en mode Feuille de données
- Remarquez le nombre d'enregistrements :51.
Passer la requête en mode Création - Cliquez avec le bouton droit sur une zone vide en haut de la fenêtre et cliquez sur Afficher le tableau
- Dans la boîte de dialogue Afficher la table, double-cliquez sur PropertyTypes et cliquez sur Fermer
- Dans la liste PropertyTypes, faites glisser PropertyType et déposez-le sur City en bas
- Dans la liste des propriétés, double-cliquez sur Chambres et salles de bains
- Basculer la requête vers le mode Feuille de données
- Remarquez le nombre d'enregistrements cette fois :51.
Fermer la requête sans l'enregistrer - Ouvrir la base de données Lambda Square Apartments1 créée et utilisée précédemment
- Sur le ruban, cliquez sur Créer, puis sur Conception de requête
- Dans la boîte de dialogue Afficher le tableau, double-cliquez sur Paiements et cliquez sur Fermer
- Dans la liste Paiements, double-cliquez sur ReceiptNumber, PaymentDate, ProcessedBy, RegistrationNumber et PaymentAmount
- Basculer la requête vers le mode Feuille de données
- Remarquez le nombre d'enregistrements :63.
Passer la requête en mode Création - Cliquez avec le bouton droit sur une zone vide de la fenêtre et cliquez sur Afficher le tableau...
- Dans la boîte de dialogue Afficher le tableau, double-cliquez sur Employés et cliquez sur Fermer
- Faites glisser EmployeeNumber et déposez-le sur ProcessedBy
- En bas de la fenêtre, remplacez ProcessedBy par
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
- Basculer la requête vers le mode Feuille de données
- Remarquez le nombre d'enregistrements :46.
Fermer la requête sans l'enregistrer - Dans le volet de navigation, double-cliquez sur la table Employés et créez un nouvel enregistrement comme suit (pour les transactions effectuées à la banque, par exemple un locataire qui dépose l'argent du loyer directement à la banque) :
Numéro d'employé Prénom Nom de famille Titre 00000 Transaction électronique de traitement automatique - Fermer le tableau Employés
- Dans le volet de navigation, cliquez avec le bouton droit sur le tableau Paiements et cliquez sur Mode Création
- En haut de la fenêtre, cliquez sur Traité par
- En bas, cliquez sur Valeur par défaut et saisissez "00000"
- Enregistrer et fermer le tableau
- Ouvrir le tableau Paiements
- Dans la colonne ProcessedBy, dans chaque cellule vide, saisissez 00000
- Fermer le tableau Paiements
- Sur le ruban, cliquez sur Créer, puis sur Conception de requête
- Dans la boîte de dialogue Afficher le tableau, double-cliquez sur Paiements et employés
- Cliquez sur Fermer
- Faites glisser EmployeeNumber et déposez-le sur ProcessedBy
- Dans la liste Paiements, double-cliquez sur ReceiptNumber et PaymentDate
- Appuyez sur Tab et saisissez
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
- Dans la liste Paiements, double-cliquez sur RegistrationNumber et PaymentAmount
- Passer la requête en mode Feuille de données
- Remarquez le nombre d'enregistrements :63.
Fermer la requête sans l'enregistrer
Joindre plus de deux tables
Jusqu'à présent, nos instructions de jointure n'impliquaient que deux tables. En fait, vous pouvez utiliser plus de tables que cela. La formule de base pour joindre trois tables est :
SELECT field-name(s) FROM first-table first-join-type second-table ON condition1 second-join-type third-table ON condition2
Vous démarrez l'expression en joignant la première à la deuxième table, ce qui signifie que les deux tables doivent partager une colonne dans une relation de type clé primaire-clé étrangère. De la même manière, vous pouvez créer la deuxième jointure. Bien sûr, les deuxième et troisième tableaux doivent avoir une colonne commune. Dans la plupart des cas, il devrait y avoir une colonne partagée par les trois tables. La plupart du temps, la relation commence par une colonne de clé primaire de la table parent. Cette colonne est alors représentée comme une clé étrangère dans les deux autres tables.
Apprentissage pratique :Joindre plus de deux tables
- Sur le ruban, cliquez sur Créer, puis sur Conception de formulaire
- Dans la feuille de propriétés, cliquez sur l'onglet Tout.
Cliquez sur Enregistrer la source et cliquez sur son bouton points de suspension - Dans le tableau Afficher, double-cliquez sur Employés, Inscriptions et Appartements
- Cliquez sur Fermer
- Faites glisser EmployeeNumber de la liste Employees et déposez-le sur ProcessedBy dans la liste Registrations
- Faites glisser ApartmentCode de la liste des appartements et déposez-le sur PropNbr dans la liste des inscriptions
- Dans la liste des enregistrements, double-cliquez sur ID d'enregistrement et Date d'enregistrement
- Appuyez sur Tab et saisissez
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
- Dans la liste des inscriptions, double-cliquez sur FirstName, LastName, MaritalStatus et NumberOfChildren
- Appuyez sur Tab et tapez :
Apartment: "Apart # " & [UnitNumber] & ", " & [Bedrooms] & " bedroom(s), " & [Bathrooms] & " bathroom(s), Rate: " & [MonthlyRate] & "/month"
- Afficher la vue SQL de la requête :
SELECT Registrations.RegistrationID AS [Regist #], Registrations.RegistrationDate AS [Regist Date], [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")" AS Employee, Registrations.FirstName, Registrations.LastName, Registrations.MaritalSituation AS Status, Registrations.NumberOfChildren AS Children, "Apart # " & [UnitNumber] & ", " & [Bedrooms] & " bedroom(s), " & [Bathrooms] & " bathroom(s), Rate: " & [MonthlyRate] & "/month" AS Apartment FROM Apartments INNER JOIN (Employees INNER JOIN Registrations ON Employees.EmployeeNumber = Registrations.ProcessedBy) ON Apartments.ApartmentCode = Registrations.PropNbr;
- Fermer le générateur de requêtes
- Lorsqu'on vous demande si vous souhaitez enregistrer les modifications, cliquez sur Oui
- Enregistrer le formulaire sous Allocations de loyer
- Double-cliquez sur le bouton à l'intersection des règles
- Dans la feuille de propriétés, modifiez les caractéristiques suivantes :
Légende :Lambda Square Apartments - Allocation de loyer
Valeur par défaut :Forme continue
Centre automatique :Oui
Boutons de navigation :Non - Sur le ruban, cliquez sur Conception
- Dans la section Outils, cliquez sur Ajouter des champs existants
- Dans la liste des champs, cliquez sur Appartement, maintenez la touche Maj enfoncée, cliquez sur Numéro d'enregistrement et relâchez la touche Maj
- Faites glisser la sélection vers le formulaire
- Sur le ruban, cliquez sur Réorganiser, puis sur Tabulaire
- Faites glisser la sélection vers la gauche
- Appuyez sur Ctrl + A pour sélectionner tous les contrôles
- Sur le ruban, cliquez sur Supprimer la mise en page
- Terminez la conception du formulaire. Voici un exemple:
- Enregistrer et fermer le formulaire
Jointures de données et analyses d'enregistrements
Tri des enregistrements
Dans les jointures de données que nous avons créées jusqu'à présent, nous avons considéré tous les enregistrements et laissé le moteur de base de données les répertorier en utilisant uniquement les règles de jointures intégrées au SQL. Pour rendre une telle liste plus restrictive, vous pouvez appliquer certaines conditions permettant d'isoler certains enregistrements. Vous pouvez créer visuellement les filtres dans le mode Création d'une requête ou dans une fenêtre similaire. Vous pouvez également créer un filtre en SQL. Comme fait dans les leçons précédentes, pour inclure un critère dans un SELECT déclaration, vous pouvez créer un WHERE clause.
Apprentissage pratique :Présentation des jointures et de l'analyse des données
- Ouvrir la base de données Monson University1 utilisée précédemment
- Pour lancer une requête, dans le ruban, cliquez sur Créer, puis sur Conception de requête
- Dans la boîte de dialogue Afficher le tableau, cliquez sur Fermer
- Cliquez avec le bouton droit sur le côté supérieur de la fenêtre et cliquez sur Vue SQL
- Modifiez l'instruction comme suit :
SELECT EmployeeNumber AS [Employee #], FirstName AS [First Name], LastName AS [Last Name], Title, DepartmentName AS Department FROM Employees, Departments WHERE Employees.DepartmentCode = Departments.DepartmentCode ORDER BY LastName;
- Prévisualiser les résultats dans la vue Feuille de données
- Si nécessaire, dans le ruban, cliquez sur Accueil.
Modifiez les caractéristiques suivantes :
Nom de la police :Californian FB (si vous n'avez pas cette police, sélectionnez Times New Roman)
Couleur de la police :bleu, accent 1, plus clair 80 % (couleurs du thème :5e colonne, 2e ligne)
Couleur de fond :Plus de couleurs :Rouge :195, Vert :95, Bleu :15
Quadrillage :Horizontal
Couleur de ligne alternative :Plus de couleurs :Rouge :128, Vert :0, Bleu :0 - Fermer la requête sans l'enregistrer
- Fermer Microsoft Access