Atelier Base de données ISET Bizerte
Langage SQL
Langage de manipulation des données (LMD)
I. Partie théorique
1. Insertion d’un tuple
insert into nom_de_table (attribut1, attribut2,…,attributn)
values (valeur1, valeur2,…, valeurn) ;
Exemple :
insert into client (numclient, nom, adresse) values (1000, 'mohamed', 'Tunis') ;
La liste descriptive peut être omise, et dans ce cas on doit respecter l’ordre des colonnes
(défini lors de la création de la table et qu’on peut consulter par la commande DESC
nom_table)
insert into client values (1000, ‘mohamed’, ‘Tunis’) ;
2. Modification d’un ou de plusieurs tuples
Update nom_de_table
Set attribut=constante/expression
[where condition] ;
Set : spécifie quels attributs sont mis à jour et quelles valeurs leurs sont assignées.
Where : détermine quelles lignes de la table sont concernées, clause nom obligatoire si toutes
les lignes sont modifiées.
Exemple :
Update client set adresse='TU' where adresse='TUNIS' ;
1
Atelier Base de données ISET Bizerte
3. Suppression d’un ou de plusieurs tuples
Delete from nom_de_table
[where condition];
Exemple :
Delete from client where nom like 'ahmed';
4. Interrogation de la base
La commande select permet de rechercher des informations selon divers critères.
Select {*|attribut1, attribut2,…,attributn} from nom_de_table
[where condition]
[group by attribut1,…, attributn Having condition];
Le caractère * signifie tous les attributs.
La clause from spécifie la ou les tables à partir desquelles les données seront extraites.
La clause where permet de spécifier un critère de sélection.
Une condition peut prendre différentes formes :
Comparaison à une valeur
Comparaison à une expression
Comparaison à une liste
Test sur l’indétermination d’une valeur
…
Les opérations sont :
= Egal
!= Différent
> Supérieur
>= Supérieur ou égal
< Inférieur
<= Inférieur ou égal
[NOT] BETWEEN…and… [pas] entre … et …
2
Atelier Base de données ISET Bizerte
[NOT] IN [pas] dans
[NOT] LIKE [pas] comme
IS NULL Est indéfini
IS NOT NULL N’est pas indéfini
ANY Au moins un
ALL Tout
Le caractère % permet de remplacer une séquence de caractères (éventuellement
nulle)
Les caractères [-] permettent de définir un intervalle de caractères (par exemple [J-
M])
Remarque : Si on veut avoir deux copies d’une même table, on lui affecte deux noms fictifs
dans la clause From.
Exemple :
On veut avoir la liste des articles dont le prix dépasse celui de l’article N°2.
Select [Link], [Link]
From Article B, Article A
Where [Link] > [Link]
And [Link]=2
Select peut être suivi de All ou de Distinct. Avec All la commande affiche tous les tuples issus
de la requête, tandis que Distinct élimine les répétitions.
4.1 La clause Order By
La clause Order by permet de trier les tuples sélectionnées selon la valeur d’un ou de
plusieurs attributs. En ajoutant ASC ou DESC, on précise l’ordre croissant ou décroissant.
Exemple : afficher les noms des clients par ordre croissant.
Select nom from Client Order by nom Asc;
3
Atelier Base de données ISET Bizerte
4.2 La clause Group By
La clause Group by permet de créer des groupes de lignes pour appliquer des fonctions
d’agrégat sur le groupe. Il est possible de créer des groupes sur plusieurs attributs.
Les fonctions d’agrégat opèrent sur un ensemble de valeur fournissant une valeur unique :
AVG( ) moyenne des valeurs
SUM( ) somme des valeurs
MIN( ) valeur minimum
MAX( ) valeur maximum
COUNT( ) nombre de valeurs
On peut utiliser la clause HAVING avec la clause Group By. Elle est équivalente à la clause
where appliquée aux groupes, en effet elle porte sur la valeur d’une fonction calculée sur un
groupe.
Exemples :
1. Donner le nombre de clients dans la table client
Select count(*) as "nombre des clients" from Client
2. Donner pour chaque article commandé, la quantité maximale commandée :
Select NumArt, Max(QteCmd) as "quantité maximale commadée" from lig_com
group by NumArt
3. Afficher les noms de clients qui ont passé des commandes dont leurs montants
commandés dépassent 1000DT : MontantCmd=somme(PrixUnit*QteCmd)
Select [Link]
From client C, commande CO, Lig_com LC, article A
Where [Link]=[Link]
And [Link]=[Link]
And [Link]=[Link]
Group by [Link]
Having Sum([Link]*[Link])>=1000;
4
Atelier Base de données ISET Bizerte
II. Partie pratique
Soit le modèle suivant :
Client (NumClient,Nom, Adresse)
Commande (NumCmd, DateCmd, #NumClient)
Lig_com (#NumCmd, #NumArt, QteCmd)
Article (NumArt, Designation, PrixUnit)
1. Créer les quatre tables.
2. Ajouter une contrainte pour que le prix de chaque article doit être supérieur à 2DT.
3. Remplir les tables.
Client
Numclient Nom Adresse
01 Mouhamed Ras Jebel
02 Ahmed Mitline
03 Meher Bizerte
Commande
Numcmd Numclient Datecmd
01 01 06/02/2012
02 03 20/07/2012
03 01 14/01/2013
04 03 23/05/2013
05 02 19/09/2013
5
Atelier Base de données ISET Bizerte
Lig_Com
Numcmd Numart Qtecmd
01 02 3
01 03 2
01 05 1
02 04 2
02 03 2
03 04 5
04 02 10
05 01 1
05 02 1
Article
Numart Designation Prixunit
01 ArtP 300
02 ArtM 200
03 ArtK 100
04 ArtB 250
05 ArtX 100
4. Ajouter l’attribut DateNai à la table Client et remplir ce champ :
Numclient DateNai
01 08/06/1980
02 05/09/1996
03 22/10/1999
6
Atelier Base de données ISET Bizerte
5. Afficher tous les clients de la ville de Bizerte.
6. Modifier les adresses Bizerte à Bt.
7. Supprimer tous les clients d’adresse Bt.
8. Donner le nombre des clients.
9. Donner la liste des clients dont leurs âges est supérieur au client n°2.
10. Afficher les désignations des articles dans l’ordre croissant.
11. Donner pour chaque article commandé, la quantité maximale commandée.