Вы находитесь на странице: 1из 34

Chapitre 5 : Prsentation gnrale DE SQL

181

CHAPITRE 5 : Prsentation gnrale de SQL 1. Introduction


Le langage SQL (Structured Query Language) est issu des travaux mens par IBM autour du langage prototype SEQUEL (Semi Query Language) pour le SGBD Systme R. Aujourd'hui SQL est devenu un standard (normalis par l'ANSI depuis 1986) disponible sur presque tous les SGBD relationnels (DB2, ORACLE, INFORMIX,...). Certains SGBD tel que INGRES offrent mme deux types de langages, l'un algbrique (SQL) et l'autre prdicatif (QUEL). Contrairement ce quon pourrait penser, SQL nest pas simplement un langage de requte ou dinterrogation dune base de donnes relationnelle. Il supporte aussi bien les fonctions de description de donnes que celles de manipulation de donnes. La liste suivante permet de donner une ide sur les oprations qui peuvent tre ralises avec SQL : Crer le schma de la base(Crer , supprimer une table ou un index, etc.) Modifier le schma de la base (ajouter une nouvelle table, modifier le format dune colonne, etc.) Interroger la base de donnes Dfinir des vues sur la base de donnes Spcifier les droits daccs dun utilisateur vis vis des objets de la base (relations et vues) Mettre en place un mcanisme de contrle dintgrit des donnes Invoquer les commandes partir dun langage de programmation (Embedded SQL)

Nous allons prsenter la philosophie du langage en matire dinterrogation de la base de donnes en vue dexpliquer comment se fait la mise en uvre des oprateurs de lalgbre relationnel dans SQL. Il faut ds lors souligner que notre objectif nest ni de vous enseigner la pratique de SQL, car il y a dautres ouvrages pour a, ni de vous convaincre de lutiliser parce que tout le monde en parle et que presque tous les soit disant SGBD sur PC proposent une interface de type de SQL.

2. Requte en SQL 2.1 Structure dune requte


Une requte dinterrogation en SQL est compose de trois clauses : SELECT , FROM et WHERE ayant chacune le rle suivant : SELECT : Cette clause correspond lopration de projection de lalgbre relationnelle. Elle est utilise pour lister les attributs devant figurer dans le rsultat dune requte. Cette clause correspond lopration de produit cartsien de lalgbre relationnelle. Elle est utilise pour spcifier la liste des relations devant tre utilises pour valuer lexpression. Cette clause correspond la condition ou qualification utilise avec lopration de slection de lalgbre relationnelle. Elle permet de spcifier une condition faisant intervenir des attributs appartenant aux relations figurant dans la clause FROM.

FROM :

WHERE :

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

182

2.2 Remarque importante :


Le terme SELECT utilis dans une requte SQL na rien voir avec celui utilis dans lopration de slection de lalgbre relationnelle note elle aussi par Select ou . Dans la suite du texte nous utiliserons une notation en majuscules SELECT pour dsigner la slection dans une requte SQL et une notation en minuscules pour faire rfrence lopration algbrique de slection Select. Une requte SQL aura donc la forme suivante : SELECT FROM WHERE A1 , A2 , ......., An R1 , R2 , ......, Rm C

O chaque Ai reprsente un attribut, chaque Ri reprsente une relation et C reprsente une condition ou une qualification. Une telle requte est quivalente lexpression de lalgbre relationnelle suivante : A1 , A2 , ......., An (C (R1 x R2 x ......x Rm)) Ainsi, on peut dire que lvaluation de la requte va consister calculer le produit cartsien entre les relations Ri figurant dans la clause FROM, puis appliquer au rsultat obtenu lopration de slection C de lalgbre relationnelle en utilisant la condition C figurant dans la clause WHERE, et enfin appliquer au rsultat obtenu lopration de projection A1 , A2 , ......., An de lalgbre relationnelle en utilisant la liste des attributs Ai figurant dans la clause SELECT de la requte. Nanmoins, il faut souligner que ce schma dvaluation est trop simpliste car dans la pratique, le SGBD peut tre amen convertir une requte en une autre requte quivalente mais plus performante en terme de temps dexcution et ce en utilisant les proprits des oprateurs de lalgbre relationnelle. Afin de bien illustrer les possibilits de SQL en matire dinterrogation dune base de donnes relationnelle, nous allons nous servir du schma relationnel suivant : EMPLOYES (Num_Emp, Nom_Emp, Fonction, Salaire, Prime, Num_Resp , Num_Dept) DEPARTEMENTS (Num_Dept, Nom_Dept , Ville) La signification des attributs de la relation EMPLOYES est la suivante : Num_Emp Nom_Emp Fonction Salaire Prime Num_Resp Num_Dept : numro de lemploy : nom de lemploy : fonction de lemploy : salaire de lemploy : montant de la prime que peroit lemploy : numro du responsable de lemploy : numro du dpartement dans lequel travaille lemploy

La signification des attributs de la relation DEPARTEMENTS est la suivante : Num_Dept Nom_Dept Ville : numro du dpartement : nom du dpartement : nom de la ville ou se trouve le dpartement

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

183

et nous considrerons les extensions suivantes : Num_Dept 10 20 30 40 Nom_Dept Comptabilit Recherches Ventes Fabrication Ville Batna Batna Alger Oran

Relation DEPARTEMENTS Num_Emp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Nom_Emp Ali Rachid Kamel Omar Brahim Farouk Lyes Tahar Malik Louisa Fatma Nadia Ahmed Kader Fonction Ingnieur Vendeur Vendeur Directeur Vendeur Directeur Directeur Analyste Prsident Vendeur Ingnieur Ingnieur Analyste Ingnieur Num-Resp 13 6 6 9 6 9 9 4 6 8 6 4 7 Salaire 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 Prime 300 500 1400 Num_Dept 20 30 30 20 30 30 10 20 10 30 20 30 20 10

Relation EMPLOYES Les cases vides traduisent le fait que la valeur de lattribut est indfinie pour lemploy correspondant. Ce sont justement ce que nous avons appel dans le chapitre 3 des valeurs NULL. Une valeur NULL ne signifie pas une valeur gale a zro bien que SQL offre des possibilits pour convertir une valeur NULL en une autre valeur numrique (par exemple en 0 ) dans les expressions de calcul utilisables dans une requte.

3. Expression de la projection avec SQL


Une projection consiste extraire des colonnes (attributs) spcifiques d'une relation puis liminer les tuples en double pouvant apparatre dans la relation rsultat. Cette opration s'exprime a l'aide de SQL par la clause : SELECT liste d'attributs FROM nom de relation En pratique, SQL n'limine pas les tuples en double car ces tuples ne gnent pas l'utilisateur et leur limination implicite par SQL peut entraner une perte de temps. Cependant SQL offre l'utilisateur la possibilit de demander une limination explicite de ces doubles grce a un mot cl du langage qui est : DISTINCT (ou parfois UNIQUE). A ce niveau, il est important de remarquer que lautorisation de la prsence de tuples dupliqus est un inconvnient majeur de SQL est quil nest pas un langage ensembliste puisque ne fournissant pas automatiquement comme rsultat un ensemble. Or nous avons vu que les oprations de lalgbre relationnelle sappliquaient des relations et le rsultat tait aussi une relation. Ceci nest en fait vrai
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

184

que parce que les arguments de ces oprations sont supposes tre des relations qui sont des ensembles au sens mathmatique du terme cest dire ne contenant pas de tuples dupliqus. Dans le cas o une relation pouvait contenir un tuple en double, beaucoup de proprits des oprateurs de lalgbre relationnelle seraient remises en cause. Q1: Donner les noms de tous les employs et le salaire de chacun d'eux ? SELECT Nom_Emp , Salaire FROM EMPLOYES Q2: Liste de tous les Dpartements dans lesquels travaille au moins un employ? SELECT DISTINCT FROM Num_Dept EMPLOYES

On a rajout le mot cl DISTINCT car le mme numro de Dpartement peut apparatre plusieurs fois dans le rsultat du fait que plusieurs Employs diffrents peuvent travailler dans un mme dpartement. Q3: Lister tous les tuples de la relation DEPARTEMENTS ? SELECT Num_Dept , Nom_Dept , Ville FROM DEPARTEMENTS On voit que la liste des attributs aprs la clause SELECT inclut tous les attributs de la relation DEPARTEMENTS. Pour simplifier lcriture dune telle requte, SQL permet de les formuler comme suit : SELECT * FROM DEPARTEMENTS ou le SELECT * signifie : " Slectionner tous les attributs de la relation DEPARTEMENTS "

4. Expression de la slection avec SQL


