ch4 BD
ch4 BD
ch4 BD
Structured Query
Language
1- Introduction
SQL est un langage de quatrième génération (L4G), non procédural, conçu par IBM dans
les années 70. SQL est basée sur l'algèbre relationnelle (opérations ensemblistes et
relationnelles). SQL a été normalisé dès 1986 mais les premières normes, trop
incomplètes, ont été ignorées par les éditeurs de SGBD. La norme actuelle SQL-2 (appelée
aussi SQL-92) date de 1992. Elle est acceptée par tous les SGBD relationnels. Ce langage
permet l'accès aux données et se compose de trois sous-ensembles :
1. Le Langage de Définition de Données : LDD (Data Definition Language DDL) : Ce langage
permet la définition et la mise à jour de la structure de la base de données (tables,
attributs, vues, index,...).
2. Le Langage de Manipulation de Données : LMD (Data Manipulation Language DML) : Ce
langage permet de manipuler les données de la base et de les mettre à jour, il permet
aussi de rechercher des informations utiles en interrogeant la base de données.
3. Le Langage de Contrôle de Données : LCD (Data Control Language DCL) : Ce langage
permet de définir les droits d'accès pour les différents utilisateurs de la base de données,
donc il permet de gérer la sécurité de la base et de confirmer et d'annuler les transactions.
Types de données
CHAR(n) : Chaîne de n caractères (1<= n <= 255) de longueur fixe (ajout de blancs
pour garder la longueur fixe)
VARCHAR2(n) ou VARCHAR(n) : Chaîne de caractères de longueur variable n (1<=
n <= 2000).
NUMBER(p,s) : Nombre représentant un entier relatif ou un réel dont le nombre
total de chiffre est p (appelé précision) et le nombre de décimales est s (appelé
échelle).
LONG : Données de type chaîne de caractères de longueur variable pour mémoriser
de longs textes allant jusqu'à 2G0.
DATE : Données de type date.
Contraintes d'intégrité
Une contrainte d'intégrité est une règle qui permet de contrôler la validité et la cohérence
des valeurs entrées dans les différentes tables de la base. Elle peut être définie sous deux
formes :
Dans les commandes de création des tables.
Au moment de la modification de la structure de la table.
Il existe des contraintes
Sur une colonne : La contrainte porte sur une seule colonne. Elle suit la définition
de la colonne. Ces contraintes sont :
- NOT NULL : Spécifie que pour toute occurrence, la colonne doit avoir une valeur.
- UNIQUE : Toutes les valeurs de la colonne sont distinctes.
- PRIMARY KEY : La colonne est une clé primaire pour la table et elle peut être remplacée
par UNIQUE et NOT NULL.
- REFERENCES table(colonne) : Il s'agit d'une contrainte d'intégrité fonctionnelle par
rapport à une clé ; chaque valeur de la colonne doit exister dans la table dont la colonne
est référencée. On utilise cette contrainte pour les clés étrangères.
- CHECK : C'est une contrainte associée à une condition qui doit être vérifiée par toutes
les valeurs de la colonne (domaine des valeurs de l'attribut).
Sur une table : La contrainte porte sur un ensemble de colonnes d'une même table,
une virgule sépare la définition d'une contrainte de table des définitions des
colonnes.
Ces contraintes sont :
- UNIQUE (coli, colj,...) : L'unicité porte sur le n-uplet des valeurs.
- PRIMARY KEY (coli, colj,...) : Clé primaire de la table (clé composée).
- FOREIGN KEY (coli, colj,...) REFERENCES table (colm,coln,...) [ON DELETE CASCADE] :
Désigne une clé étrangère sur plusieurs colonnes. L'option ON DELETE CASCADE indique
que la suppression d'une ligne de la table de référence va entraîner automatiquement la
suppression des lignes référencées.
Exemple
Soit la base de données relationnelle suivante:
F (NF, Nomf, Ville) -- Cette relation désigne l'ensemble des fournisseurs.
P (NP, Libp, Coul, Poids) -- Cette relation désigne l'ensemble des pièces.
Syntaxe
ALTER TABLE Nom_Table
ADD Attribut Type ;
Syntaxe
ALTER TABLE Nom_Table
MODIFY Attribut Nouveau_Type ;
Exemple
Modification de la taille de l'attribut Desig à VARCHAR2(15).
ALTER TABLE J
MODIFY Desig VARCHAR2(15);
c. Ajout de contrainte :
Permet d'ajouter une contrainte au niveau d'une table.
Syntaxe
ALTER TABLE Nom_Table
ADD CONSTRAINT Nom_Contrainte Définition de la contrainte ;
Exemple
Ajout de la contrainte de PRIMARY KEY sur l'attribut NJ de la table J.
ALTER TABLE J
ADD CONSTRAINT pk_NJ PRIMARY KEY (NJ);
Ajout des contraintes de clés étrangères sur la table FPJ.
ALTER TABLE FPJ
ADD CONSTRAINT fk_NP FOREIGN KEY (NP) REFERENCES P(NP);
ALTER TABLE FPJ
ADD CONSTRAINT fk_NJ FOREIGN KEY (NJ) REFERENCES J(NJ);
Ajout de la contrainte CHECK sur l'attribut Qte (Qte > 0) de la table FPJ et Qtes
(Qtes>0) de la table P.
ALTER TABLE FPJ
Une vue est une perception logique sur les données d'une ou plusieurs tables ou vues. Elle
est définie à partir d'une requête d'interrogation du langage de manipulation de données
et hérite les mêmes caractéristiques que les objets auxquels elle se réfère (type,
contrainte,...).
a. Création de vue :
Permet de créer une vue à partir d'une requête.
Syntaxe
CREATE VIEW Nom_Vue [(Attr1, Attr2,...)]
AS SELECT ...;
NB : La spécification des noms des colonnes de la vue sont facultatives ; par défaut, les
colonnes de la vue ont pour noms ceux des colonnes résultat du SELECT.
Exemple
Création de la vue VF_Sousse représentant les fournisseurs de la ville de Sousse.
CREATE VIEW VF_Sousse
AS SELECT *
FROM F
WHERE Ville = ‘Sousse';
Syntaxe
DROP VIEW Nom_Vue;
Exemple
Supprimer la vue VF
Syntaxe
SELECT liste_attributs
FROM liste_tables
WHERE condition
GROUP BY attributs
HAVING condition_groupe
ORDER BY attribut_tri ;
a. Sélection :
Permet de sélectionner un ensemble de données d'une ou de plusieurs tables.
Syntaxe
SELECT [DISTINCT] Attr1, Attr2, ..., Attrn
FROM Nom_Table1, Nom_Table2,..., Nom_Tablen
WHERE Condition;
Exemple
Donner la liste des fournisseurs.
SELECT *
FROM F;
Exemple
Donner les libellés des pièces utilisées dans le projet de numéro ‘J002'.
SELECT DISTINCT Libp
FROM P,FPJ
WHERE P.NP = FPJ.NP
AND NJ='J002';
On peut exprimer cette jointure autrement :
SELECT Libp
FROM P
WHERE NP IN (SELECT NP
FROM FPJ
WHERE NJ = ‘J002');
Donner les pièces (toutes les informations) utilisées dans les projets qui ont
démarré au cours de l'année 2003 et qui sont fournies par des fournisseurs de
Tunis.
SELECT DISTINCT P.NP, Libp, coul, Poids, PU, Qtes
FROM P,J, FPJ,F
WHERE P.NP = FPJ.NP
AND F.NF = FPJ.NF
AND J.NJ = FPJ.NJ
AND F.Ville ='Tunis'
AND DatDeb BETWEEN '01/01/03' AND '31/12/03';
NB : Dans certaines requêtes, on est obligé de renommer soit des tables, soit des attributs.
Donner les libellés des pièces qui ont un prix unitaire supérieurs à celui de la pièce
‘Robinet'.
SELECT P.Libp
FROM P, P P1
WHERE P.PU > P1.PU AND P1.Libp ='Robinet';
c. Groupement :
Il est possible de grouper des lignes de données ayant une valeur commune à l'aide de la
clause GROUP BY et des fonctions de groupe qui sont :
AVG Moyenne
SUM Somme
Syntaxe
SELECT Attr1, Attr2,..., Fonction_Groupe
FROM Nom_Table1, Nom_Table2,...
WHERE Liste_Condition
GROUP BY Liste_Groupe
HAVING Condition ;
Exemple
Donner le nombre de fournisseurs par projet.
SELECT NJ, COUNT(DISTINCT(NF)) Nbfrs
FROM FPJ
GROUP BY NJ;
Donner le nombre de fournisseurs par projet en spécifiant les désignations et les
villes des projets.
SELECT FPJ.NJ, Desig, Ville, COUNT(DISTINCT(NF)) Nbfr
FROM FPJ, J
WHERE FPJ.NJ = J.NJ
GROUP BY FPJ.NJ, Desig, Ville;
Donner la quantité totale commandée par pièce.
SELECT NP, SUM(Qte)
FROM FPJ
GROUP BY NP;
Donner le total des dépenses par projet.
SELECT NJ,SUM(PU*Qte) Depense
FROM P,FPJ
WHERE FPJ.NP = P.NP
GROUP BY NJ;
Donner les pièces dont les prix unitaires dépasse la moyenne des prix.
SELECT *
FROM P
WHERE PU > (SELECT AVG(PU) FROM P);
Donner les projets dont le nombre de fournisseurs dépasse 4.
SELECT NJ, Count(DISTINCT NF)
FROM FPJ
GROUP BY NJ
HAVING Count(DISTINCT NF) > 4;
Syntaxe
SELECT Attr1, Attr2,..., Attrn
FROM Nom_Table1, Nom_Table2,...
WHERE Liste_Condition
ORDER BY Attr1 [ASC], Attr2 DESC;
NB : L'ordre de tri par défaut est croissant (ASC).
Exemple
Donner les pièces des projets de Sousse suivant l'ordre décroissant de leurs
quantités totales.
SELECT FPJ.NP, Libp, SUM(Qte) TotQt
FROM P, FPJ, J
WHERE P.NP = FPJ.NP
AND J.NJ = FPJ.NJ
AND Ville = 'Sousse'
GROUP BY FPJ.NP, Libp
ORDER BY TotQt DESC ;
e. Union :
L'opérateur UNION permet de fusionner deux sélections de tables pour obtenir un ensemble
de lignes égal à la réunion des lignes des deux sélections. Les lignes communes
n'apparaîtront qu'une seule fois.
Syntaxe
Requête1
UNION
Requête2 ; Avec Requête1 et Requête2 de même structure.
Exemple
Donner l'ensemble des fournisseurs des projets de Tunis et de Monastir.
SELECT F.NF, Nomf
FROM F, FPJ, J
WHERE F.NF=FPJ.NF AND J.NJ= FPJ.NJ AND J.Ville='Tunis'
UNION
SELECT F.NF, Nomf
FROM F, FPJ, J
WHERE F.NF=FPJ.NF AND J.NJ= FPJ.NJ AND J.Ville='Monastir';
Syntaxe
Requête1
INTERSECT
Requête2 ;
Avec Requête1 et Requête2 de même structure.
Exemple
Donner l'ensemble des pièces communes aux projets J001 et J003.
SELECT P.NP, Libp
FROM P, FPJ
WHERE P.NP=FPJ.NP AND NJ='J001'
INTERSECT
SELECT P.NP, Libp
FROM P, FPJ
WHERE P.NP=FPJ.NP AND NJ='J003' ;
g. Différence :
L'opérateur MINUS permet d'obtenir les lignes de la première requête et qui ne figurent
pas dans la deuxième.
Syntaxe
Requête1
MINUS
Requête2 ;
Avec Requête1 et Requête2 de même structure.
Exemple
Donner l'ensemble des pièces qui n'ont pas été utilisées dans des projets.
SELECT NP, Libp
FROM P
MINUS
SELECT P.NP, Libp
FROM P, FPJ
WHERE P.NP=FPJ.NP;
Syntaxe
INSERT INTO Nom_Table [(Attr1, Attr2,..., Attrn)]
VALUES (Val1, Val2,..., Valn);
Permet d'insérer un tuple à la fois.
Ou
INSERT INTO Nom_Table (Attr1, Attr2,..., Attrn)
SELECT...;
Permet d'insérer plusieurs tuples à partir d'une ou plusieurs autres tables.3.2- Insertion de
données
Exemple
Remplissage de la table F.
INSERT INTO F VALUES('F001','BATAM','Tunis');
INSERT INTO F VALUES('F002','BATIMENT','Tunis');
INSERT INTO F VALUES('F003','AMS','Sousse');
INSERT INTO F VALUES('F004','GLOULOU','Sousse');
INSERT INTO F VALUES('F005','PRODELEC','Tunis');
INSERT INTO F VALUES('F006','ELECTRON','Sousse');
INSERT INTO F VALUES('F007','SBATIM','Sousse');
INSERT INTO F VALUES('F008','SANITAIRE','Tunis');
INSERT INTO F VALUES('F009','SOUDURE','Tunis');
INSERT INTO F VALUES('F010','MELEC','MONASTIR');
INSERT INTO F VALUES('F011','MBATIM','MONASTIR');
INSERT INTO F VALUES('F012','BATFER','Tunis');
Remplissage de la table P.
INSERT INTO P VALUES('P001','Robinet','Gris',5,18,1200);
INSERT INTO P VALUES('P002','Prise','Blanc',1.2,1.5,1000);
INSERT INTO P VALUES('P003','Cable','Blanc',2,25,1500);
INSERT INTO P VALUES('P004','Peinture','Blanc',25,33,900);
INSERT INTO P VALUES('P005','Poignée','Gris',3,12,1300);
INSERT INTO P VALUES('P006','Serrure','Jaune',2,47,1250);
INSERT INTO P VALUES('P007','Verrou','Gris',1.7,5.5,2000);
INSERT INTO P VALUES('P008','Fer','Noir',50,90,800);
Remplissage de la table J.
INSERT INTO J VALUES('J001','ISET','Sousse','10/12/2000','10/12/2004');
INSERT INTO J VALUES('J002','ISG','Sousse','13/02/2003','13/02/2004');
INSERT INTO J VALUES('J003','ISET','Tunis','15/01/2003','15/01/2005');
INSERT INTO J VALUES('J004','METS','Sousse','03/09/2003','03/09/2004');
INSERT INTO J VALUES('J005','FSEG','Monastir','11/03/2000','11/03/2004');
Remplissage de la table FPJ.
INSERT INTO FPJ VALUES('F001','P001','J001',100);
INSERT INTO FPJ VALUES('F001','P002','J001',50);
INSERT INTO FPJ VALUES('F001','P003','J001',20);
INSERT INTO FPJ VALUES('F001','P004','J002',25);
Exemple
Modifier le Poids de la Pièce de numéro P002 à 1.
UPDATE P
SET Poids = 1
WHERE NP = 'P002';
Augmenter la quantité en stock des différentes pièces de 10%.
UPDATE P
SET Qtes = 1.1 * Qtes;
Une transaction est un ensemble de modifications de la base qui forment un tout indivisible.
L'utilisateur peut à tout moment valider la transaction en cours par la commande COMMIT.
Une transaction commence au début d'une session de travail ou juste après la fin de la
transaction précédente. Tant qu'une transaction n'est pas validée, les insertions,
modifications et suppressions qu'elle a effectuées n'apparaissent pas aux autres
transactions.
NB : Un EXIT provoque automatiquement un COMMIT.
Oracle permet à plusieurs utilisateurs de travailler en sécurité sur la même base. Chaque
donnée peut être accessible à un seul utilisateur ou partageable entre plusieurs utilisateurs.
GRANT : Permet au propriétaire d'une table ou vue de donner à d'autres utilisateurs
des droits d'accès à celles ci.
Syntaxe
GRANT Liste_Privilège ON Table/Vue TO Utilisateur [WITH GRANT OPTION];