Copie de Langage SQL
Copie de Langage SQL
Copie de Langage SQL
Introduction
SQL signifie Structured Query Language c'est--
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
des donnes
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
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
Contraintes de colonne
[CONSTRAINT contrainte] { [NOT] NULL UNIQUE | PRIMARY KEY REFERENCES table [colonne] [ON DELETE CASCADE] CHECK (condition) }
Langage SQL
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
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
CREATE TABLE commande( Numcom NUMBER, Idarticle NUMBER CONSTRAINT fk_idr REFERENCE article(idarticle), Datecom DATE);
12
Langage SQL
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
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
remplir avec des donnes provenant dune requte SELECT CREATE TABLE nom [(col1, col2, .)] AS SELECT
15
Langage SQL
16
Langage SQL
ALTER TABLE nom_table ADD ([nom_colonne type [contrainte.]]) MODIFY ([nom_colonne type ]]) DROP {PRIMARY KEY |UN IQUE |CONSTRAINT contrainte [CASCADE] }
17 Langage SQL
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
19
Langage SQL
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
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
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
provenant dune autre table Exemple INSERT INTO client_par SELECT idclient, nom, adresse, codepost,tel FROM client WHERE ville=Oujda
25
Langage SQL
UPDATE client SET (adresse, ville, codepost, tel)=(SELECT adr, ville, code, tel FROM client_par WHERE idc=16) WHERE idclient = 16;
27
Langage SQL
ligne dune table. Syntaxe DELETE FROM nom_table [WHERE prdicat]; Exemple DELETE FROM client WHERE ville=Oujda
28
Langage SQL
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
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
31
Langage SQL
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
CLI_PRENOM -----------------Alain Marc Alain Paul Jean Alain Marcel Arsne Andr Daniel
33
Langage SQL
SELECT distinct CLI_PRENOM FROM T_CLIENT WHERE TIT_CODE = 'M.; CLI_PRENOM -----------------Alain Marc Paul Jean Marcel Arsne Andr Daniel
34 Langage SQL
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
SEXE ------------homme homme homme homme homme homme homme homme homme homme
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
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
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
doubles quottes SELECT "SELECT", "DATE" FROM "JOIN" WHERE "NOT" = 'F;
40 Langage SQL
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
CLI_PRENOM ------------------Alexandre Christian Michel Michel Jean-Franois Frdric Pierre Bernard Pierre Jol
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
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
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
47
Langage SQL
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
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
commence par B
50
Langage SQL
SELECT * FROM T_CLIENT WHERE CLI_ENSEIGNE LIKE '%_% Affiche toute la table
51
Langage SQL
52 Langage SQL
53
Langage SQL
statistiques sur les colonnes, l'aide des oprateurs: AVG : (moyenne), MAX (maximum), MIN (minimum), SUM (total), COUNT (nombre).
54
Langage SQL
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
NOMBRE -------------19
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
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
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
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
NOMBRE 10 11 3
60 Langage SQL
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
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
62
Langage SQL
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
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
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
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
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
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
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 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
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.
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
82
Langage SQL