SQLite Requête : Sélectionner, Où, LIMITE, DÉCALAGE, Compter, Regrouper par

⚡ Résumé intelligent

SQLite Les requêtes permettent de récupérer et de filtrer des données à l'aide des clauses SELECT, FROM, WHERE, GROUP BY, ORDER BY et LIMIT. En combinant ces clauses avec des opérateurs, des agrégats, des sous-requêtes et des opérations ensemblistes, vous pouvez lire, structurer et synthétiser des enregistrements provenant de n'importe quelle source de données. SQLite base de données.

  • 🔍 SÉLECTIONNER et DE : La clause SELECT choisit les colonnes, les valeurs littérales ou les alias ; la clause FROM nomme les tables ou les sous-requêtes fournissant les données.
  • 🧮 OÙ et Operateurs : La clause WHERE filtre les lignes à l'aide des opérateurs de concaténation, CAST, arithmétique, de comparaison, LIKE, GLOB, BETWEEN, IN et EXISTS.
  • (I.e. Granulats et groupesping: AVGLes fonctions COUNT, GROUP_CONCAT, MAX, MIN, SUM et TOTAL se combinent avec GROUP BY et HAVING pour résumer les lignes groupées.
  • 🔗 Sous-requêtes et ensembles : Les sous-requêtes, les expressions de table communes et les opérateurs UNION, INTERSECT et EXCEPT combinent les résultats de plusieurs instructions SELECT.
  • 🧩 Ordre et valeurs NULL : Les instructions ORDER BY, LIMIT, OFFSET, DISTINCT, CASE et IS NULL contrôlent l'ordre des lignes, la taille de la sortie et les valeurs manquantes.
  • 🤖 Assistance IA : Les assistants IA de conversion de texte en SQL et GitHub Copilot génèrent SQLite Requêtes SELECT, JOIN et GROUP BY à partir d'invites en langage clair.

SQLite Question

Les sections ci-dessous expliquent en détail la lecture des données avec SELECT et FROM, le filtrage des lignes avec WHERE et ses opérateurs, le tri et la limitation des résultats, les fonctions d'agrégation, GROUP BY et HAVING, les sous-requêtes, les opérations ensemblistes, la gestion des valeurs NULL, les expressions CASE et les expressions de table communes.

Écrire requêtes SQL dans un SQLite base de données, vous devez savoir comment fonctionnent les clauses SELECT, FROM, WHERE, GROUP BY, ORDER BY et LIMIT et comment les utiliser.

Au cours de ce tutoriel, vous apprendrez à utiliser ces clauses et à écrire SQLite clauses.

Lecture de données avec Select

La clause SELECT est l'instruction principale que vous utilisez pour interroger un SQLite base de données. Dans la clause SELECT, vous indiquez ce qu'il faut sélectionner. Mais avant la clause select, voyons d'où nous pouvons sélectionner des données à l'aide de la clause FROM.

La clause FROM est utilisée pour spécifier où souhaitez-vous sélectionner les données. Dans la clause from, vous pouvez spécifier une ou plusieurs tables ou sous-requêtes dans lesquelles sélectionner les données, comme nous le verrons plus loin dans les didacticiels.

Notez que, pour tous les exemples suivants, vous devez exécuter sqlite3.exe et ouvrir une connexion à l'exemple de base de données de manière fluide :

Étape 1) Dans cette étape,

Ouvrez « Ordinateur » et accédez au répertoire suivant : « C:\sqlite », puis ouvrez « sqlite3.exe ».

Lecture de données avec Select dans SQLite

Étape 2) Ouvrez la base de données « TutorialsSampleDB.db » à l’aide de la commande suivante :

Lecture de données avec Select dans SQLite

Vous êtes maintenant prêt à exécuter n’importe quel type de requête sur la base de données.

Dans la clause SELECT, vous pouvez sélectionner non seulement un nom de colonne, mais vous disposez de nombreuses autres options pour spécifier ce que vous souhaitez sélectionner. Comme suit:

SELECT *

Cette commande sélectionnera toutes les colonnes de toutes les tables (ou sous-requêtes) référencées dans la clause FROM. Par exemple:

SELECT *
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Cela sélectionnera toutes les colonnes des tables des étudiants et des tables des départements :

Lecture de données avec Select dans SQLite

SELECT nom de la table.*

Cela sélectionnera toutes les colonnes de la table « tablename » uniquement. Par exemple:

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Cela sélectionnera uniquement toutes les colonnes de la table des étudiants :

Lecture de données avec Select dans SQLite

Une valeur littérale

Une valeur littérale est une valeur constante qui peut être spécifiée dans l'instruction select. Vous pouvez normalement utiliser des valeurs littérales de la même manière que vous utilisez les noms de colonnes dans la clause SELECT. Ces valeurs littérales seront affichées pour chaque ligne parmi les lignes renvoyées par la requête SQL.

Voici quelques exemples de différentes valeurs littérales que vous pouvez sélectionner :

  • Littéral numérique – nombres dans n’importe quel format comme 1, 2.55,… etc.
  • Littéraux de chaîne – Toute chaîne « USA », « ceci est un exemple de texte »,… etc.
  • NULL – valeur NULLe.
  • Current_TIME – Il vous donnera l'heure actuelle.
  • CURRENT_DATE – cela vous donnera la date actuelle.

Cela peut être pratique dans certaines situations où vous devez sélectionner une valeur constante pour toutes les lignes renvoyées. Par exemple, si vous souhaitez sélectionner tous les étudiants de la table Étudiants, avec une nouvelle colonne appelée pays qui contient la valeur « USA », vous pouvez faire ceci :

SELECT *, 'USA' AS Country FROM Students;

Cela vous donnera toutes les colonnes des étudiants, plus une nouvelle colonne « Pays » comme celle-ci :

Lecture de données avec Select dans SQLite

Notez que cette nouvelle colonne Pays n’est pas réellement une nouvelle colonne ajoutée au tableau. Il s'agit d'une colonne virtuelle, créée dans la requête pour afficher les résultats et elle ne sera pas créée sur la table.

