Auto-évaluation SQL workshop



Vergelijkbare documenten
Zelftest SQL Workshop

Zelftest SQL Workshop

Zelftest SQL. Document: n0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Installatie van versie 2.2 van Atoum

Comprendre et se faire comprendre commence par s exprimer en néerlandais

Telebib2 Edifact Validation - Tool introduction page 2 / 15

Box and Blocks Test Of Manual Dexterity

17609_Manual_zet in en win.indd :03

Siemens SITRAIN Institute Mode d emploi Website

QUESTIONS RÉPONSES Réf. FIN/PRO/JND/KH/GVDD/2016/42

III. L adjectif. III. L adjectif. 1. Accord de l adjectif 1.1 L adjectif prend s 1.2 L adjectif + E 1.3 L adjectif substantivé

Hôtel Eurocatering. 26 oct. Sauna 24, , oct. Petit-déjeuner 14, ,50. Sous-total 3645,25 TVA 21% 765,50.

Par ici! Langs hier! HOME PAGE

Servetten Serviettes. Langue. Taal. Nederlands. Français

FAVV -AFSCA AC- Kruidtuin - FSC Kruidtuinlaan Brussel / Bruxelles. Verslag van infosessie bestek FAVV_DGLABO_CPM_2016 (29/06/2015)

Session 2016 BACCALAUREATS GENERAL ET TECHNOLOGIQUE NEERLANDAIS LANGUE VIVANTE 2

NOM, Prénom :. Dit is een schrift. Dit is een boek. Dit is een papier Dit is een blad. Dit is een schoen. Dit is een schoe. Dit is een schoon.

Parts de marché / Maarktaandelen

Caractéristiques de la voiture / Eigenschappen van de wagen :

FEEDBACK INDIVIDUELS POUR LES CENTRES DE TRAITEMENT MULTIDISCIPLINAIRES DE LA DOULEUR CHRONIQUE INDIVIDUELE FEEDBACK VOOR DE MULTIDISCIPLINAIRE

Questions & réponses dans le cadre du cahier spécial de charge «CobiT»

Technische fiche details Solidstone Fiche technique détaillée Solidstone. 1. Gewicht. De berekening van de gewichten gaat als volgt :

RÈGLEMENT. Challenge Trail de la Forêt de la Semois et de la Houille ARTICLE 1

NUCLEAIR RISICO? BEREID JE VOOR! Meer tips op Informeer je op

22490 BELGISCH STAATSBLAD MONITEUR BELGE

CHAMBRE DES REPRÉSENTANTS BELGISCHE KAMER VAN

RailTime : l info vous accompagne!

BELGISCH STAATSBLAD MONITEUR BELGE

Barema's op 01/09/2008 Barèmes au 01/09/2008

AAN DE ANDERSTALIGE OUDERS VAN KINDEREN IN DE SCHOLEN VAN TERVUREN

Conseils de sécurité importants

Praktische kengetallen

Moss. Frame steel without topper rim Flat moss. Frame Polystone natural finish Round moss/flat moss

Document strictement confidentiel. Cahier spécial des charges - Bijzonder Bestek Smals-BB /2014 Trajets de formation comportementale

e-procurement 04/02 (FR) 11/02 (NL) 18/03 (NL) FORMATION / OPLEIDING 9:00 à/tot 12:30 En collaboration avec / in samewerking met:

Ballonnen Ballons. Taal. Langue. Nederlands. Français

SPOT UV Vernis Sélectif UV

Spandoek met tunnelzoom-dubbelzijdig Bâches et banderoles avec fourreaux, impression recto-verso

52686 MONITEUR BELGE Ed. 2 BELGISCH STAATSBLAD

REGLEMENT CHAMPIONNATS DE BELGIQUE C 500 REGLEMENT BELGISCHE KAMPIOENSCHAPPEN

PRESS REVIEW. Enquête Acerta : 50-plussers meest betrokken 26/04/2010

NGI Vision Debat

Wedstrijdreglement Hug the Trooper

57936 MONITEUR BELGE BELGISCH STAATSBLAD

