Cours
Filtrer les lignes d’une table selon une condition (ou un ensemble de conditions) est une pratique courante en analyse de données. En SQL, vous pouvez le faire avec la clause where. Dans ce tutoriel, vous l’utiliserez dans plusieurs scénarios.
Vous utiliserez PostgreSQL comme SGBDR (système de gestion de base de données relationnelle), mais la syntaxe varie peu avec d’autres systèmes. Vous commencerez par configurer une base PostgreSQL et créer manuellement une table contenant des données sur des pays. Une fois en place, vous exécuterez plusieurs requêtes de filtrage intégrant la clause WHERE.
Remarque : pour suivre ce tutoriel, vous devez connaître les bases de SQL et de PostgreSQL. Les ressources suivantes peuvent vous aider si ce n’est pas le cas.
Créer une table dans PostgreSQL
Pour suivre ce tutoriel, vous devez créer une table dans PostgreSQL qui contient des informations sur des pays du monde. Cette table servira à montrer le fonctionnement de la clause WHERE dans différents cas.
Étape 1 : créer une nouvelle base
Ouvrez pgAdmin (ou votre interface SQL préférée) et créez une nouvelle base PostgreSQL. Vous pouvez la nommer par exemple world_data ou tout autre nom de votre choix.
Étape 2 : créer et alimenter la table
Une fois la base prête, ouvrez un nouvel éditeur de requêtes SQL et exécutez le code ci-dessous. Il crée une table nommée countries et insère un jeu d’enregistrements couvrant un large éventail de continents, d’années d’indépendance et de régions :
-- Create the countries tableCREATE TABLE countries ( code VARCHAR(3) PRIMARY KEY, name VARCHAR(100), continent VARCHAR(50), region VARCHAR(100), surface_area NUMERIC, indep_year INTEGER, local_name VARCHAR(100), gov_form VARCHAR(100), capital VARCHAR(100), cap_long NUMERIC, cap_lat NUMERIC);-- Insert sample data into the countries tableINSERT INTO countries (code, name, continent, region, surface_area, indep_year, local_name, gov_form, capital, cap_long, cap_lat)VALUES('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 'Bharat', 'Federal Republic', 'New Delhi', 77.2090, 28.6139),('PAK', 'Pakistan', 'Asia', 'Southern Asia', 881912, 1947, 'Pakistan', 'Federal Republic', 'Islamabad', 73.0551, 33.6844),('CHN', 'China', 'Asia', 'Eastern Asia', 9596961, NULL, 'Zhongguo', 'People''s Republic', 'Beijing', 116.4074, 39.9042),('VNM', 'Vietnam', 'Asia', 'South-Eastern Asia', 331212, 1945, 'Việt Nam', 'Socialist Republic', 'Hanoi', 105.8544, 21.0285),('JPN', 'Japan', 'Asia', 'Eastern Asia', 377975, NULL, 'Nippon', 'Constitutional Monarchy', 'Tokyo', 139.6917, 35.6895),('DEU', 'Germany', 'Europe', 'Western Europe', 357386, 1955, 'Deutschland', 'Federal Republic', 'Berlin', 13.4050, 52.5200),('FRA', 'France', 'Europe', 'Western Europe', 551695, 843, 'France', 'Republic', 'Paris', 2.3522, 48.8566),('RUS', 'Russia', 'Europe', 'Eastern Europe', 17098242, 1991, 'Rossiya', 'Federation', 'Moscow', 37.6173, 55.7558),('UKR', 'Ukraine', 'Europe', 'Eastern Europe', 603500, 1991, 'Ukrayina', 'Republic', 'Kyiv', 30.5234, 50.4501),('EGY', 'Egypt', 'Africa', 'Northern Africa', 1002450, 1922, 'Misr', 'Republic', 'Cairo', 31.2357, 30.0444),('NGA', 'Nigeria', 'Africa', 'Western Africa', 923768, 1960, 'Nigeria', 'Federal Republic', 'Abuja', 7.4951, 9.0578),('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', 7682300, 1901, 'Australia', 'Federal Parliamentary Democracy', 'Canberra', 149.1245, -35.3075),('USA', 'United States', 'North America', 'North America', 9833517, 1776, 'United States', 'Federal Republic', 'Washington, D.C.', -77.0369, 38.9072),('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 'Canada', 'Constitutional Monarchy', 'Ottawa', -75.6972, 45.4215),('BRA', 'Brazil', 'South America', 'South America', 8515767, 1822, 'Brasil', 'Federal Republic', 'Brasília', -47.9292, -15.7801),('ARG', 'Argentina', 'South America', 'South America', 2780400, 1816, 'Argentina', 'Federal Republic', 'Buenos Aires', -58.3816, -34.6037);La table contient différentes informations pour environ 16 pays dans le monde. Elle comprend les colonnes suivantes :
codeclé primaire de la table, correspondant au code pays universelnamec’est-à-dire le nom du payscontinentauquel le pays appartientregionla zone géographique où se situe le payssurface_areala superficie du paysindep_yearc’est-à-dire l’année d’indépendance du payslocal_namele nom local du paysgov_formc’est-à-dire le type de régime en placecapitalla capitale du payscap_longc’est-à-dire la longitude de la capitalecap_latc’est-à-dire la latitude de la capitale
Passons maintenant au filtrage d’enregistrements avec la clause WHERE.
Utiliser la clause WHERE en SQL
En SQL, la clause WHERE permet de filtrer des enregistrements sur des valeurs textuelles comme numériques. Vous pouvez comparer ces valeurs, et les opérations suivantes sont prises en charge :
=égal<>et!=différent<inférieur à>supérieur à<=inférieur ou égal à>=supérieur ou égal à
Il est recommandé d’utiliser <> plutôt que != conformément aux standards SQL.
Récupérons maintenant l’enregistrement du pays dont le code est AUS. La colonne à comparer est code et la valeur de comparaison est AUS. La requête sera :
SELECT * FROM countries WHERE code = 'AUS';Et vous obtenez :

