Principes de base de SQL

1. Avant de commencer

Vous avez découvert comment intégrer des données en réseau dans votre application et comment utiliser des coroutines pour gérer des tâches simultanées. Dans ce parcours, vous allez acquérir une autre compétence de base en développement Android, qui vous permettra de créer des applications de qualité. Il s'agit de ce que l'on appelle la persistance. Même si vous ne connaissez pas ce terme, vous avez probablement déjà fait l'expérience de la persistance lors de l'utilisation d'une application. Qu'il s'agisse de rédiger une liste de courses en ligne, de faire défiler des photos prises il y a plusieurs années dans une application photo ou encore de mettre en pause un jeu ou de le reprendre, les applications font appel à la persistance pour assurer la fluidité de l'expérience utilisateur. Bien que la persistance des données ne préoccupe pas directement les utilisateurs, il s'agit d'une compétence essentielle à la création d'applications de haute qualité.

Plus tard dans ce module, vous vous familiariserez avec la persistance sur Android et découvrirez une bibliothèque appelée Room, qui permet aux applications de lire et d'écrire des données à partir d'une base de données. Toutefois, avant cela, il est important de comprendre ce que sont les bases de données relationnelles, ainsi que la lecture et l'utilisation des données à l'aide du langage SQL (Structured Query Language). Si ces concepts vous sont déjà familiers, utilisez cette leçon pour vous rafraîchir les idées et vous assurer que vous avez les connaissances requises avant de découvrir Room. Dans le cas contraire, ne vous inquiétez pas. À ce stade, vous n'avez pas encore besoin de savoir quoi que ce soit sur les bases de données. À la fin de cet atelier de programmation, vous disposerez de toutes les connaissances requises pour pouvoir commencer à utiliser des bases de données dans une application Android.

Conditions préalables

  • Vous savez parcourir un projet dans Android Studio.

Points abordés

  • Structure d'une base de données relationnelle : tables, colonnes et lignes
  • Instructions SELECT, y compris les clauses WHERE, ORDER BY, GROUP BY et LIMIT
  • Insérer, mettre à jour et supprimer des lignes à l'aide de SQL

Ce dont vous avez besoin

  • Un ordinateur sur lequel est installé Android Studio

2. Présentation d'une base de données relationnelle

Qu'est-ce qu'une base de données relationnelle ?

En informatique, une base de données est tout simplement une collection structurée de données à laquelle il est possible d'accéder par voie électronique et dans laquelle vous pouvez écrire. Les bases de données peuvent stocker les mêmes informations que celles que vous pouvez représenter dans une application avec Kotlin. Sur les appareils mobiles, les bases de données sont couramment utilisées pour enregistrer les données d'une application en cours d'exécution afin de pouvoir y accéder la prochaine fois que l'application sera ouverte. Il n'est pas nécessaire de récupérer ces données à partir d'une autre source, comme Internet. C'est ce qu'on appelle la persistance des données.

Lorsque l'on parle de persistance des données, le terme "base de données relationnelle" revient souvent. Il s'agit d'un type de base de données courant qui organise les données en tables, colonnes et lignes. Lorsque vous écrivez du code Kotlin, vous créez des classes qui représentent des objets. Une table dans une base de données relationnelle fonctionne de la même manière. En plus de représenter des données, les tables peuvent également faire référence à d'autres tables, ce qui vous permet d'établir des relations entre elles. Imaginons un exemple classique avec les tables "élèves", "enseignants" et "cours". Un cours est associé à un seul enseignant, tandis qu'un élève peut être associé à plusieurs cours. Une base de données permet de représenter les relations entre ces tables. D'où le terme base de données relationnelle.

ef61dd2663e4da82.png

Les relations concrètes peuvent être représentées par des relations entre les tables.

Tableaux, colonnes et lignes

La définition des tables (ou des données que vous représentez) n'est que la première étape de la création d'une base de données relationnelle. Vous devez également réfléchir aux informations particulières à stocker dans chaque table. Les propriétés spécifiques sont représentées par des colonnes. Une colonne comprend un nom et un type de données. Vous connaissez déjà les propriétés liées à l'utilisation de classes en Kotlin. Vous pouvez considérer les tables SQL de la même manière. Une table est comme une définition de classe. Elle décrit le type d'objet que vous souhaitez représenter. Une colonne est une propriété spécifique de l'objet créé avec chaque entrée dans la table.

Plante

id

ENTIER

espèce

TEXTE (chaîne)

nom

TEXTE (chaîne)

