Vous êtes sur la page 1sur 10

I- LES FONCTIONS DE BASE DU SQL

-1- Généralités

Le langage SQL (Structured Query Language) peut être considéré comme le langage d’accès
normalisé aux bases de données. Il est aujourd’hui supporté par la plupart des produits
commerciaux que ce soit par les systèmes de gestion de bases de données micro tel que
Access ou par les produits plus professionnels tels que Oracle ou Sybase.

Il possède 3 parties :

o Un langage de définition de données (DDL : Data Definition


Language) ;

o Un langage de contrôle de données (DCL : Data Control Language) ;

o Un langage de manipulation de données (DML : Data Manipulation


Language) ;

On va s’intéresser principalement troisième à cette partie.

Le DML ou LMD (Langage de manipulation de données) est lui-même divisé en 4 parties :

 ajout d’occurrences (INSERT)


 modification d’occurrences (UPDATE)
 suppression d’occurrences (DELETE)
 interrogation de la base de données : les requêtes (SELECT)

-2- Le langage de requêtes

Nous avons vu que la plupart des SGBD offrent la possibilité d'effectuer des recherches
directement dans les tables. Les possibilités de formuler des critères de recherche sont
cependant souvent assez limitées. Heureusement, la plupart des SGBD nous offrent également
la possibilité de poser pratiquement n'importe quelle "question" à nos tables, sous forme de
requêtes.

Les requêtes servent donc à répondre aux questions basées sur le contenu d'une ou de
plusieurs tables.

Expression générale d’une requête

Présentation d'une requête :


Une requête se présente généralement sous la forme " SELECT ... FROM ... WHERE " :

oct 2007 gea2 pmo 1


la clause SELECT exprime le résultat attendu sous la forme d’une liste d’attributs auxquels
il est possible d’appliquer différents opérateurs et fonctions.

la clause FROM liste les relations utilisées pour évaluer les requêtes;

la clause WHERE qui est facultative énonce une condition que doivent respecter les
enregistrements sélectionnés.

3- La projection et la sélection

La projection consiste à choisir certaines colonnes d’une table (la clause WHERE n’est pas
utilisée alors), mais toutes les occurrences de la table sont affichées :

Exemple : SELECT NOM_ELEVE,PRENOM_ELEVE,ADR_VILLE_ELEVE FROM


ELEVE;
La sélection dans une table consiste à choisir certaines de ses occurrences grâce à un critère
de sélection (énoncé dans la clause WHERE).

Exemple : SELECT NOM_ELEVE,PRENOM_ELEVE,ADR_VILLE_ELEVE FROM


ELEVE WHERE ADHESION_MUTUELLE)=0

LA CLAUSE SELECT

1- Quelques généralités

L'opérateur * permet d'afficher tous les champs définis dans la table.

Exemple : SELECT * FROM JOUR ;

Les données du type TEXTE sont entourées d'apostrophes (quotes).

Exemple: SELECT * FROM MONITEUR WHERE.NOM_MONITEUR='ALBERT';

Les dates sont entourées du caractère # et indiquées dans le format américain


#Mois/Jour/Année#

Exemple : SELECT * FROM VEHICULE WHERE DATE_MISE_SERV = #6/25/2001#;

 Les critères de sélection constituent une expression logique qui peut prendre la valeur
'Vrai' ou 'Faux'.

Comparaison à une valeur donnée.

oct 2007 gea2 pmo 2


Voici les opérateurs de comparaison:

= "est égal"
> "strictement supérieur"
< "strictement inférieur"
>= "supérieur ou égal"
<= "inférieur ou égal"
<> "est différent"

Exercice 1 : quels sont les jours pour lesquels le taux de remise est supérieur à 10% ?

CODE_JOUR LIBELLE_JOUR TX_REMISE


2 Mardi 10
3 Mercredi 20
5 Vendredi 20

Il existe 3 opérateurs logiques:

1. NOT (Négation logique)

L'opérateur NOT inverse le résultat d'une expression logique.

2. AND (Et logique)

L'opérateur AND nous permet de combiner plusieurs conditions dans une expression
logique. L'expression logique retourne uniquement la valeur 'Vrai' lorsque toutes les
conditions sont remplies.

