Chapitre IV
Chapitre IV
Chapitre IV
Introduction
Domaines de base
Base de données exemple
Les commandes du LDD
Création d'un schéma de base de données
Création d'un schéma de relation
Ajout d'un attribut
Suppression d’un schéma de relation
Les commandes du LMD
Langage d'interrogation
Langage de mise à jour
Autres formes de requêtes SQL
Les fonctions d’agrégation
Mme Z. TAHAKOURT
1
Bases de données LE LANGAGE SQL
1- Introduction
2- Domaines de base
Les domaines utilisés dans les bases de données sont conformes aux types classiquement
utilisés dans les langages de programmation, à savoir :
Entier : INTEGER ;
Décimal : DECIMAL (m,n) ou NUMBER(mn) où m est le nombre de chiffres et n le nombre
de chiffres après la virgule. Ainsi DECIMAL(4,2) peut représenter des chiffres comme
99,99.
Réel flottant : FLOAT ;
Chaîne de caractères : CHAR (n) et VARCHAR(n). Les"CHAR" font systématiquement n
caractères (les chaînes plus courtes sont complétées par des espaces, les VARCHAR sont
taillés au plus juste dans la limite des n caractères ;
2
Bases de données LE LANGAGE SQL
3
Bases de données LE LANGAGE SQL
La partie FROM décrit les relations qui sont utilisables dans la requête (c'est à dire
l'ensemble des attributs que l'on peut utiliser). C'est par là que l'on doit commencer par
écrire une requête ;
La partie WHERE exprime la (ou les conditions) que doivent respecter les attributs d'un
tuple pour pouvoir être dans la réponse. Cette partie est optionnelle ;
La partie SELECT indique le sous-ensemble des attributs qui doivent apparaitre dans la
réponse (c'est le schéma de la relation résultat). Bien entendu ces attributs doivent
appartenir aux relations indiquées dans la partie FROM.
Les requêtes mono-relation ne concernent par définition qu'une seule relation. Les opérateurs
de l'algèbre relationnelle exprimés sont donc la projection et la restriction.
SELECT *
FROM Clientele
En SQL :
SELECT NomAgence
FROM Agence
Requête7 : trouver les numéro des clients de la banque qui habitent la ville de « Brookleen » par
ordre croissant de leurs noms.
SELECT NClient
FROM Clientele
WHERE Adresse= ‘Brookleen’
ORDER BY nom
4
Bases de données LE LANGAGE SQL
Requête8 : trouver les numéro des clients qui ont un compte à l’agence « Perryridge ».
SELECT NClient
FROM Depot
WHERE NomAgence= ‘Perryridge’
Requête9 : trouver les numéro des clients qui ont un compte à l’agence « Perryridge » dont le
solde dépasse 3000 .
SELECT NClient
FROM Depot
WHERE (NomAgence= ‘Perryridge’)AND(Solde>3000)
Requête10 : trouver les noms des agences de la banque dont les noms commencent par ‘B’ ou
‘b’ .
En algèbre relationnelle on ne peut pas exprimer le fait que le nom commence par ‘B’ ou ‘b’.
En SQL :
SELECT NomAgence
FROM Agence
WHERE (NomAgence LIKE ‘B%’)OR(NomAgence LIKE ‘b%’)
Requête11 : trouver les numéros des clients qui ont bénéficié d’un crédit à l’agence
« Perryridge » et qui ont un compte dans cette même agence.
En algèbre relationnelle :
En SQL :
SELECT NClient
FROM Depot
WHERE (NomAgence= ‘Perryridge’)
UNION
SELECT NClient
FROM Credit
WHERE (NomAgence= ‘Perryridge’)
Requête12 : trouver les numéros des clients qui ont un crédit et un compte à l’agence
« Perryridge ».
En algèbre relationnelle :
SELECT NClient
FROM Depot
WHERE (NomAgence= ‘Perryridge’)
INTERSECT
SELECT NClient
FROM Credit
WHERE (NomAgence= ‘Perryridge’)
Requête13 : trouver les numéros des clients qui ont un compte à l’agence « Perryridge » mais
pas de crédit dans cette même agence.
En algèbre relationnelle :
SELECT NClient
FROM Depot
WHERE (NomAgence= ‘Perryridge’)
MINUS
SELECT NClient
FROM Credit
WHERE (NomAgence= ‘Perryridge’)
6
Bases de données LE LANGAGE SQL
Remarque :
Il faut être très vigilant lors de la manipulation des trois opérateurs ensemblistes l'union, l'intersection et
la différence: les deux relations en entrée doivent impérativement être de même schéma.
Formulation de la jointure
Requête14 : trouver les noms des clients avec leurs adresses, qui ont un compte à l’agence
« Perryridge ».
En algèbre relationnelle :
En SQL :
Ou,
Requête15 : trouver les noms, l’adresse et le solde des clients ayant des comptes dans les
agences de la ville de « brookleen ».
En algèbre relationnelle :
En SQL :
Ou bien,
7
Bases de données LE LANGAGE SQL
A- Insertion de tuples
Syntaxe:
INSERT INTO <NomTable> [Col1, col2,…,Coln]
VALUES (val1, val2,… ,valn)
B- Suppression de tuples
Syntaxe:
DELETE FROM <NomTable>
[WHERE {CONDITION}]
C- Modification de tuples
Syntaxe:
UPDATE <NomTable>
SET col1=nouv_val1, col2=nouv_val2,…, coln=nouv_valn
[WHERE {CONDITION}]
8
Bases de données LE LANGAGE SQL
UPDATE CLIENTELE
SET Adresse=’Toudja’
WHERE nom=’Ahmed’
Requête19 : trouver les numéro des clients qui ont un compte et un crédit à l’agence
« Perryridge ».
SELECT NClient
FROM Credit
WHERE (NomAgence=’Perryridge’) and
(NClient IN (SELECT NClient
FROM Depot
WHERE NomAgence=’Perryridge’)
)
Requête20 : trouver les numéro des clients qui ont un compte à l’agence « Perryridge » mais
pas de crédit dans cette agence.
SELECT NClient
FROM Credit
WHERE (NomAgence=’Perryridge’) and
(NClient NOTIN (SELECT NClient
FROM Depot
WHERE NomAgence=’Perryridge’)
)
Le langage SQL offre la possibilité d’inclure l’opérateur >ANY, ce dernier est utile lorsque se présente
dans la requête un segment de phrase tel que : Plus grand que quelconque.
Requête21 : trouver les nom d’agences dont les avoirs sont supérieurs à celui d’une agence de
la ville de « Brookleen ».
SELECT NomAgence
FROM Agence
WHERE (Avoir >ANY
(SELECT Avoir
FROM Avoir
WHERE Ville=’Brookleen’))
9
Bases de données LE LANGAGE SQL
Cet opérateur est utile lorsque se présente dans la requête un segment de phrase tel que : Plus grand
que tous.
Requête22 : trouver les agences dont les avoirs sont supérieurs à ceux de toutes les agences de
la ville de « Brookleen ».
SELECT NomAgence
FROM Agence
WHERE (Avoir >ALL
(SELECT Avoir
FROM Agence
WHERE Ville=’Brookleen’)
)
Requête23 : trouver les numéro des clients qui ont un compte dans toutes les agences situées
dans la ville de « Brookleen ».
CONTAINS
(SELECT NomAgence
FROM Agence
WHERE Ville=’Brookleen’)
10
Bases de données LE LANGAGE SQL
5-4-1 COUNT
SELECT COUNT(*)
FROM Depot
WHERE NomAgence=’ Perryridge ’
5-4-2 AVG
Requête25 : Quel est l’avoir moyen des agences de la banque.
SELECT AVG(Avoir)
FROM Agence
5-4-3 SUM
Requête26 : Quel le total des soldes des comptes du client « Ali ».
SELECT SUM(Solde)
FROM Depot
WHERE Nclient in (select id from clientele where nom=’Ali’)
11