Où (WHERE) sont les sous-requêtes ?

Manipulation de données en SQL

Mona Khalil

Data Scientist, Greenhouse Software

Qu'est-ce qu'une sous-requête ?

  • Une requête imbriquée dans une autre requête
SELECT column
FROM (SELECT column
      FROM table) AS subquery;
  • Utile pour les transformations intermédiaires
Manipulation de données en SQL

Que faites-vous des sous-requêtes ?

  • Peuvent se trouver dans n'importe quelle partie d'une requête

    • SELECT, FROM, WHERE, GROUP BY
  • Peuvent fournir diverses informations

    • Quantités scalaires (3.14159, -2, 0.001)
    • Une liste (id = (12, 25, 392, 401, 939))
    • Une table
Manipulation de données en SQL

Pourquoi les sous-requêtes ?

  • Comparaison des groupes aux valeurs résumées
    • Comment Liverpool s'est-il positionné par rapport à la moyenne des performances de la Premier League anglaise pour cette année-là ?
  • Remodeler les données
    • Quelle est la moyenne mensuelle la plus élevée de buts marqués en Bundesliga ?
  • Combiner des données qui ne peuvent pas être jointes
    • Comment intégrer les noms des équipes locales et visiteuses dans une table de résultats de matchs ?
Manipulation de données en SQL

Sous-requêtes simples

  • Peuvent être évaluées indépendamment de la requête externe
SELECT home_goal
FROM match
WHERE home_goal > (
    SELECT AVG(home_goal) 
    FROM match);

SELECT AVG(home_goal) FROM match;
1.56091291478423
Manipulation de données en SQL

Sous-requêtes simples

  • Traitées qu'une seule fois dans l'ensemble de l'instruction
SELECT home_goal
FROM match
WHERE home_goal > (
    SELECT AVG(home_goal) 
    FROM match);
Manipulation de données en SQL

Sous-requêtes dans la clause WHERE

  • Quels matchs de la saison 2012/2013 ont enregistré un nombre de buts marqués à domicile supérieur à la moyenne générale ?
SELECT AVG(home_goal) FROM match;
1.56091291478423
SELECT date, hometeam_id, awayteam_id, home_goal, away_goal
FROM match
WHERE season = '2012/2013'
      AND home_goal > 1.56091291478423;
Manipulation de données en SQL

Sous-requêtes dans la clause WHERE

  • Quels matchs de la saison 2012/2013 ont enregistré un nombre de buts marqués à domicile supérieur à la moyenne générale ?
SELECT date, hometeam_id, awayteam_id, home_goal, away_goal
FROM match
WHERE season = '2012/2013'
      AND home_goal > (SELECT AVG(home_goal)
                     FROM match);
| date       | hometeam_id | awayteam_id | home_goal | away_goal |
|------------|-------------|-------------|-----------|-----------|
| 2012-07-28 | 9998        | 1773        | 5         | 2         |
| 2012-07-29 | 9987        | 9984        | 3         | 3         |
| 2012-10-05 | 9993        | 9991        | 2         | 2         |
Manipulation de données en SQL

Liste de filtrage de sous-requêtes avec IN

  • Quelles équipes composent la ligue polonaise ?
SELECT
  team_long_name,
  team_short_name AS abbr
FROM team
WHERE 
  team_api_id IN 
  (SELECT hometeam_id
   FROM match
   WHERE country_id = 15722);
| team_long_name | abbr |
|----------------|------|
| Ruch Chorzów   | CHO  |
| Jagiellonia    | BIA  |
| Lech Poznań    | POZ  |
| P. Warszawa    | PWA  |
| Cracovia       | CKR  |
| Górnik Łęczna  | LEC  |
| Polonia Bytom  | GOR  |
| Zagłębie Lubin | ZAG  |
| Pogoń Szczecin | POG  |
| Widzew Łódź    | WID  |
| Śląsk Wrocław  | SLA  |
Manipulation de données en SQL

C'est l'heure de l'entraînement !

Manipulation de données en SQL

Preparing Video For Download...