1.langage SQL

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 7

Le langage SQL

Note : Toutes les interrogations se rapportent à la base de données "ETUDIANTS" dont le


schéma conceptuel est le suivant :

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...

Les commandes SQL

Nous ne traiterons dans ce cours que des commandes liées à l'interrogation de données :
clause SELECT.

Syntaxe de la commande SELECT


SELECT [DISTINCT] {* | expr [AS alias], ... }
FROM table [alias], ...
[WHERE { conditions | sous conditions} ]
[GROUP BY expr, ...] [HAVING conditions]
[ORDER BY {expr | num}{ASC | DESC}, ...];

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.

Signification des différentes clauses


SELECT Précise les colonnes qui vont apparaître dans la réponse
FROM Précise la (ou les) table intervenant dans l'interrogation
Précise les conditions à appliquer sur les lignes. On
peut trouver :
- Des comparateurs : =, >, <, >=, <=,<>
WHERE
- Des opérateurs logiques : AND, OR, NOT
- Les prédicats : IN, LIKE, NULL, ALL, SOME, ANY,
EXISTS...
GROUP BY Précise la (ou les) colonne de regroupement
Précise la (ou les) conditions associées à un
HAVING
regroupement
Précise l'ordre dans lequel vont apparaître les lignes de
la réponse :
ORDER BY
- ASC : En ordre ascendant (par défaut)
- DESC: En ordre descendant

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.

- Afficher les Numéros et les Noms des étudiants.


SELECT Numetu, Nometu
FROM ETUDIANT;

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.

- Afficher la liste des matières dont le coefficient est 2.


SELECT *
FROM MATIERE
WHERE Coeff = 2;

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.

- Afficher les numéros et les noms des étudiants nés en 1980


SELECT Numetu, Nometu
FROM ETUDIANT
WHERE Dtnaiss>='01-01-1980' AND Dtnaiss<='12-31-1980';

Conversion des données et traitement des dates


Une date particulière doit être exprimée sous la forme Américaine : mm-jj-aaaa. On peut la
considérer soit :
- Comme une chaîne de caractères. Par exemple '09-20-2001' ( le 20 septembre 2001). On ne
peut pas dans ce cas faire de calcul mais on peut faire des comparaisons.
- Comme une date. Il faut alors utiliser la fonction de conversion de données "CAST" et l'on
peut alors faire des calculs.

Syntaxe de la fonction de transtypage CAST :


CAST(<col> AS <Datatype>)
<col> : Nom de colonne ou valeur.
<Datatype> : {Integer | Decimal | Char | Date | ...}

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.

SELECT Grade, Nomens


FROM ENSEIGNANT
ORDER BY 1, 2 DESC;

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

Regroupement par grade des enseignants


SELECT Grade
FROM ENSEIGNANT
GROUP BY Grade;

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;

- Afficher le nombre total d'étudiants


SELECT COUNT(*)
FROM ETUDIANT;

Fonctions statistiques et clause GROUP BY


Les fonctions statistiques opèrent sur un ensemble de données et renvoient une valeur unique.
D'une manière générale, lorsqu'un attribut est sélectionné dans une clause SELECT le résultat
pourra comporter de zéro à n valeurs ce qui peut provoquer des conflits lorsque l'on utilise
conjointement des fonctions statistiques qui elles ne renvoient qu'une seule valeur.
L'ordre SELECT suivant, supposé calculer la moyenne des notes par étudiant, est donc
incorrect
et va générer l'erreur d'exécution caractéristique : "Invalid column reference"
SELECT Numetu, AVG(Note)
FROM NOTES;

La formulation correcte est :


SELECT Numetu, AVG(Note)
FROM NOTES
GROUP BY Numetu;

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

Vous aimerez peut-être aussi