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

La peste8
La peau de chagrin8
sql8

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

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

Les désillusions du progrès12
Moon22
Statistiques descriptives25
L'amant10
Le tourisme à la Martinique : sous la plage, les conflits15

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'

SELECT titre, id_auteur FROM livre WHERE id_auteur='zola1'
Au bonheur des dameszola1
La debâclezola1
Nanazola1

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

perryanne
hillermantony
camusalbert
balzachonore
zolaemile
durasmarguerite
aronraymond
aronjean-paul
garyromainajar emile
pybernard
graisbernard
jonquetthierry
fortaben
duboispaul
perrypascal

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')

Au bonheur des dameszola1
La peau de chagrinbalz1
Eugénie grandetbalz1
L'amantdura1
Un barrage contre le pacifiquedura1
La debâclezola1
Le père Goriotbalz1
Nanazola1

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:

Les Modernes7376
Introduction à la philosophie politique0450
La peste8330
Au bonheur des dames7350
Le premier aigle7325
Eugénie grandet7315
Un barrage contre le pacifique6380
MySQL0735
Le père Goriot7360
Nana7350

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'))

>>>>>>>>>>
Un plat qui se mange froidperr1
Moonhill1
Statistiques descriptivespy1
L'étrangercamu1
La pestecamu1
Le premier aiglehill1
La vie devant soigary1
sqlfort1
MySQLdubo1
Le tourisme à la Martinique : sous la plage, les conflitsperr2

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%'

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%'

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_'

Les Modernesaron1
Les désillusions du progrèsaron2
Introduction à la philosophie politiquearon2

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

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

perryanne
camusalbert
durasmarguerite
graisbernard
fortaben
perrypascal

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