BELGISCHE KAMER VAN CHAMBRE DES REPRÉSENTANTS. over een betere tegemoetkoming voor de orthodontische zorg

Spandoeken met ringen Bâches et banderoles avec œillets

DISPLAY-IT COMPLETO & CLICK RAIL VOOR EEN PERFECTE FOTOWAND PARFAIT POUR UN MUR DE PHOTOS

LA COLOMBE JOYEUSE REGLEMENTEN KAMPIOENSCHAPPEN

38 heures pour les entreprises qui occupent moins que 50 travailleurs;

Eco bedrukte envelop C4 Enveloppes ECO imprimées C4

AR ASCENSEURS 09/03/2003 AR du 10/12/2012 Changements - bref résumé (MB 19/12/2012)

TRADUCTION OFFICIEUSE

CHAMBRE DES REPRÉSENTANTS BELGISCHE KAMER VAN. PROJET DU BUDGET GÉNÉRAL DES DÉPENSES pour l année budgétaire 2010

Bedrukte envelop EA5 Enveloppes personnalisées EA5

Style 21 ROBE. fashion. Juillet 2017 FOURNITURES

STRESS ENQUETE STRESS ASSURALIA EULER HERMES 2007.

Taux de Switch / Switch percentage

Voyage Logement. Logement - Trouver. Logement - Réserver. Waar kan ik vinden? Demander son chemin vers un logement

BETON DE LA LOMME TECHNISCHE INFORMATIE BEKISTINGSBLOKKEN STEPOC

Bedrukte aanstekers Briquets personnalisés

Quelle est votre fonction actuelle? Quelles sont les missions de votre organisme? Quelles sont vos tâches personnelles?

Libellé: ABO GROUP ISIN: BE Code Euronext: BE Mnémonique: ABO

Bedrukte envelop C5 Enveloppes personnalisées C5

Versie Naviga Reglement Klasse. Règlement Naviga Classe

Taux de Switch / Switch percentage

Query SQL Boekje. Fredrik Hamer

WIJ ZIJN IN-LITE. In deze stand ziet u de LED buitenverlichting van in-lite. Eenvoudig te installeren, veilig en energiezuinig.

Avant de remplir la présente formule lire la notice explicative à la dernière page. ... ( dénomination en capitales ) ( naam in blokletters )

Koninklijke Kynologische Unie Sint-Hubertus Union Royale Cynologique Saint-Hubert Sectie 4D. / Section 4D.

Over dit boek. Richtlijnen voor gebruik

Bedrukte envelop EA4 Enveloppes personnalisées EA4

En sécurité et santé au travail? Veilig en gezond op mijn werk?

VERKLARING VAN WOONPLAATS

Bedrukte envelop C4 Enveloppes personnalisées C4

VRAGEN - ANTWOORDEN. Overheidsopdracht voor diensten. Telefonisch en fysiek onthaal en bewaking van de vestigingen van de Nationale Loterij

Bedrukte paraplu s en ponchobal Parapluie imprimé

Montagehandleiding - Notice de montage

BELGISCHE KAMER VAN CHAMBRE DES REPRÉSENTANTS

UNITE 26 : On a joué, on a nagé, on a chanté!

TRADUCTION OFFICIEUSE

Wie zijn wij? Qui sommes-nous?

Ecole Communale Francophone de Wemmel

BELGISCHE KAMER VAN CHAMBRE DES REPRÉSENTANTS

MIELE SERVICE. Tot uw dienst / A votre service

Le comptable-fiscaliste de demain : un consultant? De boekhouder-fiscalist van morgen : een consultant?

Zou het mogelijk zijn om ophelderingen te krijgen betreffende het aktueel aandeelhouderschap.

BIBF Conferentie Werken in associatie: inspiratie! Conférence IPCF

Algemene vergadering KBDB Assemblée Générale RFCB

Notitieboekjes Carnet de Notes

BELGISCHE KAMER VAN CHAMBRE DES REPRÉSENTANTS