couleur

TEXTE (chaîne)

Jardin

id

ENTIER

nom

TEXTE (chaîne)

longueur

ENTIER

largeur

ENTIER

Les entrées de table individuelles sont appelées lignes. Elles sont semblables à une instance de classe en Kotlin. Chaque ligne contient des données correspondant à chaque colonne. La table fournit le modèle, mais les lignes définissent les données réelles qui y sont stockées.

id

espèce

nom

couleur

1

Camellia Sinensis

Théier

vert

2

Echinacea Purpurea

Échinacée pourpre

pourpre

3

Ferula Foetida

Asafœtida

vert

Clé primaire

Dans l'exemple ci-dessus, vous remarquerez qu'il existe une colonne pour la propriété "id". Les espèces végétales dans la nature, tout comme les autres éléments que vous représentez dans une base de données, ne sont généralement pas associées à des identifiants numérotés. Toutefois, les lignes d'une table de données doivent être associées à un identifiant unique. C'est ce que l'on appelle communément une clé primaire, qui est propre à chaque ligne de la table. Elle est particulièrement utile lorsque vous devez référencer les lignes d'une table de données dans une autre table. Prenons l'exemple d'une autre table, appelée "jardin", qui permet d'associer un jardin à toutes les espèces végétales qu'il contient. Vous pouvez utiliser la clé primaire de la table "plantes" pour référencer une plante à partir d'une entrée de la table "jardin" ou de toute autre table de la base de données.

Les clés primaires permettent de créer les relations dans une base de données relationnelle. Les bases de données que vous utiliserez dans ce cours ne contiennent qu'une seule table. Toutefois, l'utilisation d'un identifiant unique vous permettra d'interroger, de mettre à jour et de supprimer des éléments existants dans cette table.

Types de données

Tout comme la définition des propriétés des classes Kotlin, les types de données possibles pour les colonnes d'une base de données sont divers et variés. Une colonne peut représenter un caractère, une chaîne, un nombre (avec ou sans décimale) ou des données binaires. D'autres données telles que les dates et les heures peuvent être représentées sous forme numérique ou sous forme de chaîne, selon le cas d'utilisation. Lorsque vous utiliserez Room, vous travaillerez principalement avec des types de données Kotlin, mais ils équivalent aux types de données SQL en arrière-plan.

SQL

Pour accéder à une base de données relationnelle, de manière indépendante ou à l'aide d'une bibliothèque telle que Room, vous avez besoin de SQL.

Qu'est-ce que le SQL ? SQL signifie Structured Query Language (littéralement, langage de requête structuré) et permet de lire et de manipuler des données dans une base de données relationnelle. Toutefois, ne vous inquiétez pas : vous n'aurez pas besoin d'apprendre un tout nouveau langage de programmation pour implémenter la persistance dans votre application. Contrairement à un langage de programmation tel que Kotlin, SQL ne comprend que quelques types d'instructions pour la lecture et l'écriture à partir d'une base de données. Une fois que vous vous serez familiarisé avec le format de base de chacune d'elles, vous comprendrez facilement les informations spécifiques que vous lisez ou écrivez dans la base de données.

Vous trouverez ci-dessous les instructions SQL les plus courantes et celles que vous utiliserez en particulier.

SELECT

Récupère des informations spécifiques à partir d'une table de données. Les résultats peuvent être filtrés et triés de différentes manières.

INSERT

Ajoute une ligne à une table.

UPDATE

Met à jour une ou plusieurs lignes dans une table.

DELETE

Supprime une ou plusieurs lignes dans une table.

Avant de pouvoir faire quoi que ce soit avec le langage SQL, vous avez besoin d'une base de données. Sur l'écran suivant, vous découvrirez un exemple de projet comprenant une base de données pour vous entraîner à exécuter des requêtes SQL.

3. Code de démarrage pour la base de données sur les parcs

Le code de démarrage que vous téléchargerez est légèrement différent de celui utilisé pour les ateliers de programmation précédents. Au lieu de partir d'un projet existant, nous vous fournissons un projet Android Studio simple qui créera une base de données que vous pourrez utiliser pour vous entraîner à exécuter des requêtes SQL. Une fois l'application exécutée, vous pourrez accéder à la base de données à l'aide d'un outil Android Studio appelé "outil d'inspection de bases de données".

Pour obtenir le code de cet atelier et l'ouvrir dans Android Studio, procédez comme suit :

