Filtrer les données

Les requêtes précédentes ne permettent que de disposer de certaines colonnes des tables mais en incorporant toutes les lignes. Il n'y avait aucune restrictions sur celles-ci. Or disposer que de certains enregistrements est vraiment important. La clause WHERE va nous permettre de disposer des enregistrements répondant à cerrtains critères. Le principe d'utilisation est le suivant:

SELECT * FROM nom_de_la_table WHERE condition

Plusieurs cas sont à considérer.

Colonnes (Champs) dont le contenu est quantitatif

L'utilisation des opérateurs suivant est indispensable.

Opérateurs de comparaison
= Egal à
<> ou != Différent de
< Inférieur à
<= Inférieur ou égal à
> Supérieur à
>= Suérieur ou égal à
!< Pas inférieur à
!> Pas supérieur à
BETWEEN...AND... Compris entre deux valeurs
IS NULL Est une valeur NULL

Exemple: Liste des livres dont le prix est égal à 8

SELECT titre, prix FROM livre WHERE prix=8

titre prix 
La peste 
La peau de chagrin 
sql 

Liste des ouvrages dont le prix est compris entre 10 et 20.

SELECT titre, prix FROM livre WHERE prix BETWEEN 10 AND 20

titre prix 
Les désillusions du progrès 12 
Moon 22 
Statistiques descriptives 25 
L'amant 10 
Le tourisme à la Martinique : sous la plage, les conflits 15 

Colonnes dont le contenu n'est pas quantitatif

Certains opérateurs restent utilisables:

Opérateurs de comparaison
= Egal à
<> ou != Différent de
IS NULL  

Liste des ouvrages dont l'id_auteur est zola1 .

SELECT titre, id_auteur FROM livre WHERE id_auteur='zola1'

titre id_auteur 
Au bonheur des dames zola1 
La debâcle zola1 
Nana zola1 

On remarque l'utilisation du caractère ' qui entoure le nom recherché.

Liste des auteurs utilisant un pseudo

SELECT nom, prenom, pseudo FROM auteur WHERE pseudo IS NOT NULL

nom prenom pseudo 
perry anne  
hillerman tony  
camus albert  
balzac honore  
zola emile  
duras marguerite  
aron raymond  
aron jean-paul  
gary romain ajar emile 
py bernard  
grais bernard  
jonquet thierry  
forta ben  
dubois paul  
perry pascal  

Remarquons l'utilisations de l'opérateur NOT qui nous permettra de combiner les restrictions.

Signalons enfin l'opérateur In permettant de faciliter les recherches. Exemple avec la liste des livres dont l'id_auteur est zola1, balz1, ou dura1.

SELECT titre, id_auteur FROM livre WHERE id_auteur IN ('zola1','balz1','dura1')

titre id_auteur 
Au bonheur des dames zola1 
La peau de chagrin balz1 
Eugénie grandet balz1 
L'amant dura1 
Un barrage contre le pacifique dura1 
La debâcle zola1 
Le père Goriot balz1 
Nana zola1 

Opérateurs logiques

Ceux-ci vont nous permettre de combiner des restrictions dans la clause WHERE. Il suffit alors de séparer ces restrictions en utilisant l'un de ces opérateurs.

Opérateurs de comparaison
AND Et
OR Ou
IN Compris dans une liste de valeurs
NOT Exclut la condition qui le suit

Liste des ouvrages dont le prix est inférieur à 15 et dont le nombre de pages est supérieur à 300

SELECT titre, prix, nb_pages FROM livre WHERE (prix<15 AND nb_pages>300)

On a donc:

titre prix nb_pages 
Les Modernes 376 
Introduction à la philosophie politique 450 
La peste 330 
Au bonheur des dames 350 
Le premier aigle 325 
Eugénie grandet 315 
Un barrage contre le pacifique 380 
MySQL 735 
Le père Goriot 360 
Nana 350 

Liste des ouvrages dont l'id_auteur n'est pas compris dans la liste suivante (dura1, aron1, aron2) ou dans la suivante (balz1, zola1)

SELECT titre, id_auteur FROM livre WHERE ( id_auteur NOT IN ('dura1', 'aron1','aron2') AND id_auteur NOT IN ('balz1','zola1'))

titre id_auteur 
Un plat qui se mange froid perr1 
Moon hill1 
Statistiques descriptives py1 
L'étranger camu1 
La peste camu1 
Le premier aigle hill1 
La vie devant soi gary1 
sql fort1 
MySQL dubo1 
Le tourisme à la Martinique : sous la plage, les conflits perr2 

Cette requête équivaut en fait à une seule restriction qui exclut les 5 id_auteurs concernés.

Les caractères de substitution

Egalement appelés jokers, ils sont particulièrement intéressants dans le cas des colonnes contenant du texte. Ils s'emploient avec l'opérateur LIKE.

Le caractère le plus utilisé est % (pourcentage) qui remplace n'importe quel nombre d'occurrences de n'importe quel caractères. Exemple avec la liste des titres des livres qui commencent par la lettre L:

SELECT titre FROM livre WHERE titre LIKE 'l%'

titre 
Les Modernes 
Les désillusions du progrès 
L'étranger 
La peste 
Le premier aigle 
La peau de chagrin 
L'amant 
La vie devant soi 
La debâcle 
Le père Goriot 

Ce joker peut se positionner au début, à la fin, ou au milieu d'une chaîne de caractères. Il peut même être présent deux fois. Exemple avec la liste des stitres des ouvrages contenant l'expression "an":

SELECT titre FROM livre WHERE titre LIKE '%an%'

titre 
Un plat qui se mange froid 
L'étranger 
Eugénie grandet 
L'amant 
La vie devant soi 
Nana 

Moins performant , bien que parfois très pratique, le caractère _ (soulignement) qui permet de remplacer n'importe quel caractère, mais une seule fois.
Ainsi avec la liste des livres dont l'id_auteur (qui comprend 5 caractères) commence par aron (vous avez remarqué qu'il y en a deux).

SELECT titre, id_auteur FROM livre WHERE id_auteur LIKE 'aron_'

titre id_auteur 
Les Modernes aron1 
Les désillusions du progrès aron2 
Introduction à la philosophie politique aron2 

Autre exemple avec la liste des auteurs dont le nom comprend exactement 5 caractères:

SELECT nom, prenom FROM auteur WHERE nom LIKE '_____'

nom prenom 
perry anne 
camus albert 
duras marguerite 
grais bernard 
forta ben 
perry pascal 

A vous

Rappel du modèle:

auteur (id_auteur, nom, prenom, pseudo, nationalite, siecle)
editeur (id_editeur, nom, adresse, collections)
genre (id_genre, type, precisions)
livre (code, titre, nb_pages, prix, #id_auteur, #id_genre, #id_editeur)

Saisir les requêtes permettant d'obtenir les informations suivantes:

1 - Liste des ouvrages dont le nombre de pages n'est pas compris entre 50 et 150 et entre 280 et 300.
2 - Liste des auteurs dont le nom ne comprend pas la lettre e
3 - Liste des auteurs dont le nom comprend la lettre e ou la lettre y


Saisir votre requête

Aristeri.com est le site de Bernard Andruccioli Mentions légales -
/?rubrique=SQL_FiltrerResource id #18