2nd Dec 2022 10 minutes de lecture Le guide complet de la clause WHERE en SQL Kateryna Koidan sql where Table des matières La clause WHERE en SQL Opérateurs à utiliser avec SQL WHERE Valeurs numériques Valeurs de texte Comparaisons avec des valeurs NULL Opérateur IN - Vérification par rapport à une liste de valeurs Combinaison de conditions de filtrage dans la clause WHERE Il est temps d'utiliser la clause WHERE du langage SQL ! Apprenez à utiliser la clause SQL WHERE pour filtrer les lignes. Dans cet article complet, nous abordons les opérateurs de comparaison et les opérateurs BETWEEN, IN, LIKE, AND, OR et NOT. Le filtrage des lignes de sortie est l'une des premières choses que vous devez apprendre lorsque vous commencez votre voyage en SQL. Dans ce guide, nous allons voir comment utiliser la clause WHERE de SQL pour filtrer les lignes dans différents scénarios. Nous couvrirons les cas d'utilisation de base et certains cas plus avancés. La clause WHERE en SQL Imaginons que vous travaillez sur l'un de vos premiers projets SQL et que vous exécutez vos premières requêtes SQL. Vous connaissez déjà la syntaxe de base de l'instruction SELECT et savez comment extraire des colonnes d'une ou deux tables de votre base de données. Mais vous avez remarqué que, très souvent, vous n'avez pas besoin de tous les enregistrements d'une table. Vous souhaitez apprendre à filtrer votre résultat afin de ne renvoyer que quelques enregistrements répondant à certains critères. Voulez-vous uniquement les enregistrements correspondant à un client spécifique ? Ou bien avez-vous besoin de récupérer la liste des produits dont le stock est faible (par exemple, moins de 10 articles) ? Ou peut-être voulez-vous obtenir la liste des représentants commerciaux qui travaillent dans la succursale X et qui ont réalisé des ventes supérieures à la moyenne au cours du dernier mois ? Dans tous ces cas, vous aurez besoin de la clause SQL WHERE pour filtrer vos résultats. Cette clause introduit certaines conditions, comme : quantity < 100 price BETWEEN 100 AND 500 customer_name = ‘John Smith’. Pour que les conditions de filtrage soient exécutées correctement, la clause WHERE doit être placée après FROM et JOIN et avant GROUP BY, HAVING et ORDER BY. Par exemple, voici une requête SQL pour obtenir des informations sur les livres publiés depuis 2020, classés par nom d'auteur : SELECT b.title, a.name, b.year FROM books b JOIN authors a ON books.author_id = authors.id WHERE b.year >= 2020 ORDER BY a.name; Notez que nous avons combiné des informations provenant de deux tables (books et authors) et placé la clause WHERE après la condition de jonction ON et avant la clause ORDER BY. Vous pouvez en savoir plus sur la syntaxe correcte de la clause WHERE dans ce guide destiné aux débutants. Il peut également être judicieux de commencer à pratiquer WHERE dès maintenant. Dans ce cas, je vous recommande notre cours interactif SQL pour les débutants interactif. Ses 129 exercices interactifs couvrent les principaux concepts SQL, notamment les conditions simples et complexes de WHERE. Si vous souhaitez d'abord avoir une vue d'ensemble, poursuivons en explorant les opérateurs que vous pouvez utiliser dans la clause WHERE. Opérateurs à utiliser avec SQL WHERE Vous pouvez construire des conditions de filtrage aussi bien basiques que complexes dans WHERE grâce à un large éventail d'opérateurs qui peuvent être utilisés pour comparer des valeurs en SQL. Nous allons passer en revue les principaux opérateurs qui permettent de filtrer par des valeurs numériques, des chaînes de caractères, des valeurs NULL et une liste de valeurs. Valeurs numériques Pour les valeurs numériques, vous pouvez utiliser ces opérateurs de comparaison : = Égal à. != (ou <>) Non égal à. < Inférieur à. <= Inférieur ou égal à. > Supérieur à. >= Supérieur ou égal à. Pour voir comment ces opérateurs fonctionnent en pratique, nous allons prendre quelques exemples. Pour nos exemples, nous allons utiliser le tableau suivant qui comprend des informations sur les vendeurs : ID, prénom, nom, salaire annuel, taux de commission, commission qu'ils ont reçue en 2021, et ID de leur branche. salespeople idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 11KatarinaRostova450000.1547345.601 12AlinaPark430000.1545678.902 13MeeraMalik500000.1539045.632 17SamarNavabi520000.1423023.452 18DonaldRessler400000.1441345.752 20ElisabethKeen590000.1445350.002 21TomKeen410000.1241560.751 22DembeZuma400000.1231540.705 23AramMojtabai500000.1229050.652 30KateKaplan540000.1025760.455 32MarvinGerard550000.1022500.005 34RaymondReddington600000.1017570.805 35HaroldCooper570000.1015450.502 37IanGarvey430000.08NULL1 38IvanStepanov410000.08NULL1 Tout d'abord, nous voulons obtenir les enregistrements de tous les vendeurs dont le salaire annuel est égal ou supérieur à 50K$. Nous pouvons utiliser la requête suivante : SELECT * FROM salespeople WHERE salary >= 50000; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 13MeeraMalik500000.1539045.632 17SamarNavabi520000.1423023.452 20ElisabethKeen590000.1445350.002 23AramMojtabai500000.1229050.652 30KateKaplan540000.1025760.455 32MarvinGerard550000.1022500.005 34RaymondReddington600000.1017570.805 35HaroldCooper570000.1015450.502 Comme prévu, nous avons obtenu la liste des vendeurs dont le salaire est égal ou supérieur à 50 000 $. Ensuite, voyons comment utiliser des nombres flottants plutôt que des nombres entiers avec les opérateurs de comparaison. Nous allons répertorier tous les vendeurs qui, grâce à leur longue expérience au sein de l'entreprise, ont un taux de commission supérieur à 0,12 : SELECT * FROM salespeople WHERE commission_rate > 0.12; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 11KatarinaRostova450000.1547345.601 12AlinaPark430000.1545678.902 13MeeraMalik500000.1539045.632 17SamarNavabi520000.1423023.452 18DonaldRessler400000.1441345.752 20ElisabethKeen590000.1445350.002 Comme nous avons utilisé l'opérateur non inclusif > dans la clause WHERE, nous n'avons que les vendeurs dont le taux de commission est strictement supérieur à 0,12. Cela exclut ceux dont le taux est égal à 0,12. Notez également que nous avons utilisé des opérateurs de comparaison avec des littéraux (c'est-à-dire 50000 et 0.12). Lors du filtrage des enregistrements, nous pouvons également utiliser des opérateurs de comparaison avec des expressions. Par exemple, dressons la liste des vendeurs dont les commissions perçues en 2021 étaient supérieures à leur salaire annuel : SELECT * FROM salespeople WHERE commission_2021 > salary; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 11KatarinaRostova450000.1547345.601 12AlinaPark430000.1545678.902 18DonaldRessler400000.1441345.752 21TomKeen410000.1241560.751 La requête a fonctionné comme prévu ; nous voyons quatre vendeurs qui ont apparemment eu des ventes très élevées en 2021, de sorte que leurs revenus de commissions ont dépassé leur salaire. À ce stade, vous devriez vous sentir plus ou moins à l'aise avec les opérateurs de comparaison présentés ci-dessus. Il est temps d'introduire un autre opérateur que vous pouvez utiliser avec des valeurs numériques dans WHERE: l'opérateur BETWEEN. Pour lister tous les vendeurs dont le taux de commission est compris entre 0,10 et 0,14, vous pouvez utiliser la requête suivante : SELECT * FROM salespeople WHERE commission_rate BETWEEN 0.10 AND 0.14; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 17SamarNavabi520000.1423023.452 18DonaldRessler400000.1441345.752 20ElisabethKeen590000.1445350.002 21TomKeen410000.1241560.751 22DembeZuma400000.1231540.705 23AramMojtabai500000.1229050.652 30KateKaplan540000.1025760.455 32MarvinGerard550000.1022500.005 34RaymondReddington600000.1017570.805 35HaroldCooper570000.1015450.502 Notez que l'opérateur BETWEEN est inclusif sur les limites inférieure et supérieure, de sorte que le jeu de résultats comprend les enregistrements correspondant aux taux de commission de 0,10 et 0,14. Passons maintenant aux opérateurs que vous pouvez utiliser avec des valeurs de texte. Valeurs de texte Tout d'abord, avec les valeurs textuelles, vous pouvez utiliser la série suivante d'opérateurs de comparaison qui fonctionnent de la même manière avec les chaînes de caractères qu'avec les valeurs numériques, mais dans le cas des valeurs textuelles, les enregistrements sont ordonnés et comparés par ordre alphabétique : = Egal à. != (ou <>) Non égal à. < Inférieur à (se produit en premier dans l'ordre alphabétique, c'est-à-dire a < b). <= Inférieur ou égal à. > Supérieur à (se produit après dans l'ordre alphabétique, c'est-à-dire b > a). >= -Plus grand que ou égal à. Pour obtenir des informations sur tous les vendeurs dont le nom de famille (trié par ordre alphabétique) est antérieur à "Keen", nous utiliserons la requête suivante : SELECT * FROM salespeople WHERE last_name < ‘Keen’; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 30KateKaplan540000.1025760.455 32MarvinGerard550000.1022500.005 35HaroldCooper570000.1015450.502 37IanGarvey430000.08NULL1 Ces opérateurs de comparaison fonctionnent bien avec les valeurs textuelles. Cependant, notez que nous incluons toujours des guillemets aux chaînes de caractères utilisées dans les conditions de WHERE (par exemple, 'Keen'). De plus, alors que certaines bases de données ne sont pas sensibles à la casse par défaut (par exemple, SQL Server, MySQL), d'autres le sont (par exemple, Oracle) et ne renverront aucun enregistrement si vous recherchez 'keen' au lieu de 'Keen'. Nous avons souvent besoin de beaucoup plus de souplesse avec les chaînes de caractères qu'avec les nombres, et c'est là que l'opérateur LIKE s'avère utile. Il permet d'effectuer un filtrage avancé des valeurs de texte, en particulier lorsqu'il est associé à un caractère générique SQL (par exemple, "_" pour un caractère manquant ou "%" pour un nombre quelconque de caractères). Par exemple, si nous voulons répertorier tous les vendeurs dont le nom de famille commence par K, nous pouvons écrire la requête SQL suivante : SELECT * FROM salespeople WHERE last_name LIKE ‘K%’; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 20ElisabethKeen590000.1445350.002 21TomKeen410000.1241560.751 30KateKaplan540000.1025760.455 Lisez cet article si vous voulez en savoir plus sur la façon dont les caractères génériques SQL peuvent être utilisés pour filtrer les enregistrements avec des valeurs de texte en SQL. Comparaisons avec des valeurs NULL La combinaison des opérateurs de comparaison et des valeurs NULL peut faire trébucher les débutants en SQL en raison de certains comportements contre-intuitifs. Par exemple, si nous testons qu'une certaine valeur est égale à NULL, le résultat sera inconnu même si la valeur de la colonne est NULL. Comme la clause WHERE requiert true vous obtiendrez zéro ligne avec une condition comme la suivante : SELECT * FROM salespeople WHERE commission_2021 = NULL; Result: Query has no result La solution consiste à utiliser les opérateurs IS NULL ou IS NOT NULL. Voici comment vous pouvez récupérer tous les enregistrements dont la colonne commision_2021 contient NULL: SELECT * FROM salespeople WHERE commission_2021 IS NULL; idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 37IanGarvey430000.08NULL1 38IvanStepanov410000.08NULL1 Consultez ce guide pour obtenir d'autres exemples du comportement de NULL avec divers opérateurs de comparaison. Opérateur IN - Vérification par rapport à une liste de valeurs Enfin, vous pouvez utiliser l'opérateur IN pour effectuer une vérification par rapport à une liste prédéfinie de valeurs. Par exemple, supposons que vous ayez une liste d'employés dont les revenus doivent être vérifiés. Vous pouvez récupérer les enregistrements nécessaires à l'aide d'une requête SQL comme celle-ci : SELECT * FROM salespeople WHERE last_name IN (‘Kaplan’, ‘Gerard’, ‘Zuma’); idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 22DembeZuma400000.1231540.705 30KateKaplan540000.1025760.455 32MarvinGerard550000.1022500.005 C'est parfait ! Cependant, il y a souvent quelques nuances syntaxiques à noter lors de l'utilisation de divers opérateurs dans la clause WHERE. Pour vous faciliter la tâche, nous avons préparé un aide-mémoire de deux pages sur SQL pour les débutants qui comprend de nombreux exemples d'opérateurs utilisés pour filtrer le résultat d'une requête SQL. Combinaison de conditions de filtrage dans la clause WHERE Dans les missions du monde réel, il est souvent insuffisant d'avoir une seule condition dans la clause WHERE. Heureusement, vous pouvez combiner différentes conditions de filtrage avec les opérateurs AND, OR et NOT: L'opérateur AND affiche un enregistrement si toutes les conditions sont vraies. L'opérateur OR affiche un enregistrement si l' une des conditions est vraie. L'opérateur NOT affiche un enregistrement si la condition correspondante n'est pas vraie. Des exemples permettront de mieux comprendre leur fonctionnement. Pour répertorier tous les vendeurs qui travaillent dans la branche n° 5 et dont le salaire est égal ou supérieur à 50 000 dollars, utilisez la requête suivante : SELECT * FROM salespeople WHERE branch_id = 5 AND salary >= 50000; Pour récupérer tous les enregistrements dont le nom de famille est 'Kaplan' ou 'Reddington', utilisez la requête suivante : SELECT * FROM salespeople WHERE last_name = ‘Kaplan’ OR last_name = ‘Reddington’; Enfin, pour obtenir des informations sur tous les vendeurs, à l'exception de ceux qui travaillent dans la branche n° 2, utilisez cette requête : SELECT * FROM salespeople WHERE NOT branch_id = 2; Si vous souhaitez obtenir d'autres exemples d'utilisation de AND, OR, et NOT, consultez cet article. Pour créer des conditions de filtrage encore plus complexes, vous pouvez combiner plusieurs conditions en utilisant AND, OR et NOT dans la même instruction WHERE. Cependant, il est important de se rappeler la préséance de ces opérateurs en SQL : PAS → ET → OU. Pour une meilleure clarté, il est fortement recommandé d'utiliser des parenthèses, même si elles ne sont pas nécessaires dans un cas précis. Disons que nous voulons récupérer tous les enregistrements où le nom de famille d'un employé est 'Keen' ou 'Park', où ses revenus de commission étaient supérieurs à son salaire en 2021 et où il ne travaille pas dans la branche #2. Voici une requête possible : SELECT * FROM salespeople WHERE (last_name = ‘Keen’ OR last_name = ‘Park’) AND (commission_2021 > salary) AND (NOT branch_id = 2); idfirst_namelast_namesalarycommission_ratecommission_2021branch_id 21TomKeen410000.1241560.751 Et maintenant, nous en avons fini avec les exemples ! Si vous avez besoin de plus d'informations sur la clause WHERE et d'exemples supplémentaires, lisez nos autres guides destinés aux débutants. Et puis, pratiquez, pratiquez et pratiquez encore ! Il est temps d'utiliser la clause WHERE du langage SQL ! La meilleure façon de maîtriser un nouveau concept en SQL est de l'essayer dans plusieurs requêtes. Pour les débutants, je pense que l'environnement le plus confortable pour pratiquer quelque chose de nouveau est celui des cours interactifs en ligne - vous avez tous les exemples prêts pour vous et vous pouvez écrire des requêtes depuis le confort de votre navigateur. Pour vous entraîner à utiliser SQL WHERE, je vous recommande de commencer par notre SQL pour les débutants interactif. Il couvre tout ce dont vous aurez besoin pour commencer à récupérer des données dans une base de données, y compris l'écriture de conditions de filtrage sophistiquées. Pour encore plus d'exercices pratiques, consultez la La pratique du SQL piste d'apprentissage. Elle comprend 5 cours interactifs avec des centaines de défis de codage. Merci de votre lecture et bon apprentissage ! Tags: sql where