07. Ajout de Conditions
Les conditions en SQL permettent de filtrer les données lors des requêtes. Plutôt que de récupérer toutes les lignes d'une table, elles permettent de spécifier précisément quelles données nous intéressent en définissant des critères logiques. Par exemple, on peut vouloir uniquement les commandes d'un client spécifique, les produits au-dessus d'un certain prix, ou les employés d'un département particulier. Cela rend les requêtes plus efficaces en ne traitant que les données pertinentes, améliore les performances et permet d'obtenir exactement l'information recherchée.
Après avoir vu les clauses suivantes SELECT, FROM, DISTINCT et AS, introduisons la clause WHERE.
WHERE
La clause WHERE est utilisée pour filtrer les résultats d'une requête en spécifiant une condition. Elle permet de restreindre les lignes renvoyées en fonction de critères spécifiques, tels que des valeurs dans certaines colonnes ou des conditions logiques. La clause WHERE vient toujours après le FROM.
Attention : L'ordre d'écriture des clauses est important./*
- Les guillemets doubles "..." pour sélectionner une colonne ayant un espace dans sont nom.
- Les guillemets simples '...' pour choisir une valeur sous forme de date ou de caractères.
*/
SELECT *, date AS "date achat"
FROM perform21
WHERE "date achat" = '2021-01-08'La requête ci-dessus affiche toutes les commandes qui ont eu lieu le 8 janvier 2021.
Encore une fois, les guillemets doubles sont utilisés pour choisir la colonne dans la clause WHERE, "date achat") alors que les guillemets simples sont utilisées pour déterminer la valeur de la colonne sélectionnée, ici '2021-01-08'.
Rappel :SELECT : est utilisée pour afficher toutes les colones et renommer la colonne date en "date achat".
FROM : indique la table à partir de laquelle nous récupérons les données. Ici, la table perform21.
WHERE : indique la condition que les lignes affichées vont respecter, ici la condition porte sur la date de commande, elle doit avoir eu lieu le 8 août 2011.
Opérations possibles
Dans la clause WHERE
| Opérateur | Description | Exemple |
|---|---|---|
| = | Égalité | WHERE colonne = valeur |
| <> ou != | Différent de | WHERE colonne <> valeur |
| < | Inférieur à | WHERE colonne < valeur |
| <= | Inférieur ou égal à | WHERE colonne <= valeur |
| > | Supérieur à | WHERE colonne > valeur |
| >= | Supérieur ou égal à | WHERE colonne >= valeur |
| BETWEEN ... AND ... | Entre deux valeurs | WHERE colonne BETWEEN valeur1 AND valeur2 |
| IN | Correspond à l'une des valeurs | WHERE colonne IN (valeur1, valeur2, ...) |
| LIKE | Correspondance partielle avec | WHERE colonne LIKE 'pattern%' |
| IS NULL | Nul (sans valeur) | WHERE colonne IS NULL |
| IS NOT NULL | Non nul (avec valeur) | WHERE colonne IS NOT NULL |
| AND | Condition logique ET | WHERE condition1 AND condition2 |
| OR | Condition logique OU | WHERE condition1 OR condition2 |
| NOT | Négation logique | WHERE NOT condition |
Chacun de ces opérateurs offre une façon différente de filtrer les résultats. L'opérateur LIKE est très utile lorsqu'il s'agit de travailler avec du format texte.
LIKE
L'opérateur LIKE est utilisé pour effectuer une correspondance partielle, similaire à une recherche de caractères dans une colonne de texte, tout comme on le ferait avec un Ctrl+F (ou Cmd+F sur Mac) sur un navigateur web comme Google Chrome.
L'opérateur LIKE est utilisé lorsque nous souhaitons rechercher des lignes ayant des caractères similaires sans exiger une correspondance exacte. Dans la table fictive utilisateurs ci-dessous, l'opérateur LIKE peut être utilisé pour afficher tous les prénoms qui commence par 'A'.
La table utilisateurs| ID | Nom | Age | Ville |
|---|---|---|---|
| 1 | Alice | 28 | Paris |
| 2 | Bob | 34 | New York |
| 3 | Charlie | 22 | Berlin |
| 4 | David | 31 | Tokyo |
| 5 | Eva | 25 | Londres |
| 6 | Frank | 29 | Sydney |
| 7 | Amaury | 23 | Milan |
La requête va s'écrire:
SELECT *
FROM utilisateurs
WHERE Nom LIKE 'A%'Le 'A%' signifie que le résultat affiché inclura toutes les occurrences qui commencent par 'A'.
Le résultat affiché sera à la suite de la requête sera:
| ID | Nom | Age | Ville |
|---|---|---|---|
| 1 | Alice | 28 | Paris |
| 7 | Amaury | 23 | Milan |
Le signe '%' peut représenter n'importe quelle séquence de caractères (y compris aucun caractère)., 3 exemples ci-dessous:
- 'A%' trouve toutes les valeurs qui commencent par 'A' .
- '%a%' trouve toutes les valeurs qui contiennent un 'a' .
- '%a' trouve toutes les valeurs qui terminent par 'a' .
Le signe '_' représente un seul caractère. Par exemple, '2021/01/0_' trouvera les jours entre le 1et et 9 janvier.
Si vous êtes familiarisés avec Python ou le développement web, l'opérateur LIKE peut être comparé à une version simplifiée des expressions régulières (regex).
SELECT customerID, CustomerName, StrategicCustomer
FROM customer
WHERE CustomerName LIKE '%S'Question 7.1
Que fait cette requête? Pour accéder à la console SQL.
SELECT customerID, productID, "VolKilo (COPA)", "NOS (COPA)", Date
FROM perform21
WHERE Date LIKE '%-01-%'Question 7.2
Utilise la table customer située dans controlGest pour afficher les colonnes customerId et customerName ayant des noms de clients (customerName) terminant par un "E". Pour accéder à la console SQL.
Attention : L'opérateur LIKE peut être sensible à la case.
Question 7.3
Corrige ce qui ne va pas dans la requête ci-dessous puis dire ce que fait cette requête en commentaire. Pour accéder à la console SQL.
SELECT CustomerName
FROM customer
WHERE CustomerName LIKE "D%" Tips : Le meilleur moyen de savoir est de l'exécuter dans la console.
BETWEEN … AND …
BETWEEN ... AND ... est un opérateur en 2 mots, il permet de sélectionner des valeurs comprises dans une plage de dates spécifiée. Les dates sont entrées entre guillemets simples sous le format 'YYYY-MM-DD'.Question 7.4
Que fait cette requête? Pour accéder à la console SQL.
SELECT customerID, productID, "VolKilo (COPA)", "NOS (COPA)", Date
FROM perform21
WHERE Date BETWEEN '2021-01-01' AND '2021-02-01'Question 7.5
Utilise la table perform21 située dans la base de données controlGest pour afficher tous les numéros de commande et les marges générées pour chaque commande réalisée entre le 9 et le 12 janvier 2021. Pour accéder à la console SQL.
On considérera que les numéros de commandes sont la concatenation de l'identifiant du client, l'identifiant du produit et la date.
- NOS (COPA) : Montant des biens à la vente (contribue au chiffre d'affaire).
- COGS (COPA) : Montant des biens à l'achat (coût).
L'opérateur : BETWEEN … AND … et les autres opérateurs vu dans le tableau précédemment peuvent être combinés pour créer des conditions plus complexes. L'utilisation de parenthèses - comme dans une opération arithmétique - permet de définir un ordre de priorité dans l'évaluation des conditions logiques. Voyons ensemble l'usage des opérateurs AND et OR.
AND
L'opérateur AND en SQL est utilisé pour combiner plusieurs conditions dans une clause WHERE. Il permet de filtrer les enregistrements en ne retournant que ceux qui satisfont toutes les conditions spécifiées. Ainsi, une ligne est incluse dans le résultat uniquement si chaque condition reliée par l'opérateur AND est vraie.
Question 7.6
Que fait cette requête? Pour accéder à la console SQL.
SELECT *
FROM customer
WHERE CustomerName LIKE 'D%' AND StrategicCustomer='Yes'Question 7.7
Utilise la table perform21 située dans la base de données controlGest pour afficher toutes les lignes où plus de 30% de marge ont été réalisée entre le 9 et le 12 janvier 2021. Pour accéder à la console SQL.
- NOS (COPA) : Montant des biens à la vente (contribue au chiffre d'affaire).
- COGS (COPA) : Montant des biens à l'achat (coût).
Question 7.8
Utilise la table product toujours dans controlGest pour afficher toutes les colonnes des produits ayant une sous-catégorie (subCategory) de valeur NULL et une catégorie (category) 'Others'. Pour accéder à la console SQL.
Tips : Si tu as des doutes, regarde comment utiliser IS NULL dans le tableau reprenant toutes les opérations dans le WHERE.
L'opérateur AND exige que toutes les conditions soient remplies pour qu'un enregistrement soit inclus dans le résultat. Si une seule condition n'est pas satisfaite, la ligne correspondante ne sera pas retournée.
OR
L'opérateur OR est moins restrictif que l'opérateur AND. Les lignes affichées après l'exécution d'une requête respecteront au moins l'une des conditions séparées par l'opérateur OR.
Question 7.9
Que fait cette requête? Pour accéder à la console SQL.
SELECT *
FROM customer
WHERE CustomerName LIKE 'D%' OR StrategicCustomer='Yes'Tu peux également combiner les opérateurs AND et OR dans des expressions logiques plus complexes pour répondre à des critères spécifiques dans tes requêtes SQL.
Ordre d'exécution
Nous avons déjà exploré plusieurs opérateurs en SQL, tels que LIKE, BETWEEN, OR, et AND. Ils sont particulièrement utiles pour affiner les recherches en dehors de l'opérateur classique d'égalité.
Il est aussi essentiel de connaître l'ordre conventionnel des clauses dans les requêtes SQL :
- SELECT : Indique les colonnes à récupérer dans les résultats.
- FROM : Spécifie la table ou source de données.
- WHERE : Filtre les résultats en fonction de conditions spécifiques.
Si cet ordre n'est pas respecté, la requête ne fonctionnera pas.
Cependant, il est important de noter que lors de l’exécution, le système de gestion de base de données (SGBD) traite les clauses dans un ordre différent pour optimiser la performance :
- FROM : D’abord, le SGBD identifie la source des données, généralement une ou plusieurs tables.
- WHERE : Ensuite, les lignes sont filtrées selon les conditions spécifiées.
- SELECT : Enfin, seules les colonnes spécifiées sont projetées dans les résultats.
Comprendre cette distinction entre l’ordre d’écriture et l’ordre d’exécution est fondamental pour optimiser les requêtes et bien appréhender le fonctionnement interne des bases de données SQL.
Question 7.10
Utilise la table product située dans controlGest pour afficher les colonnes productID, category, subcategory et brand des produits ayant une sous-catégorie (subCategory) non indiquée ou 'Others' comme categorie. Est-ce que le résultat est le même qu'à la question 7.8 ?
SQL Console
| Category | Num | Sales Usd |
|---|---|---|
| ABC | 123 | $26.4M |
Question 7.1
Question 7.2
Question 7.3
Question 7.4
Question 7.5
Question 7.6
Question 7.7
Question 7.8
Question 7.9