Combinatie max. 1x (a), (b) of (c) NEEN (dus a+b(+d), a+c(+d), b+c(+d) enz.) met 1x (d) Dus: a+d, b+d, c+d JA of a+2d, b+2d, c+2d

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Ansichtkaarten Cartes postales

1. Hoeveel illegale sigaretten werden in 2013, 2014 en 2015 in beslag genomen door de douane?

Soins Verts en Flandre

discipline competenties Samengevat verloop media Leren met de expo: Labels begrijpen Lezen

Spandoek met tunnelzoom-enkelzijdig

OFFRE DOCUMENTATION TECHNIQUE PEUGEOT POUR REPARATEURS INDEPENDANTS AANBOD PEUGEOT TECHNISCHE DOCUMENTATIE VOOR ONAFHANKELIJKE REPARATEURS

Praktische zaken omtrent de vakantieregeling EGOV SELECT

Transcriptie:

Auto-évaluation SQL workshop Document: f0087test.fm 07/04/2010 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING

INTRODUCTION AUTO-ÉVALUATION SQL WORKSHOP Indications Ce test a pour objectif de vous permettre d évaluer vos connaissances en matière de SQL. Vous serez alors en mesure de décider, en connaissance de cause, s il vous est utile de participer au cours SQL workshop. Ce test comporte 15 questions à choix multiples. Pour quelques 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 celles que vous trouverez dans la partie Evaluation. Ce test vous prendra à peu près une demie heure. Remarques: La syntaxe SQL à utiliser est celle du SQL2 ANSI/ISO (1992), supportée par la plupart des systèmes modernes (SQLServer, DB2, Oracle,...). Ce test est destiné aux personnes qui ont déjà de bonnes connaissances en SQL. Si ce n est pas votre cas, il serait sans doute préférable que vous essayiez d abord le test SQL: cours de base (voir fichier PDF). Informations sur les tables et les colonnes. Les questions qui suivront font référence aux tables suivantes: COURSES: contient la liste des différents cours (matières) donnés. SESSIONS: contient tous les cours donnés à une certaine date et place. PERSONS: toutes les personnes, qu elles soient formateurs, participants ou autres. ENROLMENTS: contient l information sur les inscriptions aux sessions. Relations entre les tables: COURSES - SESSIONS - indique la matière donnée lors d une session particulière. - COURSES.CID = SESSIONS.S_CID SESSIONS - ENROLMENTS - indique pour quelle session une inscription a-t-elle été enregistrée. - SESSIONS.SNO = ENROLMENTS.E_SNO PERSONS - SESSIONS - indique le formateur (numéro de personne) pour une session particulière. - PERSONS.PNO = SESSIONS.SINS_PNO PERSONS - ENROLMENTS - indique le participant (numéro de personne) pour une inscription. - PERSONS.PNO = ENROLMENTS.E_PNO 07/04/2010 Auto-évaluation SQL workshop 2

Contenu des tables et descriptions des colonnes La table COURSES 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). La table SESSIONS (8 lignes) SNO S_CID SDATE SINS_PNO SCANCEL 10 7890 2005-12-02 3 NULL 11 7910 2005-11-04 1 NULL 12 7890 2006-01-08 3 C 13 7890 2006-02-02 3 NULL 14 8000 2006-04-05 2 C 15 7910 2006-01-08 36 C 16 8500 2006-04-05 36 NULL 17 9000 2006-06-07 36 NULL - 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. - SINS_PNO: obligatoire, numérique: personne qui est désignée comme formateur pour une session particulière (clé étrangère vers la table PERSONS). - 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). 07/04/2010 Auto-évaluation SQL workshop 3

