Vous êtes sur la page 1sur 53

ENCG Kénitra**Gestion des bases de données 1

CHAPITRE 3 :
LANGAGE SQL

24-nov.-14
Sommaire du chapitre 3
2

 Présentationdu langage SQL;


 Types de données;

 Requêtes d’action;

 Requêtes de sélection;

 Requêtes de contrôle.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Présentation du langage SQL
3

 Le sigle SQL signifie "Structured Query Language", soit en français


"Langage de requêtes structuré".
 Il a été développé par IBM au cours des années 70 et son
nom était SEQUEL, abréviation de Structured English
QUEry Language
 SQL : langage proche de l’utilisateur et de sa façon de poser les requêtes
(formulation proche du langage naturel)
 SQL : langage assertionnel (non procédural), facile à apprendre pour
rédiger les requêtes, les lire et les comprendre.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Présentation du langage SQL
4

 SQL a été normalisé par l'ANSI (American National Standards


Institute) et par l'ISO (International Organization for
Standardization).

 Cette normalisation a donné naissance à une 1ère version


(SQL1) en 1987 puis à une 2ème version (SQL2) en 1992

 Une troisième norme (SQL3) est sortie en 2003 par l'ANSI et l'ISO.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Présentation du langage SQL
5

 Malgré la normalisation ISO, il existe plusieurs variantes de SQL


sur le marché car chaque éditeur de SGBDR tente d’étendre le
standard pour accroître l’attrait commercial de son produit

 Chaque requête SQL doit obligatoirement se terminer par un


Point Virgule (SGBD ACCESS)

 On distingue 3 types de requêtes: Actions (Création et m.à.j),


Sélections (Interrogation) et Contrôle (définir des permissions
pour les utilisateurs).
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Présentation du langage SQL
6

 Utilisation de SQL :
 En mode interactif : l’utilisateur écrit textuellement une
commande SQL et récupère le résultat immédiatement.
 En mode intégré : une commande SQL est mélangée avec
les instructions d’un programme en langage de haut niveau
tel que C, C++, Visual basic, Pascal...

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Types de données
7

 INTEGER ou INT : entiers signés.


 TEXT(p) ou CHAR(p) : chaîne de caractères de longueur fixe de p caractères.
 VARCHAR (p): chaîne de caractères de longueur variable de p caractères
maximum.
 DATE, TIME, DATETIME: dates et/ou heures.
 LOGICAL : valeur logique « oui » ou « non ».
 DECIMAL(p, q) : nombres décimaux de p chiffres dont q après le point décimal
(par défaut, q = 0).
 FLOAT : nombre réel en virgule flottante(il y a aussi Single pour simple et
Double pour réel double).
 CURRENCY, MONEY : Monétaire.
 COUNTER : Compteur (NuméroAuto).

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Types de données
8

 Quelques propriétés des attributs en SQL :


 PRIMARY KEY : clé primaire.

 FOREIGN KEY : clé étrangère.

 NULL / NOT NULL : valeurs non obligatoires/obligatoires.

 DEFAULT = Valeur : pour définir une valeur par défaut (ne


fonctionne pas sous Access).
 CHECK (Condition): pour contrôler la validité des valeurs (ne
fonctionne pas sous Access).
 UNIQUE : permet de vérifier que la valeur saisie pour un champ
n'existe pas déjà dans la table.
 CONSTRAINT : permet de donner un nom à une contrainte ce qui
permet de la manipuler (Exemple effacement).
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Conventions
9

 Les conventions relatives aux noms des tables et des champs varient