Lopration algbrique de slection s'exprime dans SQL par un bloc du type : SELECT liste d'attributs FROM nom de relation WHERE condition Q4: Quels sont les employs travaillant dans le dpartement numro 10 SELECT * FROM EMPLOYES WHERE Num_Dept = 10 Avec cette requte, on aura comme rsultat une relation ayant le mme schma que la relation EMPLOYES (i.e. mmes attributs) et contenant tous les tuples de la relation EMPLOYES pour lesquels l'attribut Num_Dept a pour valeur 10.

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

185

Q5: Quels sont les numros et les noms des employs travaillant dans le dpartement numro 10 ? SELECT Num_Emp, Nom_Emp FROM EMPLOYES WHERE Num_Dept = 10 Le rsultat de cette requte est identique a celui de la question Q4 sauf qu'ici on aura uniquement une relation forme de deux colonnes (attributs) qui sont Num_Emp et Nom_Emp et non pas une relation forme de tous les attributs comme ctait le cas pour Q4 cause de la clause SELECT *. On peut ventuellement ordonner le rsultat dune requte grce la clause ORDER BY. Pour cela, il suffit de spcifier dans cette clause le ou les attributs selon lesquels on dsire ordonner le rsultat ainsi que le critre ascendant ou descendant. La condition de la clause WHERE peut utiliser les oprateurs tels que: = , > , , < , , != , AND , OR , NOT , BETWEEN , LIKE , IN , ANY, ALL, EXIST, .... } BETWEEN IN LIKE ANY ALL EXIST : Test d'appartenance un intervalle : Test d'appartenance dune valeur un ensemble : Test de ressemblance de chanes de caractres : Comparaison dune valeur une valeur quelconque dun ensemble : Comparaison dune valeur toutes les valeurs dun ensemble : Test dexistence dun tuple dans une relation (Quantificateur existentiel )

Q6:

Quels sont les numros et les noms des employs du dpartement numro 10 et qui ont un salaire suprieur 1000 ? SELECT Num_Emp, Nom_Emp FROM EMPLOYES WHERE Num_Dept = 10 AND Salaire > 1000

Q7:

Quels sont les fonctions exerces par les employs des dpartements 10 et 20 en liminant les tuples en double du rsultat?
(a) : avec IN (b): avec OR Fonction EMPLOYES Num_Dept IN (10 , 20 )
SELECT DISTINCT Fonction FROM EMPLOYES WHERE Num_Dept = 10 OR Num_Dept = 20

SELECT DISTINCT FROM WHERE

Q8:

Quels sont les fonctions dont le salaire est compris entre 2000 et 3000?
(b): avec AND
Fonction EMPLOYES Salaire 2000 AND 3000 SELECT DISTINCT FROM WHERE AND Fonction EMPLOYES Salaire >= 2000 Salaire < = 3000

(a) : avec BETWEEN


SELECT DISTINCT FROM WHERE BETWEEN

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

186

Q9: Quels sont les employs du dpartement numro 10 commence par la lettre B ? SELECT Nom_Emp FROM EMPLOYES WHERE Num_Dept = 10 AND Nom_Emp LIKE B%

dont le nom

Le symbole % reprsente nimporte quelle chane de caractres. Il existe dautres possibilits de comparaisons avec loprateur LIKE. Par exemple, pour rechercher les employs dont le nom se termine par la lettre R , il suffit dutiliser %R comme argument de LIKE. Q10: Quels sont les employs du dpartement numro 10 dont la fonction nest ni Ingnieur ni Analyste ? SELECT FROM WHERE AND Nom_Emp EMPLOYES Num_Dept = 10 NOT (Fonction = Ingnieur OR Fonction = Analyste )

Il est important ce niveau de prciser que la rponse une mme question peut tre obtenue avec une ou plusieurs requtes diffrentes utilisant chacune un ou des oprateur(s) diffrent(s). Il est aussi possible dexprimer en SQL les oprations algbriques UNION, PRODUIT CARTESIEN, JOINTURE , INTERSECTION , DIFFERENCE et DIVISION. Certaines oprations algbriques ne sont pas directement supportes par SQL car ce dernier ne proposant pas un oprateur spcifique pour les exprimer directement. Cependant, il existe toujours une possibilit pour les traduire en termes des oprateurs offerts par le langage. Cest le cas par exemple des oprations algbriques de JOINTURE , DIFFERENCE , INTERSECTION et DIVISION. Nous verrons comment les traduire en fonction des possibilits du langage dans le cas ou ce dernier ne les supporte pas directement.

5. Expression de lunion avec SQL


Lopration dunion algbrique s'exprime dans SQL par un bloc du type : SELECT FROM WHERE UNION SELECT FROM WHERE liste d'attributs nom de relation condition liste d'attributs nom de relation condition

Q11: Quels sont les fonctions exerces par les employs des dpartements 10 et 20 en liminant les tuples en double du rsultat? (mme que Q7)

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

187

(a) : Pas de tuples en double


SELECT FROM WHERE UNION SELECT FROM WHERE Fonction EMPLOYES Num_Dept = 10 Fonction EMPLOYES Num_Dept = 20

(b) : Avec tuples en double


SELECT FROM WHERE UNION ALL SELECT FROM Fonction EMPLOYES Num_Dept = 10 Fonction EMPLOYES Num_Dept = 20

WHERE

Par dfaut, lopration dUNION (requte (a) ) limine les tuples en double du rsultat. Si on veut les garder, on doit utiliser UNION ALL (requte (b) ) la place de UNION tout court comme cidessus. Cette question tant la mme que Q7, nous avons vu que dans la requte correspondant Q7, on avait explicitement demand llimination des tuples en double grce au mot cl DISTINCT.

6. Expression du produit cartsien avec SQL


Le produit cartsien entre deux relations est un cas particulier de jointure ou la condition de jointure est absente (i.e. clause WHERE). Par exemple le produit cartsien des relations EMPLOYES et DEPARTEMENTS s'obtient l'aide de la requte suivante : SELECT FROM * EMPLOYES , DEPARTEMENTS

On remarque l'absence de la clause WHERE puisque comme il a t prcis on n'a pas besoin de spcifier une condition pour avoir le produit cartsien. Dans la dfinition de lopration de produit cartsien, nous avons not que cette opration ne peut tre value que si les deux relations navait pas dattributs en commun. Dans le cas o les deux relations avaient des attributs en commun (cest dire ayant les mme noms), il fallait dabord les renommer pour tre mme de calculer le produit cartsien de ces relations. Or dans notre exemple, les relations EMPLOYES et DEPARTEMENTS ont un attribut en commun savoir Num_Dept. et pourtant nous ne lavons pas renomm dans une de ces relations avant de calculer le produit cartsien. Ceci est d au fait quavec SQL le renommage nest pas ncessaire puisque ce dernier prfixe automatiquement un attribut avec le nom de sa relation selon la notation pointe Nom_de_Relation.Nom_Attribut. Ainsi le nom effectif de lattribut Num_Dept de la relation EMPLOYES est EMPLOYES.Num_Dept et celui de la relation DEPARTEMENTS est DEPARTEMENTS. Num_Dept ce qui vite tout problme dambigut. Il est aussi tout fait possible de prfixer dans une requte un attribut apparaissant dans une clause SELECT ou une clause WHERE avec le nom de sa relation comme dans la requte suivante (mme que Q6) : SELECT FROM WHERE EMPLOYES.Num_Emp, EMPLOYES.Nom_Emp EMPLOYES Num_Dept = 10 AND Salaire > 1000

Bien que cette criture soit juste, aucun problme dambigut ne se pose dans cet exemple puisque on est sr que les attributs Num_Emp et Nom_Emp appartiennent la relation EMPLOYES. Le prfixage nest donc pas ncessaire. Nanmoins, dans certaines requtes, surtout celles mettant en jeu
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

188

les jointures, on sera trs souvent amen utiliser cette notation afin de lever toute ambigut dans la dsignation des attributs.

7. Expression de lintersection avec SQL


On sait que cette opration a comme arguments deux relations et donne comme rsultat une relation contenant l'ensemble des tuples qui appartiennent en mme temps la premire relation et la deuxime. Un exemple de question illustrant cette opration est : Q12: Quels sont les numros des dpartements dans lesquels travaillent des VENDEURS et des 'INGENIEURS'. SELECT FROM WHERE INTERSECT SELECT FROM WHERE Num_Dept EMPOYES Fonction ='VENDEUR' Num_Dept EMPOYES Fonction ='INGENIEUR'

8. Expression de la diffrence avec SQL


On sait que cette opration a comme arguments deux relations et donne comme rsultat une relation contenant l'ensemble des tuples appartenant la premire relation mais pas la deuxime. Un exemple de question illustrant cette opration est: Q13: Quels sont les numros des dpartements dans lesquels travaillent des 'VENDEURS' mais pas des 'INGENIEURS' ? SELECT FROM WHERE MINUS SELECT FROM WHERE Num_Dept EMPOYES Fonction ='VENDEUR' Num_Dept EMPOYES Fonction ='INGENIEUR'