La table PERSONS - PNO: obligatoire, numérique: numéro de personne (clé primaire) - PNAME: optionnel, alphanumérique: nom de la personne - P_CONO: optionnel, numérique: société pour laquelle une personne travaille. La table ENROLMENTS: PNO PNAME P_CONO 1 SMITHS 3 2 TAVERNIER 3 3 DE KEYSER 3 4 HEBBELYNCK 5 5 VAN DE BROECK 5 6 VAN HEIJKOOP 10 7 DE WINDT 2 8 SPENSER 10 9 BENOIT 1 10 BENOIT 1 11 LOOSE NULL 13 PARKER 6 15 DEHEM 7 17 PIELAGE 4 18 GELADE 2 33 BUENK 9 36 ADAMSON 8 45 MOORS 4 50 MAK NULL E_SNO E_PNO ECANCEL 10 4 NULL 10 7 C 11 45 NULL 11 13 NULL 12 4 NULL 13 15 C 13 36 NULL 14 3 NULL 14 18 C 14 1 NULL 15 4 NULL 15 7 NULL 16 3 NULL 16 18 NULL - E_SNO: obligatoire, numérique: session pour laquelle une inscription est enregistrée (clé étrangère vers SESSIONS) (partie de la clé primaire, avec E_PNO). - E_PNO: obligatoire, numérique: personne inscrite (clé étrangère vers PERSONS). - ECANCEL: optionnel, alphanumérique: indique si une inscription est annulée ou pas ( C signifie que l inscription est annulée, NULL signifie non annulée). 07/04/2010 Auto-évaluation SQL workshop 4

QUESTIONS AUTO-ÉVALUATION SQL WORKSHOP 1. Lesquelles des requêtes suivantes produisent exactement 1 ligne de résultat? [2 réponses.] [_] [a] SELECT COUNT(*) WHERE PNO > 100 Impliciete group by produceert altijd exact 1 resultaatrij, zelfs met een lege (dus altijd onware ) conditie. [_] [b] SELECT PNO, COUNT(*) WHERE PNO = 2 Syntax-fout ( PNO not guaranteed constant in group ), dus i.h.b. geen resultaatrijen [_] [c] Produceert 19 rijen SELECT COUNT(*) GROUP BY PNO [_] [d] INNER JOIN SESSIONS ON PNO = SINS_PNO WHERE PNO = 36 Produceert drie dubbele rijen [_] [e] LEFT OUTER JOIN ENROLMENTS ON PNO = E_PNO WHERE PNO = 2 GROUP BY PNAME Zelfs voor niet-cursist (PNO=2) wordt PNAME getoond bij LEFT OUTER JOIN; groepering garandeert bovendien dat er geen dubbele rijen verschijnen. [_] [f] SELECT SUM(CDUR) FROM COURSES, SESSIONS, ENROLMENTS WHERE CID = S_CID AND SNO = E_SNO GROUP BY CID Er wordt een rij geproduceerd per cursus, met als waarde het totale aantal lesdagen van die cursus. 2. Combien de lignes seront produites par la requête suivante? SELECT E_SNO FROM ENROLMENTS UNION SELECT SNO WHERE SNO BETWEEN 15 AND 17 O (a) 0, ou erreur syntaxique O (b) 2 Want twee queries O (c) 8 O (d) 10 O (e) 15 7 unieke waarden uit de eerste query, bijkomend de waarde 17 uit de tweede. UNION haalt dubbels weg, zelfs als die allemaal afkomstig zijn uit de eerste query. 7+3 (dus overlap wordt niet geëlimineerd, maar dubbels wel) 14+1 ( union all zou dit opleveren) O (f) 17 14 (van enrolments) + 3 (van sessions) 07/04/2010 Auto-évaluation SQL workshop 5