3. OR (Ou logique)

L'opérateur OR nous permet de combiner plusieurs conditions dans une expression


logique. L'expression logique retourne la valeur 'Vrai' lorsque au moins une des
conditions est remplie.

Priorité des opérateurs logiques

Lorsqu'on combine plusieurs conditions par des opérateurs logiques, le résultat final de
l'expression logique dépend de l'ordre d'exécution des différentes conditions. Cet ordre est
déterminé par la priorité des opérateurs logiques. Voici l'ordre prédéfini en SQL:

1. Déterminer le résultat logique ('Vrai','Faux') des comparaisons (=, <, > etc.)
2. Effectuer les négations (NOT)
3. Effectuer les AND
4. Effectuer les OR

oct 2007 gea2 pmo 3


Pour modifier cet ordre d'exécution, nous pouvons utiliser des parenthèses afin de grouper les
différentes conditions logiques.

Exercice 2 : quels sont les élèves nés en 1986 ou en 1987 ?

NOM_ELEVE PRENOM_ELEVE DATE_NAIS_ELEVE


Bernardot Eric 05/03/1986
EPAULE Pierre 03/06/1987

Exercice 3 : quels sont les élèves nés en 1986 ou en 1987 et n’habitant pas Paris ?

NOM_ELEVE PRENOM_ELEVE DATE_NAIS_ELEVE ADR_VILLE_ELEVE


Bernardot Eric 05/03/1986 Nanterre

-2- La clause DISTINCT

Elle sert juste à omettre les enregistrements qui stockent un doublon dans le (ou les) champs
spécifié(s).

Seules les valeurs uniques des champs listés dans l’instruction SELECT apparaissent dans le
résultat de la requête.

Exemple : quels sont les différents modèles de véhicule ?

SELECT MODELE FROM VEHICULE;

SELECT DISTINCT MODELE FROM VEHICULE;


MODELE
Honda 500 CB
Peugeot 206
Renault Clio
Renault Scenic
Suzuki 600 Bandit

3- La clause BETWEEN

L'opérateur BETWEEN permet de rechercher si une valeur se trouve dans un intervalle


donné, quel que soit le type des valeurs de référence spécifiées (alpha, numérique, date…)

oct 2007 gea2 pmo 4


Exercice 4 : quels sont les véhicules mis en service entre le 1 er janvier 2001 et le 15 juillet
2002 ?

NUM_IMMAC MODELE DATE_MISE_SERV


1258NPA75 Renault Scenic 25/06/2001
1520NPE75 Renault Clio 14/07/2001
4507NPE75 Suzuki 600 Bandit 16/07/2001

-4- La clause IN

L'opérateur IN (<Liste de valeurs>) permet de déterminer si la valeur d'un champ donné


appartient à une liste de valeurs prédéfinies.

Exercice 5 : quels sont les élèves prénommés Pierre ou Eric ?

NOM_ELEVE PRENOM_ELEVE DATE_NAIS_ELEVE


Bernardot Eric 05/03/1986
EPAULE Pierre 03/06/1987

-5- La clause LIKE

L'opérateur LIKE permet d’effectuer une comparaison partielle. Il est surtout employé avec
les colonnes contenant des données de type alpha. Il utilise les jokers % et _ (‘pour cent’ et
‘blanc souligné’).
Le joker % remplace n'importe quelle chaîne de caractères, y compris la chaîne vide.

Le blanc souligné remplace un et un seul caractère.

Pour les manipulations pratiques, il faut comprendre que certains SGBD utilisent des
caractères spéciaux différents pour représenter une séquence de caractères respectivement un
caractère quelconque. MS-Access par exemple utilise les caractères suivants:

SQL MS-Access

Séquence de 0 ou plusieurs caractères % *

Un seul caractère quelconque _ ?

Exercice 6: quels sont les véhicules de marque Renault ?

NUM_IMMAC MODELE DATE_MISE_SERV


1258NPA75 Renault Scenic 25/06/2001
4484MOB75 Renault Clio 03/04/2000
1520NPE75 Renault Clio 14/07/2001

oct 2007 gea2 pmo 5


Exercice 7 : Quels sont les véhicules immatriculés à Paris?