Noms et pseudonymes

L'alias est un nouveau nom pour la colonne qui vous permet de sélectionner la colonne avec un nouveau nom. Les alias de colonnes sont spécifiés à l'aide du mot-clé « AS ».

Par exemple, si vous souhaitez sélectionner la colonne StudentName à renvoyer avec « Student Name » au lieu de « StudentName », vous pouvez lui donner un alias comme celui-ci :

SELECT StudentName AS 'Student Name' FROM Students;

Cela vous donnera les noms des étudiants avec le nom « Student Name » au lieu de « StudentName », comme ceci :

SQLite Noms et pseudonymes

Notez que le nom de la colonne reste « StudentName » ; la colonne StudentName demeure inchangée, elle ne subit aucune modification due à l’alias.

L'alias ne changera pas le nom de la colonne ; cela changera simplement le nom d'affichage dans la clause SELECT.

Notez également que le mot-clé « AS » est facultatif, vous pouvez mettre le nom d'alias sans celui-ci, quelque chose comme ceci :

SELECT StudentName 'Student Name' FROM Students;

Et cela vous donnera exactement le même résultat que la requête précédente :

SQLite Noms et pseudonymes

Vous pouvez également donner des alias aux tables, pas seulement aux colonnes. Avec le même mot-clé « AS ». Par exemple, vous pouvez faire ceci :

SELECT s.* FROM Students AS s;

Cela vous donnera toutes les colonnes du tableau Étudiants :

SQLite Noms et pseudonymes

Cela peut être très utile si vous rejoignez plusieurs tables ; au lieu de répéter le nom complet de la table dans la requête, vous pouvez attribuer à chaque table un nom d'alias court. Par exemple, dans la requête suivante :

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Cette requête sélectionnera le nom de chaque étudiant de la table « Étudiants » avec son nom de département dans la table « Départements » :

SQLite Noms et pseudonymes

Cependant, la même requête peut être écrite comme ceci :

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Nous avons attribué l'alias « s » à la table « Students » et l'alias « d » à la table « Departments ». Ainsi, au lieu d'utiliser le nom complet des tables, nous avons utilisé leurs alias pour y faire référence. La jointure interne (INNER JOIN) permet de joindre deux tables ou plus en utilisant une condition. Dans notre exemple, nous avons joint la table « Students » à la table « Departments » à l'aide de la colonne « DepartmentId ». Vous trouverez également une explication détaillée de la jointure interne dans la documentation.SQLite Joint« tutoriel.

Cela vous donnera le résultat exact de la requête précédente :

SQLite Noms et pseudonymes

L'écriture de requêtes SQL en utilisant la clause SELECT seule avec la clause FROM comme nous l'avons vu dans la section précédente vous donnera toutes les lignes des tables. Cependant, si vous souhaitez filtrer les données renvoyées, vous devez ajouter une clause « WHERE ».

La clause WHERE sert à filtrer les résultats renvoyés par la requête SQL. Voici comment elle fonctionne :

  • Dans la clause WHERE, vous pouvez spécifier une « expression ».
  • Cette expression sera évaluée pour chaque ligne renvoyée par la ou les tables spécifiées dans la clause FROM.
  • L'expression sera évaluée comme une expression booléenne, avec un résultat vrai, faux ou nul.
  • Ensuite, seules les lignes pour lesquelles l'expression a été évaluée avec une valeur vraie seront renvoyées, et celles avec des résultats faux ou nuls seront ignorées et ne seront pas incluses dans le jeu de résultats.

Pour filtrer les résultats définis à l'aide de la clause WHERE, vous devez utiliser des expressions et des opérateurs.

Liste des opérateurs dans SQLite et comment les utiliser

Dans la section suivante, nous expliquerons comment filtrer à l'aide d'expressions et d'opérateurs.

L'expression est une ou plusieurs valeurs littérales ou colonnes combinées les unes aux autres avec un opérateur.

Notez que vous pouvez utiliser des expressions à la fois dans la clause SELECT et dans la clause WHERE.

Dans les exemples suivants, nous allons essayer les expressions et les opérateurs de la clause select et de la clause WHERE. Afin de vous montrer comment ils fonctionnent.

Il existe différents types d'expressions et d'opérateurs que vous pouvez spécifier comme suit :

SQLite l'opérateur de concaténation « || »

Cet opérateur est utilisé pour concaténer une ou plusieurs valeurs littérales ou colonnes entre elles. Il produira une chaîne de résultats à partir de toutes les valeurs littérales ou colonnes concaténées. Par exemple:

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

Cela sera concaténé en un nouvel alias « StudentIdWithName » :

  • La valeur de chaîne littérale « Id avec nom : »
  • avec la valeur de la colonne « StudentId » et
  • avec la valeur de la colonne « StudentName »

SQLite clause WHERE et opérateurs

SQLite Opérateur CAST :

L'opérateur CAST est utilisé pour convertir une valeur d'un type Type de données vers un autre type de données.

Par exemple, si vous avez une valeur numérique stockée sous forme de chaîne de caractères, comme « '12.5' », et que vous souhaitez la convertir en valeur numérique, vous pouvez utiliser l'opérateur CAST : « CAST('12.5' ​​AS REAL) ». De même, si vous avez une valeur décimale, comme 12.5, et que vous souhaitez uniquement extraire la partie entière, vous pouvez la convertir en entier : « CAST(12.5 AS INTEGER) ».

Exemple

Dans la commande suivante, nous allons essayer de convertir différentes valeurs en d'autres types de données :

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

Cela vous donnera :

SQLite clause WHERE et opérateurs

Le résultat est le suivant :

  • CAST('12.5' ​​AS REAL) – la valeur '12.5' ​​est une valeur de chaîne, elle sera convertie en valeur REAL.
  • CAST(12.5 AS INTEGER) – la valeur 12.5 est une valeur décimale, elle sera convertie en valeur entière. La partie décimale sera tronquée et deviendra 12.

SQLite Arithmétique Operateurs :

