IV.5. Interroger une base de données
IV.5.1. Notion de base
S'il est clairement établi dans certaines des sections
de cette partie, la commande SELECT constitue, à elle
seule, le langage d'interrogation d'une base. A cela, elle permet de:
Sélectionner certaines colonnes d'une table
(opération de projection) ;
Sélectionner certaines lignes d'une table en fonction de
leur contenu (restriction) ; Combiner des informations venant de plusieurs
tables (jointure, union, intersection, différence) ;
Combiner ces différentes opérations ;
Une interrogation, ou requête de sélection, est
une combinaison d'opérations portant sur des tables et dont le
résultat est lui-même une table, mais
éphémère ou dynamique (car elle n'existe que le temps de
la requête).
Dans ce qui suit, nous utiliserons les conventions typographiques
suivantes :
en MAJUCULES les commandes ou opérateurs qu'il faut
recopier tels quels (ex. SELECT)
en italique les paramètres devant être
remplacés par une valeur appropriée (ex. table, alias) en
souligné la valeur par défaut (ex. {ASC|DESC})
des crochets [...] encadrent une valeur optionnelle (ex.
[DISTINCT], [AS alias]) des accolades {...} encadrent des valeurs
(séparées par | ) dont l'une doit être saisie (ex.
{ON|OFF})
des points de suspension ... indiquent que les valeurs
précédentes peuvent être répétées
plusieurs fois (ex. table, ...peut prendre comme valeur table1, table2,
table3)
75
les signes de ponctuation (parenthèses, virgules et
points-virgules) doivent être saisis comme présentés. En
particulier, ne pas oublier le point-virgule obligatoire
à la fin de chaque requête.
Par ailleurs, on désigne par:
alias un synonyme d'un nom de table, de
colonne, ou d'expression calculée
condition une expression prenant la
valeur vrai ou faux
sous-interrogation(ou
sous-requête) une expression de requête (SELECT) figurant
dans une clause WHERE d'une requête principale
expr une colonne ou un attribut
calculé par une expression
num un numéro de colonne
Enfin, dans ce qui suit, nous illustrerons les requêtes sur
une base formée des relations suivantes :
Employes(numemp,nom,fonction,_superieur,date_embauche,salaire,comm,_num_dep)
Departements(num_dep,nom,ville)
76
IV.5.2. Syntaxe de base
La syntaxe de base de la commande SELECT est la suivante :
Les attributs sont les colonnes que l'on souhaite
voir apparaître dans la réponse. Si l'on souhaite toutes les
colonnes, il faut utiliser le symbole*.
Cas pratique :
Nous avons aussi la possibilité de faire
précéder les noms des attributs de la table où ils
figurent. Cela est obligatoire si l'on extraie les données de plusieurs
tables et que deux attributs sélectionnés portent le même
nom :
SELECT employes.nom, departements.nom FROM employes,
departements;
Il est également possible de renommer une colonne ou
une table par un alias, ce qui est utile lorsqu'on veut donner un nom plus
« parlant » ou plus court pour faciliter sa désignation
ultérieurement dans la requête.
Pour renommer une colonne, on utilise la syntaxe Col1 AS
'Nouveau nom' dans le SELECT (les guillemets ne sont obligatoires que si
l'alias comporte des espaces ou des caractères spéciaux). Pour
renommer une table, il suffit de faire suivre son nom par son alias dans la
clause FROM :
Ceci est particulièrement utile lorsque l'on
définit un attribut calculé à
partir des attributs de tables. Il est en effet possible de faire figurer comme
résultat d'un SELECT une expression composée d'opérateurs,
de fonctions prédéfinies, de variables et de constantes :
La clause WHERE permet de
spécifier quelles sont les lignes à sélectionner. Le
prédicat de sélection, formé d'une expression comportant
des opérandes liés par des opérateurs, sera
évalué pour chaque ligne de la table, et seules les lignes pour
lesquelles il est vrai seront retenues.
77
Les opérandes figurant dans le prédicat peuvent
être des noms de colonnes, ou des constantes de type :
nombres : peuvent inclure un signe, un point décimal et
une puissance de dix (ex. - 1.2E-5)
chaînes : chaînes de caractères entre
apostrophes (Attention : 'Victor' ?'VICTOR') dates : chaînes de
caractères entre apostrophes dans un format spécial. Pour
s'affranchir des problèmes inhérents aux incompatibilités
dans les différentes langues, il est conseillé d'utiliser le
format suivant : 'aaaa-mm-jj' (ex. {d '2001-1031'})
la valeur NULL (valeur non définie), que l'on doit tester
avec l'opérateur IS, et pas = (cf. ci-dessous).
Les opérateurs figurant dans le prédicat peuvent
être :
les opérateurs de comparaison traditionnels (=
(égal), <> (différent de), <, <=, >, >=) les
opérateurs spéciaux
? BETWEEN ... AND (valeur comprise entre 2 bornes) : expr1
BETWEEN expr2
AND expr3
? IN (valeur comprise dans une liste) : expr1 IN (expr2, expr3,
...)
? LIKE (chaîne semblable à une chaîne
générique) : expr1 LIKE chaine
La chaîne générique peut comporter les
caractères jokers `_' (remplace 1 seul caractère quelconque) et
`%' (remplace une chaîne de caractères quelconque, y compris de
longueur nulle)
les opérateurs logiques AND, OR et NOT (inversion logique)
pour combiner plusieurs prédicats.
Des parenthèses peuvent être utilisées
pour impose rune priorité dans l'évaluation du prédicat
(par défaut, l'opérateur AND est prioritaire par rapport à
OR).
Cas pratique :
Employés dont la commission est supérieure au
salaire
SELECT nom, salaire, comm FROM employes WHERE comm >
salaire;
Employés gagnant entre 1700 et 2550€
SELECT nom, salaire FROM employes WHERE salaire BETWEEN 1700 AND
2550;
78
Employés commerciaux ou analystes
SELECT num_emp, nom, fonction FROM employes WHERE fonction IN
('Commercial', 'Analyste');
Employés dont le nom commence par V
SELECT nom FROM employes WHERE nom LIKE 'M%';
Employés du département 30 ayant un salaire
supérieur à 2700 €
SELECT nom FROM employes WHERE _num_dep=30 AND
salaire>2700;
Employés directeurs ou commerciaux travaillant dansle
département 10
SELECT nom, fonction FROM employes
WHERE (fonction='Directeur' OR fonction ='Commercial') AND
_num_dep=10;
Employés percevant une commission
SELECT nom, salaire, comm FROM employes WHERE comm IS NOT
NULL;
|