Obtenir le code

  1. Cliquez sur l'URL indiquée. La page GitHub du projet s'ouvre dans un navigateur.
  2. Sur la page GitHub du projet, cliquez sur le bouton Code pour afficher une boîte de dialogue.

5b0a76c50478a73f.png

  1. Dans la boîte de dialogue, cliquez sur le bouton Download ZIP (Télécharger le fichier ZIP) pour enregistrer le projet sur votre ordinateur. Attendez la fin du téléchargement.
  2. Recherchez le fichier sur votre ordinateur (il se trouve probablement dans le dossier Téléchargements).
  3. Double-cliquez sur le fichier ZIP pour le décompresser. Un dossier contenant les fichiers du projet est alors créé.

Ouvrir le projet dans Android Studio

  1. Lancez Android Studio.
  2. Dans la fenêtre Welcome to Android Studio (Bienvenue dans Android Studio), cliquez sur Open an existing Android Studio project (Ouvrir un projet Android Studio existant).

36cc44fcf0f89a1d.png

Remarque : Si Android Studio est déjà ouvert, sélectionnez l'option de menu File > New > Import Project (Fichier > Nouveau > Importer un projet).

21f3eec988dcfbe9.png

  1. Dans la boîte de dialogue Import Project (Importer un projet), accédez à l'emplacement du dossier du projet décompressé. Il se trouve probablement dans le dossier Téléchargements.
  2. Double-cliquez sur le dossier de ce projet.
  3. Attendez qu'Android Studio ouvre le projet.
  4. Cliquez sur le bouton Run (Exécuter) 11c34fc5e516fb1c.png pour créer et exécuter l'application. Assurez-vous qu'elle fonctionne correctement.
  5. Parcourez les fichiers du projet dans la fenêtre de l'outil Projet pour voir comment l'application est configurée.

Avant de passer à la section suivante, assurez-vous d'avoir bien configuré le projet de démarrage.

  1. Exécutez l'application. Un seul écran semblable à celui-ci devrait s'afficher :

3c62c10fad7c0136.png

  1. Dans Android Studio, sélectionnez Affichage > Fenêtres d'outils > Outil d'inspection de bases de données pour ouvrir l'outil d'inspection de bases de données.
  2. Un nouvel onglet intitulé "Outil d'inspection de bases de données" devrait s'afficher en bas de l'écran. Le chargement peut prendre quelques secondes, mais vous devriez voir une liste sur la gauche contenant les tables de données. Vous pouvez les sélectionner pour exécuter des requêtes.

8c2b12249b4f652a.png

4. Instructions SELECT de base

Pour les exercices suivants, vous exécuterez les requêtes dans l'outil d'inspection de bases de données. Assurez-vous de sélectionner la table appropriée dans le volet de gauche (park), puis cliquez sur le bouton Ouvrir un nouvel onglet de requête. Une zone de texte vous permettant de saisir des commandes SQL devrait s'afficher.

bb06b5ce9ac4ba72.png

Une instruction SQL est une commande, semblable à une ligne de code, qui accède (en lecture ou en écriture) à une base de données. En langage SQL, la tâche la plus simple consiste à récupérer toutes les données d'une table. Pour ce faire, commencez par le mot SELECT, qui signifie que vous souhaitez lire des données. Ajoutez ensuite une étoile (*). C'est là que vous sélectionneriez normalement les colonnes qui vous intéressent. L'étoile permet de sélectionner toutes les colonnes. Utilisez ensuite le mot clé FROM suivi du nom de la table de données, park. Exécutez la commande suivante dans l'outil d'inspection de bases de données et observez la table entière avec toutes les lignes et toutes les colonnes.

SELECT * FROM park

Si vous souhaitez sélectionner uniquement une colonne spécifique au lieu de toutes les colonnes de la table de données, vous pouvez indiquer le nom de la colonne qui vous intéresse.

SELECT city FROM park

Vous pouvez également sélectionner plusieurs colonnes spécifiques, en les séparant par une virgule.

SELECT name, established, city FROM park

Parfois, il n'est pas nécessaire de sélectionner toutes les lignes d'une base de données. Vous pouvez ajouter des clauses dans une instruction SQL pour affiner davantage les résultats.

L'une d'elles est LIMIT, qui vous permet de limiter le nombre de lignes renvoyées. Ainsi, au lieu de renvoyer les 23 résultats, la requête suivante ne renvoie que les cinq premiers.

SELECT name FROM park
LIMIT 5

WHERE est l'une des clauses les plus courantes et les plus utiles. Une clause WHERE vous permet de filtrer les résultats en fonction d'une ou de plusieurs colonnes.