Prenez deux ou plusieurs valeurs littérales numériques ou colonnes numériques et renvoyez une valeur numérique. Les opérateurs arithmétiques pris en charge dans SQLite sont:

  • L'addition « + » donne la somme des deux opérandes.
  • Soltraction “–” – soustracil s'agit des deux opérandes et du résultat de la différence.
  • Multiplication « * » – le produit des deux opérandes.
  • Rappel (modulo) « % » – donne le reste de la division d’un opérande par le second opérande.
  • Division « / » – renvoie le quotient de la division de l’opérande de gauche par l’opérande de droite.

Exemple :

Dans l'exemple suivant, nous allons tester les cinq opérateurs arithmétiques avec des valeurs numériques littérales dans la même clause SELECT :

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

Cela vous donnera :

SQLite clause WHERE et opérateurs

Remarquez comment nous avons utilisé ici une instruction SELECT sans clause FROM. Et cela est autorisé dans SQLite tant que nous sélectionnons des valeurs littérales.

SQLite Opérateurs de comparaison

Comparez deux opérandes entre eux et renvoyez un vrai ou un faux comme suit :

  • « < » – renvoie vrai si l’opérande de gauche est inférieur à l’opérande de droite.
  • « <= » – renvoie vrai si l’opérande de gauche est inférieur ou égal à l’opérande de droite.
  • « > » – renvoie vrai si l’opérande de gauche est supérieur à l’opérande de droite.
  • « >= » – renvoie vrai si l’opérande de gauche est supérieur ou égal à l’opérande de droite.
  • Les opérateurs « = » et « == » renvoient vrai si les deux opérandes sont égaux. Notez que ces deux opérateurs sont identiques et qu'il n'y a aucune différence entre eux.
  • Les opérateurs « != » et « <> » renvoient vrai si les deux opérandes sont différents. Notez que ces deux opérateurs sont identiques et qu'il n'y a aucune différence entre eux.

Notez que, SQLite exprime la vraie valeur avec 1 et la fausse valeur avec 0.

Exemple :

SELECT
  10<6 AS '<', 10<=6 AS '<=',
  10>6 AS '>', 10>=6 AS '>=',
  10=6 AS '=', 10==6 AS '==',
  10!=6 AS '!=', 10<>6 AS '<>';

Cela donnera quelque chose comme ceci :

SQLite clause WHERE et opérateurs

SQLite Opérateurs de recherche de motifs

« LIKE » est utilisé pour la recherche de motifs. Grâce à « Like », vous pouvez rechercher des valeurs correspondant à un motif spécifié à l’aide d’un caractère générique.

L'opérande de gauche peut être soit une valeur littérale de chaîne, soit une colonne de chaîne. Le modèle peut être spécifié comme suit :

  • Contient un modèle. Par exemple, StudentName LIKE '%a%' – cela recherchera les noms des étudiants contenant la lettre « a » quelle que soit sa position dans la colonne StudentName.
  • On commence par le modèle. Par exemple, « NomÉtudiant COMME 'a%' » – recherche les noms des étudiants qui commencent par la lettre « a ».
  • Se termine par le modèle. Par exemple, « NomÉtudiant COMME '%a' » – Recherche les noms des étudiants qui se terminent par la lettre « a ».
  • Recherche d'un nom d'élève comportant au moins un caractère, précédé du tiret bas « _ ». Par exemple : « StudentName LIKE 'J___' » recherche les noms d'élèves de 4 caractères maximum, commençant par la lettre « J » et pouvant suivre trois caractères quelconques.

Exemples de correspondance de modèles :

Obtenez les noms des étudiants commençant par la lettre « j » :

SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

Résultat:

SQLite clause WHERE et opérateurs

Obtenez les noms des étudiants qui se terminent par la lettre « y » :

SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

Résultat:

SQLite clause WHERE et opérateurs

Obtenez les noms des étudiants contenant la lettre « n » :

SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

Résultat:

SQLite clause WHERE et opérateurs

« GLOB » est équivalent à l'opérateur LIKE, mais contrairement à ce dernier, GLOB est sensible à la casse. Par exemple, les deux commandes suivantes renverront des résultats différents :

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

Cela vous donnera :

SQLite clause WHERE et opérateurs

La première instruction renvoie 0 (faux) car l'opérateur GLOB est sensible à la casse, donc « j » n'est pas égal à « J ». Cependant, la deuxième instruction renverra 1 (vrai) car l'opérateur LIKE n'est pas sensible à la casse, donc « j » est égal à « J ».

Autres opérateurs :

SQLite ET

Opérateur logique qui combine une ou plusieurs expressions. Il renverra vrai, seulement si toutes les expressions donnent une valeur « vraie ». Cependant, il ne renverra false que si toutes les expressions donnent une valeur « fausse ».

Exemple :

La requête suivante recherchera les étudiants qui ont StudentId > 5 et StudentName commence par la lettre N, les étudiants renvoyés doivent remplir les deux conditions :

SELECT *
FROM Students
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

En sortie, dans la capture d'écran ci-dessus, cela vous donnera uniquement « Nancy ». Nancy est la seule étudiante qui remplit les deux conditions.

SQLite clause WHERE et opérateurs

SQLite OR

Opérateur logique qui combine une ou plusieurs expressions, de sorte que si l'un des opérateurs combinés donne vrai, il renvoie vrai. Cependant, si toutes les expressions renvoient faux, elle renverra faux.

Exemple :

La requête suivante recherchera les étudiants dont StudentId > 5 ou StudentName commence par la lettre N, les étudiants renvoyés doivent remplir au moins une des conditions :

SELECT *
FROM Students
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

Cela vous donnera :

SQLite clause WHERE et opérateurs

En guise de résultat, dans la capture d'écran ci-dessus, cela vous donnera le nom d'un étudiant avec la lettre « n » dans son nom plus l'identifiant d'étudiant ayant une valeur > 5.

Comme vous pouvez le voir, le résultat est différent de la requête avec l'opérateur AND.

SQLite ENTRE