quelque peu d'un SGBD à l'autre:
 Le nombre de caractères ne doit pas être trop grand (64 dans Access,
18 à 30 dans d'autres SGBD) ;
 Seuls les lettres, les chiffres et le caractère de soulignement sont
autorisés.
 Access admet les caractères accentués. Il admet aussi l'espace, mais le
nom du champ doit être écrit entre crochets ;
 Certains SGBD requièrent que le nom d'un champ commence par une
lettre, mais ce n'est pas le cas d'Access ;
 Les termes faisant partie du vocabulaire du langage SQL sont interdits
("date » par exemple). Ce sont les mots réservés.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Requêtes d’action
10

 Requêtes d’actions: Sont des requêtes qui permettent de


créer des tables, d’ajouter, de supprimer des
enregistrements d’une table, d’ajouter une colonne…
 Création d’une table : Cette opération donne comme
résultat une table vide ne contenant aucun enregistrement.
 Il faut préciser :
 Le nom de la table;
 La description de ses colonnes : nom, type de données et contraintes.

 L’instructionCREATE TABLE permet de créer une


nouvelle table.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Création de table
11

 Syntaxe SQL pour créer une nouvelle table avec une


clé primaire :
 CREATE TABLE Nom_table (champ1 type [CONSTRAINT
nom_contrainte] PRIMARY KEY, champ2 type [NOT NULL],
…, champN type [NOT NULL]);
 Syntaxe SQL pour créer une nouvelle table avec une clé
primaire composée :
 CREATE TABLE Nom_table (champ1 type [NOT NULL],
champ2 type [NOT NULL], …, champN type, [CONSTRAINT
nom_contrainte] PRIMARY KEY (champ1, champ2,…) );

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Création de table: Exemples
12

 CREATE TABLE Client (email VARCHAR (50) NOT NULL, nom


VARCHAR (20) NOT NULL, prenom VARCHAR (20), motDePasse
VARCHAR (60) NOT NULL, anneeNaiss DECIMAL (4))
 CREATE TABLE Cinéma (nom VARCHAR (50) NOT NULL, adresse
VARCHAR (50) DEFAULT ’Inconnue’)
 CREATE TABLE ETUDIANT(ID INTEGER CONSTRAINT
Contrainte_ID PRIMARY KEY, NOM TEXT(15), PRENOM
TEXT(15), AGE INTEGER CONSTRAINT Contrainte_AGE
CHECK(age< 35), BOURSIER LOGICAL);

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Création de table: Exemples
13

 Donnez une requête SQL permettant de créer la table


EMPLOYES ( Nemployé: entier, Nom: texte(25), Prénom:
texte(20), Fonction: texte(15), Adresse: texte(50), Codeville:
entier long)

 CREATE TABLE EMPLOYES ( Nemployé INTEGER


CONSTRAINT nom_index PRIMARY KEY, Nom TEXT(25),
Prénom TEXT(20), Fonction TEXT(15), Adresse TEXT(50),
Codeville LONG ) ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Création d’une table
14

 Créez une requête SQL permettant de créer la table


DETAILS ( Ncommande: entier, Réf: texte(30), Pu:
monétaire non nul, Quantité: entier non nul, Remise: réel
simple );

 CREATE TABLE DETAILS ( Ncommande Integer, Réf


Char(30), Pu Currency NOT NULL, Quantité Integer NOT
NULL, Remise Single, CONSTRAINT nom_index PRIMARY
KEY ( Ncommande, Réf ) ) ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Création d’une table: Clé étrangère
15

 Créez une requête SQL permettant de créer la table


Participe( Numadh: entier, Numact: entier, AnneeParticipe:
entier);
 Numadh est la clé primaire de la table Adherent et Numact
est la clé primaire de la table Activite.
 CREATE TABLE Participe( Numadh integer, Numact
integer, anneeParticipe integer, Primary key (Numadh,
Numact, AnneeParticipe),
 Foreign key (Numadh) references Adherent(Numadh),
 Foreign Key (Numact) references Activite(Numact));

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
16

 L’instruction ALTER TABLE permet


d’ajouter ou de supprimer un seul champ à
une table.
 Elle permet aussi la création et la suppression
des liens entre les tables d’une base de
données.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
17

 Modification de la structure d’une table :


 Ily a trois types d’actions concernant la modification de
structure d’une table :
 Ajouterune ou plusieurs colonnes.
 Supprimer une ou plusieurs colonnes.
 Modifier les propriétés d’une ou de plusieurs colonnes.
 Les commandes SQL relatives à ces actions :
 ADD
 DROP
 MODIFY

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
18

 Modification de la structure d’une table :


 Pour modifier la structure d’une table, on précise tout
d’abord le nom de celle-ci en écrivant la commande
suivante :
 ALTER TABLE Nom_table
 En suite, on spécifie la nature de l’action de modification
(ajout, suppression ou modification).
 Pour cela, il faut utiliser l’une des trois commandes : ADD,
DROP ou MODIFY.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
19

 Exemples d’ajout :
 Ajouter une colonne « AGE » (entier) dans la table « CLIENT » :

ALTER TABLE CLIENT


ADD AGE INTEGER;
Ou
ALTER TABLE CLIENT
ADD Column AGE INTEGER;
 Ajouter une colonne « DATECOMPTE »(date) dans la table «
COMPTE » :
ALTER TABLE COMPTE
ADD DATECOMPTE DATE;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
20

 Exemples de suppression :
 Supprimer la colonne « ADRAGENCE » de la table « AGENCE » :

ALTER TABLE CLIENT


DROP ADRAGENCE;

 Supprimer la colonne « DATECOMPTE » de la table « COMPTE » :


ALTER TABLE COMPTE
DROP DATECOMPTE;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
21

 Exemples de modification de propriétés :


 Modifier le type de la colonne « ADRAGENCE » pour qu’il
soit un CHAR(100) au lieu de CHAR(40) :
ALTER TABLE AGENCE
MODIFY ADRAGENCE CHAR(100);

 Modifier la colonne « AGE » de la table « CLIENT » pour


qu’elle soit obligatoire :
ALTER TABLE CLEINT
MODIFY AGE NOT NULL;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification dans une table
22

 Créez une requête SQL permettant de créer la table


VILLES ( Codeville: NuméroAuto, Ville: texte(20))
 CREATE TABLE VILLES ( Codeville Counter
CONSTRAINT nom_index PRIMARY KEY, Ville
Text(20) ) ;
 Modifiez la table EMPLOYES en déclarant le champ
"CodeVille" comme clé étrangère, puis créez un lien
nommé lien_ville sur le champ CodeVille, en précisant
que le côté 1 du lien est le champ CodeVille de la table
VILLES
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Modification dans une table
23

 ALTER TABLE EMPLOYES ADD


CONSTRAINT Lien_ville FOREIGN KEY
(CodeVille) REFERENCES VILLES (CodeVille);
 Supprimer le lien nommé lien_ville existant entre la
table EMPLOYES et la table VILLES selon le
champ Codeville
 ALTER TABLE EMPLOYES DROP CONSTRAINT Lien_ville;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Suppression d’une table
24

 Suppression d’une table :


 La syntaxe SQL pour supprimer une table est très simple :
 DROP TABLE Nom_table
 Exemples :
 DROP TABLE CLIENT
 DROP TABLE AGENCE
 DROP TABLE COMPTE

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Suppression d’une table
25

 La clause CASCADE CONSTRAINS pour supprimer


toutes les contraintes d’intégrités référentielles qui
réfèrent à la relation supprimée.
 Exemple :
 DROP TABLE COMPTE CASCADE CONSTRAINS ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Insertion d’enregistrements
26

 Insertion d’enregistrements dans une table :


 La commande qui permet d’insérer une ligne dans une
table est la suivante :
INSERT INTO Nom_table [(champ1, champ2, …)]
VALUES (valeur1, valeur2, …) ;
 Dans la clause “INTO…”, on spécifie le nom de la table
ainsi que les noms des colonnes.
 Si l’on veut ajouter une ligne contenant les valeurs pour
tous les champs, dans ce cas on peut omettre les noms de
colonnes.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Insertion d’enregistrements
27
 Exemple:
 Créez une requête permettant d’ajouter l’enregistrement suivant dans la
table EMPLOYES: (100, BEN AZOUZ, Aziz, Ingénieur, 90050)
La table EMPLOYES ( Nemployé , Nom, Prénom, Fonction, Adresse,
Codeville)
 INSERT INTO EMPLOYES (Nemployé, Nom, Prénom, Fonction, Codeville)
VALUES (100, "BEN AZOUZ", "Aziz", "Ingénieur", 90050) ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification d’un enregistrement
28

 L’instruction UPDATE permet la mise à jour d’une table;

 On modifie la valeur d’un champ d’un enregistrement qui


vérifie une condition précise (critère pour accéder à la ligne qui
sera le sujet de la modification);

 Syntaxe
:
UPDATE table SET nouvelles valeurs WHERE critères

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification d’un enregistrement
29

 Les champs à mettre à jour doivent être écrits dans la


clause SET, l’un après l’autre (avec leurs valeurs) et
séparés par des virgules.
 Les champs non spécifiés après la clause SET ne seront
pas modifiés.
 Si la clause WHERE est absente, tous les
enregistrements de la table seront affectées.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Modification d’un enregistrement
30

 Exemples :
 Donner une requête SQL pour modifier l’adresse de l'employé numéro 10
par la nouvelle adresse sera "10 Avenue Mohamed VI, Rabat".
 UPDATE EMPLOYES SET Adresse = "10 Avenue Mohamed VI,
Rabat" WHERE Nemployé = 10 ;
 Donner une requête SQL pour augmenter de 5% le salaire de tous les
acteurs : ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age,
Films)
 UPDATE ACTEURS SET Salaire = Salaire * 1.05 ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Suppression d’enregistrements
31

 L’instruction DELETE permet d’effacer des


enregistrements d’une table.
 La syntaxe de la commande est :
DELETE * FROM Nom_table WHERE Condition;
 Pour supprimer tous les enregistrements d’une table, il
suffit de ne pas indiquer la clause WHERE.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Suppression d’enregistrement
32

 Exemples :
 Effacez
tous les enregistrements de la table ACTEURS;
 DELETE * FROM ACTEURS ;

 Ou
 DELETE N_act FROM ACTEURS ;
 Effacez tous les acteurs de nationalité marocaine;
 DELETE * FROM ACTEURS WHERE
Nationalité= "marocaine";

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
33

 Une requête de type SELECTION permet d'interroger une base de données en


composant les projections, les restrictions, les jointures….
 Le résultat d’une telle requête est renvoyé sous forme d’une table formée d’un ou
plusieurs attributs.
 Sa syntaxe est :

 SELECT [Prédicat]
 {* / table.* /[table.attribut1 As alias1], [table.attribut2 As alias2], …}
 FROM Liste de table
 [WHERE Critère de sélection]
 [GROUP BY Liste d’attributs]
 [HAVING Critère de sélection]
 [ORDER BY Critère d’ordre]

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
34

 Interprétation:
 Projection : SELECT… FROM…

 Restriction ou Jointure : WHERE …

 Tri : ORDER BY … ASC / DESC

 [ ] signale une clause optionnelle, c.à.d on peut utiliser la requête SELECT sans
cette clause
 Prédicat: L’un des prédicats suivants: ALL, DISTINCT, DISTINCTROW, TOP ou
PERCENT.
 Les prédicats permettent de limiter le nombre d’enregistrements
renvoyés. ALL est choisi par défaut

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
35

 * : Indique que tous les champs des tables spécifiées


seront sélectionnés
 Table: Nom des tables séparées par des virgules.
 attribut1, attribut2: Noms des champs à extraire.

 alias1, alias2: Utilisés pour renommer un attribut.

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
36

Exemples
Soit la table ACTEURS :
ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films)

