I.
Le langage de définition de données (LDD)
Principaux types de données SQL
Type de données Syntaxe Description
Type alphanumérique CHAR(n) Chaîne de caractères de
longueur fixe n
Type alphanumérique VARCHAR(n) Chaîne de caractères de n
caractères maximum (n<16383)
Type numérique NUMBER(n,[d]) Nombre de n chiffres
[optionnellement d chiffes après
la virgule]
Type numérique SMALLINT Entier signé de 16 bits (-32768 à
32768)
Type numérique INTEGER Entier signé de 32 bits (-2E31 à
2E31-1)
Type numérique FLOAT Nombre à virgule flottante
Type horaire DATE Date sous la forme 16/07/07
Type horaire TIME Heure sous la forme
12:45:24:55
Type horaire TIMESTAMP Date et Heure
1- Création d'une relation (table)
CREATE TABLE <nom-de-la-table>
(
<attribut1> <type> [Not Null] [unique] [, …]
[, PRIMARY KEY (<nom_attribut> [,…])]
[,FOREIGN KEY (<nom_attribut>) REFERENCES
<nom_table>[,…] ] )
[CHECK (<condition>)]
• La contrainte d’unicité (clause UNIQUE) : permet d’assurer qu’il n’existe
pas de valeur dupliquée dans la colonne
• La contrainte d’obligation (clause NOT NULL) autorise et gère une valeur
particulière appelée la valeur nulle. Cette valeur nulle traduit à la fois la
valeur manquante et la valeur inexistante (ex. le nom de jeune fille pour
un homme). NOT NULL est toujours une contrainte colonne, et ne peut pas
être une contrainte de table.
1
• La contrainte de clé primaire (clause PRIMARY KEY) : permet
de choisir une colonne (ou un groupe de colonnes) unique privilégiée
dans une table ;
• La contrainte d’intégrité référentielle admet deux syntaxes selon qu’elle
porte sur une colonne (contrainte de colonne) ou sur plusieurs (contrainte
de table). Dans le premier cas, on utilise la clause REFERENCES. Dans le
second, on utilise l’expression FOREIGN KEY. La clé étrangère fait
référence à la clé primaire d'une autre Table. Elle traduit un lien
sémantique avec une autre Table.
• La contrainte sémantique (clause CHECK) : permet de spécifier les
conditions logiques portant sur une ou plusieurs colonnes d’une même
table.
2- Modification de la structure d’une relation
Ajout d'un attribut :
ALTER TABLE <nom-de-table>
ADD <attribut> <type>,
Modification de type:
ALTER TABLE <nom-de-table>
MODIFY <attribut> <nouveau-type>
Suppression d'un attribut:
ALTER TABLE <nom-de-table>
DROP COLUMN <attribut>
Suppression d'une relation:
DROP TABLE <nom-de-table> [CASCADE CONSTRAINTS]
3- Indexes
Création d'indexes
CREATE [ unique ] INDEX <nom_index> ON <nom_de_la_table>
(<attribut> [ASC | DESC],…)
Suppression d'indexes
DROP INDEX <nom_index>
4-vues
2
Création d'une vue
CREATE VIEW <nom_vue> [(att1, att2,…)] AS <commande-select>
Suppression d'une vue
DROP VIEW <nom_vue>
3
II. Le langage de manipulation de données (LMD)
1- L’insertion d’un ou plusieurs tuples
INSERT INTO <nom-detable> [(att1 [, att2]…)]
VALUES (constante1 [,constante2]…)
2- La mise à jour des données
UPDATE <nom-de-table>
SET attribut = expression
[WHERE condition]
3- La suppression des données
DELETE FROM <nom-de-table>
[WHERE condition]
4- L'interrogation des données
SELECT [ALL|DISTINCT] liste_selection
FROM liste_table/vue
[ WHERE condition]
[GROUP BY liste_group_by]
[HAVING condition
[ Order By attribut (ASC/DESC)];
GROUP BY : permet de réarranger la table résultat du select en un nombre de
groupe. Généralement cette clause est utilisée avec les fonctions du groupe.
Les fonctions de groupe sont
Count : Compte le nombre d’occurrence d’un attribut, y compris les doubles
Sum : Calcule la somme des valeurs d’un attribut du type numérique
Avg : Calcule la moyenne des valeurs d’un attribut du type numérique
Max : Recherche la plus grande valeur de l’attribut
Min : Recherche la plus petite valeur de l’attribut
4
La clause HAVING représente l’équivalent de la clause WHERE appliquée aux
groupes. Donc elle ne peut être spécifié qu’à la suite d’une clause Group By.
ORDER BY : permet de trier les tuples sélectionnés selon la valeur d’un ou de
plusieurs attributs.
Les Conditions de Recherche dans la clause WHERE:
1. Opérateurs Logiques
AND, OR, NOT
2. Type comparaison
=, <>, <, >, >=, <=
3. Type intervalle
BETWEEN, NOT BETWEEN
4. Type appartenance
IN, NOT IN
5. Type correspondance à un masque
LIKE, NOT LIKE
- '%' représente n'importe quelle séquence de zéros ou plusieurs
caractères exemple: LIKE 'H%'
- '_ ' représente n'importe quel caractère unique exemple: LIKE 'H__"
6. Type NULL
NULL, NOT NULL
5
5- Les opérations relationnelles et ensemblistes en SQL
a-Jointure
- Cet opérateur porte sur 2 relations qui doivent avoir au moins un
attribut défini dans le même domaine (ensemble des valeurs
permises pour un attribut).
- La condition de jointure peut porter sur l'égalité d'un ou de
plusieurs attributs définis dans le même domaine (mais n'ayant pas
forcément le même nom).
- Les n-uplets de la relation résultat sont formés par la
concaténation des n-uplets des relations d'origine qui vérifient la
condition de jointure.
Remarque : Des jointures plus complexes que l'équijointure peuvent
être réalisées en généralisant l'usage de la condition de jointure à
d'autres critères de comparaison que l'égalité (<,>, <=,>=, <>).
Forme générale
SELECT liste_selection
FROM table1 JOIN table2
[ON [Table1.]attribut operateur_de-jointure [table2.]attribut ]
[ WHERE condition];
L'équijointure)
SELECT liste_selection
FROM table1 JOIN table2
[ON [Table1.]attribut = [table2.]attribut ]
[ WHERE condition];
Ou bien
SELECT liste_selection
FROM table1, table2
WHERE [Table1.]attribut = [table2.]attribut ]
[AND [condition]];
b-PROJECTION
SELECT [DISTINCT] liste d'attributs FROM table ;
6
c-L'UNION
SELECT liste d'attributs FROM table1
[ WHERE condition]
UNION
SELECT liste d'attributs FROM table 2
[ WHERE condition];
;
d- INTERSECTION
Cet opérateur porte sur deux relations de même schéma.
SELECT attribut1, attribut2, ... FROM table1
[ WHERE condition];
INTERSECT
SELECT attribut1, attribut2, ... FROM table2
[ WHERE condition];
;
e-MINUS
SELECT attribut1, attribut2, ... FROM table1
[ WHERE condition];
MINUS
SELECT attribut1, attribut2, ... FROM table2
[ WHERE condition];
;
7
APPLICATION
Reprenons la base de données commerciale définie selon le schéma relationnel
suivant :
Produit (Codp,Lib, Pu, Qtes, Seuil)
Client (Codc,Nomc,Prenc, Adresse, Telc, Créditc)
Cmde (Numc, date, Codc,…)
Facture ( Numf, montf, datf, Codc)
PC (Codp, Numc, QtéC)
A-Interrogation des données
1- Donner les informations relatives au produit dans le code est 2
Select *
From produit
Where codp = 2 ;
(la condition est de comparer codep à une valeur)
2- Donner toutes les informations des produits dont la quantité en stock
est >= à 5 fois la quantité seuil
Select *
From produit
Where Qté s ≥ 5 * seuil ;
(Comparaison à une expression)
3- Donner l’ensemble des produits dont le 100 ≤ pu<= 400D
Select *
From produit
Where PU Between 100 and 400 ;
(Comparaison par rapport à un ensemble de valeurs)
4- Donner l’ensemble des commandes dont les date se trouvent dans la
liste
(‘14 – 07 – 98’, ‘15 – 09 –98’ , ‘20 – 12 –98’ )
Select *
From commande
Where datec In (‘14 – 07 – 98’, ‘15 – 09 –98’ , ‘20 – 12 –98’ );
(Comparaison par rapport à une liste)
5- Afficher le nombre de produits par commande
Select Numc, Count (Codp)
From pc
Group By Numc;
8
6- Afficher le total des factures par clients
Select Codc, Sum (Montf)
From facture
Group By codc;
7- Afficher la liste des produits commandés en quantité totale > à 5.
Select Codp, Sum (Qtec)
From pc
Group By codp;
Having Sum (Qtec) >5;
8- Donner tous les clients dont le nom commence par M
Select *
From client
Where Nom like “M %”;
(Comparaison à un filtre)
B-Jointure
1. Afficher tous les commandes qui contiennent au moins un produit dont le prix
unitaire dépasse 100 dinars.
Select distinct Numc
From pc, produit
Where pu >100 and
Condition de jointure
pc.Codp = produit.Codp Obligatoire
2. Donner tous les noms des clients qui ont commandé le produit de code 10.
Select nomc
From client, commande,produit
Where
client.Codc = commande.Codc and
produit.Codp = commande.Codp
and Codp =10
9
10