La fonction BETWEEN permet de sélectionner les valeurs comprises entre deux valeurs. Par exemple, « X BETWEEN Y AND Z » renvoie vrai (1) si la valeur X est comprise entre Y et Z, et faux (0) sinon. « X BETWEEN Y AND Z » est équivalent à « X >= Y AND X <= Z » : X doit être supérieur ou égal à Y et inférieur ou égal à Z.

Exemple :

Dans l'exemple de requête suivant, nous allons écrire une requête pour obtenir les étudiants dont la valeur Id est comprise entre 5 et 8 :

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

Cela donnera uniquement les étudiants avec les identifiants 5, 6, 7 et 8 :

SQLite clause WHERE et opérateurs

SQLite IN

Prend un opérande et une liste d'opérandes. Il retournera vrai si la valeur du premier opérande est égale à l'une des valeurs des opérandes de la liste. L'opérateur IN renvoie vrai (1) si la liste d'opérandes contient la première valeur d'opérande parmi ses valeurs. Sinon, il renverra faux (0).

Comme ceci : « col IN(x, y, z) ». Cela équivaut à « (col=x) ou (col=y) ou (col=z) ».

Exemple :

La requête suivante sélectionnera uniquement les étudiants avec les identifiants 2, 4, 6, 8 :

SELECT *
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

J'aime ça:

SQLite clause WHERE et opérateurs

La requête précédente donnera le résultat exact de la requête suivante car elles sont équivalentes :

SELECT *
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (StudentId = 8);

Les deux requêtes donnent le résultat exact. Cependant, la différence entre les deux requêtes est que dans la première requête, nous avons utilisé l'opérateur « IN ». Dans la deuxième requête, nous avons utilisé plusieurs opérateurs « OU ».

L'opérateur IN est équivalent à l'utilisation de plusieurs opérateurs OR. « WHERE StudentId IN(2, 4, 6, 8) » est équivalent à « WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8); ».

J'aime ça:

SQLite clause WHERE et opérateurs

SQLite PAS DANS

L'opérateur « NOT IN » est l'inverse de l'opérateur « IN ». Sa syntaxe est identique : il prend un opérande et une liste d'opérandes. Il renvoie vrai si la valeur du premier opérande est différente de celle de l'un des opérandes de la liste. Autrement dit, il renvoie vrai (0) si la liste ne contient pas le premier opérande. Par exemple : « col NOT IN(x, y, z) ». Ceci est équivalent à « (col <> x) AND (col <> y) AND (col <> z) ».

Exemple :

La requête suivante sélectionnera les étudiants dont les identifiants ne sont pas égaux à l'un de ces identifiants 2, 4, 6, 8 :

SELECT *
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

Comme ça

SQLite clause WHERE et opérateurs

La requête précédente nous donnons le résultat exact comme la requête suivante car elles sont équivalentes :

SELECT *
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

J'aime ça:

SQLite clause WHERE et opérateurs

Dans la capture d'écran ci-dessus,

Nous avons utilisé plusieurs opérateurs différents « <> » pour obtenir une liste d'étudiants qui ne sont égaux à aucun des identifiants suivants 2, 4, 6 ou 8. Cette requête renverra tous les autres étudiants autres que cette liste d'identifiants.

SQLite EXISTE

Les opérateurs EXISTS ne prennent aucun opérande ; il suffit d'une clause SELECT après. L'opérateur EXISTS renverra true (1) s'il y a des lignes renvoyées par la clause SELECT, et il renverra false (0) si aucune ligne n'est renvoyée par la clause SELECT.

Exemple :

Dans l'exemple suivant, nous sélectionnerons le nom du département, si l'identifiant du département existe dans la table des étudiants :

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

Cela vous donnera :

SQLite clause WHERE et opérateurs

Seuls les trois départements « Informatique », « Physique » et « Arts » seront renvoyés. Le département « Mathématiques » ne sera pas renvoyé car il n'y a pas d'étudiant inscrit ; son identifiant n'existe donc pas dans la table des étudiants. C'est pourquoi l'opérateur EXISTS a ignoré le département « Mathématiques ».

SQLite pas

Reverses est le résultat de l'opérateur précédent qui le suit. Par exemple :

  • NOT BETWEEN – Il retournera vrai si BETWEEN renvoie faux et vice versa.
  • NOT LIKE – Il retournera vrai si LIKE renvoie faux et vice versa.
  • NOT GLOB – Il retournera vrai si GLOB renvoie faux et vice versa.
  • NOT EXISTS – Il retournera vrai si EXISTS renvoie faux et vice versa.

Exemple :

Dans l'exemple suivant, nous utiliserons l'opérateur NOT avec l'opérateur EXISTS pour obtenir les noms des départements qui n'existent pas dans la table Etudiants, ce qui est le résultat inverse de l'opérateur EXISTS. Ainsi, la recherche se fera via DepartmentId qui n'existe pas dans la table Department.

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

Sortie :

SQLite clause WHERE et opérateurs

Seul le département « Mathématiques » sera renvoyé, car il est le seul à ne pas figurer dans la table des étudiants.

Limitation et commande

SQLite Commande

SQLite L'ordre consiste à trier votre résultat par une ou plusieurs expressions. Pour trier l'ensemble des résultats, vous devez utiliser la clause ORDER BY comme suit :

  • Tout d’abord, vous devez spécifier la clause ORDER BY.
  • La clause ORDER BY doit être spécifiée à la fin de la requête ; seule la clause LIMIT peut être spécifiée après.
  • Spécifiez l'expression avec laquelle trier les données, cette expression peut être un nom de colonne ou une expression.
  • Après l'expression, vous pouvez spécifier un sens de tri facultatif. Soit DESC, pour ordonner les données par ordre décroissant, soit ASC pour ordonner les données par ordre croissant. Si vous n’en avez spécifié aucun, les données seront triées par ordre croissant.
  • Vous pouvez spécifier plus d'expressions en utilisant le « » entre elles.

Exemple

Dans l'exemple suivant, nous sélectionnerons tous les étudiants classés par leur nom mais en ordre décroissant, puis par nom de département en ordre croissant :

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

Cela vous donnera :