•Donner une requête SQL pour afficher tous les champs et tous les enregistrements
de la table ACTEURS
SELECT * FROM ACTEURS;
•Requête SQL pour afficher uniquement le Nom, Prénom et le salaire de chaque
Acteur
SELECT Nom, Prénom, Salaire FROM ACTEURS;
•Afficher les différentes nationalités sans doublons même si plusieurs acteurs
ont la même nationalité
SELECT DISTINCT Nationalité FROM ACTEURS;
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
37

•Requête SQL afficher les 5 premiers acteurs de la table ACTEURS

SELECT TOP 5 * FROM ACTEURS;


•Requête SQL afficher 30% des acteurs de la table ACTEURS

SELECT TOP 30 PERCENT * FROM ACTEURS;


 Avec l’instruction SELECT, il est possible d’utiliser les fonctions
suivantes pour effectuer des calculs:
SUM () renvoie la somme d’un champ
AVG () renvoie la moyenne d’un champ
MAX () renvoie la valeur maximale d’un champ
MIN () renvoie la valeur minimale d’un champ
COUNT (*) renvoie le nombre d’enregistrements de la table
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
38

•Afficher le nombre totale d’enregistrements de la table ACTEURS

SELECT COUNT(*) FROM ACTEURS;


•Afficher le nombre totale d’enregistrements de la table ACTEURS et nommer
le champ retourné Nombre total

