Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 3 · Requêtes LoveBook

Joindre les tables

La section « JOINT » du TP : nom de l'utilisateur et titre de l'événement (5.a, 5.b), photos par album (5.c), covoiturages par événement (5.d)… Une jointure relie deux tables par leurs clés : JOIN evenements e ON e.id = p.evenement_id. Le cours de la partie 2 écrivait FROM A, B WHERE A.x = B.x ; JOIN … ON est la forme moderne équivalente.

JointureRésultat
JOIN (interne)seulement les lignes qui ont une correspondance des deux côtés
LEFT JOINtoutes les lignes de gauche, avec NULL à droite quand rien ne correspond

Pour compter « 0 » quand il n'y a rien, utilise LEFT JOIN et COUNT(colonne_de_droite) : COUNT(*) compterait 1 la ligne vide.

À toi de coder

Qui a participé à quoi, à Paris

La base LoveBook est déjà créée dans le code (tables au pluriel : utilisateurs, groupes, evenements, participations, albums, photos, types_billets, billets, covoiturages ; voir la leçon 1).

Questions 5.a et 5.b : « le nom de l'utilisateur et le titre de l'événement pour tous les événements auxquels l'utilisateur a participé, qui ont lieu dans la ville de Paris ». La table participations relie les deux entités : c'est une CIM devenue table (partie 1). Il faut donc joindre trois tables.

Renvoie des tuples (nom, titre), triés par titre puis par nom, dans res.

Ctrl/⌘+Entrée

Vérifie que tu as compris

Tu veux tous les albums, y compris sans photo, avec leur nombre de photos. Quelle jointure ?

À toi de coder

Nombre de photos par album, albums vides compris

La base LoveBook est déjà créée dans le code (tables au pluriel : utilisateurs, groupes, evenements, participations, albums, photos, types_billets, billets, covoiturages ; voir la leçon 1).

Question 5.c : « le titre de l'album et le nombre de photos associées à chaque album ». Un album sans photo existe (« Bières »). Une jointure ordinaire (JOIN) l'éliminerait ; LEFT JOIN garde toutes les lignes de la table de gauche, avec NULL quand rien ne correspond. COUNT(p.id) ne compte pas les NULL (COUNT(*) compterait 1 pour l'album vide).

Renvoie des tuples (titre, nombre) triés par titre dans res.

Ctrl/⌘+Entrée

Le plus difficile : « tous les ». La question 1.k (utilisateurs ayant participé à tous les événements d'un groupe) se résout en comptant, par utilisateur, les événements distincts du groupe et en comparant au nombre total d'événements du groupe (sous-requête) ; tu la retrouves dans S'exercer.