SQLite Limitation et commande

  • SQLite classera d'abord tous les étudiants par nom de département par ordre croissant
  • Ensuite, pour chaque nom de département, tous les étudiants sous ce nom de département seront affichés par ordre décroissant par leur nom.

SQLite Limite:

Vous pouvez limiter le nombre de lignes renvoyées par votre requête SQL en utilisant la clause LIMIT. Par exemple, LIMIT 10 ne vous donnera que 10 lignes et ignorera toutes les autres lignes.

Dans la clause LIMIT, vous pouvez sélectionner un nombre précis de lignes à partir d'une position spécifique grâce à la clause OFFSET. Par exemple, « LIMIT 4 OFFSET 4 » ignorera les 4 premières lignes et renverra les 4 lignes à partir de la cinquième, soit les lignes 5, 6, 7 et 8.

Notez que la clause OFFSET est facultative ; vous pouvez l'écrire comme « LIMIT 4, 4 » et elle vous donnera les résultats exacts.

Exemple :

Dans l'exemple suivant, nous renverrons seulement 3 étudiants à partir de l'identifiant d'étudiant 5 en utilisant la requête :

SELECT * FROM Students LIMIT 4,3;

Cela vous donnera seulement trois étudiants à partir de la ligne 5. Cela vous donnera donc les lignes avec StudentId 5, 6 et 7 :

SQLite Limitation et commande

Suppression des doublons

Si votre requête SQL renvoie des valeurs en double, vous pouvez utiliser le mot-clé « DISTINCT » pour les supprimer et ne conserver que les valeurs distinctes. Vous pouvez spécifier plusieurs colonnes après l'application de la clé DISTINCT.

Exemple :

La requête suivante renverra des « valeurs de nom de département » en double : ici, nous avons des valeurs en double avec les noms IT, Physics et Arts.

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Cela vous donnera des valeurs en double pour le nom du département :

Suppression des doublons dans SQLite

Remarquez qu'il existe des valeurs en double pour le nom du département. Nous allons maintenant utiliser le mot-clé DISTINCT avec la même requête pour supprimer ces doublons et obtenir uniquement des valeurs uniques. Comme ça:

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Cela vous donnera seulement trois valeurs uniques pour la colonne du nom du département :

Suppression des doublons dans SQLite

Total

SQLite Les agrégats sont des fonctions intégrées définies dans SQLite qui regroupera plusieurs valeurs de plusieurs lignes en une seule valeur.

Voici les agrégats pris en charge par SQLite:

SQLite AVG()

Renvoie la moyenne de toutes les valeurs x.

Exemple :

Dans l’exemple suivant, nous obtiendrons la note moyenne que les étudiants obtiendront à tous les examens :

SELECT AVG(Mark) FROM Marks;

Cela vous donnera la valeur « 18.375 » :

SQLite Fonctions d'agrégation

Ces résultats proviennent de la somme de toutes les valeurs de notes divisée par leur nombre.

COUNT() – COUNT(X) ou COUNT(*)

Renvoie le nombre total de fois où la valeur x est apparue. Et voici quelques options que vous pouvez utiliser avec COUNT :

  • COUNT(x) : compte uniquement x valeurs, où x est un nom de colonne. Il ignorera les valeurs NULL.
  • COUNT(*) : compte toutes les lignes de toutes les colonnes.
  • COUNT (DISTINCT x) : vous pouvez spécifier un mot-clé DISTINCT avant le x qui obtiendra le nombre de valeurs distinctes de x.

Exemple

Dans l'exemple suivant, nous obtiendrons le nombre total de départements avec COUNT(DepartmentId), COUNT(*) et COUNT(DISTINCT DepartmentId) et en quoi ils sont différents :

SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;

Cela vous donnera :

SQLite Fonctions d'agrégation

Comme suit:

  • COUNT(DepartmentId) vous donnera le nombre de tous les identifiants de département et ignorera les valeurs nulles.
  • COUNT(DISTINCT DepartmentId) vous donne des valeurs distinctes de DepartmentId, qui ne sont que 3. Quelles sont les trois valeurs différentes du nom du département. Notez qu'il y a 8 valeurs de nom de département dans le nom de l'étudiant. Mais seulement les trois différentes valeurs que sont les mathématiques, l'informatique et la physique.
  • COUNT(*) compte le nombre de lignes dans la table des étudiants qui sont 10 lignes pour 10 étudiants.

GROUP_CONCAT() – GROUP_CONCAT(X) ou GROUP_CONCAT(X,Y)

La fonction d'agrégation GROUP_CONCAT concatène plusieurs valeurs en une seule valeur avec une virgule pour les séparer. Il propose les options suivantes :

  • GROUP_CONCAT(X) : Cela concatènera toutes les valeurs de x en une seule chaîne, avec la virgule « », utilisée comme séparateur entre les valeurs. Les valeurs NULL seront ignorées.
  • GROUP_CONCAT(X, Y) : cela concatènera les valeurs de x en une seule chaîne, avec la valeur de y utilisée comme séparateur entre chaque valeur au lieu du séparateur par défaut ','. Les valeurs NULL seront également ignorées.
  • GROUP_CONCAT(DISTINCT X) : cela concatènera toutes les valeurs distinctes de x en une seule chaîne, avec la virgule « », utilisée comme séparateur entre les valeurs. Les valeurs NULL seront ignorées.

Exemple GROUP_CONCAT (NomDépartement)

La requête suivante concatènera toutes les valeurs du nom du département des étudiants et de la table des départements en une seule chaîne séparée par des virgules. Ainsi, au lieu de renvoyer une liste de valeurs, une valeur sur chaque ligne. Il ne renverra qu'une seule valeur sur une ligne, avec toutes les valeurs séparées par des virgules :

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Cela vous donnera :

SQLite Fonctions d'agrégation

Cela vous donnera la liste des valeurs de noms de 8 départements concaténées en une chaîne séparée par des virgules.

GROUP_CONCAT(DISTINCT DepartmentName) Exemple

La requête suivante concatènera les valeurs distinctes du nom du département de la table des étudiants et des départements en une seule chaîne séparée par des virgules :

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Cela vous donnera :