Exercice 8 : quels sont les élèves qui possèdent un”r” en 2ème lettre de leur prénom?

NOM_ELEVE PRENOM_ELEVE
Bernardot Eric
PETITPIED Arthur

-6- Les valeurs calculées

Dans une requête on a la possibilité de définir des champs à valeur calculée. On, peut utiliser
les opérateurs mathématiques de base pour combiner différentes colonnes. La colonne
obtenue n’est pas le champ d’une table. On peut lui donner un nom grâce au mot-clé AS.

Exemple : Select nom_prod, qté*prix as montant from commande ;

Exercice 9 : quel est l’âge de chaque élève ?

NOM_ELEVE PRENOM_ELEVE age


Bernardot Eric 19
PETITPIED Arthur 20
MENVUSA Gérard 25
EPAULE Pierre 18
NISCOTCH Nicole 20

-7- Les valeurs nulles

Une valeur nulle ne correspond pas à zéro, ni à la chaîne vide. C’est une donnée indéterminée,
ou qui n’est pas encore renseignée.

Pour tester une valeur nulle, il suffit de rajouter « Where nom champ is NULL ».
-8- L’ordre de la requête

Cette clause permet de définir le tri des colonnes de la réponse, soit en précisant le nom
littéral de la colonne, soit en précisant son n° d'ordre dans l'énumération qui suit le mot clef
SELECT.

ASC spécifie l’ordre ascendant et DESC l’ordre descendant du tri. ASC ou DESC peuvent
être omis, dans ce cas c'est l'ordre ascendant qui est utilisé par défaut.

Exercice 10 : donner la liste des élèves triés par âge :

oct 2007 gea2 pmo 6


NOM_ELEVE PRENOM_ELEVE age
MENVUSA Gérard 25
NISCOTCH Nicole 20
PETITPIED Arthur 20
Bernardot Eric 19
EPAULE Pierre 18

Exercice 11: donner la liste des véhicules tries par modèle et par date de mise en service
décroissante.

NUM_IMMAC MODELE DATE_MISE_SERV


6287LND75 Honda 500 CB 13/01/2000
7896LMC75 Peugeot 206 24/11/1999
1520NPE75 Renault Clio 14/07/2001
4484MOB75 Renault Clio 03/04/2000
1258NPA75 Renault Scenic 25/06/2001
4507NPE75 Suzuki 600 Bandit 16/07/2001

II- LES FONCTIONS D’AGRÉGATION ET LE REGROUPEMENT

1 Les fonctions d’agrégation

Derrière ce mot compliqué se cachent quelques fonctions qui peuvent être utilisées à
l'intérieur des requêtes de sélection pour faire des calculs sur le résultat de la requête.
Imaginons la requête suivante:
SELECT NOM_ELEVE, PRENOM_ELEVE, DATE_NAIS_ELEVE, ADR_VILLE_ELEVE
FROM ELEVE WHERE ADR_VILLE_ELEVE <>"Paris";

Cette requête nous retourne tous les élèves n’habitant pas Paris. Il se peut très bien que
l'utilisateur ne soit pas intéressé dans le détail, mais veuille uniquement connaître le nombre
d’élèves n’habitant pas Paris pour réaliser des statistiques. La requête correspondante est:

SELECT Count(*) AS compte FROM ELEVE WHERE ADR_VILLE_ELEVE<>'Paris';

compte
4
Voici les fonctions d'agrégations les plus répandues:

COUNT (*) Détermine le nombre d'enregistrements du résultat de