Si on se rfre la dfinition de l'opration algbrique R-S, on remarque que la premire relation R correspond au le rsultat de la sous-requte : SELECT FROM WHERE Num_Dept DEPARTEMENT Fonction ='VENDEUR'

qui contiendra les numros de tous les dpartements dans lesquels travaille au moins un employ ayant pour fonction VENDEUR alors que la deuxime relation S correspond au rsultat de la sousrequte : SELECT FROM WHERE Num_Dept DEPARTEMENT Fonction ='INGENIEUR'

qui contiendra les numros de tous les dpartements dans lesquels travaille au moins un employ ayant pour fonction INGENIEUR.
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

189

Daprs la dfinition de lopration MINUS, le rsultat sera l'ensemble des tuples appartenant R mais pas S. Donc si un mme dpartement possde au moins un employ ayant pour fonction VENDEUR (figure dans R) et possde aussi au moins un employ ayant pour fonction INGENIEUR (figure aussi dans S) alors ce dpartement ne figurera pas dans le rsultat de R-S, ce qui rpond bien la question.

9. Expression des jointures avec SQL


9.1 Jointure avec qualification
SQL noffre pas une opration spcifique pour exprimer la jointure avec qualification ou avec condition. Comme cette opration algbrique est une opration complmentaire, elle peut s'exprimer en fonction des oprations de algbriques de base savoir : la slection et le produit cartsien. On sait que : JOIN C (R,S) = Select C (R x S) ou C reprsente la condition ou qualification de jointure faisant intervenir des oprateurs de comparaison. SQL noffre pas un opration spcifique pour exprimer la jointure. Il faudra donc lexprimer comme une slection selon une condition sur le produit cartsien des relations R et S . Q14: Quels sont les numros et les noms des employs qui travaillent BATNA ? SELECT Num_Emp , Nom_Emp FROM EMPLOYES , DEPARTEMENTS WHERE EMPLOYESNum_Dept=DEPARTEMENTSNum_Dept AND Ville = 'BATNA' Une reprsentation graphique de lexpression algbrique permettant de rpondre cette question serait :
Num_Emp , Nom_Emp

Correspond au SELECT de la requete SQL

Correspond au WHERE de la requete SQL

X
EMPLOYES o la condition C est : DEPARTEMENTS

Correspond au FROM de la requete SQL

EMPLOYESNum_Dept=DEPARTEMENTSNum_Dept Ville = 'BATNA'

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

190

Q15:

Quels sont les noms ,les fonctions et les salaires des employs du dpartement RECHERCHES dont le salaire est suprieur 1000 ? SELECT Nom_Emp , Fonction , Salaire FROM EMPLOYES , DEPARTEMENTS WHERE EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept AND Nom_Dept = 'RECHERCHE' AND Salaire > 1000

On remarque que le prfixage dun attribut avec le nom de sa relation nest utilis que pour Num_Dept qui est commun aux deux relations participant dans la jointure. La condition spcifie dans la clause WHERE correspond la condition de jointure C. Il est galement possible d'imbriquer des blocs : SELECT ... FROM ...WHERE .. plusieurs niveaux. Q16: Quels sont les noms et les fonctions des employs travaillant BATNA et ayant la mme fonction que lemploy AHMED ? Cette jointure peut s'exprimer sous forme de blocs SELECT imbriqus. SELECT Nom_Emp , Fonction FROM EMPLOYES , DEPARTEMENTS WHERE Ville = 'BATNA' AND EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept AND Fonction IN ( SELECT Fonction FROM EMPLOYES WHERE Nom_Emp = 'AHMED' )

9.2 Jointure Naturelle


SQL noffre pas une opration spcifique pour exprimer la jointure naturelle. Il faudra l aussi traduire en utilisant lexpression de la jointure naturelle en fonction des oprations algbriques de slection , projection et produit cartsien et qui est : JOIN (R,S) = V ( C (R x S) ) ou v est gal l'union des attributs de R et des attributs de S n'appartenant pas R , et la condition C : R.A1=S.A1 /\ R.A2=S.A2 /\...... /\ R.Ak=S.Ak avec (A1,A2,.....AK) les attributs communs R et S. Lexpression de la jointure naturelle entre les relations EMPLOYES et DEPARTEMENTS qui ont un seul attribut peut scrire : V ( C (EMPLOYES X DEPARTEMENTS) ) o : V = (Num_Emp,Nom_Emp,Salaire, Fonction, Prime, Num_Dept,Nom_Dept,Ville) et la condition de slection C est : EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept do la requte SQL quivalente : SELECT FROM WHERE Num_Emp,Nom_Emp,Salaire, Fonction, Prime, Num_Dept,Nom_Dept,Ville EMPLOYES , DEPARTEMENTS EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

191

Il nest pas obligatoire de spcifier tous les attributs apparaissant dans la clause SELECT de la requte ci-dessus car SQL ignore quil sagit dune jointure naturelle. On peut mme ne spcifier dans la clause SELECT quun sous ensemble dattributs de la liste V seulement. Dans le cas o on utilise un SELECT * , on aura comme rsultat une relation ayant pour schma lunion des attributs de X1 et X2 (mme schma que la relation rsultant du produit cartsien X1 x X2 ) cest dire tous les attributs de X1 plus tous les attributs de X2 indpendamment du fait que X1 et X2 ont les mmes attributs. Rappelons que la notation pointe utilise par SQL pour dsigner un attribut X1.nom_Attribut ou X2.nom_Attribut fait que les attributs communs deux relations de la base de donnes possdent au niveau interne de SQL des noms distincts du fait du prfixage et ce mme si au niveau du schma ils ont les mmes noms.

9.3 Equi-Jointure
Cette opration nexiste pas aussi dans SQL. Cependant, il est possible de lexprimer de la mme manire que la jointure avec qualification puisque la seule diffrence est que dans lqui-jointure l'oprateur de comparaison utilis dans la condition de jointure est l'oprateur d'galit ( = ).

9.4

Jointure dune relation avec elle mme (Auto-Jointure)

Pour rpondre certaines questions, on peut parfois tre amen faire la jointure d'une table avec elle-mme. Le problme qui se pose alors est comment distinguer les attributs. La solution qui est largement utilise est de dsigner dans la clause FROM de la requte SQL la relation (ou table) par deux noms diffrents appels synonymes. Avec SQL, lassociation dun nom synonyme une table consiste faire suivre le nom de la table par le nom synonyme qui nest autre quun identificateur au sens informatique du terme. Q17: Quels sont les noms et les fonctions des employs ayant un salaire suprieur celui de lemploy dont le nom est 'ALI' SELECT FROM WHERE AND X1.Nom_Emp , X1.Fonction EMPLOYES X1 , EMPLOYES X2 X1.Salaire > X2.Salaire X2.Nomp_Emp = 'ALI'

X1 et X2 sont les noms synonymes dsignant la table EMPLOYES. Cette requte peut tre vue comme une requte ayant pour arguments dans la clause FROM deux tables X1 et X2 ayant le mmes attributs et la mme extension que EMPLOYES. Lvaluation de la requte va consister calculer le produit cartsien entre deux les tables X1 et X2, puis de slectionner les tuples du rsultat pour lesquels la colonne X1.Salaire > X2.Salaire et la colonne X2.Nomp_Emp = 'ALI' . Enfin, on fait une projection sur les colonnes X1.Nom_Emp et X1.Fonction qui sera alors la relation rpondant cette question. Ainsi, le schma de la relation rsultat du produit cartsien X1 x X2 sera : Attributs de X1Num_Emp la Table X1 Attributs de X2Num_Emp . .
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

la

Table

X2

X1Nom_Emp X2Salaire .....

X2Nom_Emp X2Salaire

Chapitre 5 : Prsentation gnrale DE SQL

192

Aprs slection des lignes ou tuples satisfaisant la condition : X1Salaire > X2Salaire AND X2Nomp_Emp = 'ALI' , la projection permet de retenir les colonnes X1Nom_Emp et X1Fonction Un autre exemple dauto-jointure est : Q18: Quels sont les noms des employs ayant le mme responsable ? SELECT EMP1Nom_Emp , EMP2Nom_Emp FROM EMPLOYES EMP1 , EMPLOYES EMP2 WHERE EMP1Num_Resp = EMP2Num_Resp Dans cette requte EMP1 et EMP2 sont les noms synonymes de la table EMPLOYES. Les tapes dvaluation de la requte sont les mmes que celles de Q14. Cependant, il faut remarquer ici que dans le rsultat on peut avoir des tuples en double et des tuples symtriques traduisant les situations qui suivent : Dans notre exemple, les employs Tahar et Ahmed ont le mme responsable (Num_Resp = 4 qui correspond lemploy Omar). Dans le rsultat de notre requte, on aura une relation ayant deux attributs et contenant parmi ses tuples les suivants : EMP1Nom_Emp Tahar Tahar Ahmed Ahmed EMP2Nom_Emp Tahar Ahmed Ahmed Tahar