SELECT COUNT(*) As [Nombre Total] FROM ACTEURS;

• Afficher le nombre d’enregistrements de la table ACTEURS qui ont une entrée dans
le champ Nom. Nommer le champ retourné Nombre d’entrée

SELECT COUNT(Nom) As [Nombre d’entrée] FROM ACTEURS;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
39

•Afficher le total des salaires de la table ACTEURS et nommer le champ


retourné Total des salaires

SELECT SUM(Salaire) As [Total des salaires] FROM ACTEURS;


•Afficher la moyenne des salaires de la table ACTEURS et nommer
le champ retourné Moyenne des salaires

SELECT AVG(Salaire) As [Moyenne des salaires] FROM ACTEURS;

•Afficher le salaire le plus élevé de la table ACTEURS et nommer le champ retourné


Salaire maximal

SELECT MAX(Salaire) As [Salaire maximal] FROM ACTEURS;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
40

Les éléments de la clause WHERE


 Ils permettent de définir la condition dans cette clause. La clause peut
être accompagnée des opérateurs logiques AND, OR ou NOT
Comparaison à une valeur (=, <, >, >=, <=, <>)
Comparaison à une fourchette de valeurs (BETWEEN … AND)
Comparaison à une liste de valeur ( IN (. , . ,...) )
Comparaison à un filtre (LIKE)
Test "tous" ou "au moins" (ALL, ANY/SOME)
Test existentiel (EXISTS)
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
41