SQLite Fonctions d'agrégation

Remarquez à quel point le résultat est différent du résultat précédent ; seules trois valeurs renvoyées sont les noms des départements distincts, et les valeurs en double ont été supprimées.

GROUP_CONCAT(NomDépartement,'&') Exemple

La requête suivante concatènera toutes les valeurs de la colonne du nom du département de la table des étudiants et des départements en une seule chaîne, mais avec le caractère « & » au lieu d'une virgule comme séparateur :

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Cela vous donnera :

SQLite Fonctions d'agrégation

Remarquez comment le caractère « & » est utilisé à la place du caractère par défaut « » pour séparer les valeurs.

SQLite MAXIMUM MINIMUM()

MAX(X) vous renvoie la valeur la plus élevée parmi les valeurs X. MAX renverra une valeur NULL si toutes les valeurs de x sont nulles. Alors que MIN(X) vous renvoie la plus petite valeur parmi les valeurs X. MIN renverra une valeur NULL si toutes les valeurs de X sont nulles.

Exemple

Dans la requête suivante, nous utiliserons les fonctions MIN et MAX pour obtenir la note la plus élevée et la note la plus basse du tableau « Marks » :

SELECT MAX(Mark), MIN(Mark) FROM Marks;

Cela vous donnera :

SQLite Fonctions d'agrégation

SQLite SOMME(x), Total(x)

Les deux renverront la somme de toutes les valeurs x. Mais ils diffèrent sur les points suivants :

  • SUM renverra null si toutes les valeurs sont nulles, mais Total renverra 0.
  • TOTAL renvoie toujours des valeurs à virgule flottante. SUM renvoie une valeur entière si toutes les valeurs x sont un entier. Cependant, si les valeurs ne sont pas un nombre entier, une valeur à virgule flottante sera renvoyée.

Exemple

Dans la requête suivante, nous utiliserons SUM et total pour obtenir la somme de toutes les notes dans les tables « Marks » :

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

Cela vous donnera :

SQLite Fonctions d'agrégation

Comme vous pouvez le voir, TOTAL renvoie toujours une virgule flottante. Mais SUM renvoie une valeur entière car les valeurs de la colonne « Marque » peuvent être des nombres entiers.

Exemple de différence entre SUM et TOTAL :

Dans la requête suivante, nous montrerons la différence entre SUM et TOTAL lorsqu'ils obtiendront la SUM des valeurs NULL :

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

Cela vous donnera :

SQLite Fonctions d'agrégation

Notez qu'il n'y a aucune note pour TestId = 4, il y a donc des valeurs nulles pour ce test. SUM renvoie une valeur nulle sous forme de blanc, tandis que TOTAL renvoie 0.

Par groupe

La clause GROUP BY permet de spécifier une ou plusieurs colonnes qui seront utilisées pour regrouper les lignes en groupes. Les lignes avec les mêmes valeurs seront rassemblées (organisées) en groupes.

Pour toute autre colonne qui n'est pas incluse dans les colonnes group by, vous pouvez utiliser une fonction d'agrégation pour celle-ci.

Exemple :

La requête suivante vous donnera le nombre total d'étudiants présents dans chaque département.

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

Cela vous donnera :

SQLite Grouper par et avoir

La clause GROUPBY DepartmentName regroupera tous les étudiants en groupes, un pour chaque nom de département. Pour chaque groupe de « département », il comptera les étudiants qui en font partie.

Clause AVOIR

Si vous souhaitez filtrer les groupes renvoyés par la clause GROUP BY, vous pouvez alors spécifier une clause « HAVING » avec une expression après GROUP BY. L'expression sera utilisée pour filtrer ces groupes.

Exemple

Dans la requête suivante, nous sélectionnerons les départements qui ne comptent que deux étudiants :

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

Cela vous donnera :

SQLite Grouper par et avoir

La clause HAVING COUNT(S.StudentId) = 2 filtrera les groupes renvoyés et renverra uniquement les groupes qui contiennent exactement deux étudiants. Dans notre cas, le département Arts compte 2 étudiants, cela est donc affiché dans la sortie.

SQLite Requête et sous-requête

Dans n'importe quelle requête, vous pouvez utiliser une autre requête soit dans un SELECT, INSERT, DELETE, UPDATE ou dans une autre sous-requête.

Cette requête imbriquée est appelée sous-requête. Nous allons voir maintenant quelques exemples d'utilisation de sous-requêtes dans la clause SELECT. Cependant, dans le didacticiel Modification des données, nous verrons comment utiliser des sous-requêtes avec les instructions INSERT, DELETE et UPDATE.

Utilisation d'une sous-requête dans l'exemple de clause FROM

Dans la requête suivante, nous inclurons une sous-requête dans la clause FROM :

SELECT
  s.StudentName, t.Mark
FROM Students AS s
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

La requête:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

La requête ci-dessus est appelée ici une sous-requête car elle est imbriquée dans la clause FROM. Notez que nous lui avons donné un alias « t » afin que nous puissions faire référence aux colonnes renvoyées par celui-ci dans la requête.

Cette requête vous donnera :

SQLite Requête et sous-requête

Donc dans notre cas,

  • s.StudentName est sélectionné dans la requête principale qui donne le nom des étudiants et
  • t.Mark est sélectionné dans la sous-requête ; qui donne les notes obtenues par chacun de ces étudiants

Utilisation d'une sous-requête dans l'exemple de clause WHERE

Dans la requête suivante, nous inclurons une sous-requête dans la clause WHERE :

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

La requête:

SELECT DepartmentId
FROM Students AS s
WHERE d.DepartmentId = s.DepartmentId

La requête ci-dessus est appelée ici une sous-requête car elle est imbriquée dans la clause WHERE. La sous-requête renverra les valeurs DepartmentId qui seront utilisées par l'opérateur NOT EXISTS.

Cette requête vous donnera :

SQLite Requête et sous-requête

Dans la requête ci-dessus, nous avons sélectionné le département dans lequel aucun étudiant n'est inscrit. C'est le département « Mathématiques » ici.

