LE LANGAGE SQL
1. Introduction
a) Gnralits SQL = Structured Query Language Issu de SEQUEL (Structured English as a Query Language). Standard ANSI en Octobre 1986 (proposition X3H2). SQL permet la dfinition, la manipulation et le contrle dune base de donnes relationnelle, en mode interactif ou en mode intgr partir dun langage hte (ex., Pro*C dORACLE). b) Quelques implmentations de SQL SQLBASE (Gupta Technology) pour micro-ordinateurs sous MS-DOS. SQL/DS (IBM) pour les systmes IBM sous DOS-VSE et VM/CMS. DB2 (IBM) pour les systmes dexploitation MVS et MVS-XA. INGRES (Relational Technology Inc) : un des premiers SGBD relationnels commercialiss. INGRES fonctionne sous les systmes dexploitation VMS, UNIX et MSDOS. INFORMIX (Informix, Software Inc) pour UNIX. DBASE (Ashon Tate) sur PC. ACCESS (Microsoft) sur PC. ORACLE (Oracle Corporation) : SQL*Plus. Large gamme de machines : IBM, VAX, BULL, HP, micros. Proche de la norme. Environnement de dveloppement trs riche : SQL*Report, SQL*Calc, SQL*Forms, SQL*ReportWriter Version 7 : contraintes de cl primaire et de cl trangre. IDMS-SQL (CULLINET) : greffe dune couche relationnelle sur un SGBD rseau.
47
c) Notations Les mots rservs du langage sont en majuscules ; les lments terminaux sont reprsents en minuscules ; les lments non terminaux sont encadrs par <> ; les parties optionnelles sont encadres par [] ; les parties alternatives sont spares par des barres verticales et encadres par des accolades sous la forme {||} ; une rptition dlments (liste) est note {}. La syntaxe adopte est celle de SQL*Plus dORACLE. d) Base de donnes exemple La base FABRICATION sera utilise pour tous les exemples.
PIECE (NOP, DESIGNATION, COULEUR, POIDS) SERVICE (NOS, INTITULE, LOCALISATION) ORDRE (NOP, NOS, QUANTITE) NOMENCLATURE (NOPA, NOPC, QUANTITE)
SERVICE NOS S1 S2 S3 S4 S5 INTITULE DIFFUSION GP PROMOTION DIFFUSION GR PROMOTION DIFFUSION GP LOCALISATION Paris Clermont-Fd Lyon Moulins Clermont-Fd NOMENCLATURE NOPA P6 P6 P7 P7 ORDRE PIECE NOP P1 P2 P3 P4 P5 P6 P7 DESIGNATION Lavabo Lavabo Baignoire Baignoire Colonne Lavabo luxe Set luxe COULEUR ivoire bleu ivoire bleu ivoire ivoire ivoire POIDS 30 30 50 50 10 40 130 NOS S1 S1 S1 S1 S2 S2 S3 S3 S5 NOP P1 P2 P3 P4 P1 P3 P2 P4 P3 QUANTITE 10 40 20 15 10 20 15 10 15 NOPC P1 P5 P3 P6 QUANTITE 1 1 1 2
Note : Le nom du schma nom-schma doit tre le mme que le nom dutilisateur Oracle. b) Dfinition des tables
CREATE TABLE <nom-table> ( {<lment-table>} ) <nom-table>:= nom-table-simple | nom-schma.nom-table-simple <lment-table>:= <dfinition-colonne> | <contrainte-table> <dfinition-colonne>:= nom-colonne <type> [<clause-dfaut>] [<contrainte-colonne>] <clause-dfaut>:= DEFAULT valeur <type> dfinit le type des donnes parmi la liste suivante (non limitative) : NUMBER(n, m) (dcimaux n chiffres au total, m aprs la virgule) CHAR(n) (chane de longueur fixe) VARCHAR(n) (chane de longueur variable) DATE (gnralement au format DD-MM-YY HH:MM:SSam)
c) Dfinition des contraintes dintgrit Cls primaires Cls trangres Contraintes de domaine
<contrainte-colonne>:= [ [CONSTRAINT nom-contrainte] [NOT] NULL ] ] [ [CONSTRAINT nom-contrainte] {UNIQUE | PRIMARY KEY} ] [ [CONSTRAINT nom-contrainte] REFERENCES <nom-table> [({nomcolonne})] [ON DELETE CASCADE] ] [ [CONSTRAINT nom-contrainte] CHECK (<condition>) ]
<contrainte-table>:= [ [CONSTRAINT nom-contrainte] {UNIQUE | PRIMARY KEY} ({nom-colonne}) ] [ [CONSTRAINT nom-contrainte] FOREIGN KEY ({nom-colonne}) REFERENCES <nom-table> [ ({nom-colonne})] [ON DELETE CASCADE] ] [ [CONSTRAINT nom-contrainte] CHECK (<condition>) ]
Le nommage dune contrainte par la clause [CONSTRAINT nom-contrainte] permet sa suppression ultrieure avec la commande DROP CONSTRAINT. Les noms de colonne apparaissant dans la clause REFERENCES doivent tre ceux dune cl primaire ou doivent tre dclars avec la clause UNIQUE | PRIMARY KEY. Les clauses UNIQUE NOT NULL et PRIMARY KEY sont quivalentes. La contrainte REFERENCES dfinit une contrainte dintgrit rfrentielle par rapport une cl unique ou primaire. On ne peut insrer pour la cl trangre que des valeurs dj prsentes pour la cl primaire. En labsence doption, toute tentative de suppression ou de modification dune valeur de la cl primaire sera rejete par le systme si cette valeur apparat au niveau de la cl trangre correspondante. Loption ON DELETE CASCADE autorise la suppression dune valeur de la cl primaire. Les valeurs de la cl trangre correspondante sont alors supprimes (effet de cascade). Certains systmes prvoient dautres options.
50
d) Dfinition des vues Vue = table virtuelle calcule partir des tables de base grce une requte
CREATE VIEW [nom-schma.]nom-vue ({ nom-colonne }) AS <requte-pleine> [WITH CHECK OPTION [CONSTRAINT nom-contrainte] ] nom-vue est le nom de la vue. nom-colonne est un nom de colonne d'une table existante. <requte-pleine> est une requte dinterrogation. WITH CHECK OPTION sert imposer la vrification des mises jour.
e) Cration des index Index acclration des accs aux donnes par la cl dindex (colonne) choisie.
CREATE [UNIQUE] INDEX [nom-schma.]nom-index ON <nom-table> ( { nom-colonne [ASC | DESC ] } )
51
UNIQUE pas de double. ASC et DESC tri en ordre croissant ou dcroissant (respectivement).
Exemple : index sur les numros de pice, sans double, en ordre croissant
CREATE UNIQUE INDEX pie_idx ON PIECE (NOP ASC) ;
Ex. ALTER TABLE PIECE MODIFY (DESIGNATION CHAR(100)) ; Suppression de contraintes dans une table :
ALTER TABLE <nom-table> DROP { PRIMARY KEY | UNIQUE ({nom-colonne}) | [CONSTRAINT nom-contrainte] } [CASCADE] Bases de donnes Le langage SQL 52
g) Cration et suppression de synonymes Cration et suppression dalias pour les tables, vues, etc.
CREATE [PUBLIC] SYNONYM [nom-schma.]synonyme FOR [nom-schma.]objet DROP [PUBLIC] SYNONYM [nom-schma.]synonyme
La liste des atomes de la clause VALUES doit correspondre celles des colonnes insrer, tant en ce qui concerne le nombre que le type. Ex. INSERT INTO SERVICE VALUES ('S6', 'PROMOTION', 'Riom') ;
53
Les lignes insrer proviennent dune requte dinterrogation. L encore la correspondance entre colonnes doit tre assure. Ex. INSERT INTO SERVICE2
SELECT NOS, INTITULE, LOCALISATION FROM SERVICE ;
d) Suppression de lignes
DELETE FROM {<nom-table> | nom-vue} [WHERE <condition>]
En labsence de clause WHERE, tous les tuples de la table sont supprims. Ex. DELETE FROM PIECE WHERE COULEUR = ivoire ;
4. Commandes d'interrogation
a) Syntaxe et notations Sous-requte :
<sous-requte>:= SELECT [ {ALL | DISTINCT }] { * | <liste-slection> } FROM { {nom-table | nom-vue} [alias-local] } [ WHERE <condition> ] [ GROUP BY {<expression>} [ HAVING <condition> ] ] Bases de donnes Le langage SQL 54
ALL et DISTINCT permettent de conserver ou dliminer les lignes en double. FROM prcise tous les objets (tables et/ou vues) manipuler. WHERE prcise la condition que doivent satisfaire les lignes slectionner. GROUP BY partitionne en groupes. HAVING slectionne les groupes selon une condition.
<liste-slection>:= { {nom-table | nom-vue | alias-local}.* | {nom-table | nom-vue | alias-local}.nom-colonne | {<expression> [en-tte]} }
* est une notation compacte pour rcuprer dans la liste de slection toutes les colonnes des tables et vues de la clause FROM.
<expression> est une expression arithmtique dont les oprandes sont des noms
de colonnes ventuellement prfixs par un nom de table, de vue ou dalias. Tous les noms de tables et de vues peuvent tre prfixes par le nom du schma. Un alias local facilite la formulation. Il doit tre dclar au niveau de la clause FROM. Le rsultat dune sous-requte est une table dont les colonnes sont dfinies sur la liste-slection. Requte pleine :
<requte-pleine>:= {<sous-requte> | (<requte-pleine>)} <ope-ens> {<sous-requte> | (<requte-pleine>)} <ope-ens>:= { INTERSECT | MINUS | UNION [ALL] }
Les tables manipules doivent tre compatibles en ce qui concerne le nombre et le type de leurs colonnes. Requte :
<requte>:= <requte-pleine> [ ORDER BY { {nom-colonne | numro} [{ASC | DESC}] }]
Ex. SELECT * FROM PIECE ORDER BY DESIGNATION ; SELECT * FROM PIECE ORDER BY 2 ; Condition : Expression logique parenthse faisant intervenir les oprateurs logiques AND, OR, NOT. Les termes boolens sont obtenus partir de diverses formes prdicatives.
<condition>:= <forme-prdicative> { AND | OR } <forme-prdicative> <forme-prdicative>:= [ NOT ] { <prdicat> | <condition> } <prdicat>:= { | <expression> <ope-comp> { | <expression> | ( <requte-pleine> ) | ANY ( <requte-pleine> ) | ALL ( <requte-pleine> ) } | <expression> [ NOT ] BETWEEN <expression> AND <expression> | <expression> IS [ NOT ] NULL | <expression> [ NOT ] LIKE { constante | variable-hte } | <expression> [ NOT ] IN { | (<requte-pleine>) | {<expression>} } | EXISTS (<requte-pleine>) } <ope-comp>:= {= | <> | > | >= | < | <=}
Six formes principales de prdicats : 1) prdicat de comparaison scalaire entre deux valeurs : la valeur dune expression dune part, et la valeur dune expression ou le rsultat dune requte monoligne dautre part ; 2) prdicat quantifi form avec les quantificateurs ANY, ALL pour comparer une valeur un ensemble de valeurs ; 3) prdicat de comparaison BETWEEN et LIKE ; 4) prdicat de test de valeur nulle (NULL) ; 5) prdicat de comparaison ensembliste IN ; 6) prdicat EXISTS pour tester lexistence de lignes dans la table rsultat.
56
Expressions arithmtiques :
<expression>:= <oprande> { { + | - | * | / | } <oprande> } <oprande>:= [ {+ | - }] { nom-colonne | constante | variable-hte | <fonction> | (<expression>) }
Il existe de trs nombreuses fonctions pour tous les types de donnes. Fonctions dagrgat : Elles oprent sur un ensemble de valeurs : AVG : moyenne des valeurs, SUM : somme des valeurs, MIN : valeur minimum, MAX :valeur maximum, COUNT : nombre de valeurs. Ex. SELECT AVG(POIDS) FROM PIECE ; b) Requtes simples Numros des services ayant en commande la pice P1 avec une quantit suprieure 10, dans l'ordre croissant :
SELECT NOS FROM ORDRE WHERE NOP = 'P1' AND QUANTITE >10 ORDER BY NOS ;
L'emballage d'une pice a un poids gal environ 20% du poids de la pice. Poids total emball pour les diffrentes pices, dans l'ordre dcroissant :
SELECT NOP, POIDS+0.2*POIDS FROM PIECE ORDER BY 2 DESC ;
Nombre de services :
SELECT COUNT(*) FROM SERVICE ;
57
c) Jointure interne Cest un produit cartsien suivi dune slection relationnelle : FROM + WHERE. Liste des pices commandes par le service S1 avec leur libell et leurs poids :
SELECT NOS, ORDRE.NOP, DESIGNATION, POIDS FROM ORDRE PIECE WHERE ORDRE.NOP = PIECE.NOP AND NOS = 'S1' ORDER BY ORDRE.NOP ;
Pour allger l'criture, il est possible d'affecter un alias local un nom de table.
SELECT NOS, R.NOP, DESIGNATION, POIDS FROM ORDRE R, PIECE P WHERE R.NOP = P.NOP AND NOS = 'S1' ORDER BY R.NOP ;
Cette forme de spcification permet doprer sur une mme table (autojointure) condition dutiliser des synonymes diffrents. Numros des services qui ont command la pice P1 et la pice P3 en mme quantit :
SELECT A1.NOS FROM ORDRE A1, ORDRE A2 WHERE A1.NOP = 'P1' AND A2.NOP = 'P3' AND A1.NOS = A2.NOS AND A1.QUANTITE = A2.QUANTITE ;
Il est possible de formuler toute jointure et pas seulement des quijointures. Pour chaque pice, numro et dsignation de toutes les pices qui ont un poids suprieur :
SELECT P1.NOP, P2.NOP, P2.DESIGNATION FROM PIECE P1, PIECE P2 WHERE P1.POIDS < P2.POIDS ;
58
d) Oprations ensemblistes Numros des pices qui, soit ont un poids infrieur 50, soit ont t commandes par le service S2 :
SELECT NOP FROM PIECE WHERE POIDS <50 UNION SELECT NOP FROM ORDRE WHERE NOS = S2 ;
Note : Les doublons sont limins. e) Les diffrents types de prdicats Prdicats de comparaison scalaire : Numros des services qui ont command la pice P3 avec une quantit infrieure la quantit moyenne commande pour cette pice :
SELECT NOP, NOS, QUANTITE FROM ORDRE WHERE NOP = 'P3' AND QUANTITE < (SELECT AVG(QUANTITE) FROM ORDRE WHERE NOP = 'P3') ;
La commande SELECT imbrique peut concerner la mme table que la commande SELECT d'appel et dpendre de la ligne dappel (corrlation). Caractristiques de chaque pice ayant un poids infrieur la moyenne des poids des pices de leur couleur :
SELECT * FROM PIECE P WHERE POIDS < (SELECT AVG(POIDS) FROM PIECE WHERE COULEUR = P.COULEUR) ORDER BY NOP ;
Note : Pour chaque ligne de la question d'appel, la sous-question est rvalue. Prdicat BETWEEN : Les prdicats BETWEEN et NOT BETWEEN servent dterminer si une valeur numrique appartient ou n'appartient pas un intervalle (bornes incluses). Numros des pices dont le poids est compris entre 50 et 100 :
59
Prdicat IS NULL : Les prdicats IS NULL et IS NOT NULL servent tester si une ligne dune table prsente ou ne prsente pas une valeur nulle dans une colonne. Numros des services qui nont pas valu leurs commandes et les numros des pices correspondantes :
SELECT NOS, NOP FROM ORDRE WHERE QUANTITE IS NULL ;
Prdicat LIKE : Les prdicats LIKE et NOT LIKE servent dterminer si une forme particulire existe ou nexiste pas dans une chane de caractres. Le symbole % joue le rle de joker. X LIKE 'LYON' prend la valeur vraie si la chane X est identique LYON. X LIKE '%LYON%' prend la valeur vraie si la chane X contient LYON. X LIKE 'LYON%' prend la valeur vraie si la chane X dbute par LYON. X LIKE '%LYON' prend la valeur vraie si la chane X se termine par LYON. Numros des pices dont la dsignation se termine par 'ON' et dont le poids est compris entre 50 et 100 :
SELECT NOP FROM PIECE WHERE DESIGNATION LIKE '%ON' AND POIDS BETWEEN 50 AND 100 ;
Prdicat IN : Les prdicats IN et NOT IN servent dterminer si une valeur appartient ou nappartient pas un ensemble de valeurs du mme type. Dsignation des pices de couleur ivoire, rouge ou blanc :
SELECT DESIGNATION FROM PIECE WHERE COULEUR IN ('ivoire', 'rouge', 'blanc') ;
60
Il est possible de spcifier la jointure avec le prdicat IN. Numro et dsignation des pices qui sont commandes par le service S1 :
SELECT NOP, DESIGNATION FROM PIECE WHERE NOP IN (SELECT NOP FROM ORDRE WHERE NOS = 'S1') ORDER BY NOP ;
Numro et dsignation des pices qui sont commandes par un service DIFFUSION :
SELECT NOP, DESIGNATION FROM PIECE WHERE NOP IN (SELECT NOP FROM ORDRE WHERE NOS IN (SELECT NOS FROM SERVICE WHERE INTITULE LIKE 'DIFFUSION%')) ORDER BY NOP ;
Prdicats ALL et ANY : Le prdicat ALL prend la valeur vrai si la requte pleine qui le suit ne fournit aucune valeur ou si le prdicat de comparaison associ prend la valeur vrai pour toutes les valeurs scalaires fournies par la requte pleine. Prdicat ANY prend la valeur vrai si le prdicat de comparaison associ prend la valeur vrai pour au moins une des valeurs scalaires fournies par la requte pleine. Si la requte pleine qui suit ces prdicats fournit uniquement des valeurs nulles, ils prennent la valeur inconnue. Numros des services ayant command au moins une pice en quantit strictement suprieure chacune des quantits de pices commandes par le service S1 :
SELECT DISTINCT NOS FROM ORDRE WHERE QUANTITE > ALL (SELECT QUANTITE FROM ORDRE WHERE NOS = 'S1') ;
Prdicat EXISTS : Le prdicat EXISTS prend la valeur faux si la requte pleine qui le suit a comme rsultat l'ensemble vide, vrai sinon.
Bases de donnes Le langage SQL 61
Expression du quantificateur universel laide du prdicat EXISTS : x (p) NOT ( EXISTS x (NOT(p) ) Ex. Services tels que pour toute pice il existe une commande Services tels quil nexiste pas une pice telle quil nexiste pas une commande. Intituls des services ayant command toutes les pices :
SELECT INTITULE FROM SERVICE S WHERE NOT EXISTS (SELECT * FROM PIECE P WHERE NOT EXISTS (SELECT * FROM ORDRE C WHERE S.NOS = C.NOS AND C.NOP = P.NOP ) ) ;
Numros des services ayant command au moins une pice en quantit strictement suprieure chacune des quantits de pices commandes par le service S1 :
62
SELECT DISTINCT NOS FROM ORDRE CX WHERE NOT EXISTS (SELECT * FROM ORDRE CY WHERE CY.NOS = 'S1' AND CX.QUANTITE <= CY.QUANTITE) ;
f) Jointure externe Jointure externe entre la relation R et la relation S = conserver toutes les lignes de R, mme celles qui nont pas de lignes en correspondance dans S. Pour chaque service, numro et intitul, et pour ceux qui ont des commandes, la liste des pices commandes :
SELECT S.NOS, INTITULE, NOP FROM SERVICE S, ORDRE R WHERE S.NOS = R.NOS UNION SELECT NOS, INTITULE, FROM SERVICE WHERE NOT EXISTS (SELECT * FROM ORDRE WHERE SERVICE.NOS = ORDRE.NOS) ;
g) Groupement 1) Slection des lignes en fonction de la clause WHERE. 2) Groupement des lignes restantes en groupes disjoints en fonction de leurs valeurs pour les colonnes spcifies dans GROUP BY : toutes les lignes dun groupe ont mmes valeurs pour ces colonnes. 3) Slection des groupes en fonction de la clause HAVING. 4) Relation rsultat : autant de lignes quil y a de groupes slectionns. 5) Colonnes du rsultat : soit des expressions faisant uniquement intervenir les colonnes de groupement, soit des fonctions dagrgat appliques aux lignes dun groupe.
63
Quantit moyenne commande pour les pices faisant l'objet de plus de 3 commandes :
SELECT NOP, AVG(QUANTITE) FROM ORDRE GROUP BY NOP HAVING COUNT(*) > 3 ORDER BY NOP ;
ORACLE value dabord la premire expression pour la ligne du parent, puis la deuxime expression pour toutes les lignes de la table. Les fils correspondent aux lignes pour lesquelles le prdicat est vrai.
START WITH <condition2> slectionne la ligne utiliser pour commencer
P7
P1
P5
1) Dbut traitement pour NOPC = P7. 2) Utilisation de cette valeur comme rfrence pour explorer la colonne NOPA. 3) Pour chaque possibilit obtention dune nouvelle rfrence de NOPC. 4) Itration du processus pour chaque cas. Pices intervenant dans la composition de la pice P7, avec leur niveau dans la hirarchie et la quantit correspondante :
SELECT LEVEL, NOPC, QUANTITE FROM NOMENCLATURE CONNECT BY PRIOR NOPC = NOPA START WITH NOPC = P7 ; LEVEL : pseudo-colonne permettant la manipulation du niveau de chaque lment
5. Scurit et autorisation
a) Transmission de privilges d'accs et de mise jour
GRANT {<privilge>} ON {nom-table | nom-vue} TO [ {id-usager} | PUBLIC ] [WITH GRANT OPTION] Bases de donnes Le langage SQL 65
Privilges possibles : SELECT : lecture seulement, INSERT : insertion de lignes, UPDATE : mise jour de lignes, DELETE : suppression de lignes, ALL : tous les privilges sur une table, ALTER : destruction de la table, INDEX : construction d'un index sur la table.
ALL, ALTER et INDEX ne sont utilisables qu'avec une table. WITH GRANT OPTION : transmission intermdiaire des privilges.
Ex. Tous les privilges sur la table PIECE octroys lutilisateur machin, avec droit pour machin de transmettre son tour les privilges.
GRANT ALL ON PIECE TO machin WITH GRANT OPTION ;
b) Suppression de privilges
REVOKE {<privilge>} ON {nom-table | nom-vue} FROM [{id-usager} | PUBLIC]
ces modifications sur les tables primaires pose un certain nombre de problmes et la plupart des systmes imposent des conditions trs restrictives. Les principales restrictions sont les suivantes : le mot cl DISTINCT doit tre absent ; la clause FROM doit faire rfrence une seule table sur laquelle les oprations de mise jour sont autorises ; la clause SELECT doit faire rfrence directement aux colonnes de la table sousjacente (les colonnes calcules sont prohibes) ; les clauses GROUP BY et HAVING sont interdites. b) Intrt des vues 1) Simplification de laccs aux donnes en masquant les oprations de jointures Ex : la requte Quelles sont les pices commandes avec une quantit >10 se formule comme suit partir de la vue PIECE_COM :
SELECT NOP, DESIGNATION FROM PIECE_COM WHERE QUANTITE >10 ; CREATE VIEW PIECE_COM (NOP, DESIGNATION, POIDS, NOS, QUANTITE) AS SELECT P.NOP, DESIGNATION, POIDS, R.NOS, QUANTITE FROM PIECE P, ORDRE R WHERE P.NOP=R.NOP ;
2) Sauvegarde indirecte de requtes complexes 3) Prsentation de mmes donnes sous diffrentes formes adaptes aux diffrents usagers en particulier pour les mises jour. 4) Support de lindpendance logique. Ex : la table PIECE, suite un remaniement est clate en deux tables :
PIECE1 (NOP, DESIGNATION, COULEUR) PIECE2 (NOP, POIDS)
67
mais les requtes qui utilisaient lancienne vue PIECE_COM nont pas tre remanies ! 5) Renforcement de la scurit des donnes par masquage des lignes et des colonnes sensibles aux usagers non habilits.
68
Selon les systmes dautres modes sont disponibles. Les commandes COMMIT et ROLLBACK librent tous les verrous. Initialisation du mode dune transaction :
SET TRANSACTION [ READ ONLY | READ WRITE ]
8. Catalogue du systme
Le catalogue (ou dictionnaire) systme contient sous forme relationnelle la dfinition de tous les objets crs par le systme et les usagers. Chaque usager peut accder avec SQL (en mode consultation seulement) la dfinition des objets quil a crs ou sur lesquels il a un privilge. Les noms des tables systmes sont spcifiques chaque systme. Voici quelques tables utiles gres par le systme ORACLE :
USER_CATALOG (TABLE_NAME, TABLE_TYPE) USER_TAB_COLUMNS (TABLE_NAME, COLUMN_NAME, ) USER_IND_COLUMNS (INDEX_NAME, TABLE_NAME, COLUMN_NAME, ) ALL_TABLES (TABLE_NAME, OWNER, )
9. Exercices
I. Formuler avec le langage SQL les requtes utilises pour prsenter l'algbre relationnelle. 1) Dsignation et couleur de toutes les pices. 2) Dsignation des pices de couleur ivoire. 3) Intitul des services ayant en commande la pice P2. 4) Intitul des services ayant en commande au moins une pice de couleur ivoire. 5) Intitul des services n'ayant pas en commande la pice P1. 6) Numro des services ayant en commande toutes les pices. 7) Numro des services ayant en commande au moins toutes les pices commandes au service S2. II. Sur la base FABRICATION, exprimer les requtes suivantes. 1) Donner pour chaque service le poids de la pice commande de couleur bleue la plus pesante. 2) Donner le poids moyen des pices commandes pour chacun des services Promotion. 3) Donner les pices de couleur bleue qui sont commandes par plus de trois services diffrents. 4) Donner le maximum parmi les totaux des pices commandes par les diffrents services.
70
I. 1) SELECT DESIGNATION, COULEUR FROM PIECE ; 2) SELECT DESIGNATION FROM PIECE WHERE COULEUR=ivoire ; 3) SELECT DISTINCT INTITULE FROM SERVICE S, ORDRE O WHERE S.NOS=O.NOS AND NOP=P2 ; 4) SELECT DISTINCT INTITULE FROM SERVICE S, ORDRE O, PIECE P WHERE S.NOS=O.NOS AND O.NOP=P.NOP AND COULEUR=ivoire ; 5) SELECT INTITULE FROM SERVICE S WHERE NOT EXISTS (SELECT * FROM ORDRE O WHERE S.NOS=O.NOS AND NOP=P1) ; 6) SELECT NOS FROM SERVICE S WHERE NOT EXISTS (SELECT * FROM PIECE P WHERE NOT EXISTS (SELECT * FROM ORDRE O WHERE S.NOS=O.NOS AND O.NOP=P.NOP)) ; 7) SELECT NOS FROM SERVICE S WHERE NOT EXISTS (SELECT * FROM PIECE P, ORDRE O1 WHERE P.NOP=O1.NOP AND O1.NOS=S2 AND NOT EXISTS (SELECT * FROM ORDRE O2 WHERE S.NOS=O2.NOS AND O2.NOP=P.NOP)) ;
II. 1) SELECT INTITULE, MAX(POIDS) FROM SERVICE S, ORDRE O, PIECE P WHERE S.NOS=O.NOS AND O.NOP=P.NOP AND COULEUR='bleu' GROUP BY INTITULE ; 2) SELECT AVG(POIDS) FROM SERVICE S, ORDRE O, PIECE P WHERE S.NOS=O.NOS AND O.NOP=P.NOP AND INTITULE=Promotion GROUP BY S.NOS ; 3) SELECT P.NOP FROM PIECE P WHERE 3 < (SELECT COUNT(DISTINCT NOS) FROM ORDRE O WHERE O.NOP=P.NOP) ; 4) SELECT MAX(SUM(QUANTITE)) FROM ORDRE GROUP BY NOS ;