Les tuples 2 et 4 traduisent la mme information : Tahar et Ahmed ont le mme responsable. Il faudrait donc ne garder quun seul de ces deux tuples. Les tuples 1 et 3 traduisent le fait que tout employ a le mme responsable que lui-mme. Ils napportent aucune information et doivent tre limins du rsultat. Pour traiter ces cas il suffit de rajouter dans la clause WHERE une condition supplmentaire : EMP1Nom_Emp < EMP2Nom_Emp (ou > ) SELECT FROM WHERE EMP1Nom_Emp , EMP2Nom_Emp EMPLOYES EMP1 , EMPLOYES EMP2 EMP1Num_Resp = EMP2Num_Resp AND EMP1Nom_Emp < EMP2Nom_Emp

Essayons de voir leffet de cette condition supplmentaire sur le rsultat final. Lapplication de cette condition a lieu au moment de la slection des lignes partir de la relation rsultant du produit cartsien entre EMP1 et EMP2. Voyons quelles sont parmi les lignes qui contenaient dans les colonnes EMP1.Nomp_Emp et EMP2.Nom_Emp les valeurs Tahar et Ahmed celles qui seront retenues par lopration de slection : Tahar nest pas < Tahar : donc la ligne qui contient dans la colonne
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

193

EMP1.Nom_Emp la valeur Tahar et dans la colonne EMP2.Nom_Emp la valeur Tahar aussi ne figurera pas dans la relation rsultat de la slection Tahar nest pas < Ahmed : donc la ligne qui contient dans la colonne EMP1.Nom_Emp la valeur Tahar et dans la colonne EMP2.Nom_Emp la valeur Ahmed ne figurera pas dans la relation rsultat de la slection. Ahmed nest pas < Ahmed : donc la ligne qui contient dans la colonne EMP1.Nom_Emp la valeur Ahmed et dans la colonne EMP2.Nom_Emp la valeur Ahmed aussi ne figurera pas dans la relation rsultat de la slection. Ahmed est < Tahar : donc la ligne qui contient dans la colonne EMP1.Nom_Emp la valeur Ahmed et dans la colonne EMP2.Nom_Emp la valeur Tahar figurera dans la relation rsultat de la slection Donc aprs projection on aura uniquement le tuple (Ahmed,Tahar) dans le rsultat final et correspondant au fait que Tahar et Ahmed ont le mme responsable. Il en sera de mme pour les autres employs ayant le mme responsable.

10. Utilisation des sous-requtes


Le terme sous-requte dsigne toute requte utilise lintrieur dune requte dite principale ou externe. Elle retourne comme toute requte un rsultat qui est une relation qui peut comporter une ou plusieurs colonnes et aussi une seule valeur (une seule ligne), ou un ensemble de valeurs. La sous requte sert en gnral pour comparer un attribut ou un ensemble dattributs de la requte principale au rsultat retourn par la sous requte. Il faut remarquer au passage que les sous requtes peuvent aussi tre utilises dans les oprations dinsertion, de mise jour et de suppression de tuples dans une table.

10.1 Sous-requte retournant une seule valeur


Q19: Quels sont les noms des employs ayant la mme fonction que lemploy OMAR SELECT Nom_Emp FROM EMPLOYES WHERE Fonction = ( SELECT FROM WHERE

Fonction EMPLOYES Nomp_Emp ='OMAR' )

La sous requte doit tre place entre parenthses. Elle est value en premier et va retourner une seule valeur 'DIRECTEUR'. Cette valeur sera utilise pour constituer la condition de slection de la clause WHERE de la requte principale qui sera donc : Fonction = 'DIRECTEUR'. Loprateur de comparaison utilis est celui de lgalit (=) parce quon est sr davance que le rsultat retourn par la sous requte comporte une seule valeur. On aurait pu rpondre cette question en utilisant les deux requtes spares suivantes :

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

194

requte (1) SELECT FROM WHERE Fonction EMPLOYES Nomp_Emp ='OMAR' SELECT FROM WHERE

requte (2) Nom_Emp EMPLOYES Fonction = 'DIRECTEUR'

La requte (1) va retourner : 'DIRECTEUR' . On lutilise alors pour exprimer la requte (2).

10.2 Sous-requte retournant un ensemble de valeurs


Lorsquune sous requte retourne un ensemble de valeurs , il faudra faire prcder loprateur de comparaison (= , != , > , < , <= , >=) de la clause WHERE de la requte principale avec un des mots clefs ANY ou ALL. Q20: Quels sont les noms des employs ayant un salaire suprieur celui dun employ quelconque du dpartement 30 ? SELECT Nom_Emp FROM EMPLOYES WHERE Salaire > ANY ( SELECT FROM WHERE

Salaire EMPLOYES Nump_Dept = 30 )

La sous requte va retourner un ensemble de valeurs reprsentant les salaires du dpartement 30. Pour chaque employ, la requte principale va comparer son salaire avec lensemble des valeurs retournes par la sous requte. Si le salaire est suprieur une valeur quelconque de cet ensemble, cet employ sera inclus dans le rsultat. Exprimez cette requte en utilisant la fonction de groupe MINIMUM Q21: Quels sont les noms des employs ayant un salaire suprieur celui de tous les employs du dpartement 30 ? SELECT Nom_Emp FROM EMPLOYES WHERE Salaire > ALL ( SELECT FROM WHERE

Salaire EMPLOYES Nump_Dept = 30 )

Exprimez cette requte en utilisant la fonction de groupe MAXIMUM On peut dans le cas ou la condition est = ANY , remplacer ce test par loprateur IN. De mme que != ALL peut tre remplacer par NOT IN.

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

195

Q22: Quels sont les noms et les fonctions des employs du dpartement 10 ayant la mme fonction quun employ quelconque du dpartement 30 ? SELECT FROM WHERE AND Nom_Emp , Fonction EMPLOYES Num_Dept = 10 Fonction IN ( SELECT FROM WHERE

Fonction EMPLOYES Nump_Dept = 30 )

10.3 Sous-requte retournant plusieurs colonnes


Une sous requte peut retourner plus dune colonne si la liste des attributs de sa clause SELECT comprend plus dun attribut. Le nombre dattributs de la requte principale comparer avec lensemble des lignes (ou valeurs) retournes par la sous requte doit tre gale au nombre de colonnes retournes par la sous requte. Q23: Quels sont employs ayant le mme salaire et la mme fonction que lemploy Omar ? SELECT FROM WHERE * EMPLOYES (Salaire , Fonction) = ( SELECT FROM WHERE Salaire , Fonction EMPLOYES Nom_Emp = Omar )

Il est aussi possible dutiliser plusieurs sous requtes imbriques et construire ainsi des requtes aussi complexes quon le souhaite. Cest ce qui fait la puissance du langage SQL. Q24: Quels sont les noms et les fonctions des employs ayant la mme fonction que lemploy Omar ou un salaire suprieur ou gal celui de Rachid? SELECT FROM WHERE Nom_Emp , Fonction EMPLOYES Fonction = ( SELECT FROM WHERE OR ( SELECT FROM WHERE Fonction EMPLOYES Nom_Emp = Omar ) Salaire > = Salaire EMPLOYES Nom_Emp = Rachid )

Le nombre autoris de sous requtes imbriques dpend de limplmentation du langage. Par exemple dans le SQL des premires versions du SGBD ORACLE (V3 et V4 datant dj de 19821983) autorisait jusqu 16 sous requtes imbriques en plus de la requte principale.
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

196

10.4 Utilisation des sous requtes dans une Jointure


Une sous requte peut tre aussi utilise dans lexpression dune jointure. Lvaluation de la sous requte dpend de la faon dont on structure la requte qui la contient. Les exemples suivants permettent de donner une ide sur quelques possibilits. Q25: Quels sont les noms, Salaires et fonctions des Alger et ayant la mme fonction que Rachid? SELECT FROM WHERE AND AND employs travaillant

Nom_Emp , Fonction , Salaire EMPLOYES , DEPARTEMENTS Ville = Alger EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept Fonction IN ( SELECT Fonction FROM EMPLOYES WHERE Nom_Emp = Rachid )