la requête. Tient compte de tous les enregistrements,
y inclus ceux contenant des valeurs NULL
COUNT (Nom d'un champ) Détermine le nombre des enregistrements pour
lesquels le champ indiqué ne contient pas la valeur
NULL
SUM (Nom d'un champ) Calcule pour tous les enregistrements sélectionnés, la

oct 2007 gea2 pmo 7


somme des valeurs du champ indiqué, pourvu que
cette valeur soit différente de NULL.
AVG (Nom d'un champ) Calcule pour tous les enregistrements sélectionnés, la
moyenne des valeurs du champ indiqué, pourvu que
cette valeur soit différente de NULL.
MAX (Nom d'un champ) Détermine pour tous les enregistrements sélectionnés,
la plus grande des valeurs du champ indiqué, pourvu
que cette valeur soit différente de NULL.
MIN (Nom d'un champ) Détermine pour tous les enregistrements sélectionnés,
la plus petite des valeurs du champ indiqué, pourvu
que cette valeur soit différente de NULL.

Exercice 12 : donner le taux maximum de réduction.

maxitaux
20

2- Le regroupement

La clause GROUP BY intervient sur le résultat d'un SELECT. En fait, les enregistrements
résultant d'une requête de sélection sont groupés, de façon qu'à l'intérieur de chaque groupe,
les valeurs pour la liste des champs de groupe soient identiques.

Généralement, on applique une fonction d'agrégation à un ou plusieurs champs, ne faisant pas


partie de la liste des champs de groupe.

Exercice 13: pour chaque modèle, quel est le nombre de véhicules ?

MODELE compte
Honda 500 CB 1
Peugeot 206 1
Renault Clio 2
Renault Scenic 1
Suzuki 600 Bandit 1

On a la possibilité d'appliquer la clause ORDER BY au résultat d'un GROUP BY


3- La clause HAVING

Cette clause est l’équivalent de la clause WHERE pour un GROUP BY.

Elle sert de critère de sélection pour les groupes.


La condition HAVING s’applique à chacun des sous-ensembles et élimine ceux qui ne la
satisfont pas.
Elle ne peut être utilisée qu’avec la clause GROUP BY.

Par exemple, dans l’exemple précédent, je souhaite n’obtenir que les modèles dont le nombre
de véhicules est supérieur à 1 :

oct 2007 gea2 pmo 8


SELECT MODELE, count(*) as compte FROM VEHICULE group by modele having
count(*)>1;

–LA JOINTURE ENTRE LES TABLES

La plupart des BD réelles ne sont pas constituées d'une seule table, mais d'un ensemble de
tables liées entre elles via certains champs. Par conséquent, les requêtes correspondantes ne
sont pas ciblées sur une, mais sur plusieurs tables.

La jointure permet de relier plusieurs tables entre elles via des champs communs (clé
étrangère / clé primaire).

Exemple : on veut connaître le modèle de véhicule associé à chaque élève :

SELECT NOM_ELEVE, PRENOM_ELEVE, MODELE FROM VEHICULE, ELEVE


WHERE VEHICULE.NUM_IMMAC = ELEVE.NUM_IMMAC;

NOM_ELEVE PRENOM_ELEVE MODELE


Bernardot Eric Renault Scenic
PETITPIED Arthur Renault Scenic
NISCOTCH Nicole Renault Clio
MENVUSA Gérard Renault Clio
EPAULE Pierre Suzuki 600 Bandit

La clause FROM contient les deux tables impliquées dans la jointure.

La clause WHERE contient ce qu'on appelle la condition de jointure. Dans notre exemple, la
condition de jointure demande l'égalité des valeurs pour les champs num_imac de eleve et
num_immac de vehicule.

La clause SELECT contient les noms des champs à afficher.

Access représente la jointure d’une manière différente :

SELECT NOM_ELEVE,PRENOM_ELEVE,MODELE FROM VEHICULE INNER JOIN


ELEVE ON VEHICULE.NUM_IMMAC = ELEVE.NUM_IMMAC;

Exercice 14: Afficher pour chaque leçon, le nom du moniteur et le nom de l’élève:

CODE_LECON NOM_MONITEUR NOM_ELEVE PRENOM_ELEVE DATE HEURE


1 ALBERT Bernardot Eric 26/11/2004 14:00:00
2 JEAN Bernardot Eric 05/12/2004 09:00:00
3 GISELE Bernardot Eric 07/12/2004 16:00:00
4 ALBERT Bernardot Eric 08/12/2004 12:00:00

oct 2007 gea2 pmo 9


CODE_LECON NOM_MONITEUR NOM_ELEVE PRENOM_ELEVE DATE HEURE
5 ALBERT Bernardot Eric 19/12/2004 18:00:00

Exercice 15 : ajouter en plus le nom du jour et le taux de remise.

Exercice 16: afficher pour chaque élève, le nombre de leçons prises :

NOM_ELEVE Compte
Bernardot 5

oct 2007 gea2 pmo 10