complet » Operation – UNION,Intersect

SQLite prend en charge les opérations SET suivantes :

UNION & UNION TOUS

Il combine un ou plusieurs jeux de résultats (un groupe de lignes) renvoyés par plusieurs instructions SELECT en un seul jeu de résultats.

UNION renverra des valeurs distinctes. Cependant, UNION ALL n'inclura pas et inclura les doublons.

Notez que le nom de la colonne sera le nom de la colonne spécifié dans la première instruction SELECT.

Exemple d'UNION

Dans l'exemple suivant, nous obtiendrons la liste des DepartmentId de la table des étudiants et la liste des DepartmentId de la table des départements dans la même colonne :

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

Cela vous donnera :

SQLite complet » Operations

La requête ne renvoie que 5 lignes qui correspondent aux valeurs distinctes de l'identifiant du service. Notez la première valeur qui est la valeur nulle.

SQLite UNION TOUS Exemple

Dans l'exemple suivant, nous obtiendrons la liste des DepartmentId de la table des étudiants et la liste des DepartmentId de la table des départements dans la même colonne :

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

Cela vous donnera :

SQLite complet » Operations

La requête renverra 14 lignes, 10 lignes de la table des étudiants et 4 de la table des départements. Notez qu'il existe des doublons dans les valeurs renvoyées. Notez également que le nom de la colonne était celui spécifié dans la première instruction SELECT.

Voyons maintenant comment UNION all donnera des résultats différents si nous remplaçons UNION ALL par UNION :

SQLite COUPER

Renvoie les valeurs qui existent dans les deux jeux de résultats combinés. Les valeurs qui existent dans l’un des ensembles de résultats combinés seront ignorées.

Exemple

Dans la requête suivante, nous sélectionnerons les valeurs DepartmentId qui existent dans les tables Students et Departments dans la colonne DepartmentId :

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

Cela vous donnera :

SQLite complet » Operations

La requête ne renvoie que trois valeurs 1, 2 et 3. Quelles sont les valeurs qui existent dans les deux tables.

Cependant, les valeurs null et 4 n'ont pas été incluses car la valeur nulle existe uniquement dans la table des étudiants et non dans la table des départements. Et la valeur 4 existe dans la table des départements et non dans la table des étudiants.

C'est pourquoi les valeurs NULL et 4 ont été ignorées et non incluses dans les valeurs renvoyées.

SAUF

Supposons que si vous avez deux listes de lignes, list1 et list2, et que vous souhaitez uniquement les lignes de list1 qui n'existent pas dans list2, vous pouvez utiliser la clause « EXCEPT ». La clause EXCEPT compare les deux listes et renvoie les lignes qui existent dans la liste1 et qui n'existent pas dans la liste2.

Exemple

Dans la requête suivante, nous sélectionnerons les valeurs DepartmentId qui existent dans la table des départements et qui n'existent pas dans la table des étudiants :

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

Cela vous donnera :

SQLite complet » Operations

La requête renvoie uniquement la valeur 4. C'est la seule valeur qui existe dans la table des départements et qui n'existe pas dans la table des étudiants.

Gestion NULL

La valeur « NULL » est une valeur spéciale dans SQLiteElle sert à représenter une valeur inconnue ou manquante. Notez que la valeur nulle est totalement différente de « 0 » ou d'une valeur vide. En effet, 0 et une valeur vide sont des valeurs connues, tandis que la valeur nulle est inconnue.

Les valeurs NULL nécessitent un traitement spécial dans SQLite, nous allons voir maintenant comment gérer les valeurs NULL.

Rechercher des valeurs NULL

Vous ne pouvez pas utiliser l'opérateur d'égalité normal (=) pour rechercher les valeurs nulles. Par exemple, la requête suivante recherche les étudiants dont la valeur DepartmentId est nulle :

SELECT * FROM Students WHERE DepartmentId = NULL;

Cette requête ne donnera aucun résultat :

SQLite Gestion NULL

Étant donné que la valeur NULL n’est égale à aucune autre valeur incluant une valeur nulle elle-même, c’est pourquoi elle n’a renvoyé aucun résultat.

Toutefois, pour que la requête fonctionne, vous devez utiliser l’opérateur « IS NULL » pour rechercher les valeurs nulles, comme suit :

SELECT * FROM Students WHERE DepartmentId IS NULL;

Cela vous donnera :

SQLite Gestion NULL

La requête renverra les étudiants qui ont une valeur DepartmentId nulle.

Si vous souhaitez obtenir les valeurs qui ne sont pas nulles, vous devez utiliser l'opérateur « IS NOT NULL » comme ceci :

SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Cela vous donnera :

SQLite Gestion NULL

La requête renverra les étudiants qui n’ont pas de valeur NULL DepartmentId.

Résultats conditionnels

Si vous avez une liste de valeurs et que vous souhaitez en sélectionner une en fonction de certaines conditions. Pour cela, la condition de cette valeur particulière doit être vraie pour être sélectionnée.

L'expression CASE évaluera cette liste de conditions pour toutes les valeurs. Si la condition est vraie, elle renverra cette valeur.

Par exemple, si vous avez une colonne « Note » et que vous souhaitez sélectionner une valeur de texte basée sur la valeur de note comme suit :

– « Excellent » si la note est supérieure à 85.

– « Très bien » si la note est comprise entre 70 et 85.

– « Bien » si la note est comprise entre 60 et 70.

Ensuite, vous pouvez utiliser l'expression CASE pour ce faire.

Cela peut être utilisé pour définir une certaine logique dans la clause SELECT afin que vous puissiez sélectionner certains résultats en fonction de certaines conditions comme l'instruction if par exemple.

L'opérateur CASE peut être défini avec différentes syntaxes comme suit :

Vous pouvez utiliser différentes conditions :

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  …
  ELSE resultn
END

Ou bien, vous pouvez utiliser une seule expression et choisir parmi différentes valeurs possibles :

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  …
  ELSE restuln
END

Notez que la clause ELSE est facultative.

Exemple