À noter :
La clause
WHEREvient toujours aprèsFROM.En SQL, les chaînes de caractères sont délimitées par des apostrophes.
Voyons maintenant une comparaison numérique. Récupérons les pays qui ont obtenu leur indépendance (indep_year) après 1901 :
SELECT * FROM countries WHERE indep_year > 1901;Vous obtenez au total 3 pays ayant obtenu leur indépendance après 1901. Remarquez le comparateur utilisé. La colonne indep_year est de type entier. Il n’y a donc pas de guillemets dans la comparaison.
Vous pouvez combiner plusieurs conditions dans une clause WHERE avec les connecteurs AND et OR. La requête suivante renvoie les pays where continent = 'Asia' and indep_year > 1900 :
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;
Vous obtenez des informations sur trois pays situés en Asia et ayant obtenu leur indépendance après 1901. Notez que dans la requête ci‑dessus, vous comparez à la fois des valeurs textuelles et numériques. À vous d’expérimenter avec différentes combinaisons de AND et OR dans la clause WHERE.
Remarque : lorsque vous combinez AND et OR, n’oubliez pas d’englober chaque condition entre parenthèses. Sinon, SQL pourrait mal interpréter la priorité d’évaluation.
Avec la requête suivante, vous obtenez un total de six pays.
SELECT * FROM countries WHERE(continent = 'Europe' AND indep_year > 1900)or(continent = 'Asia' AND indep_year > 1900);
Vous pouvez même chaîner plus de deux conditions dans une clause WHERE :
SELECT * FROM countries WHERE continent = 'Asia' OR indep_year > 1900 OR surface_area > 652090;
Ici, vous obtenez au total 15 pays qui sont soit situés en Asia, soit ont obtenu leur indépendance après 1901, soit ont une superficie supérieure à 652090.
Convertissons maintenant la requête en variante avec AND, plus restrictive :
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;
Dans ce cas, vous obtenez deux pays.
Vous pouvez également utiliser des sous‑requêtes dans une clause WHERE. Supposons que vous vouliez récupérer le pays ayant la plus grande superficie, sans connaître au préalable cette valeur maximale. La requête suivante est idéale dans ce type de situation :
SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);Vous devriez obtenir l’enregistrement de Russia.

Conclusion
Félicitations, vous avez terminé ce tutoriel. Filtrer des résultats de requêtes selon des conditions est une compétence essentielle, et ce tutoriel en a posé les bases. Pour aller plus loin et renforcer vos compétences SQL, découvrez nos cours (lien ci‑dessous).
Devenez certifié SQL

Sayak travaille à Hugging Face où il code, écrit et parle. Il consacre la majeure partie de son temps à tout ce qui touche à la bibliothèque des diffuseurs. Il est également instructeur de projets DataCamp et auteur de nombreux tutoriels DataCamp. En dehors du travail, vous le verrez regarder Suits sur Netflix pour la énième fois.
FAQ sur la clause SQL WHERE
Puis-je utiliser des colonnes texte et numériques dans une clause WHERE ?
Oui, vous pouvez filtrer à la fois par texte (par exemple, 'Asia') et par valeur numérique (par exemple, > 1901). N’oubliez pas que les valeurs textuelles doivent être encadrées par des apostrophes.
Y a‑t‑il une différence entre <> et != en SQL ?
Les deux signifient « différent », mais <> est l’opérateur SQL standard. Certaines bases prennent aussi en charge !=, mais il est préférable d’utiliser <> pour une meilleure compatibilité.
Comment filtrer les enregistrements avec des valeurs NULL ?
Utilisez IS NULL ou IS NOT NULL. Par exemple :
SELECT * FROM countries WHERE indep_year IS NULL;Puis-je utiliser des sous‑requêtes dans une clause WHERE ?
Oui, vous pouvez utiliser des sous‑requêtes pour comparer une colonne au résultat d’une autre requête. Par exemple :
SELECT * FROM countries WHERE surface_area = (SELECT MAX(surface_area) FROM countries);La clause WHERE vient‑elle avant ou après la clause FROM ?
La clause WHERE vient toujours après la clause FROM et avant des clauses comme GROUP BY ou ORDER BY.
Puis-je utiliser WHERE avec des JOIN ?
Absolument. Vous pouvez appliquer la clause WHERE après un JOIN pour filtrer le jeu de résultats combiné.