•Afficher tous les noms d’acteurs dont l’âge est supérieur ou égal à 25
SELECT Nom FROM ACTEURS WHERE Age >=25;

• Afficher tous les noms d’acteurs dont la nationalité est américaine et l’âge est
supérieur à 25
SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") AND (Age > 25);

• Afficher tous les noms d’acteurs dont la nationalité est américaine ou l’âge est
supérieur à 25
SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") OR (Age >25);

•Afficher les acteurs dont l’âge est entre 35 et 50

SELECT * FROM ACTEURS WHERE Age BETWEEN 35 AND 50;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
42

•Afficher tous les acteurs dont la nationalité est américaine, marocaine ou égyptienne
SELECT * FROM ACTEURS WHERE Nationalité IN ("Américaine", "Egyptienne",
"marocaine");
•Afficher tous les noms d’acteurs qui commencent par "D"
SELECT Nom FROM ACTEURS WHERE Nom LIKE "D*";

•Afficher tous les noms d’acteur ne commençant pas par D et ayant 4 lettres

SELECT Nom FROM ACTEURS WHERE Nom NOT LIKE "D*" AND Nom
LIKE "????";

•Afficher le nom d’acteur le plus âgé


SELECT Nom FROM ACTEURS WHERE Age >= ALL (SELECT Age FROM
ACTEURS );
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
43

• Afficher le nom d’acteur le plus jeune


