QCM : Langage SQL et requêtes — 24 questions

Questions et réponses du QCM

1. Quelle caractéristique décrit le mieux le rôle de SQL dans l’exécution d’une requête ?

SQL transforme les tables en fichiers, puis le SGBD affiche directement ces fichiers.
SQL décrit chaque étape d’accès aux données, puis le SGBD applique cet itinéraire.
SQL impose l’organisation physique des données, puis le SGBD vérifie cette organisation.
SQL indique le résultat recherché, puis le SGBD choisit une méthode d’exécution optimisée.

SQL indique le résultat recherché, puis le SGBD choisit une méthode d’exécution optimisée.

Explication

SQL est un langage déclaratif de haut niveau : il précise ce qu’il faut obtenir sans imposer la méthode d’exécution. Le SGBD choisit ensuite une stratégie adaptée, contrairement à une description détaillée de chaque étape d’accès.

2. Quelle relation associe un consommateur à une bière qu’il apprécie dans le schéma considéré ?

Likes(#drinker, #beer)
Beers(name, manf)
Sells(#bar, #beer, price)
Frequents(#drinker, #bar)

Likes(#drinker, #beer)

Explication

La relation Likes contient les identifiants du consommateur et de la bière appréciée. Sells décrit une vente entre un bar et une bière, tandis que Frequents associe un consommateur à un bar.

3. Dans quel ordre conceptuel une requête SQL appliquée à une relation traite-t-elle ses principales clauses ?

SELECT fournit les attributs, FROM filtre les tuples, puis WHERE construit les expressions.
FROM produit les expressions, SELECT fournit les tuples, puis WHERE choisit la relation.
FROM fournit la relation, WHERE filtre les tuples, puis SELECT produit les attributs ou expressions.
WHERE fournit la relation, SELECT filtre les tuples, puis FROM renomme les attributs.

FROM fournit la relation, WHERE filtre les tuples, puis SELECT produit les attributs ou expressions.

Explication

Le traitement conceptuel part de la relation indiquée par FROM, conserve les tuples satisfaisant WHERE, puis détermine les attributs ou expressions affichés par SELECT. La clause WHERE ne choisit donc pas les colonnes du résultat.

4. Quelle condition permet de rechercher les noms de bières correspondant au motif textuel « Ale% » ?

name IN 'Ale%'
name = 'Ale%'
name >= 'Ale%'
name LIKE 'Ale%'

name LIKE 'Ale%'

Explication

LIKE compare une valeur textuelle à un motif, et le caractère % représente une suite de caractères variable. Les opérateurs de comparaison comme = ou >= comparent des valeurs plutôt qu’un motif textuel.

5. Dans une table de personnes, quelle situation peut être représentée par une valeur NULL pour la colonne du conjoint ?

La personne possède un conjoint dont le nom est enregistré dans une autre colonne.
La personne possède une valeur numérique nulle calculée lors d’une agrégation.
La personne est célibataire et la notion de conjoint ne s’applique pas.
La personne a fourni une chaîne vide qui doit être affichée comme une adresse.

La personne est célibataire et la notion de conjoint ne s’applique pas.

Explication

NULL peut représenter une valeur inapplicable, par exemple le conjoint d’une personne célibataire. Une chaîne vide et la valeur numérique zéro sont des valeurs distinctes de NULL, tandis qu’un conjoint enregistré ailleurs ne décrit pas cette absence d’applicabilité.

6. Quelle valeur de vérité SQL complète les deux valeurs classiques TRUE et FALSE ?

MISSING
UNKNOWN
UNDEFINED
NULL

UNKNOWN

Explication

La logique SQL est ternaire : elle comprend TRUE, FALSE et UNKNOWN. NULL représente une valeur de donnée manquante ou inapplicable, mais ce n’est pas une troisième valeur de vérité nommée dans la logique SQL.

7. Une ligne dont la condition WHERE vaut UNKNOWN est-elle conservée dans le résultat ?

Oui, car toute condition issue d’une comparaison avec NULL est retenue.
Oui, car UNKNOWN est traité comme une réponse positive par WHERE.
Non, car WHERE conserve les lignes dont la condition vaut FALSE.
Non, car WHERE conserve les lignes dont la condition vaut TRUE.

Non, car WHERE conserve les lignes dont la condition vaut TRUE.

Explication

Une condition WHERE ne conserve une ligne que lorsqu’elle vaut TRUE ; FALSE et UNKNOWN l’excluent. UNKNOWN apparaît notamment lorsqu’une comparaison porte sur NULL, mais il n’est pas interprété comme une condition vraie.

8. Dans quel ordre logique une requête portant sur plusieurs relations traite-t-elle les principales clauses SQL ?

Elle filtre les relations avec WHERE, applique SELECT, puis forme le produit de FROM.
Elle applique SELECT, forme le produit de FROM, puis filtre les résultats avec WHERE.
Elle forme le produit de FROM, applique SELECT, puis filtre les attributs avec WHERE.
Elle forme le produit de FROM, filtre avec WHERE, puis applique la projection de SELECT.

Elle forme le produit de FROM, filtre avec WHERE, puis applique la projection de SELECT.

Explication

Le traitement logique commence par le produit des relations indiquées dans FROM, puis conserve les tuples satisfaisant WHERE et projette enfin les attributs ou expressions de SELECT. L’ordre proposé par les autres réponses intervertit ces étapes fondamentales.

9. Quelle condition permet de trouver les boissons aimées par les personnes fréquentant Joe’s Bar ?

Relier Likes et Frequents par drinker, puis imposer bar = 'Joe''s Bar'.
Relier Likes et Frequents par drinker, puis imposer beer = 'Joe''s Bar'.
Relier Likes et Frequents par beer, puis imposer drinker = 'Joe''s Bar'.
Relier Likes et Frequents par bar, puis imposer drinker = 'Joe''s Bar'.

Relier Likes et Frequents par drinker, puis imposer bar = 'Joe''s Bar'.

Explication

La correspondance entre les deux relations se fait grâce à l’attribut commun drinker, tandis que la sélection porte sur le bar fréquenté. Les autres conditions utilisent un attribut de liaison ou une valeur qui ne représente pas le bar recherché.

10. Pourquoi une auto-jointure de Beers utilise-t-elle la condition b1.name < b2.name en plus de l’égalité des fabricants ?

Pour comparer des bières appartenant à des fabricants différents.
Pour sélectionner les fabricants dont le nom est alphabétiquement antérieur.
Pour conserver les paires où les deux noms de bière sont égaux.
Pour éviter les paires identiques et les doublons inversés.

Pour éviter les paires identiques et les doublons inversés.

Explication

L’inégalité entre les noms impose un ordre entre les deux occurrences d’une même paire et exclut l’association d’une bière avec elle-même. L’égalité des fabricants reste nécessaire, mais elle ne suffit pas à éliminer les doublons inversés.

11. Quelle écriture SQL exprime explicitement la condition d’une jointure theta ?

R JOIN S USING *
R JOIN S ON condition
R CROSS JOIN S
R NATURAL JOIN S

R JOIN S ON condition

Explication

Une jointure theta s’écrit avec JOIN ... ON, la condition étant formulée explicitement après ON. NATURAL JOIN déduit au contraire la correspondance à partir des attributs de même nom.

12. Comment une jointure naturelle détermine-t-elle les attributs utilisés pour relier deux relations ?

Elle exige une expression ON écrite par le programmeur pour chaque attribut comparé.
Elle égalise implicitement les attributs portant le même nom dans les deux relations.
Elle compare les valeurs de toutes les colonnes sans tenir compte de leurs noms.
Elle relie les relations selon l’ordre physique de leurs colonnes dans les tables.

Elle égalise implicitement les attributs portant le même nom dans les deux relations.

Explication

NATURAL JOIN repère les attributs communs aux deux relations et impose implicitement leur égalité. Une clause ON explicite caractérise plutôt la jointure theta, et l’ordre ou le nombre des colonnes ne définit pas cette jointure.

13. Quelle propriété distingue une jointure externe d’une jointure interne ?

Elle exclut les tuples qui possèdent une correspondance dans l’autre relation.
Elle remplace la condition de jointure par une comparaison entre tous les attributs.
Elle déduit la condition de liaison à partir des noms communs des attributs.
Elle conserve les tuples sans correspondance dans l’une des relations.

Elle conserve les tuples sans correspondance dans l’une des relations.

Explication

Une jointure externe conserve les tuples pendants, même lorsqu’aucun tuple correspondant n’existe dans l’autre relation. La conservation des correspondances et l’inférence par noms communs ne constituent pas sa définition.

14. Quelle jointure externe conserve les tuples pendants de la relation gauche et ceux de la relation droite ?

FULL OUTER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
INNER JOIN

FULL OUTER JOIN

Explication

FULL OUTER JOIN conserve les tuples sans correspondance des deux côtés. LEFT conserve ceux de gauche, RIGHT ceux de droite, tandis qu’INNER élimine les tuples pendants.

15. Qu’est-ce qu’une sous-requête en SQL ?

Une instruction SELECT-FROM-WHERE placée entre parenthèses et intégrée à une autre requête.
Une clause WHERE qui remplace les relations mentionnées dans la clause FROM.
Une relation temporaire créée automatiquement sans instruction SELECT dans la requête.
Une jointure externe qui conserve les tuples sans correspondance entre deux tables.

Une instruction SELECT-FROM-WHERE placée entre parenthèses et intégrée à une autre requête.

Explication

Une sous-requête est une instruction SELECT-FROM-WHERE écrite entre parenthèses et peut notamment servir de relation dans FROM ou de valeur dans WHERE. Les autres réponses décrivent des mécanismes distincts ou ne correspondent pas à une définition SQL valide.

16. Quelle condition doit respecter une sous-requête utilisée comme valeur scalaire ?

Elle doit produire une relation vide lorsque la requête principale commence.
Elle doit produire au moins deux tuples pour permettre une comparaison.
Elle peut produire plusieurs tuples si la clause WHERE les parcourt.
Elle doit produire exactement un tuple.

Elle doit produire exactement un tuple.

Explication

Une sous-requête scalaire doit fournir exactement un tuple afin d’être interprétée comme une valeur unique. Un résultat vide ou comportant plusieurs tuples provoque une erreur d’exécution, contrairement à certains usages avec IN ou EXISTS.

17. Que vérifie l’opérateur IN lorsqu’il est appliqué au résultat d’une sous-requête ?

Que la sous-requête produit exactement un tuple utilisable comme valeur scalaire.
Que le tuple ou la valeur appartient aux résultats produits par la sous-requête.
Que la valeur est différente de chaque tuple produit par la sous-requête.
Que la sous-requête produit au moins un tuple, sans comparer son contenu.

Que le tuple ou la valeur appartient aux résultats produits par la sous-requête.

Explication

IN teste l’appartenance de la valeur ou du tuple à la relation renvoyée par la sous-requête. Le simple fait d’obtenir un résultat non vide correspond à EXISTS, tandis que la différence avec tous les résultats relève de <> ALL.

18. Quelle différence caractérise une sous-requête autonome et une sous-requête corrélée ?

L’autonome produit plusieurs tuples, tandis que la corrélée produit une valeur scalaire.
L’autonome exige une jointure naturelle, tandis que la corrélée exige une jointure externe.
L’autonome ne dépend pas du tuple courant, tandis que la corrélée le référence.
L’autonome référence le tuple courant, tandis que la corrélée peut être évaluée une seule fois.

L’autonome ne dépend pas du tuple courant, tandis que la corrélée le référence.

Explication

Une sous-requête autonome ne fait pas référence à la requête principale et peut être évaluée une seule fois. Une sous-requête corrélée dépend du tuple courant de la requête principale et peut donc être évaluée pour chaque tuple.

19. Quelle différence caractérise la sémantique multiensemble d’une requête SELECT-FROM-WHERE par rapport à la sémantique ensembliste ?

Elle trie les tuples selon leur ordre d’apparition
Elle conserve les tuples dupliqués dans le résultat
Elle exclut les tuples contenant une valeur NULL
Elle regroupe les tuples selon leurs attributs

Elle conserve les tuples dupliqués dans le résultat

Explication

La sémantique multiensemble conserve les occurrences dupliquées produites par SELECT-FROM-WHERE. La sémantique ensembliste, en revanche, élimine les doublons du résultat.

20. Quel comportement les opérateurs UNION, INTERSECT et EXCEPT ont-ils par défaut concernant les doublons ?

Ils éliminent les doublons uniquement après un tri
Ils conservent les doublons comme une requête SELECT simple
Ils comptent les doublons sans les inclure dans le résultat
Ils éliminent les doublons selon une sémantique ensembliste

Ils éliminent les doublons selon une sémantique ensembliste

Explication

UNION, INTERSECT et EXCEPT utilisent par défaut une sémantique ensembliste, qui supprime les doublons. Une requête SELECT simple suit plutôt une sémantique multiensemble qui peut les conserver.

21. Une table contient cinq tuples, dont deux ont une valeur NULL dans la colonne price. Que compte COUNT(*) sur cette table ?

Aucune ligne, car price contient des NULL
Les cinq tuples de la table
Les trois valeurs non NULL de price
Les deux tuples dont price vaut NULL

Les cinq tuples de la table

Explication

COUNT(*) compte le nombre total de tuples, indépendamment des valeurs NULL présentes dans les colonnes. COUNT(price), lui, aurait compté les trois valeurs de price qui ne sont pas NULL.

22. Une colonne contient les valeurs 10, NULL, 20 et NULL ; quelle valeur AVG(colonne) prend-elle en compte ?

La moyenne calculée sur 10 et 20
La moyenne calculée sur les quatre entrées
La valeur NULL comme résultat automatique
Aucune valeur, car la colonne contient des NULL

La moyenne calculée sur 10 et 20

Explication

Les valeurs NULL ne contribuent pas à AVG, de sorte que la moyenne porte ici sur 10 et 20. Leur présence n’empêche pas le calcul et ne les transforme pas en zéros.

23. Une requête utilise GROUP BY ville et calcule SUM(chiffre_affaires) ; comment l’agrégation est-elle effectuée ?

Une somme globale est calculée avant de distinguer les villes
Une somme est calculée uniquement pour la ville la plus fréquente
Une somme distincte est calculée pour chaque ville
Une somme est calculée pour chaque tuple avant le regroupement

Une somme distincte est calculée pour chaque ville

Explication

GROUP BY ville forme un groupe pour chaque valeur de ville, puis SUM est appliquée séparément à chaque groupe. Une somme globale ignorerait précisément le regroupement demandé.

24. Dans une requête avec GROUP BY département et une agrégation, quelle règle doit respecter chaque élément de la clause SELECT ?

Il doit apparaître dans WHERE ou être agrégé
Il doit être présent dans ORDER BY pour être valide
Il doit être agrégé ou figurer dans GROUP BY
Il doit correspondre à une colonne contenant des valeurs uniques

Il doit être agrégé ou figurer dans GROUP BY

Explication

Lorsqu’une agrégation est utilisée, chaque élément sélectionné doit soit être soumis à une fonction d’agrégation, soit apparaître dans GROUP BY. Une présence dans ORDER BY ou WHERE ne satisfait pas cette règle.

Révisez avec les flashcards

Mémorisez les réponses avec 52 flashcards sur Langage SQL et requêtes.

Qu'est-ce que SQL exprime principalement ?

Ce qu'il faut faire, pas comment le faire.

Qui choisit la méthode d'exécution optimisée en SQL ?

Le système de gestion de bases de données.

Quelles relations contient le schéma d'exemple ?

Beers, Bars, Drinkers, Likes, Sells, Frequents.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Langage SQL et requêtes.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM