Langage SQL Structured Query Language
Introduction
SQL signifie Structured Query Language c'est--
dire Langage d'interrogation structur. Origine:
Modle des base de donnes relationnelles
invent au centre de recherche IBM en 1970. SEQUEL (Structured English Query Language) enrichi pour donner naissance SQL en 1980 SQL est devenu la norme officielle en 1986: norme SQL86
Langage SQL
Introduction
Depuis, la norme SQL est passe par SQL-2 et
SQL-3
Langage SQL
Introduction
Classification des commandes dans
SQL
Commandes de dfinition de donnes
Tables, Vue ,colonnes ,clefs, index, contraintes
Commandes de manipulation des donnes
Permettent lajout, la suppression et la modification
des lignes, la manipulation et la visualisation des contenus des tables.
Commandes de contrle de donnes:
permette de maintenir la confidentialit et lintgrit
des donnes
Langage SQL
Dfinir une base Langage de dfinition de donnes (LLD)
5 Langage SQL
Contraintes dintgrits
Cl primaire: une ou plusieurs colonnes dune
table permettant didentifier chaque ligne de la table de manire unique. La cl primaire ne doit pas contenir de colonnes valeurs nulles. Cl unique: contrle l unicit de la valeur: une valeur distincte pour chaque ligne de table. Une cl unique peut contenir une valeur nulles.
Langage SQL
Contraintes dintgrits
Cl trangre: compose dune ou plusieurs
colonnes dans une table dite fille dont les valeurs dpendent dune cl primaire ou unique dune table appele parent. Intgrit rfrentielle: signifie que les relations reprsentes par les cls primaires et trangre sont maintenues. Elle assure la consistance des donnes.
Langage SQL
Cration dune table: CREATE TABLE
Dfinition dune colonne: syntaxe
nom type [DEFAULT expression] [contrainte de colonne] Type de donne
CHAR(n): n est fixe entre 1 et 255 VARCHAR(n): n est entre 1 et 2000 INTEGER: entier sur 4 octet BIGINT: entier sur 8 octet SMALLINT : entier sur un octet BOOLEAN: true ou false NUMBER(p,e): p entre 1 et 38, e entre -84 et 127 DATE
Langage SQL
Cration dune table
Contraintes dintgrit:
Contraintes de colonne
[CONSTRAINT contrainte] { [NOT] NULL UNIQUE | PRIMARY KEY REFERENCES table [colonne] [ON DELETE CASCADE] CHECK (condition) }
Langage SQL
Cration dune table
Exemple:
CREATE TABLE client (idclient NUMBER CONSTRAINT u_id PRIMARY KEY, Nom CHAR(20) CONSTRAINT nn_nom NOT NULL, adresse CHAR(80), Codepost NUMBER(5) CHECK (codepost BETWEEN 10000 AND 95999), ville CHAR(20), tel NUMBER(8));
Langage SQL
10
Cration dune table
Exemple
CREATE TABLE article (idarticle NUMBER CONSTRAINT c_adr PRIMARY KEY, designation CHAR(20) CONSTRAINT nn_des NOT NULL, prixunit NUMBER(7,2), qlestock NUMBER DEFAULT 0);
11
Langage SQL
Cration dune table
Exemple
CREATE TABLE commande( Numcom NUMBER, Idarticle NUMBER CONSTRAINT fk_idr REFERENCE article(idarticle), Datecom DATE);
12
Langage SQL
Cration dune table
Contraintes dintgrit:
Contraintes de table
[CONSTRAINT contrainte] { UNIQUE | PRIMARY KEY (colonne [, colonne ]) FOREIGN KEY (colonne [, colonne ]) REFERENCES table [(colonne [, colonne ])] [ON DELETE CASCADE] CHECK (condition) }
13
Langage SQL
Cration dune table
Exemple
CREATE TABLE ligne_com (numcom NUMBER, nuligne NUMBER, idarticle NUMBER CONSTRAINT fk_ida REFERENCE article(idarticle), qtecom NUMBER CONSTRAINT nn_qte NOT NULL CONSTRAINT check_qte CHECK (qtecom > 0), PRIMARY KEY (numcom, nuligne));
14 Langage SQL
Cration dune table
Cration de table avec insertion de donnes.
On peut, en un seul ordre SQL crer une table et la
remplir avec des donnes provenant dune requte SELECT CREATE TABLE nom [(col1, col2, .)] AS SELECT
15
Langage SQL
Suppression dune table
Supprimer une table revient liminer sa
structure et toutes les donnes quelle contient. DROP TABLE nom_table
16
Langage SQL
Modifier une table
Ajout ou Modification dune colonnes
ALTER TABLE nom_table ADD ([nom_colonne type [contrainte.]]) MODIFY ([nom_colonne type ]]) DROP {PRIMARY KEY |UN IQUE |CONSTRAINT contrainte [CASCADE] }
17 Langage SQL
Modifier une table
Exemple:
1) ALTER TABLE client ADD remarque CHAR(80), MODIFY ville CHAR(30), 2) ALTER TABLE article DROP CONSTRAINT c_idr CASCADE, Ou simplement DROP PRIMARY KEY CASCADE
18
Langage SQL
Modifier une table
CASCADE permet de supprimer toutes les cls trangres qui se rfrent la cl primaire.
19
Langage SQL
Modifier une table
Renommer une colonne
ALTER TABLE nom_table RENAME COLUMN ancien_nom TO nouveau_nom
Renommer une table
ALTER TABLE nom_table RENAME TO nouveau_nom
20
Langage SQL
Exercice
crez les tables du schma relationnel suivant: - film(num_film, num_realisateur, titre, genre,
annee) - cinema(num_cenima, nom, adresse) - individu (num_individu, nom, prenom) - jouer (num_acteur,num_film, role) N oubliez pas: - De choisir correctement les types - De prciser les cl primaire et les contraintes dintgrit rfrentielle
21 Langage SQL
Modifier une base Langage de modification des donnes (LMD)
22 Langage SQL
Insrer des ligne: insert into
La commande insert permet dinsrer une ligne
dans une table Syntaxe INSERT INTO nom_table [(col1,col2,)] VALUES (val1,val2,) La liste des noms de colonnes est optionnelle: si elle est omise, cest lensemble des colonnes de la table dans lordre de la cration qui sera considr par dfaut. Si une colonne ne figure pas dans la liste, elle aura la valeur NULL.
23 Langage SQL
Insrer des ligne: insert into
Exemple
INSERT INTO client VALUES(10, Ahmed, 2 Bd Med VI, 60000, Oujda, 0661340340); INSERT INTO client VALUES(13, Aziz, 15 Bd Med VI, 60000); INSERT INTO client (idclient, nom) VALUES(16, Ahmed);
24
Langage SQL
Insrer des ligne
Il est possible dinsrer dans une table des lignes
provenant dune autre table Exemple INSERT INTO client_par SELECT idclient, nom, adresse, codepost,tel FROM client WHERE ville=Oujda
25
Langage SQL
Modifier des donnes: UPDATE
La commande UPDATE permet de modifier les
valeurs dune ou plusieurs colonnes dune ou plusieurs lignes. Syntaxe
UPDATE nom_table
SET colonne = expresion [WHERE condition]
UPDATE nom_table
SET (liste_colonne) = (requete_sql) [WHERE condition]
26 Langage SQL
Modifier des donnes: UPDATE
Exemple
UPDATE client SET (adresse, ville, codepost, tel)=(SELECT adr, ville, code, tel FROM client_par WHERE idc=16) WHERE idclient = 16;
27
Langage SQL
Supprimer des lignes: DELETE
La commande DELETE permet de supprimer des
ligne dune table. Syntaxe DELETE FROM nom_table [WHERE prdicat]; Exemple DELETE FROM client WHERE ville=Oujda
28
Langage SQL
Interroger une base: SELECT
Syntaxe gnrale:
SELECT [DISTINCT ou ALL] * ou liste de colonnes FROM liste_de_tables [WHERE prdicats] [GROUP BY ordre des groupes] [HAVING condition] [ORDER BY ] liste de colonnes [ASC/DESC]
29
Langage SQL
Interroger une base
SELECT: Spcification des colonnes du rsultat FROM: Spcification des tables sur lesquelles
30
porte l'ordre WHERE: Filtre portant sur les donnes (conditions remplir pour que les lignes soient prsentes dans le rsultat) GROUP BY: Dfinition d'un groupe (sous ensemble) HAVING: Filtre portant sur les rsultats (conditions de regroupement des lignes) ORDER BY: Tri des donnes du rsultat
Langage SQL
Interroger une base
Exemple
SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE TIT_CODE = 'M.; CLI_NOM CLI_PRENOM ------- ----------------------DUPONT Alain MARTIN Marc BOUVIER Alain DUBOIS Paul DREYFUS Jean FAURE Alain PAUL Marcel DUVAL Arsne PHILIPPE Andr CHABAUD Daniel BAILLY Jean-Franois Affichage des noms et prnoms des clients dont le titre est M. (monsieur).
31
Langage SQL
Interroger une base: L'oprateur * (toile)
Le caractre * (toile) rcupre toutes les colonnes de la
table prcise dans la clause FROM de la requte. Exemple SELECT * FROM T_CLIENT WHERE TIT_CODE = 'M.;
CLI_ID TIT_CODE CLI_NOM ----------- ---------------- -------------1 M. DUPONT 2 M. MARTIN 3 M. BOUVIER 4 M. DUBOIS 5 M. DREYFUS 6 M. FAURE 11 M. PAUL 12 M. DUVAL 13 M. PHILIPPE 16 M. CHABAUD CLI_PRENOM CLI_ENSEIGNE ---------------------- -----------------------Alain NULL Marc Transports MARTIN Alain NULL Paul NULL Jean NULL Alain Boulangerie du march Marcel Cie Internationale Arsne NULL Andr NULL Daniel NULL
32
Langage SQL
Interroger une base: L'oprateur DISTINCT (ou ALL)
le mot clef DISTINCT qui permet dliminer les doublons dans la rponse. Le mot clef ALL (par dfaut) rcupre toutes les lignes Exemple 1 SELECT CLI_PRENOM FROM T_CLIENT WHERE TIT_CODE = 'M.;
CLI_PRENOM -----------------Alain Marc Alain Paul Jean Alain Marcel Arsne Andr Daniel
33
Langage SQL
Interroger une base: L'oprateur DISTINCT (ou ALL)
Exemple 2.
SELECT distinct CLI_PRENOM FROM T_CLIENT WHERE TIT_CODE = 'M.; CLI_PRENOM -----------------Alain Marc Paul Jean Marcel Arsne Andr Daniel
34 Langage SQL
Interroger une base: L'oprateur AS
L oprateur AS sert donner un nom de
nouvelles colonnes cres par la requte. On peut rajouter autant de colonnes quon le dsire en utilisant le mot clef AS. Exemple SELECT CLI_NOM as NOM, 'homme' as SEXE FROM T_CLIENT WHERE TIT_CODE = 'M.'
35
Langage SQL
Interroger une base: L'oprateur AS
NOM -----------DUPONT MARTIN BOUVIER DUBOIS DREYFUS FAURE PAUL DUVAL PHILIPPE CHABAUD
36 Langage SQL
SEXE ------------homme homme homme homme homme homme homme homme homme homme
Interroger une base: L'oprateur arithmtique
On, peut utiliser les oprateurs mathmatiques
de base pour combiner diffrentes colonnes (+,-, *, /). Exemple SELECT CHB_ID, TRF_CHB_PRIX * 1.206 AS TARIF_TTC FROM TJ_TRF_CHB WHERE TRF_DATE_DEBUT = '2001-01-01;
37
Langage SQL
Interroger une base: L'oprateur de concatnation
L'oprateur || (double barre verticale) permet de concatner des
champs de type caractres. Exemple SELECT TIT_CODE || ' ' || CLI_PRENOM || ' ' || CLI_NOM AS NOM FROM T_CLIENT WHERE TIT_CODE =M; NOM ----------------------M. Alain DUPONT M. Marc MARTIN M. Alain BOUVIER M. Paul DUBOIS M. Jean DREYFUS M. Alain FAURE
Langage SQL
38
Interroger une base: Utilisation du
caractre double quotte (guillemet)
Imaginons une table de nom JOIN, compose
des champs suivants : NOM SELECT DATE NOT ------- - ---------- ------------DURAND Oui 1999-11-12 F DUVAL Non 1998-01-17 M
nous dsirons slectionner les colonnes SELECT
et DATE lorsque la colonne NOT vaut F
39 Langage SQL
Interroger une base: Utilisation du caractre double quotte (guillemet)
Attention!: Linstruction suivante nest pas juste
SELECT SELECT, DATE FROM JOIN WHERE NOT = 'F;
On doit entourer les mots clefs du SQL par des
doubles quottes SELECT "SELECT", "DATE" FROM "JOIN" WHERE "NOT" = 'F;
40 Langage SQL
Interroger une base: La clause ORDER BY
La clause ORDER BY permet de dfinir le tri des
colonnes de rsultat, soit en prcisant le nom littral de la colonne, soit en prcisant son n d'ordre dans l'numration qui suit le mot clef SELECT. ASC spcifie lordre ascendant et DESC lordre descendant du tri. par dfaut, c'est l'ordre ascendant qui est utilis. le tri est un tri interne sur le rsultat final de la requte, il ne faut donc placer dans cette clause que les noms des colonnes prsentes dans la clause SELECT.
41
Langage SQL
Interroger une base: La clause ORDER BY
SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT ORDER BY CLI_NOM, CLI_PRENOM Ou SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT ORDER BY 1, 2
42 Langage SQL
Interroger une base: La clause ORDER BY
CLI_NOM ------------AIACH ALBERT AUZENAT BACQUE BAILLY BAVEREL BEAUNEE BENATTAR BENATTAR BENZAQUI
43 Langage SQL
CLI_PRENOM ------------------Alexandre Christian Michel Michel Jean-Franois Frdric Pierre Bernard Pierre Jol
Interroger une base: La clause WHERE
Syntaxe
WHERE prdicats Le prdicat doit contenir nimporte quelle expression logique renvoyant une valeur vrai. Dans la clause WHERE, on dispose de diffrents oprateurs de comparaisons logiques : WHERE valeur1 [NOT et] = ou < ou <= ou > ou >= ou <>valeur2 [OR ou AND ...]
44
Langage SQL
Interroger une base: La clause WHERE
Exemple:
SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE CLI_NOM >= 'A' AND CLI_NOM <'E' ou SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE (CLI_NOM >= 'A') AND (CLI_NOM <'E') Cet exemple affiche les clients dont le nom commence par A, B ou C
45
Langage SQL
Interroger une base: Loprateur IN
L'oprateur IN permet de rechercher si une valeur
se trouve dans un ensemble donn. Exemple: SELECT TIT_CODE, CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE TIT_CODE IN ('Mme.', 'Melle.') On recherche les clients de sexe fminin, bass sur le code titre.
46
Langage SQL
Interroger une base: Loprateur IN
TIT_CODE -------------Mme. Mme. Melle. Mme. Melle. Mme. CLI_NOM ------------BOYER GALLACIER HESS LETERRIER MARTINET DAVID CLI_PRENOM -----------------Martine Nolle Lucette Monique Carmen Jacqueline
47
Langage SQL
Interroger une base: Loprateur BETWEEN
L'oprateur BETWEEN permet de rechercher si
une valeur se trouve dans un intervalle donn, Exemple SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE CLI_NOM BETWEEN 'A' AND 'E'
48
Langage SQL
Interroger une base :Oprateur LIKE
L'oprateur LIKE permet deffectuer une
comparaison partielle utilise les le caractre gnrique % pour remplacer nimporte quelle chaine de caractre. utilise les le caractre gnrique _ (Blanc soulign) pour remplacer un seul caractre. loprateur LIKE effectue une recherche en tenant compte de la diffrence entre lettres majuscules et minuscules
49
Langage SQL
Interroger une base :Oprateur LIKE
Exemple
SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT WHERE CLI_NOM LIKE 'B%
Cette requtte affiche les clients dont le nom
commence par B
50
Langage SQL
Interroger une base :Oprateur LIKE
Traitement de caractre gnrique
SELECT * FROM T_CLIENT WHERE CLI_ENSEIGNE LIKE '%_% Affiche toute la table
51
Langage SQL
Interroger une base :Oprateur LIKE
SELECT * FROM T_CLIENT WHERE CLI_ENSEIGNE LIKE '%#_%' ESCAPE '# Affiche seulement les clients dont l'enseigne contient au moins un caractre blanc soulign # est dfini comme caractre dchappement. Le caractre qui suit ce caractre dchappement est donc interprt comme un caractre et non comme un joker.
52 Langage SQL
Rsum des oprateurs pour les prdicats de la clause WHE
oprateurs de comparaisons: = <> < <= > >= connecteurs logiques: {OR | AND} oprateur de ngation : NOT Parenthses: ( ... ) oprateurs mathmatiques: +-*/ comparaison logique : IS [NOT] {TRUE | FALSE | UNKNOWN} comparaison avec valeur: IS [NOT] NULL intervalle valeur : BETWEEN borne_basse AND borne_haute comparaison partielle de chane de caractres: valeur LIKE motif [ESCAPE echappement] comparaison une liste de valeurs: valeur [NOT] IN (liste)
53
Langage SQL
Interroger une base :Oprateurs statistiques
Il est possible de raliser des comptages
statistiques sur les colonnes, l'aide des oprateurs: AVG : (moyenne), MAX (maximum), MIN (minimum), SUM (total), COUNT (nombre).
54
Langage SQL
Interroger une base :Oprateurs statistiques
Exemple
SELECT AVG(TRF_CHB_PRIX) as MOYENNE, MAX(TRF_CHB_PRIX) as MAXI, MIN(TRF_CHB_PRIX) as MINI, SUM(TRF_CHB_PRIX) as TOTAL, COUNT(TRF_CHB_PRIX) as NOMBRE FROM TJ_TRF_CHB WHERE TRF_DATE_DEBUT = '2001-01-01 MOYENNE MAXI MINI --------------- -------- -------406,74 512,00 352,00
55 Langage SQL
TOTAL ----------7 728,00
NOMBRE -------------19
Interroger une base: La clause GROUP BY
La clause BROUP BY groupe les lignes
slectionnes en se basant sur la valeur de colonnes spcifies pour chaque ligne et renvoie une seule ligne par groupe. Exemple : Cherchons compter le nombre de clients par ville.
56
Langage SQL
Interroger une base: La clause GROUP BY
Syntaxe:
SELECT COUNT(*) AS NOMBRE, ville FROM T_Client GROUP BY Ville; Exemple daffichage NOMBRE Ville 20 Casa 10 Fs 11 Oujda 3 Tanger
57 Langage SQL
Interroger une base: La clause GROUP BY
Exemple: nous cherchons afficher le min, max
et la moyenne des salaires des employs par service: Syntaxe SELECT MIN(salaire), MAX(salaire), AVG(salaire) FROM employe GROUP BY service;
58
Langage SQL
Interroger une base: La clause HAVING
La clause HAVING permet de filtrer les oprations
rsultant des regroupements. La clause HAVING est li la clause GROUP BY et ne peut jamais tre utilise toute seule. Exemple: on veut afficher par ville le nombre des cleints qui est inferieur 20.
59
Langage SQL
Interroger une base: La clause HAVING
SELECT COUNT(*) AS NOMBRE, ville FROM T_Client GROUP BY Ville HAVING COUNT(*) <20;
Exemple daffichage
NOMBRE 10 11 3
60 Langage SQL
Ville Fs Oujda Tanger
Interroger une base: LES JOINTURES
Une jointure permet de combiner les colonnes de
plusieurs tables. Il existe diffrentes natures de jointures:
jointure naturelle ou qui-jointure, jointures externe,
jointures htrognes, auto-jointure
Dans ce cours nous nous limitons aux jointures
dites jointures naturelles ou qui-jointures: Ce type de jointures entre tables s'effectuent en imposant l'galit des valeurs d'une colonne d'une table une colonne d'une autre table.
61 Langage SQL
Interroger une base: LES JOINTURES
Une jointure entre tables peut tre mise en
uvre:
soit l'aide des lments de syntaxe SQL dj vu
dans ce cours, soit l'aide d'une clause spcifique du SQL: la clause JOIN.
Nous commenons par voir comment l'aide du
SQL de base nous pouvons exprimer une jointure.
62
Langage SQL
Interroger une base: LES JOINTURES
Exemple 1:
SELECT CLI_NOM, TEL_NUMERO FROM T_CLIENT, T_TELEPHONE Cette requte ne possde pas de critre de jointure entre une table et l'autre. Dans ce cas, le compilateur SQL calcule le produit cartsien des deux ensembles, c'est--dire qu' chaque ligne de la premire table, il accole l'ensemble des lignes de la seconde.
63
Langage SQL
Interroger une base: LES JOINTURES
Exemple daffichage:
CLI_NOM TEL_NUMERO -------------------DUPONT 01-45-42-56-63 DUPONT 01-44-28-52-52 DUPONT 01-44-28-52-50 DUPONT 06-11-86-78-89 DUPONT 02-41-58-89-52 DUPONT 01-51-58-52-50 DUPONT 01-54-11-43-21 DUPONT 06-55-41-42-95 ... Pour DUPOND cette requte a fait correspondre tous les numros de tlphone mme CEUX QUI NE LUI APPARTIENNE PAS
64
Langage SQL
Interroger une base: LES JOINTURES
Critre de jointure:
Dans lexemple prcdent, pour attribuer chaque
nom donn seulement ces numro de tlphone, on crit:
SELECT CLI_NOM, TEL_NUMERO FROM T_CLIENT, T_TELEPHONE WHERE T_CLIENT.CLI_ID = T_TELEPHONE.CLI_ID
T_CLIENT.CLI_ID fait rfrence la colonne
CLI_ID de la table T_CLIENT T_TELEPHONE.CLI_ID fait rfrence la colonne CLI_ID de la table T_TELEPHONE
65 Langage SQL
Interroger une base: LES JOINTURES
Exemple daffichage:
CLI_NOM ------------DUPONT DUPONT DUPONT BOUVIER DUBOIS DREYFUS BOUVIER MARTIN MARTIN
66 Langage SQL
TEL_NUMERO -------------01-45-42-56-63 01-44-28-52-52 01-44-28-52-50 06-11-86-78-89 02-41-58-89-52 01-51-58-52-50 06-55-41-42-95 01-48-98-92-21 01-44-22-56-21
Interroger une base: LES JOINTURES
technique du surnommage : C'est--dire que
l'on attribue un surnom chacune des tables prsente dans la partie FROM du SELECT. Exemple SELECT CLI_NOM, TEL_NUMERO FROM T_CLIENT C, T_TELEPHONE T WHERE C.CLI_ID = T.CLI_ID la table T_CLIENT a t surnomme "C" et la table T_TELEPHONE "T".
67
Langage SQL
Interroger une base: LES JOINTURES
Dans une requte de jointure entre table, on peut
poser des conditions supplmentaires de filtrage dans la clause WHERE. Exemple: SELECT CLI_NOM, TEL_NUMERO FROM T_CLIENT C, T_TELEPHONE T WHERE C.CLI_ID = T.CLI_ID AND TYP_CODE = 'FAX' Cet requte affiche les clients dont les numros de tlphone correspondent un fax.
68 Langage SQL
Interroger une base: loprateur JOIN
Syntaxe normalise des jointures naturelles :
SELECT ... FROM <table gauche> NATURAL JOIN <table droite> [USING <noms de colonnes>] Pour exprimer lexemple prcdent en utilisant loprateur JOIN: SELECT CLI_NOM, TEL_NUMERO FROM T_CLIENT NATURAL JOIN T_TELEPHONE USING (CLI_ID)
69 Langage SQL
LES VUES
Une vue est une perceprion logique sur les
donnes dune ou plusieur tables. Les vues sont definit pour:
Fournir un niveau de securit supplimentaire sur les
donnes dune table. Cacher une certaine complixit des donnes. Une vue peut etre dfinie partir de plusieurs jointures sur des tables diffrentes.
70
Langage SQL
LES VUES
Simplifier la complexit de la requte. Prsenter les donnes de la table sous forme de
diffrente perspectives sans modifier la definition de la tables Sauvegarder dune faon indirecte des requtes complexes.
71
Langage SQL
LES VUES
Syntaxe de cration dune vue:
CREATE VIEW nom_vue [ ( nom_col1, [, nom_col2 ... ] ) ] AS requte_select [WITH CHECK OPTIONS]
La clause WITH CHECK OPTION implique que si
la vue peut tre mise jour, alors les valeurs modifies doivent rpondre la validation de la clause WHERE.
72 Langage SQL
LES VUES
A la diffrence des tables, une vue ne peut tre mise jour
(INSERT, UPDATE, DELETE) que si elle obit un certain nombre de conditions :
ne porter que sur une table (pas de jointure) ne pas contenir de ddoublonnage (pas de mot clef
DISTINCT) si la table n'a pas de clef contenir la clef de la table si la table en a une ne pas transformer les donnes (pas de concatnation, addition de colonne, calcul d'agrgat...) ne pas contenir de clause GROUP BY ou HAVING ne pas contenir de sous requte rpondre au filtre WHERE si la clause WITH CHECK OPTIONS est spcifi lors de la cration de la vue
73
Langage SQL
LES VUES
Exemple
soit la table suivante : CREATE TABLE T_EMPLOYE (EMP_ID INTEGER PRIMARY KEY, EMP_MATRICULE CHAR(8), EMP_TITRE VARCHAR(4), EMP_NOM VARCHAR(32), EMP_PRENOM VARCHAR(32), EMP_DATE_NAIS DATE, EMP_SALAIRE FLOAT, EMP_STATUT CHAR(8), EMP_MAIL VARCHAR(128), EMP_TEL CHAR(16)); Cette table permet de stocker les employs de l'entreprise
74 Langage SQL
LES VUES
pour le syndicat, on pourra dfinir la vue
suivante: CREATE VIEW V_EMP_SYNDICAT AS SELECT EMP_MATRICULE, EMP_TITRE, EMP_NOM, EMP_PRENOM, EMP_DATE_NAIS, EMP_MAIL, EMP_TEL FROM T_EMPLOYE Cette vue ne peut tre mise jour car la clef ne s'y trouve pas
75
Langage SQL
LES VUES
pour le carnet d'adresse on pourra dfinir la vue
suivante: CREATE VIEW V_EMP_ADRESSE AS SELECT EMP_ID, EMP_TITRE || ' ' || EMP_PRENOM || ' ' || EMP_NOM AS EMP_NOM_COMPLET, EMP_MAIL, EMP_TEL FROM T_EMPLOYE Cette vue ne peut tre mise jour cause des transformation de donnes (concatnation au niveau du nom)
76 Langage SQL
LES VUES
Pour le service comptable, on pourra dfinir la
vue suivante : CREATE VIEW V_EMP_COMPTABLE AS SELECT EMP_ID, EMP_PRENOM, EMP_NOM, EMP_SALAIRE FROM T_EMPLOYE WHERE STATUT = OUVRIER' WITH CHECK OPTIONS elle pourra tre mis jour uniquement pour les salaris de type ' OUVRIER '
77 Langage SQL
LES VUES
Par exemple, dans le cadre de la vue pour le
service comptable, il n'est pas possible de faire : UPDATE V_EMP_COMPTABLE SET EMP_SALAIRE = EMP_SALAIRE + 100 WHERE STATUT = 'CADRE'
78
Langage SQL
LES VUES
Suppression dune vue.
DROP VIEW nom_vue;
Exemple
DROP VIEW V_EMP_COMPTABLE;
79
Langage SQL
LES INDEX
Les index sont des objets crs sur une table
permettant laccs rapide linformation. Les index peuvent tre crer sur une ou plusieurs colonnes.
80
Langage SQL
LES INDEX
Cration dun index
CREATE INDEX index ON table (colonne [ASC, DESC], colonne [ASC, DESC],.) Exemple: CREATE INDEX ind_client ON Client (nom DESC, ville);
81
Langage SQL
LES INDEX
Suppression dindex
DROP INDEX index; Exemple DROP INDEX ind_client;
82
Langage SQL