SELECT name FROM park
WHERE type = "national_park"

Il existe également un opérateur "pas égal à" (!=). La requête suivante répertorie tous les parcs de plus de 40 000 hectares qui n'entrent pas dans la catégorie recreation_area. Avec les clauses WHERE, vous pouvez également utiliser des opérateurs booléens comme AND ou OR pour ajouter plusieurs conditions.

SELECT name FROM park
WHERE type != "recreation_area"
AND area_acres > 100000

S'entraîner

Les requêtes SQL peuvent être utiles pour répondre à diverses questions concernant vos données. La meilleure façon de vous entraîner consiste à écrire vos propres requêtes. Au cours des prochaines étapes, vous aurez la possibilité d'écrire une requête pour répondre à une question spécifique. Assurez-vous de la tester dans l'outil d'inspection de bases de données avant de continuer.

Tous les exercices s'appuient sur les connaissances cumulées dans toutes les sections précédentes. À la fin de l'atelier de programmation, des tutoriels vous permettront de vérifier vos réponses.

5. Fonctions SQL courantes

La première requête que vous avez rédigée renvoyait simplement chaque ligne de la base de données.

SELECT * FROM park

Toutefois, vous ne souhaitez peut-être pas renvoyer une longue liste de résultats. SQL propose également des fonctions d'agrégation qui peuvent vous aider à convertir les données en une seule valeur significative. Par exemple, supposons que vous souhaitiez connaître le nombre de lignes dans la table park. Au lieu de SELECT * ..., utilisez la fonction COUNT() et indiquez * (pour toutes les lignes) ou un nom de colonne. La requête renverra alors le décompte de toutes les lignes.

SELECT COUNT(*) FROM park

La fonction SUM() permet également d'additionner les valeurs d'une colonne. Cette requête filtre uniquement les parcs nationaux (car il s'agit des seules entrées dont la colonne park_visitors n'indique pas la valeur "null") et additionne le nombre total de visiteurs pour chaque parc.

SELECT SUM(park_visitors) FROM park
WHERE type = "national_park"

Notez que vous pouvez toujours utiliser SUM() avec une valeur "null", mais celle-ci sera simplement traitée comme si elle correspondait à zéro. La requête suivante renvoie le même résultat que la requête précédente. Cependant, lorsque vous commencez à utiliser SQL dans vos applications, il est conseillé d'être aussi précis que possible afin d'éviter les bugs.

SELECT SUM(park_visitors) FROM park

En plus d'agréger des valeurs, d'autres fonctions utiles, telles que MAX() et MIN(), permettent d'obtenir respectivement la plus grande ou la plus petite valeur.

SELECT MAX(area_acres) FROM park
WHERE type = 'national_park'

Obtenir des valeurs distinctes

Vous remarquerez peut-être que la colonne de certaines lignes contient la même valeur que d'autres lignes. Par exemple, la colonne "type" ne comporte qu'un nombre limité de valeurs possibles. Vous pouvez éliminer les valeurs en double des résultats de la requête à l'aide du mot clé DISTINCT. Par exemple, pour récupérer toutes les valeurs uniques de la colonne "type", vous pouvez utiliser la requête suivante.

SELECT DISTINCT type FROM park

Vous pouvez également utiliser DISTINCT dans une fonction d'agrégation. Dès lors, au lieu de retourner les type uniques et de les compter vous-même, vous pouvez simplement renvoyer le décompte.

SELECT COUNT(DISTINCT type) FROM park

S'entraîner

Prenez le temps d'appliquer ce que vous avez appris et essayez d'écrire les requêtes suivantes. N'oubliez pas d'utiliser l'outil d'inspection de bases de données pour vérifier que le code fonctionne.

6. Trier et regrouper les résultats de requêtes

Dans les exemples précédents, il peut être difficile de trouver une entrée spécifique. Heureusement, vous pouvez également trier les résultats d'une instruction SELECT à l'aide d'une clause ORDER BY. Ajoutez une clause ORDER BY à la fin de la requête après la clause WHERE (le cas échéant) et spécifiez simplement le nom de la colonne que vous souhaitez trier. L'exemple suivant récupère le nom de chaque parc dans la base de données, mais trie les résultats par ordre alphabétique.

SELECT name FROM park
ORDER BY name