3. Quelles requêtes génèrent le résultat suivant? [3 bonnes réponses.] [_] [a] [_] [b] [_] [c] [_] [d] SELECT PNO, PNAME, 'ENROLLEE OR INSTRUCTOR', SESSIONS, ENROLMENTS WHERE PNO = SINS_PNO AND PNO = E_PNO ORDER BY 3, 1 In dit geval moet er letterlijk ENROLLEE OR INSTRUCTOR in de derde kolom staan. SELECT PNO, PNAME, CASE PNO WHEN E_PNO THEN 'ENROLLEE' ELSE 'INSTRUCTOR' END, SESSIONS, ENROLMENTS WHERE PNO = SINS_PNO AND PNO = E_PNO ORDER BY 3, 1 Deze query geeft enkel docenten die ook terzelfdertijd cursist zijn van hun eigen sessie. SELECT PNO, PNAME, 'INSTRUCTOR' WHERE PNO IN (SELECT SINS_PNO ) UNION ALL SELECT PNO, PNAME, 'ENROLLEE' INNER JOIN ENROLMENTS ON PNO = E_PNO ORDER BY 3, 1 De eerste query geeft inderdaad de laatste 4 rijen, maar de tweede query produceert dubbels. SELECT DISTINCT PNO, PNAME, 'INSTRUCTOR', SESSIONS WHERE PNO = SINS_PNO UNION ALL SELECT PNO, PNAME, 'ENROLLEE' WHERE PNO IN (SELECT E_PNO FROM ENROLMENTS) ORDER BY 3, 1 DISTINCT verwijdert de dubbels uit de eerste query, de tweede bevat vanzelf geen dubbels. PNO PNAME 1 SMITHS ENROLLEE 3 DE KEYSER ENROLLEE 4 HEBBELYNCK ENROLLEE 7 DE WINDT ENROLLEE 13 PARKER ENROLLEE 15 DEHEM ENROLLEE 18 GELADE ENROLLEE 36 ADAMSON ENROLLEE 45 MOORS ENROLLEE 1 SMITHS INSTRUCTOR 2 TAVERNIER INSTRUCTOR 3 DE KEYSER INSTRUCTOR 36 ADAMSON INSTRUCTOR 07/04/2010 Auto-évaluation SQL workshop 6

[_] [e] SELECT PNO, PNAME, 'INSTRUCTOR', SESSIONS WHERE PNO = SINS_PNO UNION SELECT PNO, PNAME, 'ENROLLEE' WHERE PNO IN (SELECT E_PNO FROM ENROLMENTS) ORDER BY 3, 1 Dubbels uit de eerste query worden verwijderd door het gebruik van UNION i.p.v. UNION ALL. [_] [f] SELECT DISTINCT PNO, PNAME, 'INSTRUCTOR', SESSIONS WHERE PNO = SINS_PNO UNION SELECT PNO, PNAME, 'ENROLLEE' WHERE EXISTS (SELECT E_PNO FROM ENROLMENTS WHERE E_PNO = PERSONS.PNO) ORDER BY 3, 1 De gecorreleerd subquery levert alle enrollees. 4. Combien de lignes seront produites par la requête suivante? SELECT DISTINCT PNO LEFT OUTER JOIN ENROLMENTS ON PNO = E_PNO O (a) 0, ou erreur syntaxique O (b) 1 O (c) 9 O (d) 11 Het aantal verschillende waarden in de E_PNO-kolom van ENROLMENTS (zou kloppen met INNER JOIN) Het aantal niet-geannuleerde ENROLMENTS O (e) 14 O (f) 19 Het aantal rijen van ENROLMENTS (zou kloppen met INNER JOIN en zonder DISTINCT) Het aantal rijen van PERSONS (want left outer join ) 07/04/2010 Auto-évaluation SQL workshop 7

5. Quelle requête fournit les informations demandées par la question suivante? [2 réponses.] [_] [a] [_] [b] [_] [c] [_] [d] [_] [e] [_] [f] [_] [g] Donnez le numéro des sessions pour lesquelles aucune inscription n a été annulée. SELECT DISTINCT SNO, ENROLMENTS WHERE SNO = E_SNO AND ECANCEL IS NULL Dit geeft de sessies waarvoor er minstens 1 niet-geannuleerde inschrijving is. SELECT DISTINCT SNO, ENROLMENTS WHERE SNO = E_SNO AND ECANCEL IS NOT NULL Dit geeft de sessies met minstens 1 geannuleerde inschrijving; het complement dus van wat gevraagd wordt. SELECT SNO WHERE SNO NOT IN (SELECT E_SNO FROM ENROLMENTS WHERE ECANCEL IS NOT NULL) SELECT SNO WHERE SNO IN (SELECT E_SNO FROM ENROLMENTS WHERE ECANCEL IS NULL) Dit geeft de sessies waarvoor er minstens 1 niet-geannuleerde inschrijving is. SELECT SNO WHERE NOT EXISTS (SELECT 1 FROM ENROLMENTS WHERE E_SNO = SESSIONS.SNO AND ECANCEL IS NOT NULL) SELECT SNO INNER JOIN ENROLMENTS ON SNO = E_SNO WHERE ECANCEL IS NULL Dit geeft de sessies waarvoor er minstens 1 niet-geannuleerde inschrijving is. SELECT SNO INNER JOIN ENROLMENTS ON SNO = E_SNO WHERE ECANCEL IS NOT NULL Dit geeft de sessies met minstens 1 geannuleerde inschrijving; het complement dus van wat gevraagd wordt. 07/04/2010 Auto-évaluation SQL workshop 8