SELECT Nom FROM ACTEURS WHERE Age <= ALL (SELECT Age FROM ACTEURS);

Exemple 2
Soit les tables PRODUITS, COMMANDES, DETAILS et EMPLOYES créées sous
ACCESS:
PRODUITS (Réf , Nompr, Nfournisseur, Pu)
COMMANDES(Ncommande, Codecli, Nemployé, Date commande)
DETAILS(Ncommande, Réf , Quantité, Remise)
EMPLOYES(Nemployé, Nom, Prénom, Fonction, Adresse, Ville)

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
44

Les jointures
Jointure interne: utilise INNER JOIN. Ne sont incluses dans le résultat
final que les lignes qui se correspondent dans les deux tables.

la jointure externe gauche, dans laquelle INNER JOIN est remplacé


par LEFT JOIN. Toutes les lignes de la première table sont incluses dans
le résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la seconde table ;

la jointure externe droite, dans laquelle INNER JOIN est remplacé par
RIGHT JOIN. Toutes les lignes de la seconde table sont incluses dans le
résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la première table.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
45

Les éléments de la clause FROM

Afficher tous les produits (Réf, Nompr) qui ont été vendus

SELECT PRODUITS.Réf, Nompr FROM PRODUITS INNER JOIN DETAILS

ON PRODUITS.Réf = DETAILS.Réf ;

(Ou bien )

SELECT PRODUITS.Réf, Nompr FROM PRODUITS, DETAILS

WHERE PRODUITS.Réf = DETAILS.Réf ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
46

•Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre décroissant
selon le champ Réf

SELECT PRODUITS. Réf, Nompr


FROM PRODUITS , DETAILS
WHERE PRODUITS. Réf = DETAILS . Réf
ORDER BY PRODUITS.Réf DESC;

 Par défaut, le résultat d’une requête sélection est trié selon l’ordre
croissant du premier attribut qui figure dans la clause SELECT

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
47

•En utilisant la table détails, afficher pour chaque commande le total de quantités des
produits vendus
SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]
FROM DETAILS
GROUP BY Ncommande ;
•Afficher pour chaque commande le total de quantités des produits vendus et tel que ce
total est > 60

SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]


FROM DETAILS
GROUP BY Ncommande
HAVING SUM(Quantité) > 60 ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Les requêtes de sélection
48

•Afficher les commandes qui contiennent plus que 3 produits (>=3)


SELECT Ncommande, COUNT(Réf) AS [Nombre de produits]
FROM DETAILS
GROUP BY Ncommande
HAVING COUNT(Réf) >=3 ;

•Afficher pour chaque commande le total de quantités des produits vendus avec une
remise de 6% et tel que ce totale est > 60

SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]


FROM DETAILS
WHERE Remise=0.06
GROUP BY Ncommande
HAVING SUM(Quantité) > 60 ;
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
49

• Afficher les employés qui ont vendu plus de 100 commandes


SELECT Nemployé, COUNT(Ncommande) AS [Nombre de commandes vendues]
FROM COMMANDES
GROUP BY Nemployé
HAVING COUNT(Ncommande) > 100 ;

•Afficher les employés de la ville d’Asilah qui ont vendu plus de 100 commandes
SELECT EMPLOYES.Nemployé, COUNT(*) AS [Nombre de commandes vendues]
FROM COMMANDES, EMPLOYES
WHERE EMPLOYES.Nemployé=COMMANDES.Nemployé AND Ville ="Asilah"
GROUP BY EMPLOYES.Nemployé
HAVING COUNT(*) > 100 ;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Exercice Algèbre relationnelle
50

Nom_imb Adresse Nb Anné Nomgérant Nom Ag Profession


étage e e
Annakhil 22 Rue Azrou, 10 2009 Alami Alami 54 Architecte
Rabat
Atif 39 Médecin
Firdaous 15 bd des Far, Fès 5 2000 Dahbi
Table Immeuble Barhou 58 Avocat
m
Dahbi Table
65 Personne
Retraité
Nom_imb No_app Superficie Etag
e
Nom_imb No_app Nom_occ Année_h
Annakhil 1 150 1
Annakhil 2 100 1 Annakhil 1 Alami 2009

