Академический Документы
Профессиональный Документы
Культура Документы
1 2
Objectifs et organisation des TP -------------------------------------------------------2 Accs au serveur Oracle ------------------------------------------------------------------2 2.1 2.2 Accs sous Windows ---------------------------------------------------------- 2 Accs sous Unix ---------------------------------------------------------------- 2
Dcouverte de SQL--------------------------------------------------------------------------3 3.1 3.2 3.3 3.4 Description de la base de donnes ---------------------------------------- 3 Interrogation de la base------------------------------------------------------- 3 Modification de la base ------------------------------------------------------- 4 Requtes SQL avances ----------------------------------------------------- 4
Annexes -----------------------------------------------------------------------------------------5 4.1 4.2 4.3 4.4 Documentation standard ORACLE.---------------------------------------- 5 Premier contact avec SQLPlus --------------------------------------------- 5 SQL et la casse (case sensitivity) ------------------------------------------ 5 Sauvegardes -------------------------------------------------------------------- 6
Lobjectif de ce TP est de vous familiariser avec le langage SQL et un vrai SGBD. La section 2 dcrit les procdures de connexion Oracle. La section 3 dcrit les exercices raliser. La section 4 donne quelques dtails utiles en cas de difficults dans lutilisation dOracle. 2 Accs au serveur Oracle
Le serveur Oracle, identifi par ENSEIG, est localis sur un serveur distant. Les caractristiques de votre compte Oracle (login, password) vous seront communiques en dbut de session. 2.1 Accs sous Windows Vous pouvez accder Oracle via linterprteur SQLPlus fourni par lditeur. Pour le lancer, accdez au menu Dmarrer de windows, puis slectionnez successivement les items Programmes , Oracle pour windows NT , SQL Plus 8.x Rentrez alors les login, password et serveur oracle tels quils vous ont t communiqus. Vous tes sous linterprteur en ligne dOracle. 2.2 Accs sous Unix Chargez lenvironnement dOracle par la commande SETUP ORACLE excuter sous votre C-shell. Puis accdez Oracle en tapant la commande sqlplus. Vous devez alors vous identifier en indiquant votre login et votre password Oracle.
Dcouverte de SQL
3.1 Description de la base de donnes Vous travaillez dans cette sance sur une base partage dont le schma conceptuel est reprsent sur la figure 1.
Figure 1 : schmas conceptuel Cette base est stocke sous la forme de deux relations Personne et Service. La table Service contient des informations sur les diffrents services existant dans la socit. La table Personne contient des informations sur le personnel travaillant dans la socit. Pour accder facilement cette base partage (stocke sur un compte diffrent du votre), vous devez excuter le script disponible sous http://perso.enst-bretagne.fr/~picouet/french/sgbd/oracle/data/tp/create_synonyms.sql Pour information, le script de cration de cette base est disponible lURL suivante : http://perso.enst-bretagne.fr/~picouet/french/sgbd/oracle/data/tp/ A laide de la commande Desc (voir section 4.2), dcouvrez le schma des deux relations, ainsi que le prototype de la procdure insert_personne. 3.2 Interrogation de la base
Pour chacune des questions exprime ci-dessous en franais, choisissez la requte SQL qui l'exprime et justifiez votre rponse (vous pouvez tester les requtes sur l'interprteur SQLPlus et analyser les messages d'erreur): Donner l'identifiant et le nom des personnes travaillant dans le service n1 o SELECT num_pers nom FROM personne; o SELECT * FROM personne WHERE app_serv = 1; o SELECT num_pers, nom FROM personne WHERE app_serv = 1; o SELECT num_pers nom FROM personne WHERE app_serv = 1; Donner le nom des personnes et le nom de leur service d'appartenance o SELECT p.nom, s.nom FROM personne p, service s; o SELECT p.nom, s.nom FROM personne p, service s WHERE p.app_serv=s.num_serv; o SELECT p.nom, s.nom FROM personne p, service s WHERE p.num_pers=s.num_serv; Donner l'identifiant et le nom des personnes qui sont dans le service LUSSI (affichage inversement ordonn sur le nom) o SELECT num_pers, nom FROM personne WHERE app_serv = 'LUSSI'; o SELECT num_pers, nom FROM personne p, service s WHERE s.nom='LUSSI'; o SELECT num_pers, s.nom FROM personne p, service s WHERE s.nom='LUSSI' and p.app_serv=s.num_serv order by nom desc; o select p.num_pers, p.nom from personne p, service s where s.nom='LUSSI' and p.app_serv=s.num_serv order by p.nom desc; o SELECT p.num_pers, p.nom FROM personne p, service s WHERE s.nom='lussi' and p.app_serv=s.num_serv order by p.nom desc; Donner les couples de personne qui sont dans le mme service
Philippe Picouet LUSSI - ENST Bretagne 3
SELECT nom, nom FROM personne; SELECT p1.nom, p2.nom FROM personne p1, personne p2 WHERE p1.app_serv=p2.app_serv and p1.nom <p2.nom; o SELECT p1.nom, p2.nom FROM personne p1, personne p2, service s1, service s2 WHERE p1.app_serv=s1.num_serv and p2.app_serv=s2.num_serv and s1.num_serv=s2.num_serv and p1.nom<p2.nom; Posez la requte suivante en SQL : Donner le nom des services qui ont un employ nomm SMITH ?
o o
3.3
Modification de la base Ajoutez une nouvelle personne la base en utilisant la procdure stocke 'insert_personne' (commande desc insert_personne pour connatre ses paramtres, commande exec insert_personne(comma_separated_attribute_list) pour lexcuter). Vrifiez que cette nouvelle personne a bien t cre. Validez votre mise jour (commande commit;) et examinez nouveau la base. Que constatez vous ? Requtes SQL avances
3.4
Donner le nom des services qui nont pas demploy nomm SEGARRA ? (vous pourrez insrer de nouveaux employs pour tester cette requte) o SELECT s.nom from personne p, service s where p.app_serv=s.num_serv and p.nom != SEGARRA; o SELECT nom from service where num_serv not in (select app_serv from personne where nom = SEGARRA); Donner le numros des services qui ont un employ nomm SEGARRA ou TANGUY o Select app_serv from personne where nom = SEGARRA or nom = TANGUY; o o Select app_serv from personne where nom IN (SEGARRA, TANGUY); Select app_serv from personne where app_serv in (select app_serv from personne where nom = SEGARRA) or app_serv in (select app_serv from personne where nom= TANGUY);
Donner le numros des services qui ont un employ nomm SEGARRA et un employ nomm TANGUY o Select app_serv from personne where nom = SEGARRA and nom = TANGUY; o Select app_serv from personne where app_serv in (select app_serv from personne where nom = SEGARRA) and app_serv in (select app_serv from personne where nom= TANGUY); Select app_serv from personne p1, personne p2 where p1.app_serv = p2.app_serv and p1.nom = SEGARRA and p2.nom= TANGUY;
Posez la requte suivante en SQL : Trouver les personnes qui travaillent dans un autre service que M. Tanguy.
4 4.1
Annexes Documentation standard ORACLE. Une documentation en ligne est mise votre disposition (http://lricdrom.enstbretagne.fr/cd/817docs/DOC/). Pour accder une aide sur le langage SQL, choisir Oracle8 Server, puis Oracle8 SQL Reference qui vous liste les commandes et leur syntaxe. SQL*Plus User's Guide and Reference propose une explication pour dbuter avec le langage SQL. Une aide en ligne est disponible sous linterprteur SQL Plus. Moins facile dutilisation que la documentation papier ou html, elle peut cependant dpanner en cas de problme. > help ; vous permet de connatre les lments pour lesquels une aide en ligne est disponible. > help command; vous permet de connatre les commandes pour lesquels une aide en ligne est disponible. > help select; vous permet de connatre la syntaxe de la commande select.
4.2 Premier contact avec SQLPlus Pour connatre le schma de vos tables, vous pouvez utiliser la commande desc nom_de_la_table . Par exemple, pour connatre le schma de la relation emp (employ), taper : desc emp Pour connatre le contenu dune table, vous pouvez utiliser les commandes du langage SQL, par exemple : Select * from emp ; Enfin, pour amliorer la visualisation des rsultats, il vous est recommand de positionner au sein de linterprteur SQLPlus dOracle les variables paramtrant laffichage des rsultats : Set linesize 130; Set pagesize 65; Set long 1024; Set pause on; Vous tes maintenant capable dattaquer les exercices dcrits dans la section suivante. 4.3 SQL et la casse (case sensitivity) Par dfaut, les noms de structures (i.e. de relations, dattributs, de synonymes, etc.) sont en majuscules mais vous pouvez les utiliser en minuscules dans les requtes, linterprteur les mettra de lui-mme en majuscule. Les deux requtes ci-dessous donnent le mme rsultat : > SELECT ENAME FROM EMP; > select ename from emp; Si vous voulez dissocier le traitement des caractres minuscules ou majuscules, il faut utiliser les quotes. Par exemple, seule la premire des deux requtes suivantes donnera un rsultat correct : > select ENAME from EMP; > select ename from emp;
Philippe Picouet LUSSI - ENST Bretagne 5
En revanche, les valeurs dattributs textuels sont case-dependant . Par consquent, les deux requtes suivantes sont diffrentes : > select ename from EMP where job=SALESMAN; > select ename from EMP where job=Salesman; Enfin, la recherche de chanes de caractre incomplte sexprime en SQL laide du comparateur LIKE et des caractres % (percent remplace toute chane de caractres) et _ (underscore remplace un caractre quelconque). Par exemple : > select ename from EMP where job like SALE%; > select ename from EMP where job like SALES_AN;
4.4
Sauvegardes Quelques commandes utiles si vous souhaitez garder des traces des requtes que vous tapez : save filename.sql /* sauve la requte courante dans un fichier de nom filename.sql*/ get filename.sql /* charge le contenu du fichier de nom filename.sql comme requte courante dans le buffer*/ start filename /* charge et excute la requte SQL contenue dans le fichier filename.sql */ run /* lance l'excution de la requte courante stocke dans le buffer*/ spool filename.txt /* fait une sortie fichier de la sortie courante lcran*/ spool off /* suspend l'opration prcdente*/