1.langage SQL
1.langage SQL
1.langage SQL
Caractéristiques du langage
SQL (Structured Query Language) est le langage unique qui permet de décrire, de manipuler, de
contrôler l'accès et d’interroger les bases de données relationnelles.
C'est un langage déclaratif, qui s'adresse à la fois aux utilisateurs "novices" et aux programmeurs
confirmés. Une commande SQL écrite dans un environnement Windows sous ACCESS peut,
souvent sans modification, être utilisée directement dans un environnement ORACLE sous
Unix...
Nous ne traiterons dans ce cours que des commandes liées à l'interrogation de données :
clause SELECT.
1
Conventions syntaxiques
MAJUSCULES : (SELECT ... )
Italique : colonne, table. Paramètre devant être remplacé par la valeur appropriée.
Alias : Synonyme d'un nom de table ou de colonne.
Conditions : Expression prenant la valeur vraie ou fausse.
Sous conditions : Expression contenant une sous-interrogation.
Expr : Colonne, ou attribut calculé (+, -, *, /)
num : Numéro de colonne
{ } : Ex {ON|OFF}. Une des valeurs séparées par '|' doit obligatoirement être saisie.
[ ] : Valeur optionnelle.
( ) : Les parenthèses et les virgules doivent être saisies comme présenté.
... : Les valeurs précédentes peuvent être répétées plusieurs fois
_ Souligné : Indique la valeur par défaut.
1. Projection et Sélection
Projection
L'opération de projection consiste à choisir le nom des colonnes de la (ou des) table(s) que l'on
souhaite voir apparaître dans la réponse. Si l'on veut afficher toutes les colonnes, il faut utiliser
"*". Les colonnes sont données après la clause SELECT.
2
- Afficher le Contenu de la table ETUDIANT
SELECT *
FROM ETUDIANT;
Sélection
L'opération de sélection consiste à sélectionner des lignes (n-uplets, tuples) d'une (ou plusieurs)
table(s) qui satisfont certaines conditions. Les conditions sont exprimées après la clause
WHERE.
Projection et Sélection
Les opérations de projection et de sélection peuvent évidemment être utilisées dans la même
requête SQL.
La notation :
'09-20-2001'-Dtnaiss n'est pas autorisée, il faut donc utiliser
CAST('09-20-2001' AS Date) - Dtnaiss
La fonction CURRENT_DATE permet de récupérer la date système.
Clause ORDER BY
Il est possible, grâce à la clause ORDER BY, d'ordonner les résultats d'une requête en fonction
de la valeur de certains attributs (colonnes).
3
- Afficher la liste des enseignants par grade et par ordre alphabétique décroissant des noms.
SELECT Grade, Nomens
FROM ENSEIGNANT
ORDER BY Grade, Nomens DESC;
La requête précédente, qui utilise les noms des colonnes, est équivalente à la requête suivante qui
utilise les numéros des colonnes qui servent à ordonner les résultats.
2. Jointure
C'est une opération fondamentale lorsque l'on manipule des bases de données et qui permet de
réunir, 2 par 2, des tables. Il faut préciser, après la clause FROM, le nom des tables qui vont
intervenir et, après la clause WHERE, les conditions qui vont permettre de réaliser la jointure.
- Quelles sont les noms des matières enseignées par les enseignants dont le grade est
professeur.
SELECT Nomate
FROM ENSEIGNANT, MATIERE
WHERE ENSEIGNANT. Numens = MATIERE. Numens
And Grade = ‘Prof’;
Notions d'alias
Un alias permet de renommer une colonne ou une table. Cette opération est utile lorsque l'on
veut qu'une colonne ait un nom plus "parlant" ou qu'une table puisse être manipulée plus
facilement notamment quand il existe différentes conditions de jointure. Donner un nom d'alias à
une table est indispensable en cas d’auto-jointure
-Alias de colonne
Syntaxe : Col1 AS "Nom de la colonne".
Dans le résultat de la requête correspondante, Col1 sera remplacée par "Nom de la colonne". Les
guillemets ne sont obligatoires que si le nom d'alias comporte des espaces.
Alias de table
Syntaxe : Table1 Alias1
Dans une requête, Alias1 sera identique à Table1
- Quelles sont les noms des matières enseignées par les enseignants dont le grade est
professeur.
SELECT Nomate AS « Matiere Ens Prof » (si on met des espaces on doit mettre des guillemets )
FROM ENSEIGNANT E, MATIERE M
WHERE E. Numens = M. Numens
And Grade = ‘Prof’;
4
3. Regroupements
Clause GROUP BY
Cette clause permet de créer des sous-ensembles (regroupements) de lignes pour lesquels la
valeur d'une (ou plusieurs) colonne est identique. Cette clause est liée à l'utilisation de fonctions
statistiques qui seront appliquées sur les sous-ensembles définis par GROUP BY
Cette requête va créer autant de sous-ensembles que de valeurs possibles de l'attribut Grade. Ici 4
sous-ensembles : Ass, MAss, MConf, Prof.
Clause HAVING
Cette clause, contrairement à la clause WHERE qui précise les conditions à appliquer sur les
lignes d'une table, permet de préciser des conditions au niveau des sous-ensembles créés par
GROUP BY.
- Afficher les grades et les noms des enseignants appartenant à un même grade et ayant une
ancienneté moyenne dépassant 5 ans au sein de ce même grade.
SELECT Grade, Nomens
FROM ENSEIGNANT
GROUP BY Grade
HAVING AVG(Ancien) >= 5;
Fonctions statistiques
Fonctions Rôle
Renvoie le nombre de valeurs
dans la colonne. Si DISTINCT
COUNT([DISTINCT] expr [alias]
est précisé, les doublons sont
éliminés.
Compte toutes les lignes de la
COUNT(*)
table.
Renvoie la moyenne des valeurs
AVG(expr [alias])
de la colonne spécifiée.
Renvoie la plus petite valeur de la
MIN(expr [alias])
colonne spécifiée.
Renvoie la plus grande valeur de
MAX(expr [alias])
la colonne spécifiée.
Renvoie la somme des valeurs de
SUM(expr [alias])
la colonne spécifiée.
5
- Afficher la date de naissance de l'étudiant le plus jeune et de l'étudiant le plus âgé.
SELECT MIN(Dtnaiss) AS "Plus jeune", MAX(Dtnaiss) AS "Plus âgé"
FROM ETUDIANT;
Dans ce cas, un sous-ensemble va être créé pour chaque numéro étudiant et la moyenne sera
calculée au niveau du sous-ensemble.
6
7