I. Les règles du jeu▲
Pour répondre à la question posée, il vous faut écrire une seule requête SQL.
Vous avez le droit d'utiliser toutes les techniques disponibles dans SQL:2003 :
- Prédicats : BETWEEN, IN, IS NULL, IS TRUE, IS FALSE, IS UNKNOWN, ALL, ANY, SOME, EXISTS, UNIQUE, MATCH, LIKE, OVERLAPS...
- Mots clef : ALL, DISTINCT...
- Comparaisons : =, <=, >=, <, >, <>...
- Connecteurs logiques : AND, OR, NOT...
- Constructions : Row Value Constructor, CASE...
- Opérateurs : UNION, EXCEPT, INTERSECT...
- Fonctions : CAST, OCTET_LENGTH, BIT_LENGTH, COALESCE, NULLIF, CHARACTER_LENGTH, SUBSTRING, POSITION, TRIM, UPPER, LOWER, ABS, MOD, LN, EXP, POWER, FLOOR, CEILING, EXTRACT, CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP...
- Agrégats statistiques : COUNT(*), COUNT(...), MAX(...), MIN(...), SUM(...), AVG(...)...
- Clauses : WHERE, HAVING, GROUP BY, COLLATE, ORDER BY...
- Les jointures : INNER JOIN, LEFT, RIGHT ou FULL OUTER JOIN, CROSS JOIN, UNION JOIN
- Les agrégats cumulatifs CUBE, ROLLUP, GROUPING SETS et la fonction GROUPING (SQL:1999)
- Les fonctions de fenêtrage (RANK, DENSE_RANK, PERCENT_RANK, ROW_NUMBER, CUM_DIST et leurs clauses spécifiques : ORDER BY, PARTITION BY (SQL:2003)
- Les agrégats partiels obtenur avec les clauses ORDER BY, PARTITION BY (SQL:2003)
- la technique de la CTE (Common table expression - expression de table) dont vous trouverez une étude ici : CTE ET récursivité des requêtes
Vous pouvez utiliser toutes les opérations disponibles dans SQL, y compris les sous requêtes dans les clauses SELECT, FROM, WHERE et HAVING, et bien entendu les sous requêtes corrélées.
Vous pouvez ajoutez dans la base une ou plusieurs nouvelles tables et leurs données ou encore définir autant de vues que vous le voulez,pour concourrir à la solution. En revanche vous n'avez pas le droit d'utiliser une UDF (fonction utilisateur), ni une procédure stockée, ni un trigger, ni bien entendu modifier la ou les tables et les données à l'origine du problème.
Tous ces exercices ont une solution et souvent plusieurs !
Pour vous aider à répondre, nous vous donnons :
- la structure de la ou les tables sous la forme d'un ordre SQL CREATE TABLE...;
- les données à insérer sous la forme d'un jeu d'ordre SQL INSERT INTO...;
- le résultat attendu (lignes résultant de l'exécution de la requête solution);
- le niveau de difficulté noté avec des étoiles de 1 (facile) à 5 (très difficile);
- parfois une ébauche du résultat pour vous mettre sur la piste.
Pour savoir si votre solution est bonne, comme pour obtenir la solution, envoyez votre réponse ou votre demande par mail en précisant le titre ou le n° du problème.