pdf - e-book - archive

1.3  Introduction aux requêtes

1.3.1  Compléments sur SELECT

Il est possible d’utiliser SELECT pour n’afficher que certaines colonnes d’une table. Syntaxe :

SELECT <colonne_1>, <colonne_2>, ..., <colonne_n>
FROM <table>

Cette instruction s’appelle une requête, elle affichera pour chaque ligne de la table les valeurs des colonnes colonne1 à colonnen. Il est possible de supprimer les lignes en double à l’aide du mot-clé DISTINCT. Par exemple :

SELECT DISTINCT <colonne_1>, <colonne_2>, ..., <colonne_n>
FROM <table>

Pour trier les données, on utilise ORDER BY. Exemple :

SELECT <colonne_1>, <colonne_2>, ..., <colonne_n>
FROM <table>
ORDER BY <colonne_1bis>, <colonne_2bis>, ..., <colonne_nbis>

Cette instruction trie les données par colonne1bis croissants. En cas d’égalité, le tri est fait par colonne2bis croissants, etc. Pour trier par ordre décroissant, on ajoute DESC après le nom de la colonne choisie comme critère décroissant. Par exemple :

SELECT <colonne_1>, <colonne_2>, ..., <colonne_n>
FROM <table>
ORDER BY <colonne_1bis> DESC, <colonne_2bis>, ..., <colonne_nbis>

1.3.2  Instruction WHERE

Cette instruction permet de ne sélectionner que certaines lignes de la table. Par exemple la requête va afficher le nom du produit numéro 1 :

SELECT nomprod
FROM produit
WHERE numprod = 1


La syntaxe générale est

SELECT <colonne_1>, <colonne_2>, ..., <colonne_n>
FROM <table>
WHERE <condition>

condition sera évaluée pour chaque ligne de la table, et seules celles qui véfieront cette condition feront partie du résultat de la requête.

1.3.3  Conditions

Comparaison

Les conditions peuvent être des relations d’égalité (=), de différence (<>), d’inégalité (<, >, >= ou <=) sur des colonnes :

numero_client = 2
nom_client = 'Marcel'
prenom_client <> 'Ginette'
salary < 230
taxes >= 23000

Négation

La négation d’une condition s’obtient à l’aide de NOT. Par exemple, il est possible de ré-ecrire les conditions ci-avant :

NOT (numero_client <> 2)
NOT (nom_client <> 'Marcel')
NOT (prenom_client = 'Ginette')
NOT (salary >= 230) 
NOT (taxes < 23000)

Connecteurs logiques

De même, vous avez à votre disposition tous les connecteurs logiques binaires : AND, OR. Ainsi, les deux conditions suivantes sont les mêmes :

NOT((nom = 'Raymond') AND (prenom <> 'Huguette'))
(nom <> 'Raymond') OR (prenom = 'Huguette')

NULLité

Un champ non renseigné a la valeur NULL, dans une comparaison, NULL n’est jamais égal à quelque valeur qu’il soit ! La condition suivante est toujours fausse :

NULL = NULL;

La requête suivante ne renvoie aucune ligne :

INSERT INTO MP3 (numMp3) VALUES (3);
SELECT * 
FROM MP3
WHERE nomMp3 = NULL;


Pour tester la nullité d’un champ, on utilise IS NULL, par exemple :

SELECT * 
FROM MP3
WHERE nomMp3 IS NULL;


La non-nullité se teste de deux façons :

WHERE NOT (nomMp3 IS NULL);

ou encore

SELECT * 
FROM MP3
WHERE nomMp3 IS NOT NULL;

numMp3 nomMp3
1 Get Lucky
2 Locked Down

Encadrement

Une valeur numérique peut être encadrée à l’aide de l’opérateur BETWEEN, par exemple les deux conditions suivantes sont équivalentes :

SALAIRE BETWEEN 1000 AND 5000
(SALAIRE >= 1000) AND (SALAIRE <= 5000)

Inclusion

L’opérateur IN permet de tester l’appartenance à une liste de valeurs. Les deux propositions suivantes sont équivalentes

NAME IN ('Gégé', 'Ginette', 'Marcel')
(NAME = 'Gégé') OR (NAME = 'Ginette') OR (NAME = 'Marcel')

LIKE

LIKE sert à comparer le contenu d’une variable à un littéral générique. Par exemple, la condition

NAME LIKE 'M%' 

sera vérifiée si NAME commence par un ’M’. Ca fonctionne aussi sur les valeurs de type numérique, la condition

SALARY LIKE '%000000000' 

sera vérifiée si SALARY se termine par 000000000. Le caractère % peut remplacer dans le littéral n’importe quelle suite, vide ou non, de caractères ; il a le même rôle que * en DOS et en SHELL. Le caractère _ remplace un et un seul caractère dans le littéral. Par exemple, la condition

NAME LIKE 'K_r%'

ne sera vérifiée que si NAME commence par un ’K’ et contient un ’r’ en troisième position.

1.3.4  Suppression

L’expression

DELETE FROM <NOMTABLE> 
WHERE <CONDITION>

efface de la table NOMTABLE toutes les lignes vérifiant condition. Attention ! La commande

DELETE FROM <NOMTABLE>

efface toutes les lignes de la table NOMTABLE !

1.3.5  Mise à jour

L’expression

UPDATE <NOMTABLE> 
SET <colonne_1> = <valeur_1>, 
<colonne_2> = <valeur_2>, 
..., 
<colonne_n> = <valeur_n>
WHERE <CONDITION>

modifie les lignes de la table NOMTABLE vérifiant condition. Elle affecte au champ colonnei la valeur valeuri. Par exemple,

UPDATE CLIENT 
SET prenomcli = 'Dark' 
WHERE nomcli = 'Vador'

affecte la valeur ’Dark’ aux champs prenomcli de toutes les lignes dont la valeur nomcli est égale à ’Vador’. Il est possible, dans une modification, d’utiliser les valeurs des autres champs de la ligne, voire même l’ancienne valeur de ce champ. Par exemple,

UPDATE OPERATION
SET montantoper = montantoper + 5000

augmente les montants de toutes les opérations bancaires de 5000 (choisissez l’unité !).