Dans cette jointure, la sous requte est excute en premier et fournit comme rsultat un ensemble de valeurs correspondant aux fonction des employs ayant pour nom Rachid. Si on est sr que deux employs ne peuvent pas avoir le mme nom alors le IN peut tre remplac par =. Le rsultat est utilis pour constituer la partie de la condition de jointure : Fonction IN <Ensemble des valeurs retournes par la sous requte>. Dans notre exemple , lensemble retourn par la sous requte tant gal Vendeur, la condition de jointure serait quivalente : Ville = Alger AND EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept AND Fonction IN (Vendeur ) Nous allons voir un autre exemple o lvaluation de la sous requte ne se fait pas en une seule fois indpendamment de la requte principale mais est rpte plusieurs fois en fonction de certaines donnes provenant de la requte principale. Q26: Quels sont les noms et Salaires des employs qui ont un salaire suprieur la moyenne des salaires de leur dpartements? Lobtention dune rponse cette question va ncessiter les tapes suivantes : Parcourir la table EMPLOYES de faon connatre le numro d du dpartement de lemploy et son salaire s Calculer la moyenne md des salaires du dpartement d (dans une sous requte) Tester si le salaire s est > md et si oui inclure lemploy dans le rsultat

Une requte permettant de rpondre cette question serait :

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

197

SELECT Nom_Emp , Salaire FROM EMPLOYES , X WHERE Salaire > ( SELECT FROM WHERE

AVG(Salaire) EMPLOYES XNum_Detp = Num_Dept )

On remarque lutilisation dun nom synonyme X pour la table EMPLOYES dans la clause FROM de la requte principale. X peut tre vu comme une variable qui parcourt les tuples de la relation EMPLOYES apparaissant dans la requte principale. La clause WHERE XNum_Detp = Num_Dept de la sous requte lui permet en quelque sorte de se synchroniser avec la requte principale. Ainsi pour chaque tuple repr par la variable X , la sous requte va calculer la moyenne (fonction AVG : Average qui sera explique dans la suite) des salaires du dpartement ayant le mme numro que celui du tuple repr par X et qui correspond un employ bien sr. Le fait que la sous requte rfrence la mme table EMPLOYES dans sa clause FROM ne gne en aucun cas la requte principale.

11. Autres possibilits d'interrogation de SQL


11.1 Utilisation du prdicat EXISTS
En logique on utilise gnralement les deux quantificateurs (il existe) et (quelque soit) qui sappliquent des propositions selon les deux formes : x P(x) et x P(x) . Dans le premier cas la P(x) est vraie sil existe au moins une valeur de x qui la rend vraie et dans le deuxime cas P(x) est vraie si et seulement si elle est vraie pour toutes les valeurs de x . SQL offre un prdicat qui sappelle EXISTS quivalent du quantificateur existentiel . Il permet de tester si lensemble de valeurs (tuples) retourn par une requte (ou sous requte) est vide ou non. Ce test est valu vrai (TRUE) si lensemble contient au moins une ligne et faux (FALSE) si lensemble retourn est vide. SQL noffre pas de prdicat quivalent du quantificateur . Cependant, ce quantificateur peut tre traduit en utilisant loprateur EXISTS. En effet, Il suffit de remarquer lquivalence entre les deux formules suivantes : x P(x) x P(x) Lutilisation du quantificateur est trs rare dans lexpression des requtes. Il sert surtout pour exprimer lopration algbrique de DIVISION dont la dfinition formelle utilise justement ce quantificateur.

11.2 Expression de la diffrence avec EXISTS


La diffrence entre deux relations peut sexprimer grce a loprateur MINUS dont lutilisation est semblable a celle de lunion entre deux relations. Il est aussi possible dutiliser le prdicat EXISTS pour raliser cette opration. Nous allons illustrer la mise en ouvre de la diffrence laide de la question suivante : Q27: Quels sont les numros des dpartements dans lesquels travaillent des 'VENDEURS' mais pas des 'INGENIEURS' ?
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

198

SELECT FROM WHERE AND

Num_Dept DEPARTEMENT Fonction ='VENDEUR' NOT EXISTS ( SELECT Num_Dept FROM DEPARTEMENT WHERE Fonction ='INGENIEUR' )

11.3 Expression de la division avec EXISTS


On sait que la division dune relation R de schma R(A,B,C) par une relation S de schma S(C) est une relation Q de schma Q(A, B) et telle que : Q = { (a, b) R / (c) S , (a,b,c) R) } Autrement dit, en utilisant lquivalence des formules : x P(x) x P(x) on peut traduire la division comme suit : (a,b) Q si et seulement si il nexiste pas de c S tel quil nexiste pas de (a,b,c) R. Ainsi, la division va se traduire en SQL par lutilisation de deux oprateurs NOT EXITS successifs. Nous allons illustrer la mise en ouvre de la division laide des deux relations suivantes : PROFESSEURS(Num_Prof, Code_Mod) MODULES(Code_Mod , Spcialit) Il sagit de rpondre la question suivante : Q28: Quels sont les numros des enseignants modules de la spcialit INFORMATIQUE? SELECT FROM WHERE qui dispensent TOUS les

DISTINCT (Num_Prof) PROFESSEURS X NOT EXISTS * ( SELECT MODULES FROM MODULES.Spcialit ='INFORMATIQUE' WHERE AND NOT EXISTS ( SELECT * PROFESSEURS FROM MODULESCode_Mod=PROFESSEURSCode_Mod WHERE AND PROFESSEURSNum_Prof = XNum_Prof ) )

12. Les fonctions de groupes


12.1 aperu gnral
SQL offre aussi un certain nombre de fonctions dites fonctions de groupes qui peuvent tre utilises dans l'expression d'une requte. les plus importantes sont :

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

199

AVG SUM COUNT MAX MIN GROUP BY HAVING

: permet de calculer une MOYENNE : permet de calculer une SOMME : permet de compter des tuples : permet de calculer un maximum : permet de calculer un minimum : permet de crer des sous-ensembles de tuples : permet de tester si une condition est vrifie par un groupe de tuples

Nous allons commencer par illustrer laide dexemples comment utiliser les fonctions AVG, MIN , MAX et COUNT puis nous examinerons de plus prs la manipulation des groupes de tuples. Q29: Quels sont les numros et salaires des employs dont le salaire est suprieur 10% de la moyenne des salaires de son dpartement ? Nom_Emp , Salaire EMPLOYES , X Salaire > ( SELECT FROM WHERE

SELECT FROM WHER

AVG(Salaire) * 0.10 EMPLOYES XNum_Detp = Num_Dept )

Q30: Quel est le nom , la fonction et le salaire de(s) lemploy(s) ayant le salaire le plus lev SELECT FROM WHER Nom_Emp , Fonction , Salaire EMPLOYES Salaire = ( SELECT FROM

MAX(Salaire) EMPLOYES)

La sous requte est valu en premier et permet de calculer le salaire maximum des employs. La requte principale va parcourir les lignes de la table EMPLOYES et comparer le salaire de chaque employ avec le rsultat de la sous requte. Sil y a galit, le nom , la fonction et le salaire de cet employ figurera dans le rsultat final. Q31: Quel est le salaire maximum , le salaire minimum et la diffrence entre ces deux valeurs ? SELECT MAX(Salaire) , MIN(Salaire) , MAX(Salaire) - MIN(Salaire) FROM EMPLOYES Q32: Quel est le nombre demploys percevant une prime ? SELECT COUNT(Prime) FROM EMPLOYES Q33: Quel est le nombre de fonctions diffrentes exerces dans le dpartement 30 ? SELECT COUNT(DISTINCT Fonction) FROM EMPLOYES WHERE Num_Dept = 30

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

200

Le mot DISTINCT cl permet de ne compter une mme valeur quune seule fois. Le nombre retourn sera bien le nombre de valeurs diffrentes de lattribut Fonction.

12.2 Manipulation de groupes : la clause GROUP BY


La clause GROUP BY permet de partitionner les tuples dune relation de faon former des groupes de tuples. Chaque groupe de tuples est caractris par le fait que les tuples quil contient possdent les mmes caractristiques. La manipulation des groupes implique donc que les requtes peuvent comporter des clauses WHERE , GROUP BY, des fonctions de groupes (AVG, SUM, MAX, MIN) et HAVING. La clause WHERE est utilise pour slectionner dans une table les lignes (tuples) qui satisfont une condition. Elle ne sapplique donc pas aux groupes. La clause HAVING est utilise pour slectionner dans une table les groupes de lignes (tuples) qui satisfont une condition. Elle ne sapplique donc pas aux lignes et sutilise avec une clause GROUP BY. Dans une requte manipulant des fonctions de groupe, il existe un ordre logique d'excution de la requte et qui est : 1234La clause WHERE est applique en premier pour qualifier les lignes Les groupes de lignes sont forms (GROUP BY) Les fonctions de groupes sont appliques(AVG, MIN , MAX,..) Enfin la clause HAVING est applique pour choisir les groupes rpondant au critre spcifi dans cette clause.

