INTRODUCTION AUTO-ÉVALUATION SQL
Indications d’utilisation
Ce test est une auto-évaluation. L’objectif de ce test est de déterminer s’il est utile que
vous suiviez le SQL: cours de base (1 jour) ou si vos connaissances actuelles sont suf-
fisantes pour pouvoir suivre efficacement le cours SQL workshop ou un des autres cours
qui utilisent SQL, comme les cours DB2, Oracle, MySQL ou SQLServer.
Ce test comporte 15 questions à choix multiples. Pour certaines questions, plusieurs
réponses correctes sont possibles: ceci sera bien indiqué. Cochez les solutions qui vous
semblent bonnes. Après avoir répondu à toutes les questions, vous pourrez comparer
vos réponses avec les solutions. Ce test vous prendra à peu près un quart d’heure.
Informations sur les tables et les colonnes
Deux tables seront utilisées: la table COURSES représente le catalogue des différents
cours. La table SESSIONS contient des données sur les cours organisées.
Exemple: dans la table COURSES est repris le cours SQL-Workshop (avec entre-autre
l’intitulé et le numéro de référence). La table SESSIONS mentionne les sessions organi-
sées pour ce cours ‘SQL-Workshop’ (avec entre-autre la date et le formateur). Le lien
entre les tables SESSIONS et COURSES est établi à l’aide de la colonne S_CID.
CID CTITLE CDUR
7890 DB2 5
7910 Unix 4
8500 Oracle 5
8000 SQLServer 5
9000 SQL workshop 3
- CID: obligatoire, alphanumérique: numéro du cours (clé primaire).
- CTITLE: obligatoire, alphanumérique: titre du cours.
- CDUR: obligatoire, numérique: durée du cours (numéro de jours).
SNO S_CID SDATE SINSTRUCTOR SCANCEL
10 7890 2005-12-02 DE KEYSER
11 7910 2005-11-04 SMITHS
12 7890 2006-01-08 DE KEYSER C
13 7890 2006-02-02 DE KEYSER
14 8000 2006-04-05 TAVERNIER C
15 7910 2006-01-08 ADAMSON C
16 8500 2006-04-05 ADAMSON
17 9000 2006-06-07 ADAMSON
La signification des colonnes est la suivante:
- SNO: obligatoire, numérique: numéro de session (clé primaire).
- S_CID: optionnel, alphanumérique: numéro du cours donné lors d’une session
particulière (clé étrangère faisant référence à la table COURSES).
- SDATE: optionnel: date de début d’une session particulière.
- SINSTRUCTOR: obligatoire, alphanumérique: personne qui est désignée
comme formateur pour une session particulière.
- SCANCEL: optionnel, alphanumérique: indique si une session est annulée ou
pas (“C” signifie que la session est annulée, vide (NULL) signifie pas annulée).
24/03/2010 Auto-évaluation SQL 2
QUESTIONS: AUTO-ÉVALUATION SQL
1. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT CTITLE, CID
FROM COURSES
WHERE CID = '7820'
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
2. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT CTITLE
FROM SESSIONS
WHERE S_CID = '7820'
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
SESSIONS no contient pas de colonne CTITLE
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
3. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT 'CTITLE'
FROM SESSIONS
WHERE S_CID = '7820'
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
Tous les lignes résultat contiennent que le texte CTITLE, donc tous sont identique.
4. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT SDATE, DISTINCT S_CID
FROM SESSIONS
ORDER BY S_CID, SDATE
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
“DISTINCT” ne peut qu’être utilisé directement après SELECT.
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
24/03/2010 Auto-évaluation SQL 3
5. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT SDATE
FROM SESSIONS
ORDER BY SDATE
GROUP BY SDATE
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
GROUP BY doit toujours se trouver avant ORDER BY.
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
6. Qu’est-ce qu’ on peut dire de la requête suivante?
SELECT SNO
FROM SESSIONS
WHERE SCANCEL NOT = NULL
O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique).
NULL ne peut qu’être utilisé dans les conditions “IS NULL” et “IS NOT NULL”.
O (b) La requête est exécutable et sensée (selon les définitions des colonnes).
O (c) La requête est exécutable mais insensée.
7. Quelle question correspond le mieux à la requête suivante?
SELECT *
FROM COURSES
WHERE CTITLE LIKE '%SQL%'
AND CID NOT IN ('7800','7820')
O (a) Donne la première ligne de la table des cours dont la colonne CTITLE est égale à
%SQL% et dont le contenu de la colonne CID est ni 7800, ni 7820.
O (b) Donne toutes les lignes de la table des cours dont la colonne CTITLE est égale à
%SQL% et dont le contenu de la colonne CID est ni 7800, ni 7820.
O (c) Donne la première ligne de la table des cours dont la colonne CTITLE contient les carac-
tères SQL et dont le contenu de la colonne CID est ni 7800, ni 7820.
O (d) Donne toutes les lignes de la table des cours dont la colonne CTITLE contient les carac-
tères SQL et dont le contenu de la colonne CID est ni 7800, ni 7820.
O (e) Donne la première ligne de la table des cours dont la colonne CTITLE est égale à
%SQL% et dont le contenu de la colonne CID ne se situe pas entre 7800 et 7820.
O (f) Donne toutes les lignes de la table des cours dont la colonne CTITLE est égale à
%SQL% et dont le contenu de la colonne CID ne se situe pas entre 7800 et 7820.
O (g) Donne la première ligne de la table des cours dont la colonne CTITLE contient les carac-
tères SQL et dont le contenu de la colonne CID ne se situe pas entre 7800 et 7820.
O (h) Donne toutes les lignes de la table des cours dont la colonne CTITLE contient les carac-
tères SQL et dont le contenu de la colonne CID ne se situe pas entre 7800 et 7820.
24/03/2010 Auto-évaluation SQL 4
8. Quelle question correspond le mieux à la requête suivante?
SELECT CID, CDUR - 1,' = PRICE'
FROM COURSES
ORDER BY 2
O (a) Sélectionnez trois colonnes de la table COURSES, dont la troisième a la valeur cons-
tante “ = PRICE”. Laissez une ligne vide après chaque deuxième ligne.
O (b) Sélectionnez deux colonnes de la table COURSES, dont la deuxième reçoit comme titre
“ = PRICE”. Triez les données selon la deuxième colonne en ordre croissant.
O (c) Sélectionnez trois colonnes de la table COURSES, dont la troisième a la valeur cons-
tante “ = PRICE”. Triez les données selon la deuxième colonne en ordre croissant.
O (d) Sélectionnez deux colonnes de la table COURSES, dont la deuxième a la valeur cons-
tante “ = PRICE”. Triez les données selon la deuxième colonne en ordre croissant.
24/03/2010 Auto-évaluation SQL 5
9. Quelle table est le résultat de la requête suivante?
SELECT S_CID, MAX(SNO)
FROM SESSIONS
GROUP BY S_CID
ORDER BY 2
O (a)
S_CID MAX(SNO)
7890 13
8000 14
7910 15
8500 16
9000 17
O (b)
S_CID MAX(SNO)
7890 10,12,13
7910 11,15
8000 14
8500 16
9000 17
O (c)
S_CID MAX(SNO)
7890 13
7910 15
O (d)
S_CID MAX(SNO)
7890 10,12,13
7910 11,15
O (e)
S_CID MAX(SNO)
9000 17
24/03/2010 Auto-évaluation SQL 6
10. Quelle table est le résultat de la requête suivante?
SELECT SNO, SDATE
FROM SESSIONS
WHERE EXTRACT(YEAR FROM SDATE) = 2004
AND EXTRACT(YEAR FROM SDATE) = 2005
O (a)
SNO SDATE
10 2005-12-02
11 2005-11-04
O (b)
SNO SDATE
10 2005-12-02
O (c)
SNO SDATE
10,11 2005
O (d)
SNO SDATE
10 2005
O (e)
SNO SDATE
11. Considérez la condition suivante:
WHERE S_CID BETWEEN '7000' AND '8000'
Lesquelles des conditions suivantes expriment exactement la même chose? [2 réponses.]
[_] [a] WHERE S_CID >= '7000' AND S_CID <= '8000'
[_] [b] WHERE S_CID >= '7000' AND S_CID < '8000'
[_] [c] WHERE S_CID > '7000' AND S_CID <= '8000'
[_] [d] WHERE S_CID > '7000' AND S_CID < '8000'
[_] [e] WHERE S_CID <= '8000' AND NOT S_CID < '7000'
[_] [f] WHERE S_CID < '8000' AND NOT S_CID < '7000'
[_] [g] WHERE S_CID >= '7000' AND NOT S_CID >= '8000'
[_] [h] WHERE S_CID > '7000' AND NOT S_CID >= '8000'
24/03/2010 Auto-évaluation SQL 7
12. Quelle requête fournit les informations demandées par la question suivante? [2 réponses.]
Donnez une liste de tous les cours qui ont eu lieu (ou auront lieu) au moins deux fois.
[_] [a]
SELECT S_CID, COUNT(*)
FROM SESSIONS
WHERE SCANCEL IS NULL
AND COUNT(*) >= 2
[_] [b]
SELECT CID, COUNT(CID)
FROM COURSES
WHERE COUNT(CID) >= 2
[_] [c]
SELECT S_CID, COUNT(S_CID)
FROM SESSIONS
WHERE SCANCEL IS NULL
GROUP BY S_CID
HAVING COUNT(*) >=2
[_] [d]
SELECT CID, COUNT(*)
FROM COURSES
GROUP BY CID
HAVING COUNT(*) >= 2
[_] [e]
SELECT S_CID, COUNT(*)
FROM SESSIONS
WHERE SCANCEL IS NULL
GROUP BY S_CID
HAVING COUNT(S_CID) >=2
[_] [f]
SELECT CID, COUNT(*)
FROM COURSES
GROUP BY CID
HAVING COUNT(SCANCEL) = 0
[_] [g]
SELECT S_CID, COUNT(*)
FROM SESSIONS
GROUP BY S_CID
HAVING COUNT(SCANCEL) = 0
[_] [h]
SELECT CID, COUNT(SESSIONS)
FROM COURSES
24/03/2010 Auto-évaluation SQL 8
13. Quelle table contient le résultat de la requête suivante?
SELECT MAX(S_CID) AS S_CID
FROM SESSIONS
GROUP BY SINSTRUCTOR
HAVING COUNT(SDATE) > 1
O (a)
S_CID
7890
7910
8000
8500
9000
Tous les numéros de cours dans SESSIONS
O (b)
S_CID
7890
7910
8000
9000
Sans HAVING, ou en utilisant “>=” au lieu de “>”.
O (c)
S_CID
7890
7910
8000
8500
Si on avait GROUP BY sdate, et on montre tous les lignes, pas seulement ceux avec MAX(s_cid)
O (d)
S_CID
7910
8500
Si on avait GROUP BY sdate
O (e)
S_CID
7890
9000
O (f)
S_CID
9000
La valeur la plus large de la table
24/03/2010 Auto-évaluation SQL 9
14. Quelle table contient le résultat de la requête suivante?
SELECT DISTINCT S_CID
FROM SESSIONS
WHERE SCANCEL IS NULL
O (a)
S_CID
7890
7890
7910
8500
9000
Ceci est le résultat sans DISTINCT
O (b)
S_CID
7890
7910
8500
9000
O (c)
S_CID
8000
8500
9000
Ceci sont les valeurs “uniques”, donc ceux qui apparaissent qu’une seule fois (dans la table complète)
O (d)
S_CID
7910
8500
9000
Ceci sont les valeurs “uniques”, donc ceux qui apparaissent qu’une seule fois (dans les sessions non-annulées)
O (e)
S_CID
7890
7910
8000
Ceci sont les lignes pour SCANCEL IS NOT NULL
O (f)
S_CID
7890
7910
Ceci sont les lignes apparaissant plusieurs fois
24/03/2010 Auto-évaluation SQL 10
15. Quelle requête fournit les informations demandées par la question suivante? [2 réponses.]
Donnez, par numéro de cours, la liste de sessions, et indiquez s’elles sont annulées ou
pas. Triez le résultat par cours et par la colonne SCANCEL.
[_] [a]
SELECT S_CID, SNO, SCANCEL
FROM SESSIONS
GROUP BY S_CID, SCANCEL
[_] [b]
SELECT S_CID, SNO, SCANCEL
FROM SESSIONS
ORDER BY S_CID, SCANCEL
[_] [c]
SELECT S_CID, SNO, SCANCEL
FROM SESSIONS
GROUP BY S_CID
ORDER BY SCANCEL
[_] [d]
SELECT S_CID, SNO, SCANCEL
FROM SESSIONS
GROUP BY SNO
ORDER BY S_CID, SCANCEL
[_] [e]
SELECT S_CID, SNO, SCANCEL
FROM COURSES, SESSIONS
ORDER BY CID, SCANCEL, SNO
[_] [f]
SELECT S_CID, SNO, SCANCEL
FROM COURSES, SESSIONS
WHERE CID = S_CID
ORDER BY S_CID, SCANCEL, SNO
24/03/2010 Auto-évaluation SQL 11