Par défaut, les résultats sont triés par ordre croissant, mais vous pouvez ajouter le mot clé ASC ou DESC à la clause afin de les trier par ordre croissant ou décroissant. Vous n'avez pas besoin de spécifier ASC, car la première requête présente les résultats par ordre croissant, mais si vous souhaitez obtenir les résultats par ordre décroissant, ajoutez le mot clé DESC à la fin de la clause ORDER BY.

SELECT name FROM park
ORDER BY name DESC

Pour faciliter la lecture des résultats, vous pouvez également les regrouper par colonne. Avant la clause ORDER BY (le cas échéant), vous pouvez spécifier une clause GROUP BY et une colonne. Les résultats sont alors séparés dans un sous-ensemble spécifique à la colonne définie dans GROUP BY. Pour chaque colonne, les résultats sont filtrés et triés en fonction du reste de la requête.

SELECT type, name FROM park
GROUP BY type
ORDER BY name

Prenons un exemple afin de mieux illustrer nos propos. Au lieu de compter tous les parcs dans la base de données, vous pouvez voir le nombre de parcs de chaque type et obtenir un décompte distinct pour chacun.

SELECT type, COUNT(*) FROM park
GROUP BY type
ORDER BY type

S'entraîner

Prenez le temps d'appliquer ce que vous avez appris et essayez d'écrire la requête suivante. N'oubliez pas d'utiliser l'outil d'inspection de bases de données pour vérifier que le code fonctionne.

Problème 4 : Écrivez une requête SQL pour obtenir le nom des cinq parcs les plus populaires, ainsi que le nombre de visiteurs associés, dans l'ordre décroissant.

7. Insérer et supprimer des lignes

Vous devez être en mesure d'écrire des données pour exploiter pleinement les données persistantes sur Android avec Room. En plus d'interroger une base de données, il existe des instructions SQL permettant d'insérer, de mettre à jour et de supprimer des lignes. Vous devrez les connaître lorsque vous apprendrez à écrire des données avec Room dans le deuxième parcours.

Instruction INSERT