Q34 : Quelle est la moyenne des salaires du dpartement 10 ? SELECT AVG (Salaire) FROM EMPLOYES WHERE Num_Dept = 10 Si on veut connatre la moyenne des salaires des dpartements 20 et 30, il suffit dutiliser la mme requte en remplaant dans la clause WHERE Num_Dept = 10 par Num_Dept = 20 puis par Num_Dept = 30 comme suit : moyenne des salaires du dpartement 20 SELECT FROM WHERE AVG (Salaire) EMPLOYES Num_Dept = 20 moyenne des salaires du dpartement 30 SELECT FROM WHERE AVG (Salaire) EMPLOYES Num_Dept = 30

Au lieu dutiliser 3 requtes spares, on peut obtenir la moyenne des salaires par dpartement avec une seule requte en utilisant une clause GROUP BY comme suit : SELECT FROM GROUP BY Q35: Num_Dept , AVG (Salaire) EMPLOYES Num_Dept

Quels est pour chaque dpartement et chaque fonction le salaire annuel (12 mois) moyen par fonction et le nombre demploys exerant cette fonction?

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

201

SELECT FROM GROUP BY Q36:

Num_Dept, Fonction , Count (*) , AVG (Salaire) * 12 EMPLOYES Num_Dept , Fonction

mme question que mais donner le nom du dpartement au lieu du numro ce qui va ncessiter de faire une jointure ? SELECT FROM WHERE GROUP BY Nom_Dept, Fonction , Count (*) , AVG (Salaire) * 12 EMPLOYES , DEPARTEMENTS EMPLOYESNum_Dept = DEPARTEMENTSNum_Dept Num_Dept , Fonction

Q37:

Quels est pour chaque dpartement le salaire annuel (12 mois) moyen de tous ses employs sauf ceux ayant une fonction de DIRECTEUR ou PRESIDENT? SELECT FROM WHERE GROUP BY Num_Dept, AVG (Salaire) * 12 EMPLOYES Fonction NOT IN (DIRECTEUR , PRESIDENT) Num_Dept

Q38: Quels sont les numros des dpartements ayant plus de 10 employs ? SELECT FROM GROUP BY HAVING Num_Dept EMPLOYES Num_Dept COUNT(*) > 10

Le COUNT(*) compte les tuples des sous-ensembles crs par GROUP BY. Les tuples de chaque sous-ensemble cre ont la mme valeur de l'attribut qui est utilis dans le GROUP BY (c.a.d. ici Num_Dept). Le rsultat de cette requte sera une relation partitionne en groupes de tuples ayant la mme valeur de lattribut Num_Dept. A chacun de ces groupes sera applique la qualification de la clause HAVING c'est a dire COUNT(*) > 10. Si le groupe satisfait la condition (contient plus de 10 tuples), il sera inclut dans le rsultat par le biais de son attribut Num_Dept jouant le rle de dnominateur commun pour les tuples du groupe. Q39: Quelles sont les diffrentes fonctions exerces dans lensemble des dpartements et la moyenne des salaires par fonction ? SELECT FROM GROUP BY Fonction , AVG (Salaire) EMPLOYES Fonction

Q40: Quelles sont les diffrentes fonctions exerces dans lensemble des dpartements dont la moyenne des salaires par fonction est suprieure 10.000 ?

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

202

SELECT FROM GROUP BY HAVING

Fonction , AVG (Salaire) EMPLOYES Fonction AVG (Salaire) > 10.000

Q41:

Quels sont les numros des dpartements au moins deux employs exerant la fonction de Vendeur? SELECT FROM WHERE GROUP BY HAVING Num_Dept EMPLOYES Fonction = Vendeur Num_Dept COUNT(*) > 2

Q42:

Quels sont les numros des dpartements dans lesquels la moyenne des primes est suprieur 10% de la moyenne des salaires? SELECT FROM GROUP BY HAVING Num_Dept , AVG (Salaire) , AVG (Prime) , AVG (Salaire) * 0.10 EMPLOYES Num_Dept AVG (Prime) > AVG (Salaire) * 0.10

Dans la liste des attributs figurant dans une clause SELECT si on a des noms dattributs avec fonctions de groupe (AVG , MAX, MIN , .....), on ne peut pas avoir en mme temps de nom dattribut sans fonction de groupe. Par exemple lcriture suivante serait une erreur : SELECT Nom_Emp , AVG (Salaire)

parce que lattribut Nom_Emp est un attribut ayant une valeur dans chaque ligne alors que AVG (Salaire) reprsente une valeur correspondant un ensemble de lignes qui seront slectionnes. Si on veut combiner dans la liste un attribut sans fonction de groupe avec un autre avec fonction de groupe, on doit utiliser une sous requte.

12.3 Tri du rsultat dune requte : la clause ORDER BY


La clause ORDER BY permet de trier le rsultat retourn par une requte. Lordre peut tre ascendant (ASC) ou descendant (DESC) et sera fonction du type de ou des attributs qui seront spcifis comme arguments de cette clause. Les exemples suivants permettent de donner une ide des possibilits de cette clause.

Q43:

Liste des employs du dpartement 10 par ordre dcroissant de leur salaire? SELECT FROM WHERE ORDER BY Num_Dept , Nom_Emp, Salaire EMPLOYES Num_Dept = 10 Salaire DESC

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

203

Q44:

Liste par ordre alphabtique des employs du dpartement 10? SELECT FROM WHERE ORDER BY Nom_Emp EMPLOYES Num_Dept = 10 Nom_Emp

Il est aussi possible de trier le rsultat retourn par une requte en fonction de plusieurs attributs. Q45: Liste des employs tris selon un ordre alphabtique de leur fonction et a lintrieur de chaque fonction les trier selon un salaire dcroissant. SELECT FROM ORDER BY Nom_Emp, Fonction, Salaire EMPLOYES Fonction ASC, Salaire DESC

Cette requte va entraner dans un premier temps un tri du rsultat par ordre alphabtique selon la fonction des employs. Puis un autre tri sera effectu sur les tuples correspondant aux employs ayant la mme fonction de faon a les arranger selon un ordre dcroissant de leur salaire.

12.4 Requtes impliquant des colonnes contenant NULL


12.4.1 Utilisation de colonnes contenant NULL dans une clause WHERE
Loprateur de comparaison IS NULL (ou IS NOT NULL) permet dexprimer une condition avec une colonne contenant des valeurs NULL.

Q46: Liste des employs nayant pas reu de prime. SELECT FROM WHERE Nom_Emp Ali Omar Farouk Lyes Tahar Malik Fatma Nadia Ahmed Kader Nom_Emp, Salaire, Prime EMPLOYES Prime IS NULL Salaire 800 2975 2850 2450 3000 5000 1100 950 3000 1300 Prime

La condition Prime = NULL nest pas un test valide pour trouver les valeurs NULL. Son utilisation est possible mais retourne un rsultat vide.

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

204

Q47: Liste des employs du dpartement 30 dont la prime est infrieure a 1000. SELECT FROM WHERE Nom_Emp Rachid Kamel Louisa Prime 300 500 0 Nom_Emp, Prime, Num_Dept EMPLOYES Num_Dept = 30 AND Prime < 1000 Num_Dept 30 30 30

On remarque que les employs du dpartement 30 dont la prime est NULL ne sont pas inclus dans le rsultat.

12.4.2 Utilisation de colonnes contenant NULL avec la clause ORDER BY


Quelque soit lordre de tri ascendant (ASC) ou descendant (DESC), si dans une clause ORDER BY lattribut utilis contient des valeurs NULL ou indfinies, les t sera fonction du type de ou des attributs qui seront spcifis comme arguments de cette clause. Les exemples suivants permettent de donner une ide des possibilits de cette clause.

SELECT FROM ORDER BY

Nom_Emp, Salaire, Prime EMPLOYES Prime

Du fait que la colonne Prime contient des valeurs NULL, dans le rsultat les lignes pour lesquelles lattribut Prime a une valeur NULL apparatront en premier suivies de celles pour lesquelles Prime nest pas NULL et qui seront alors tries par ordre croissant des primes.

Nom_Emp Ali Omar Farouk Lyes Tahar Malik Fatma Nadia Ahmed Kader Louisa Rachid Kamel Brahim

Salaire 800 2975 2850 2450 3000 5000 1100 950 3000 1300 1500 1600 1250 1250

Prime

0 300 500 1400

13. La description des donnes avec SQL


SQL offre un certain nombre de commandes pour crer des tables et pour modifier leurs structures. Les principales commandes sont :

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

205

CREATE TABLE ALTER TABLE DROP TABLE

: ajouter une table la B.D. : modifier une colonne ou ajouter une nouvelle colonne une table : supprimer une table

13.1 Cration de tables : La commande CREATE TABLE