Dans l'exemple suivant, nous utiliserons l'expression CASE avec la valeur NULL dans la colonne « Id du département » de la table « Étudiants » pour afficher le texte « Aucun département » comme suit :

SELECT
  StudentName,
  CASE
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId
  END AS DepartmentId
FROM Students;
  • L'opérateur CASE vérifiera la valeur du DepartmentId si elle est nulle ou non.
  • S'il s'agit d'une valeur NULL, il sélectionnera la valeur littérale « No Department » au lieu de la valeur DepartmentId.
  • S’il ne s’agit pas d’une valeur nulle, il sélectionnera la valeur de la colonne DepartmentId.

Cela vous donnera la sortie comme indiqué ci-dessous:

SQLite résultats conditionnels CASE

Expression de table commune

Les expressions de table communes (CTE) sont des sous-requêtes définies dans l'instruction SQL avec un nom donné.

Il présente un avantage par rapport aux sous-requêtes car il est défini à partir des instructions SQL et rendra les requêtes plus faciles à lire, à maintenir et à comprendre.

Une expression de table commune peut être définie en plaçant la clause WITH devant une instruction SELECT comme suit :

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

Le nom « CTEname » est le nom que vous pouvez donner à la CTE et utiliser ultérieurement pour y faire référence. Notez que vous pouvez définir des instructions SELECT, UPDATE, INSERT ou DELETE sur les CTE.

Voyons maintenant un exemple de la façon d'utiliser CTE dans la clause SELECT.

Exemple

Dans l'exemple suivant, nous définirons un CTE à partir d'une instruction SELECT, puis nous l'utiliserons plus tard sur une autre requête :

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

Dans cette requête, nous avons défini une expression de table commune (CTE) et l'avons nommée « AllDepartments ». Cette CTE a été définie à partir d'une requête SELECT :

SELECT DepartmentId, DepartmentName
  FROM Departments

Ensuite, après avoir défini le CTE, nous l'avons utilisé dans la requête SELECT qui le suit.

Notez que les expressions de table communes n’affectent pas le résultat de la requête. C'est un moyen de définir une vue logique ou une sous-requête afin de les réutiliser dans une même requête. Les expressions de table courantes sont comme une variable que vous déclarez et que vous réutilisez comme sous-requête. Seule l'instruction SELECT affecte le résultat de la requête.

Cette requête vous donnera :

SQLite Expression de table commune

Requêtes avancées

Les requêtes avancées sont les requêtes qui contiennent des jointures complexes, des sous-requêtes et certains agrégats. Dans la section suivante, nous verrons un exemple de requête avancée :

Où nous obtenons le,

  • Noms des départements avec tous les étudiants de chaque département
  • Nom des étudiants séparés par une virgule et
  • Montrer le département qui compte au moins trois étudiants
SELECT
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

Nous avons ajouté une clause JOIN pour récupérer le nom du département dans la table Departments. Ensuite, nous avons ajouté une clause GROUP BY avec deux fonctions d'agrégation :

  • « COUNT » pour compter les étudiants de chaque groupe de département.
  • GROUP_CONCAT pour concaténer les étudiants de chaque groupe avec des virgules séparées dans une chaîne.

Après le GROUP BY, nous avons utilisé la clause HAVING pour filtrer les départements et sélectionner uniquement les départements qui comptent au moins 3 étudiants.

Le résultat sera le suivant :

SQLite Requêtes avancées

FAQ

La clause WHERE filtre les lignes individuelles avant tout groupe.ping et ne peut pas utiliser de fonctions d'agrégation. HAVING filtre des groupes entiers après GROUP BY et peut tester des agrégats tels que COUNT ou SUM. Dans une requête, WHERE est placé avant GROUP BY et HAVING après.

Les mots clés SQL tels que SELECT et WHERE ne sont pas sensibles à la casse. L'opérateur LIKE est insensible à la casse pour les lettres ASCII, tandis que GLOB y est sensible. Le texte stocké dans les colonnes conserve sa casse d'origine ; par conséquent, les comparaisons de valeurs avec l'opérateur equals respectent les caractères exacts.

Ajoutez ORDER BY RANDOM() et LIMIT 1 à une requête SELECT, par exemple : SELECT * FROM Students ORDER BY RANDOM() LIMIT 1. RANDOM() mélange les lignes et LIMIT renvoie une seule valeur. Augmentez la valeur de LIMIT pour récupérer plusieurs lignes aléatoires.

Une jointure (JOIN) combine les colonnes de deux tables côte à côte en utilisant une condition de correspondance, élargissant ainsi chaque ligne. Une union (UNION) empile les lignes des résultats de deux requêtes SELECT l'une sur l'autre en une seule liste ; les deux requêtes doivent donc renvoyer le même nombre de colonnes.

Non. Sans clause ORDER BY SQLite La clause LIMIT peut renvoyer les lignes dans n'importe quel ordre ; elle peut donc sélectionner des lignes différentes à chaque exécution. Il est toujours recommandé d'utiliser ORDER BY avec LIMIT pour obtenir des résultats prévisibles, par exemple : ORDER BY StudentId LIMIT 10.

Créez un index sur les colonnes utilisées dans les clauses WHERE, JOIN et ORDER BY afin de SQLite Il est possible de localiser des lignes sans analyser l'intégralité du tableau. Sélectionner uniquement les colonnes nécessaires et exécuter la commande ANALYZE pour actualiser les statistiques permet également d'accélérer les requêtes.

Oui. Les assistants IA de conversion de texte en SQL transforment les requêtes en langage naturel en SQLite Les instructions SELECT, WHERE, JOIN et GROUP BY sont utilisées. Indiquer les noms des tables et des colonnes améliore la précision, et chaque requête générée doit être vérifiée et testée avant d'être exécutée sur des données réelles.

Oui. Copilote GitHub suggère SQLite requêtes en ligne dans les éditeurs comme VS CodeIl complète automatiquement les clauses SELECT, JOIN, AGREEG et GROUP BY. Il analyse le schéma et les commentaires environnants afin de réutiliser les noms de vos tables et colonnes.

Résumez cet article avec :