Pour ajouter une ligne, utilisez l'instruction INSERT. L'instruction INSERT est suivie du mot clé INTO et du nom de la table dans laquelle vous souhaitez insérer une ligne. Après le mot clé VALUES, indiquez la valeur de chaque colonne (dans l'ordre) entre parenthèses, en les séparant par une virgule. Le format d'une instruction INSERT est le suivant :

INSERT INTO table_name
VALUES (column1, column2, ...)

Pour ajouter une ligne à la table park, l'instruction INSERT doit se présenter comme indiqué ci-dessous. Les valeurs correspondent à l'ordre dans lequel les colonnes sont définies pour la table park. Notez que certaines données ne sont pas spécifiées. Ce n'est pas un problème pour le moment, car vous avez toujours la possibilité de mettre à jour une ligne après l'avoir insérée.

INSERT INTO park
VALUES (null, 'Googleplex', 'Mountain View', 12, null, 0, '')

Notez également que vous transmettez null pour l'ID. Vous pouvez fournir un nombre spécifique, mais cette approche n'est pas pratique. En effet, votre application devrait effectuer le suivi du dernier ID pour éviter les doublons. Vous pouvez toutefois configurer votre base de données de sorte que la clé primaire soit automatiquement incrémentée, ce qui a eu lieu ici. De cette manière, vous pouvez transmettre null, et l'ID suivant est choisi automatiquement.

À l'aide d'une clause WHERE permettant de spécifier le parc nommé "Googleplex", vérifiez que l'entrée a été créée.

SELECT * FROM park
WHERE name = 'Googleplex'

Instruction UPDATE

Une fois qu'une ligne a été créée, vous pouvez modifier son contenu à tout moment. Pour ce faire, utilisez une instruction UPDATE. Comme toutes les autres instructions SQL que vous avez vues, vous devez d'abord spécifier le nom de la table. Dans la clause SET, définissez simplement la nouvelle valeur de chaque colonne.

UPDATE table_name
SET column1 = ...,
column2 = ...,
...
WHERE column_name = ...
...

Pour l'entrée Googleplex, une propriété est mise à jour, et d'autres champs sont renseignés (ces champs étaient auparavant associés à une valeur, mais il s'agissait d'une chaîne vide, ""). Vous pouvez mettre à jour plusieurs ou tous les champs simultanément à l'aide d'une instruction UPDATE.

UPDATE park
SET area_acres = 46,
established = 1088640000,
type = 'office'
WHERE name = 'Googleplex'

Les mises à jour sont reflétées dans les résultats de la requête.

SELECT * FROM park
WHERE name = 'Googleplex'

Instruction DELETE

Enfin, vous pouvez également utiliser une commande SQL pour supprimer des lignes de la base de données. Spécifiez à nouveau le nom de la table, puis, comme vous l'avez fait avec les instructions SELECT, utilisez une clause WHERE pour fournir les critères correspondant aux lignes à supprimer. Étant donné qu'une clause WHERE peut correspondre à plusieurs lignes, vous pouvez supprimer plusieurs lignes à l'aide d'une seule commande.

DELETE FROM table_name
WHERE <column_name> = ...

Comme Googleplex n'est pas un parc national, utilisez une instruction DELETE pour supprimer cette entrée de la base de données.

DELETE FROM park
WHERE name = 'Googleplex'

Vérifiez que la ligne a été supprimée à l'aide d'une instruction SELECT. Si la requête ne renvoie aucun résultat, cela signifie que toutes les lignes portant le nom "Googleplex" ont bien été supprimées.

SELECT * FROM park
WHERE name = 'Googleplex'

Vous savez maintenant tout ce qu'il y a à savoir sur l'insertion, la mise à jour et la suppression de données. Retenez essentiellement le format de la commande SQL que vous souhaitez exécuter, et rappelez-vous de spécifier des valeurs qui correspondent aux colonnes de la base de données. Lorsque vous découvrirez Room dans le prochain atelier de programmation, vous vous concentrerez principalement sur la lecture à partir d'une base de données. L'insertion, la mise à jour et la suppression de données seront abordées en détail dans le parcours 2.

8. Solutions aux exercices

Nous espérons que les exercices pratiques vous ont aidé à mieux comprendre les concepts du langage SQL. Si vous avez rencontré des difficultés ou si vous souhaitez vérifier vos réponses, n'hésitez pas à vous reporter à nos réponses ci-dessous.

Problème 1 : écrivez une requête SQL pour obtenir le nom de tous les parcs comptant moins de 1 000 000 visiteurs.

Ce problème demande le nom des parcs (une seule colonne) pour lesquels le nombre de visiteurs est inférieur à 1 000 000, ce qui peut être spécifié dans la clause WHERE.

SELECT name FROM park
WHERE park_visitors < 1000000

Problème 2 : écrivez une requête SQL pour obtenir le nombre de villes distinctes dans la table park.

Le total d'une colonne peut être calculé à l'aide de la fonction COUNT(). Toutefois, comme vous ne voulez afficher que des villes distinctes (car certaines villes possèdent plusieurs parcs), vous pouvez utiliser le mot clé DISTINCT avant le nom de la colonne dans la fonction COUNT().

SELECT COUNT(DISTINCT city) FROM park

Problème 3 : écrivez une requête SQL pour obtenir le nombre total de visiteurs de parcs à San Francisco.

Le nombre total de visiteurs peut être calculé à l'aide de la fonction SUM(). En outre, vous avez également besoin d'une clause WHERE pour ne spécifier que les parcs situés à San Francisco.

SELECT SUM(park_visitors) FROM park
WHERE city = "San Francisco"

Problème 4 : écrivez une requête SQL pour obtenir le nom des cinq parcs les plus populaires (et uniquement le nom), ainsi que le nombre de visiteurs associés, dans l'ordre décroissant.

Cette requête doit interroger à la fois les colonnes "name" et "park_visitor". Les résultats seront triés dans l'ordre décroissant au niveau de la colonne park_visitors à l'aide de la clause ORDER BY. Comme vous ne souhaitez pas regrouper les résultats dans une autre colonne et effectuer un tri au sein de ces groupes, il n'est pas nécessaire d'inclure une clause GROUP BY.

SELECT name, park_visitors FROM park
ORDER BY park_visitors DESC
LIMIT 5

9. Félicitations

Résumé :

  • Les bases de données relationnelles vous permettent de stocker des données, organisées en tables, colonnes et lignes.
  • Vous pouvez récupérer les données d'une base de données à l'aide de l'instruction SQL SELECT.
  • Vous pouvez utiliser diverses clauses dans une instruction SELECT, y compris WHERE, GROUP BY, ORDER BY et LIMIT, pour rendre vos requêtes plus spécifiques.
  • Vous pouvez utiliser des fonctions d'agrégation pour combiner les données de plusieurs lignes dans une seule colonne.
  • Vous pouvez ajouter, mettre à jour et supprimer des lignes dans une base de données à l'aide des instructions SQL INSERT, UPDATE et DELETE, respectivement.

En savoir plus