Pour crer une table on spcifie le nom de la table, les noms des colonnes ainsi que le type des donnes de chaque colonne. Un nom de table ou de colonne (attribut) est un identificateur au sens informatique du terme et obit en gnral aux rgles syntaxiques de construction dun identificateur (i.e. commencer par un caractre alphabtique, etc.). Les Types de donnes possibles pour un attribut sont varis. Nous donnons ci-dessous des exemples inspirs du SGBD ORACLE : CHAR NUMBER DATE : caractres : chiffre de 0 9,signe et point dcimal : date (MM-JJ-AA)

On peut aussi spcifier la longueur maximal d'un champ (CHAR ou NUMBER). Exemple: CHAR(12) NUMBER(4) NUMBER(7,2) : maximum 12 caractres : 4 chiffres au maximum : maximum 7 chiffres dont 2 droite du point dcimal

La spcification de la longueur maximale d'un champ permet au SGBD de contrler si une valeur ajoute dans la colonne ne dpassera pas ce maximum. Pour spcifier qu'une colonne ne doit pas contenir de valeurs NULL (ou indfinies, inconnues), il faut ajouter aprs le type l'option NOT NULL. Exemple: CREATE TABLE ETUDIANTS ( NUMERO NOM MOYENNE NUMBER NOT NULL, CHAR(10), NUMBER(4,2) )

Lattribut NUMERO est un nombre dont la taille sera prise par dfaut et ne comporter de valeurs NULL. Lattribut NOM est une chane de 10 caractres au maximum. Lattribut MOYENNE est un nombre de 4 chiffres dont 2 aprs la virgule.

13.2

Extension dune colonne: La commande ALTER TABLE

La taille d'une colonne peut tre augmente grce la commande ALTER TABLE dont le format est : ALTER TABLE <nom de table> MODIFY (<nom de colonne>,<type(nouvelle taille)>) Exemple: ALTER TABLE MODIFY ETUDIANTS (MOYENNE,NUMBER(6,2))

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

206

13.3 Ajout dune nouvelle colonne : La commande ALTER TABLE


Lajout dune nouvelle colonne peut se faire grce la commande ALTER TABLE avec le Format suivant : ALTER TABLE ADD Exemple: ALTER TABLE ADD ETUDIANTS (AGE,NUMBER(2)) <nom de table> (<nom de colonne>,<type>)

La nouvelle colonne AGE sera rajoute droite des autres colonnes de la table et sera initialise par des valeurs NULL. On ne doit donc pas spcifier l'option NOT NULL ce niveau. Cette colonne peut tre remplie grce la commande UPDATE (voir la commande UPDATE plus loin).

13.4 Suppression dune table : DROP TABLE


Pour supprimer une table, on utilise la commande DROP TABLE ayant le format suivant : DROP TABLE Exemple: DROP TABLE ETUDIANTS <nom de table>

qui va provoquer la suppression de la table ETUDIANTS.

13.5 Requtes de mise a jour d'une table


SQL offre les 3 commandes suivantes: INSERT UPDATE DELETE : ajouter une ligne dans une table : changer une valeur dans une ligne de la table : supprimer une ligne dans une table

On suppose pour la suite que la relation ou table ETUDIANTS a pour schma : ETUDIANTS(NUMERO, NOM, MOYENNE, AGE)

13.5.1 Insertion de lignes dans une table : la commande INSERT


La commande INSERT permet dinsrer des lignes (tuples) dans une table. Son format gnral est : INSERT INTO VALUES <nom de relation> (liste de valeurs)

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

207

Exemple: On veut insrer une ligne ou un tuple dans la table ETUDIANTS correspondant ltudiant ayant pour numro 795 , pour nom JOJO , pour moyenne 12.54 et pour ge 21 ans. INSERT INTO ETUDIANTS VALUES (795,'JOJO',12.54,21) On peut ajouter une ligne incomplte en ne donnant que les valeurs de certains attributs. Pour cela, il faut prciser les noms de ces attributs (i.e. colonnes) dans INSERT. Exemple: On veut insrer une ligne ou un tuple dans la table ETUDIANTS correspondant ltudiant ayant pour numro 15 , pour nom TITI , pour ge 19 ans et dont on ne connat pas le moyenne. INSERT INTO VALUES ETUDIANTS(AGE,NUMERO,NOM) (15,'TITI',19)

Toutes les autres colonnes de la table seront initialises avec la valeur NULL. On remarque que lordre des colonnes na pas dimportance alors que dans lexemple prcdent si car on na pas spcifi les noms des attributs et donc lordre implicite est celui donn lors de la cration de la table. 13.5.2 Mise jour de lignes dans une table : UPDATE La commande UPDATE permet de changer la valeur d'un attribut. Son Format gnral est : UPDATE <nom de table> SET <nom de colonne> = valeur WHERE <liste de conditions> La clause WHERE est optionnelle. Elle sert faire des changements slectifs sur les lignes satisfaisant les conditions spcifies. WHERE peut contenir les mmes conditions de recherches que celles possibles avec une clause SELECT. Exemple 1 : Mise jour d'une seule colonne d'une ligne

L'tudiant ayant pour nom TOTO , vient rclamer quil lui manque un demi point dans sa moyenne. Il faudra alors lui majorer sa moyenne de 0.5. UPDATE ETUDIANTS SET MOYENNE = MOYENNE + 0.5 WHERE NOM = 'TOTO' Exemple 2 : Mise jour de plusieurs colonnes dans une mme ligne

Lors de la saisie des attributs de l'tudiant numro 795 des erreurs se sont glisses dans l'ge, la moyenne et le nom de cet tudiant. Il faudra alors les corriger avec les valeurs correctes suivantes : UPDATE ETUDIANTS SET AGE=25 , NOM = 'OMAR' , MOYENNE =09.5 WHERE NUMERO = 795 Les colonnes doivent tre spares par une virgule dans la clause SET.
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

208

13.5.3 Suppression de lignes dans une table : DELETE


La commande DELETE permet de supprimer des lignes d'une table. Elle permet donc de supprimer une seule ligne dans une table ou plusieurs en mme temps. Son format gnral est : DELETE FROM <nom de relation> <liste de conditions> WHERE La clause WHERE est optionnelle. Elle sert faire des suppressions slectives des lignes satisfaisant les conditions spcifies. WHERE peut contenir les mmes conditions de recherches que celles possibles avec SELECT ou UPDATE. Exemple 1: Supprimer ltudiant ayant pour nom : TOTO DELETE FROM WHERE Exemple 2: Supprimer tous les tudiants ayant la mme moyenne que l'tudiant ayant pour nom : TOTO. DELETE FROM WHERE ETUDIANT MOYENNE IN ( SELECT MOYENNE FROM ETUDIANTS WHERE NOM = 'TOTO') ETUDIANTS NOM = 'TOTO'

Une commande DELETE sans clause WHERE implique la suppression de toutes les lignes de la table.

14. Utilisation des vues ( VIEWS )


Les vues sont en quelque sorte des fentres travers lesquelles on peut voir les donnes de la base. Les vues ne contiennent pas de donnes mais c'est tout comme et peuvent tre manipules comme si c'taient des tables. Du fait que les vues n'occupent pas d'espace mmoire, elles sont appeles TABLES VIRTUELLES.

14.1 Cration dune vue : la commande CREATE VIEW


Une vue est drive d'une ou plusieurs tables relles. Du fait que le rsultat d'une requte est luimme une table, une vue peut donc tre dfinie grce une requte. Le format gnral dune requte de cration d'une vue est : CREATE VIEW <nom de la vue> AS <requte de cration> Exemple : On veut crer une vue MOYENNE_ETUDIANTS partir de la table ETUDIANTS qui contiendra uniquement les noms et les moyennes des tudiants dont le nom commence par B et la moyenne infrieure 10.
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

209

CREATE VIEW AS

MOYENNE_ETUDIANTS SELECT FROM WHERE AND NOM,MOYENNE ETUDIANTS NOM LIKE B% MOYENNE < 10.0

La vue MOYENNE_ETUDIANTS est quivalente une table de 2 colonnes NOM et MOYENNE et dont les lignes sont extraites de la table ETUDIANTS. On peut utiliser toute la puissance de SQL pour dfinir une VUE. La commande CREATE VIEW ne doit pas contenir de clause ORDER BY car l'ordre est spcifi lorsqu'on excute une requte sur la vue. Cependant quelques limites existent telles que : On peut utiliser une jointure entre tables dans la dfinition dune vue. Exemple : On veut crer une vue RECHERCHE partir des tables EMPLOYES , DEPARTEMENTS uniquement les noms , fonctions et salaires des employs du dpartement RECHERCHES dont le salaire est suprieur 1000 ? CREATE VIEW AS SELECT FROM WHERE AND AND RECHERCHE Nom_Emp , Fonction , Salaire EMPLOYES , DEPARTEMENTS EMPLOYESNum_Dept= DEPARTEMENTSNum_Dept Nom_Dept = 'RECHERCHE' Salaire > 1000

