Bases des bases de données

Une table Employe(NumEmploye, Nom, IdService) contient 5 lignes dont les valeurs IdService sont, dans l'ordre, 10, 20, 10, NULL et NULL. Une table Service(IdService, NomService) contient 3 lignes dont IdService vaut 10, 20 et 30. Combien de lignes renvoie SELECT Service.NomService, Employe.Nom FROM Service LEFT OUTER JOIN Employe ON Service.IdService = Employe.IdService ?

  1. A3 lignes
  2. B4 lignes
  3. C5 lignes
Afficher la réponse et l'explication

Réponse : B. 4 lignes

Une jointure externe gauche (LEFT OUTER JOIN) garde toutes les lignes de la table de gauche (ici la table Service) ; lorsque la table de droite n'a pas de ligne correspondante, elle produit une ligne dont les colonnes de la table de droite sont remplies de NULL. Le service 10 a 2 employés, ce qui donne 2 lignes ; le service 20 donne 1 ligne ; et le service 30, qui n'a aucun employé, donne 1 ligne avec un nom NULL, soit 4 lignes au total. Les 2 employés dont IdService est NULL ne correspondent à aucun service et, étant des lignes de la table de droite, qui n'est pas celle conservée intégralement, n'apparaissent pas dans le résultat. Une jointure interne éliminerait aussi la ligne du service 30, ce qui donnerait 3 lignes. Inverser les tables en Employe LEFT OUTER JOIN Service garde les 5 employés, ce qui donne 5 lignes. Avec les jointures externes, il est important de vérifier quelle table conserve toutes ses lignes.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. La colonne x de la table R contient 4 lignes de valeurs 1, 1, 2, 3, et la colonne x de la table S contient 4 lignes de valeurs 1, 1, 2, 4. Combien de lignes renvoie SELECT * FROM R INNER JOIN S ON R.x = S.x ?
  2. Une table Client(IdClient, Nom) contient 4 lignes : (C1, Aoki), (C2, Inoue), (C3, Ueda), (C4, Eto). Une table Commande(IdCommande, IdClient, Montant) contient 5 lignes : (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000). Combien de lignes renvoie SELECT Nom FROM Client WHERE IdClient IN (SELECT IdClient FROM Commande WHERE Montant > 5000) ?
  3. À partir d'une table Client(IdClient, Nom) et d'une table Commande(IdCommande, IdClient, Montant), on veut obtenir le nom des clients qui n'ont jamais passé de commande. Quelle instruction SQL est correcte ?
  4. Quelle proposition décrit correctement une vue (view) dans une base de données relationnelle ?
  5. Quel est le but principal de la normalisation des tables d'une base de données relationnelle ?