Annakhil 10 90 9 Annakhil 2 Dahbi 2009


Firdaous 5 120 2 Firdaous 5 Atif 2001
Firdaous 10 100 3 Firdaous 10 Barhoum 2005
Firdaous 11 80 3
Table Appartement Table Occupant
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Exercice
51

 Ecrire en langage SQL les requêtes:


 1. Afficher les noms des immeubles;
 Select Nom_imb from immeuble;
 2. Nom des immeubles ayant strictement plus de 10 étages.
 Select Nom-imb from immeuble where nb_étage>10;
 3. Nom des personnes ayant emménagé avant 1994.
 Select Nom_occ from Occupant where Année_h<1994;
 4. Qui habite Annakhil?
 Select Nom_occ from Occupant Where Nom_imb=‘’ Annakhil’’;
 5. Nom des Architectes de plus de 25 ans.
 Select Nom, age From Personne Where Profession=‘’Architecte’’ And Age>25;
 6. Nom des immeubles ayant un appartement de plus de 150 m2.
 Select distinct Nom_imb from Appartement where Superficie>150;

ENCG Kénitra**Gestion des bases de données 24-nov.-14


Exercice
52
 7. Qui gère l’appartement où habite Atif?
 Select Nomgérant from Immeuble Inner Joint Occupant On Immeuble.Nom_imb=Occupant.Nom_imb
where nom_occ=‘’Atif’’;
 8. Dans quel immeuble habite un retraité?
 Select Nom_imb from Personne, Occupant where Personne.Nom=Occupant.nom_occ and
profession=’’Retraité’’;
 9. Qui habite un appartement de moins de 70 m2?
 Select Nom_occ from Appartement, Occupant where Appartement.Nom_imb=Occupant.Nom_imb and
Appartement.No_app=Occupant.No_app and superficie<70;
 10. Noms des personnes qui habitent au dernier étage de leur immeuble
 Select Nom_occ from occupant, appartement where occupant.Nom_imb=Appartement.Nom_imb and
Occupant.No_app=Appartement.No_app and Etage=Nb_etage ;
 11. Profession du gérant du Firdaous?
 Select Profession from Personne INNER JOIN Immeuble ON Nomgérant=Nom WHERE
Nom_imb=‘’firdaouss’’;

NomENCG Kénitra**Gestion des bases de données 24-nov.-14


Exercice
53

 12. Age et profession des occupants de l’immeuble géré par Alami?


 SELECT Age, Profession FROM Personne, Occupant, Immeuble WHERE
Personne.Nom=Occupant.Nom_occ and Occupant.Nom_imb=Immeuble.nom_imb and
Nomgérant=‘’Alami’’;
 13. Qui habite dans un immeuble de plus de 10 étages et un appartement de plus de 100 m 2?
 SELECT Nom_occ from Occupant, Immeuble, Appartement WHERE
Occupant.Nom_imb=Appartement.Nom_imb AND Occupant.No_app=Appartement.No_app AND
Immeuble.Nom_imb=Appartement.Nom_imb AND Nb_étage>10 AND Superficie=100;
 14. Afficher la superficie totale de chaque Immeuble;
 SELECT SUM(Superfice) FROM Appartement GROUP BY Nom_imb;
 15. Afficher le nombre d’appartement par étage pour chaque immeuble;
 SELECT Nom_imb, Etage, COUNT(*) AS [nombre d’appartement] FROM Appartement GROUP BY
Nom_imb, Etage;
 16. Le prix de location par mois et par mètre carré est de 40DH. Afficher la recette par mois;
 Select SUM(Superficie*40) from Appartement, Occupant Where Appartement.Nom_imb=
Occupant.Nom_imb And Appartement.No_app=Occupant.No_app;
ENCG Kénitra**Gestion des bases de données 24/11/2014