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.
= | 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 | 8 |
La peau de chagrin | 8 |
sql | 8 |
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:
= | 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.
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 | 7 | 376 |
Introduction à la philosophie politique | 0 | 450 |
La peste | 8 | 330 |
Au bonheur des dames | 7 | 350 |
Le premier aigle | 7 | 325 |
Eugénie grandet | 7 | 315 |
Un barrage contre le pacifique | 6 | 380 |
MySQL | 0 | 735 |
Le père Goriot | 7 | 360 |
Nana | 7 | 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