Bda Rappel Chap1 Saidi R
Bda Rappel Chap1 Saidi R
SAIDI Rajaa
[Link]@[Link]
3 4
Plan
ordre de présentation des enreg. ! SELECT DISTINCT : supprime les valeurs identiques
du résultat de la requête " exemple :
PRIXHT PRIXHT
! Exemple : référence et désignation des produits coûtant moins de 5 dh triés SELECT PRIXHT 2,30 SELECT DISTINCT PRIXHT
FROM PRODUIT FROM PRODUIT 2,30
par désignation 4,75 4,75
WHERE PRIXHT < 5 2,30 WHERE PRIXHT < 5
SELECT REFROD, DESIGN REFPROD DESIGN
FROM PRODUIT 5 Cahier
WHERE PRIXHT < 5 9 Crayon REFPROD PRIXHT
SELECT DISTINCT REFPROD, PRIXHT
ORDER BY DESIGN 7 Stylo 5 2,30
! FROM PRODUIT
9 4,75 ≠
WHERE PRIXHT < 5 7 2,30
sauts à la ligne facultatifs
9 10
SELECT ...
champ LIKE 'motif ' FROM …
WHERE … ASC : ordre croissant - par défaut
où motif contient : ORDER BY champ1,…, champn ASC ou DESC DESC : ordre décroissant
? un caractère quelconque optionnel
* une suite quelconque de caractères (éventuellement vide) " deux critères de tri: le plus à gauche est prioritaire ; le 2e utile en cas d’ex-aequo
# un chiffre quelconque exemple : ORDER BY NOM, PRENOM
" exemple : désignation produits dont le nom commence par 'c' " ordre utilisé :
SELECT DESIGN
FROM PRODUIT DESIGN type champ ordre
WHERE DESIGN LIKE 'c*' Cahier texte lexicographique (ordre alphabétique étendu)
Crayon numérique numérique
date / heure chronologique
! Opérateur IS NULL : champ non rempli
! Exemple : produits de moins de 5 dh triés par désignation croissante
" exemple : réf. des produits dont la désignation n’est pas remplie
SELECT REFPROD, DESIGN REFPROD DESIGN
SELECT REFPROD
FROM PRODUIT 5 Cahier
FROM PRODUIT REFPROD
WHERE PRIXHT < 5 9 Crayon
WHERE DESIGN IS NULL 7
13 ORDER BY DESIGN 7 Stylo 14
" COUNT : nombre d’enregistrements ou plusieurs colonnes en utilisant EST-FACTURÉ NUMFACT REFPROD QTE
6 1 7
" SUM : somme des valeurs du champ (numérique) sur un ensemble d’enreg. " des constantes
6 5 3
" AVG : moyenne des valeurs du champ (numérique) sur un ensemble d’enreg. " des noms de champ 2 5 10
2 1 5
" MIN, MAX : valeur min. et max. dans l’ensemble d’enregistrements " des opérateurs : +, -, *, /, ...
3 7 4
" opérateurs (+, -, *, /, ...) et fonctions (sin, exp, …) " des fonctions : sin, exp, …
! Exemple : prix le plus élevé parmi les produits ! Exemple : réf. des produits avec leur prix TTC REFPROD
SELECT MAX(PRIXHT) 1 22,96
SELECT REFPROD, PRIXHT * 1.196 5 2,75
FROM PRODUIT 19,20
FROM PRODUIT 9 6,87
7 2,63
! Ne pas confondre COUNT (nombre d’enreg.) et SUM (somme sur un champ) :
SELECT COUNT (PRIXHT)
! On peut combiner calcul sur lignes et colonnes dans une même requête :
(3 enregistrements
FROM PRODUIT 3 vérifiant la condition) " Exemple : montant HT de la facture 6
WHERE PRIXHT < 5
SELECT SUM(PRIXHT * QTE)
SELECT SUM (PRIXHT) FROM PRODUIT, EST-FACTURE
FROM PRODUIT (9,25 = 2,30 + 4,75 + 2,20) WHERE [Link] = [Link] 141,3
9,25 AND NUMFACT = 6
WHERE PRIXHT < 5
21 22
! Numéro de la facture ayant le montant le plus élevé PRODUIT REFPROD DESIGN PRIXHT
1 Livre 19,20 ! Création de table : CREATE
5 Cahier 2,30
R1 : Montant de chaque facture 9 Crayon 4,75
7 Stylo 2,20 ! Insertion d’enregistrements : INSERT
SELECT NUMFACT, SUM (PRIXHT *QTE) AS MONTANT
FROM PRODUIT, EST- FACTURE EST-FACTURÉ NUMFACT REFPROD QTE
WHERE [Link] = [Link] 6 1 7 ! Suppression d’enregistrements : DELETE
6 5 3
GROUP BY NUMFACT
2 5 10
2 1 5
! Mise à jour d’enregistrements : UPDATE
3 7 4
R1 NUMFACT MONTANT
R2 : Maximum des montants 2 119,00
3 8,80
SELECT MAX(MONTANT) AS MAXMONTANT 6 141,30
FROM R1
R2 MAXMONTANT
141,30
R3 : Numéro de la facture ayant le montant le plus élevé
FACTURE (NUMFACT, DATFACT) ! Clause permettant de contraindre la modification de tables (conformité aux
données attendues). Les contraintes doivent être exprimées dès la création
! Deux méthodes pour la création d’une table de la table grâce aux mots clés suivants
" en utilisant le langage SQL " en utilisant une interface graphique " DEFAULT : valeur par défaut
spécifique à chaque SGBD " NOT NULL : Le champ doit être saisi
CREATE TABLE FACTURE (
NUMFACT NUMBER IDENTITY " UNIQUE : valeur saisie pour un champ n'existe pas déjà dans la table
PRIMARY KEY, " CHECK : faire un test sur un champ
DATEFACT DATE NOT NULL
); " CONSTRAINT : donner un nom à une contrainte
! Exemple
CREATE TABLE client(
Numcli Number UNIQUE,
Nom varchar2(30) NOT NULL,
Prenom varchar2(30) NOT NULL,
Age Number, check (age < 100),
Email varchar2(50) NOT NULL, check (Email LIKE "%@%"),
DateEnreg date DEFAULT sysdate );
27 28
Contraintes : Définition des clés Insertion d’enregistrements : INSERT – 1 / 2
! L’insertion d’enregistrements permet
! Une clé primaire se définit grâce à la clause PRIMARY KEY suivie de la
liste de colonnes, séparées par des virgules, entre parenthèses : PRIMARY " d'ajouter un enregistrement dans une table
KEY (colonne1, colonne2, ...) " d'ajouter un ensemble d’enreg. spécifié au moyen d’une requête SELECT
! Lorsqu'une liste de colonnes de la table en cours de définition permet de ! L’ajout d’un seul enregistrement s’effectue de la manière suivante :
définir la clé primaire d'une table étrangère, on parle alors de clé INSERT INTO table (champ1, … , champn)
étrangère, et on utilise la clause FOREIGN KEY suivie de la liste de VALUES (valeur1 , … , valeurn)
colonnes de la table en cours de définition, séparées par des virgules, entre
parenthèses, puis de la clause REFERENCES suivie du nom de la table " exemple : ajouter le produit de ref. n° 19 et de désignation Agrafeuse’ dont le
prix HT est 50,6 dh (PRODUIT (REFPROD, DESIGN, PRIXHT) )
étrangère et de la liste de ses colonnes correspondantes, séparées par des
virgules, entre parenthèses : FOREIGN KEY (colonne1, colonne2, ...) INSERT INTO PRODUIT (REFPROD, DESIGN, PRIXHT)
REFERENCES NomTable (colonne1, colonne2, ...) VALUES (19, Agrafeuse', 50.6)
! Exemples ! Remarque : l’insertion dans une table dont la clé est auto-incrémentée
ne doit pas fixer de valeur pour ce champ
alter table client add CONSTRAINT pk_client
PRIMARYKEY (numcli); " exemple : insertion en supposant le champ REFPROD auto-incrémenté
INSERT INTO PRODUIT (DESIGN, PRIXHT)
alter table livraison add CONSTRAINT fk_livraison VALUES ( Agrafeuse', 50.6)
FOREIGN KEY (numfou) REFERENCES fournisseur (numfou); 29 30
! L’ajout d’enregistrements spécifiés par une requête s’effectue de la manière ! La suppression d’enregistrements s’effectue de la manière suivante :
suivante : DELETE
INSERT INTO table (champ1 , … , champn) FROM table
SELECT … FROM … WHERE … WHERE condition
! les enregistrements concernés sont immédiatement supprimés
" le nombre et le type des champs dans la clause SELECT doivent être identiques
à ceux des champs insérés dans table
! Exemple : supprimer toutes les factures émises après le 16/10/2010
DELETE
" exemple : ajouter à la table ANC-PRODUIT tous les produits de PRODUIT FROM FACTURE
WHERE DATFACT > #2010/10/16#
INSERT INTO ANC-PRODUIT (REFPROD, DESIGN, PRIXHT)
SELECT REFPROD, DESIGN, PRIXHT FROM PRODUIT
31 32
Mise à jour d’enregistrements : UPDATE – 1 / 2
33
37 38
! Le corps peut comporter des instructions FOURNISSEUR ( numfou NUMBER, nomfou VARCHAR2(30));
" d’affectation
" SQL : commit, delete, insert, locktable, open, rollback, savepoint, select, set transaction, LIVRAISON (numli NUMBER, numfou NUMBER, dateli DATE default sysdate );
update...
" de contrôle (conditionnelles, répétitives) Nom du fournisseur de la livraison numéro 10 ?
" de gestion des erreurs DECLARE
num NUMBER:= 10;
! Chaque instruction est terminée par « ; »
nom VARCHAR2 (30) ;
! L’imbrication de blocs est possible, mais pas recommandée BEGIN
SELECT nomfou INTO nom
! Affectation d’une variable FROM Fournisseur, Livraison
" Opérateur d’affectation (:=) WHERE numli= num and [Link]=[Link];
" ex. [Link] := ‘Livre’ ; DBMS_OUTPUT.PUT_LINE(’La livraison numéro : ’ || num || ’concerne le
! Option into de l’ordre select
fournisseur : ’ || nom);
END;
Select LIBPROD into designation
from Produit
where REFPROD= 2;
39 40
PL/SQL : Structures de contrôle Structures de contrôle : Exemples
! While ! For
DECLARE
DECLARE somme NUMBER := 0;
compteur NUMBER; moyenne NUMBER;
somme NUMBER := 0; BEGIN
moyenne NUMBER; FOR compteur IN 1 .. 10 LOOP
BEGIN somme := somme + compteur ;
compteur := 1; END LOOP;
WHILE compteur <= 10 LOOP moyenne := somme / 10;
somme := somme + compteur ; DBMS_OUTPUT.PUT_LINE ('La moyenne est '||TO_CHAR(moyenne));
compteur := compteur + 1; END;
END LOOP;
moyenne := somme / 10;
DBMS_OUTPUT.PUT_LINE ('La moyenne est '||TO_CHAR(moyenne));
END;
43 44
Procédures PL/SQL Procédures PL/SQL : Exemple
! Utilisées pour enregistrer des traitements fréquemment utilisés au niveau CREATE OR REPLACE PROCEDURE compteARebours (n NUMBER) IS
du noyau sans valeur de retour BEGIN
IF n >= 0 THEN
! Syntaxe DBMS_OUTPUT.PUT_LINE ( n ) ;
compteARebours ( n − 1 ) ;
CREATE OR REPLACE PROCEDURE / nom / ( / paramètres / ) IS END IF;
/ déclaration des variables locales / END;
BEGIN
/ instructions /
END; ! Invocation
" En PL/SQL, une procédure s’invoque tout simplement avec son nom
" Sous SQL+, on doit utiliser le mot-clé CALL. Par exemple, on invoque le compte
à rebours sous SQL+ avec la commande CALL compteARebours(20)
45 46
! Utilisées pour enregistrer des traitements fréquemment utilisés au niveau CREATE OR REPLACE FUNCTION Maximum( a NUMBER, b NUMBER)
du noyau avec valeur de retour RETURN NUMBER
IS
! Syntaxe BEGIN
IF a < b THEN RETURN b ;
ELSE
CREATE OR REPLACE FUNCTION / nom / ( / paramètres / )
RETURN a ;
RETURN / types /
END IF;
IS
END;
/ déclaration des variables locales /
BEGIN
/ instructions / ! Invocation
" En PL/SQL, une fonction s’invoque tout simplement avec son nom
END; " Sous SQL+, On passe par une pseudo-table nommée DUAL de la façon
suivante : SELECT Maximum(21, 12) FROM DUAL;
47 48
Triggers Syntaxe
Les attributs des tables sont accessibles à travers les variable :NEW et :OLD
49 50
CATALOGUE ( numcat NUMBER, datedeb DATE, datefin DATE) ! Une vue est une requête stockée qui est interrogée comme une table