14.2 Interrogation dune vue


On peut utiliser dans toute requte SQL le nom d'une vue, comme on peut utiliser toute la puissance du langage SQL pour interroger une vue. Exemple : Quels sont les nom et les moyennes de tous les tudiants dont le nom se termine par 'R' SELECT NOM,MOYENNE FROM MOYENNE_ETUDIANTS WHERE NOM LIKE %R Il faut souligner que les changements qui sont faits dans les tables sont directement visibles dans les vues qui ont t dfinies partir de ces tables. Par exemple , la requte prcdente n'affichera pas ltudiant de nom 'BERBAR' si ce dernier a t supprim de la table ETUDIANTS par la commande de suppression de tuples DELETE. On peut ajouter, mettre jour ou supprimer des lignes dans une vue de la mme faon qu'avec une table. Cependant certaines oprations (comme l'insertion) sur une vue engendrent des problmes au niveau de la rpercussion de ces oprations sur les tables qui ont servi dfinir cette vue. C'est le problme de propagation des mises jour sur une vue.
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

210

Exemple : Insrer l'tudiant de NOM = 'BACHIR' et de MOYENNE = 12 dans la vue MOYENNE_ETUDIANTS cre plus haut INSERT INTO MOYENNE_ETUDIANTS VALUES ('BACHIR',12) Or la table ETUDIANTS qui a servi la cration de cette vue a le schma suivant : ETUDIANTS(NUMERO,NOM,MOYENNE,AGE) Donc l'insertion du tuple ('BACHIR', 12) dans la vue ne peut se rpercuter dans la table ETUDIANTS que sous la forme du tuple suivant : (NULL,'BACHIR',12,NULL) ou NULL correspond une valeur indfinie. Ceci pose un problme car l'attribut NUMERO a t dfini comme NOT NULL lors de la cration de la table ETUDIANTS et on ne pourra donc pas insrer le tuple (NULL,'BACHIR',12,NULL) dans la table. Donc on ne peut pas rpercuter l'insertion faite sur la vue au niveau de la table qui a permis de crer cette vue. Le problme se complique encore plus si la vue a t obtenue par jointure entre plusieurs tables.

15. Conclusion
Le langage SQL est a l'heure actuelle le langage le plus utilis dans le domaine des bases de donnes. Certains auteurs le qualifient de COBOL des annes 90. Il constitue aussi le support idal au dveloppement des L4G (langages de 4ieme gnration). Un L4G est un outil de productivit permettant de dvelopper des applications compltes sans programmation. Il est construit a partir d'un langage relationnel comme SQL. Certains SGBD comme ORACLE offrent des outils dans ce sens et qui sont tous dvelopps autour de SQL. Ceci inclue : - un gnrateurs d'tats - un tableur - un utilitaire de sortie graphique - un gnrateur d'application - etc. L'utilisation de SQL et des utilitaires associs ouvre le dveloppement d'applications a de nouveaux utilisateurs (non spcialistes) tout en amliorant les performances (temps de dveloppement, de maintenance et de flexibilit). Avec un vritable L4G, le dveloppeur d'application n'est plus un programmeur au sens classique du terme (i.e. au sens des L3G procduraux). Enfin, rien ne remplacerais lapprentissage du langage par la pratique en utilisant nimporte quel SGBD relationnel dont on peut disposer. A notre avis, le plus simple serait de pratiquer le langage avec le SGBD Microsoft ACCESS. Mais il faut noter aussi quil existe beaucoup dautres SGBD relationnels distribus gratuitement et pouvant mme fonctionner dans une architecture Client/Serveur comme par exemple MySql.

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

211

Exercices sur le Chapitre 5

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

212

Exercice 1:
Considrons a nouveau la base de donnes relationnelle prsente au dbut du chapitre et compose des tables suivantes avec les mmes extensions : EMPLOYES (Num_Emp, Nom_Emp, Fonction, Salaire, Prime, Num_Resp , Num_Dept) DEPARTEMENTS (Num_Dept, Nom_Dept , Ville) Donnez pour chacune des questions suivantes une requte SQL permettant de rpondre a cette question : Q1 : Liste des dpartements avec pour chacun la moyenne des salaires du dpartement Q2 : Liste par ordre croissant de leur salaire des employs travaillant dans la ville de BATNA Q3 : Pour chaque dpartement donnez le nombre demploys exerant comme responsable dans ce dpartement. Q4 : Liste des dpartements avec le nombre demploys par dpartement Q5 : Liste des employs ayant le mme salaire que lemploy numro 100 Q6 : Donnez les noms et salaires des employs dont le salaire est plus grand que le salaire moyen de leur dpartement Q7 : Liste des dpartements yant au moins 3 employs dont le salaire est gal a 5000 Q8 : Donnez les noms et salaires des employs dont le salaire est suprieur a celui de leur responsable ainsi que le nom est le salaire de ce responsable Q9 : Liste des dpartements ou travaillent plus de 10 employs occupant le poste de responsable.

Exercice 2:
Soit la base de donnes relationnelle compose des tables suivantes : ETUDIANTS (Num_Etudiant, Nom_Etudiant, Age, Num_Dlgu, Num_Institut) INSTITUTS (Num_Institut, Nom_Institut) Donnez pour chacune des questions suivantes une requte SQL permettant de rpondre a cette question : Q1 : Liste des tudiants de linstitut ayant pour nom MATHS Q2 : Liste des INSTITUTS avec pour chacun la moyenne dge de cet institut Q3 : Quel est le nom de ltudiant le plus g ainsi que le nom de son institut Q4 : Liste des instituts ayant au moins deux tudiants dont lge est gal a 16. Q5 : Liste des instituts avec le nombre dtudiants par institut
Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Chapitre 5 : Prsentation gnrale DE SQL

213

Q6 : Donnez les noms et ges des tudiants ayant le mme ge que ltudiant ayant le numro 200. Q8 : Donnez les noms et ges des tudiants dont lge est suprieur a la moyenne dge de leur institut. Q9 : Donnez les noms et ges des tudiants dont lge est suprieur a celui de leur dlgu ainsi que le nom et lge de ce dlgu. Q10 : Liste des instituts dont le nombre de dlgus est suprieur a 5. Q11 : Liste des instituts avec le nombre de dlgus par institut.

Exercice 3:
Reprendre les exercices du chapitre 4 en exprimant toutes les requtes algbriques avec SQL

Exercice 4:
Comme SQL ne peut tre bien matris que par la pratique, on vous propose dutiliser un SGBD relationnel de votre choix (ACCESS, Oracle, MySQL) et dimplmenter la bases de donnes de lexercice 1 avec les extensions des tables fournies au dbut du chapitre en utilisant les requtes SQL adquates. Une fois vos tables cres et remplies, Reprendre les exemples de requtes donnes tout au long du chapitre pour enfin voir les rsultats de chacune et sassurer de leur validit.

Dr. Brahim BELATTAR - Dpt dinformatique Facult des Sciences de lingnieur - Univrist de Batna - 05000 - Algrie

Bibliographie

Bibligoraphie
CARDENAS A. F. , Database Management Systems, ALLYN and BACON Inc., Second Edition , USA, 1985 CARREZ C. , Des structures aux bases de donnes , DUNOD informatique, France, 1990 CELKO J. , SQL avanc , (traduction de Martine Chamond), INTENATIONAL THOMSON PUBLISHING, FRANCE, 1997 DATE. C. J. , An Introduction to Database Systems, Volume I, Fourth Edition , ADDISONWESLEY PUBLISHING COMPANY, 1986 DELOBEL C. , M. ADIBA , Bases de donnes et systmes relationnels, DUNOD informatique, France, 1982 GALACSI, Concetin de bases de donnes : du schma conceptuel aux schmas physiques, , DUNOD informatique, France, 1989 GALACSI, Les systmes dinformation : Analyse et conception , DUNOD informatique, France, 1989 GAMACHE A., Logiciels SGBD et bases de donnes, Les Presses de lUniversit LAVAL, Quebec, 1980 GARDARIN G., Bases de donnes : les systmes et leurs langages, EYROLLES, France, 1982 KORTH H. F. , SILBERSCHATZ A., Database System Concepts, Second Edition , McGrawHill, Inc., USA, 1991 MARTIN D. , Techniques avances pour bases de donnes , DUNOD informatique, France, 1985 MIRANDA S., BUSTA J.S., Lart des Bases de donnes : Tome 2 - Les bases de donnes relationnelles, EYROLLES, France, 1986 ULLMAN J. D. , Principles of Database Systems, Computer Science Press, Second Edition , USA, 1982

Dr. Brahim BELATTAR - LISA - Dpt dinformatique - Facult des sciences de lIngnieur - Univ. de Batna - 05000 - Algrie

Вам также может понравиться