6. Quelles requêtes génèrent le résultat suivant ( tous les participants )? [3 bonnes réponses.] [_] [a] [_] [b] [_] [c] [_] [d] [_] [e] [_] [f] [_] [g] WHERE PNO IN (SELECT E_PNO FROM ENROLMENTS), ENROLMENTS WHERE PNO = E_PNO Resultaattabel zal dubbels bevatten. WHERE PNO = ANY (SELECT E_PNO FROM ENROLMENTS) WHERE EXISTS (SELECT E_PNO FROM ENROLMENTS) Dit is geen gecorreleerde subquery; zal alle personen tonen. INNER JOIN ENROLMENTS ON PNO = E_PNO WHERE E_PNO IS NOT NULL Resultaattabel zal dubbels bevatten. LEFT OUTER JOIN ENROLMENTS ON PNO = E_PNO GROUP BY PNAME Resultaattabel zal iedereen bevatten, dus ook niet-cursisten. RIGHT OUTER JOIN ENROLMENTS ON PNO = E_PNO GROUP BY PNAME Door de group by worden dubbels vermeden. PNAME SMITHS DE KEYSER HEBBELYNCK VAN HEIJKOOP DE WINDT PARKER DEHEM GELADE MOORS 07/04/2010 Auto-évaluation SQL workshop 9

7. Quelle question correspond le mieux à la requête suivante? SELECT P_CONO, COUNT(*) WHERE EXISTS (SELECT SNO WHERE SINS_PNO = PERSONS.PNO) GROUP BY P_CONO O (a) Donnez par formateur, le nombre de sessions qu il a données. Donnez également l entreprise pour laquelle il travaille. De telling gebeurt in de PERSONS-tabel; kan dus niet het aantal sessies tellen. O (b) Donnez par entreprise, le nombre de personnes qui ont déjà suivi au moins un cours. De conditie in de subquery spreekt over docenten, niet over cursisten. O (c) Donnez le nombre de sessions par cours, ainsi que l entreprise où le formateur travaille. Hiervoor moet de cursus-tabel of in elk geval de kolom s_cid geraadpleegd worden. O (d) Donnez le nombre de formateurs par entreprise. 07/04/2010 Auto-évaluation SQL workshop 10

8. Indiquez les requêtes qui donnent le même résultat que la requête suivante. [2 réponses.] [_] [a] [_] [b] [_] [c] [_] [d] [_] [e] WHERE PNO = (SELECT MAX(PNO) ) Dit geeft de naam van de persoon met de hoogste PNO-waarde. WHERE PNO >= ANY (SELECT PNO ) Dit geeft iedereen, vermits de conditie altijd waar is. WHERE PNO >= ALL (SELECT PNO ) De conditie is enkel waar voor de grootste PNO. AS P1 WHERE EXISTS (SELECT MAX(PNO) AS P2 WHERE P1.PNO = P2.PNO) De conditie is altijd waar: gecorreleerde subquery genereert altijd 1 rij, waarvoor max(pno) = p1.pno, MAX(PNO) GROUP BY PNAME Alle groepen bestaan uit 1 rij, dus dit genereert alle personen (met hun eigen PNO) SELECT P1.PNAME AS P1 LEFT OUTER JOIN PERSONS AS P2 ON P1.PNO < P2.PNO GROUP BY P1.PNO, P1.PNAME HAVING COUNT(P2.PNO) = 0 Deze self-join levert grotere groepen naarmate de persoon een kleinere PNO heeft. Enkel de persoon met de hoogste PNO heeft dus een lege groep. Een INNER JOIN zou die groep niet bevatten, vandaar de LEFT OUTER JOIN. 07/04/2010 Auto-évaluation SQL workshop 11

9. Quelles requêtes fournissent les informations pour la question suivante? [3 bonnes réponses.] [_] [a] [_] [b] Donnez la liste de tous les cours, y compris ceux pour lesquels aucune session n a été organisée. Donnez également les sessions ainsi que la date de début. SELECT CID, SNO, SDATE FROM COURSES, SESSIONS WHERE CID = S_CID Dit geeft enkel een lijst van geplande cursussen. SELECT CID, SNO, SDATE FROM COURSES INNER JOIN SESSIONS ON CID = S_CID Dit geeft enkel een lijst van geplande cursussen. [_] [c] SELECT CID, SNO, SDATE FROM COURSES LEFT OUTER JOIN SESSIONS ON CID = S_CID Door de outer join worden gegarandeerd alle cursussen getoond, ook de niet-geplande. [_] [d] SELECT CID, SNO, SDATE FROM COURSES RIGHT OUTER JOIN SESSIONS ON CID = S_CID Deze outer join garandeert alle sessies, niet alle cursussen. [_] [e] [_] [f] [_] [g] SELECT CID, SNO, SDATE FROM COURSES, SESSIONS WHERE CID = S_CID UNION ALL SELECT CID, 0, CAST(NULL AS DATE) FROM COURSES WHERE CID NOT IN (SELECT S_CID WHERE S_CID IS NOT NULL) De eerste query geeft alle geplande cursussen, de tweede alle nog niet geplande. De extra conditie IS NOT NULL is nodig (althans wanneer effectief NULLs zouden voorkomen in de kolom S_CID): NOT IN is altijd onwaar indien de lijst die door de subquery wordt geproduceerd, NULLs bevat. SELECT CID, SNO, SDATE FROM COURSES, SESSIONS WHERE CID = S_CID UNION ALL SELECT CID, 0, NULL FROM COURSES WHERE CID NOT IN (SELECT S_CID ) De eerste query geeft alle geplande cursussen, de tweede alle nog niet geplande. SELECT CID, SNO, SDATE FROM COURSES, SESSIONS WHERE CID = S_CID UNION ALL SELECT S_CID, SNO, SDATE WHERE S_CID IS NULL De eerste query geeft alle geplande cursussen, maar de tweede geeft niks want S_CID is nooit null dans le contenu actuel de la table. 07/04/2010 Auto-évaluation SQL workshop 12

10. Quelle requête fournit les informations demandées par la question suivante? Donnez le nom des instructeurs qui ont en même temps déjà suivi plus d un cours. O (a) WHERE PNO IN (SELECT E_PNO FROM ENROLMENTS, SESSIONS WHERE E_SNO = SNO AND E_PNO = SINS_PNO AND ECANCEL IS NULL AND SCANCEL IS NULL GROUP BY E_PNO HAVING COUNT(*) > 1) De subquery geeft docenten die cursist waren op hun eigen sessies. O (b) WHERE PNO IN (SELECT SINS_PNO WHERE SCANCEL IS NULL AND SNO IN (SELECT E_SNO FROM ENROLMENTS WHERE ECANCEL IS NULL GROUP BY E_PNO HAVING COUNT(*) > 1)) Syntax-fout in de binnenste subquery: E_SNO is niet gegarandeerd constant binnen een groep. Groeperen op E_SNO i.p.v. E_PNO zou alle docenten geven van sessies met meer dan twee niet-geannuleerde inschrijvingen. O (c), ENROLMENTS, SESSIONS WHERE E_PNO = PNO AND E_SNO = SNO AND PNO IN (SELECT SINS_PNO ) AND SCANCEL IS NULL AND ECANCEL IS NULL GROUP BY E_PNO, PNAME HAVING COUNT(*) > 1 Groeperen op PNAME alleen is minder correct, in geval van docenten met dezelfde naam. O (d) INNER JOIN ENROLMENTS ON PNO = E_PNO INNER JOIN SESSIONS S1 ON E_SNO = S1.SNO INNER JOIN SESSIONS S2 ON PNO = S1.SINS_PNO WHERE S1.SCANCEL IS NULL AND ECANCEL IS NULL GROUP BY E_PNO, PNAME HAVING COUNT(*) > 1 Docenten van meer dan 1 sessie, die slechts 1 cursus gevolgd hebben, worden toch getoond. 07/04/2010 Auto-évaluation SQL workshop 13

11. Qu est-ce qu on peut dire de la requête suivante? SELECT SNO, PNAME, SDATE, PERSONS WHERE SINS_PNO = PNO UNION SELECT E_PNO, PNAME, ENROLMENTS WHERE PNO = E_PNO ORDER BY 1 O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique). De twee queries produceren niet evenveel kolommen. 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. 12. Qu est-ce qu on peut dire de la requête suivante? SELECT SNO, SDATE, PNAME, PERSONS, ENROLMENTS WHERE SNO = E_SNO AND P_CONO = E_PNO AND ECANCEL IS NULL AND SCANCEL IS NULL 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. P_CONO en E_PNO hebben niet dezelfde interpretatie, al is er syntactisch niets aan de hand. 13. Qu est-ce qu on peut dire de la requête suivante? SELECT SNO, SDATE, S_CID AS S1 WHERE SCANCEL IS NOT NULL AND SDATE >= ALL (SELECT SDATE WHERE S_CID = S1.S_CID) 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). Deze query geeft de laatste sessie (met datum en cursusnummer) van elke cursus. O (c) La requête est exécutable mais insensée. 14. Qu est-ce qu on peut dire de la requête suivante?, COUNT(*), SESSIONS WHERE SINS_PNO = PNO O (a) La requête ne peut pas être exécutée (donne une erreur syntaxique). Een impliciete GROUP BY waarin PNAME dus niet gegarandeerd constant is binnen de groep. 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. 07/04/2010 Auto-évaluation SQL workshop 14

15. Qu est-ce qu on peut dire de la requête suivante? SELECT (SELECT COUNT(*) AS NR_8000 WHERE S_CID = '8000') * 100.0 / COUNT(S_CID) AS PERCENT_8000 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). De subquery produceert één enkel getal, en mag dus als scalaire subquery gebruikt worden. De hele query geeft dan eveneens 1 getal, nl. het percentage sessies van cursus 8000 t.o.v. het totale aantal sessies (van alle cursussen). O (c) La requête est exécutable mais insensée. 07/04/2010 Auto-évaluation SQL workshop 15

EVALUATION. Ici sont les réponses correctes: 1. a e 2. c 3. d e f 4. f 5. c e 6. a c g 7. d 8. b e 9. c e f 10. c 11. a 12. c 13. b 14. a 15. b Comptez 1 point par bonne réponse. Pour les questions avec plusieurs bonnes réponses, comptez 1 point seulement si vous avez coché toutes les bonnes alternatives. Si votre score atteint 13 ou plus, vous êtes déjà un expert en SQL. Il ne vous est donc pas nécessaire de suivre ce cours. Si votre score se situe entre 8 et 12, le cours SQL workshop vous permettra de compléter vos connaissances en SQL. Si votre score est inférieur à 8, il vous est vivement conseillé de suivre le cours SQL workshop car vous y apprendrez certainement beaucoup. N oubliez cependant pas de vérifier si vous disposez des connaissances préalables suffisantes pour suivre efficacement ce cours (auto-évaluation SQL: cours de base: fichier PDF). 07/04/2010 Auto-évaluation SQL workshop 16