Sql3

1,973 views
1,800 views

Published on

1 Comment
1 Like
Statistics
Notes
  • C'est tré intéressant dommage en peu pas le télécharger
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,973
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Sql3

  1. 1. (" LABORATOIRE D’INFORMATIQUE DE L’UNIVERSITE DE PAU ET DES PAYS DE L’ADOUR BDD Avancées SQL3 Richard Chbeir, Ph.D.
  2. 2. Plan! Encapsulation des objets Interrogation des objets Manipulation des objets Introduction" 10/12/13 Page 2 •  Fonctions et procédures
  3. 3. Pourquoi ? Employe NumEmp dept salaire ADR … … … … … … … … Approche relationnelle 10/12/13 Page 3
  4. 4. Pourquoi ? Employe NumEmp dept salaire ADR … … … … … … … … Employe NumEmp dept salaire ADR NOR UE VILLE CODE_POSTAL … … … … … 10/12/13 Page 4 RUE … … … Approche avancée
  5. 5. Comment faire? Définition d’un nouveau Type Abstrait de Données ou TAD 10/12/13 Page 5
  6. 6. Introduction •  TAD –  Une structure de données partagée –  Inclut des méthodes qui sont des procédures ou des fonctions permettant de manipuler les objets ou instances du type abstrait –  Ne peut pas contenir de contraintes (NOT NULL, CHECK, …) 10/12/13 Page 6
  7. 7. Introduction •  Autres types de TAD –  Large Object Bloc (LOB) •  Binary LOB (BLOB) : stockage des données binaires non structurées (4Go) •  Character LOB (CLOB) : stockage de données caractères (4Go) •  Binary FILE (BFILE) : fichiers binaires localisés à l extérieur de la BDD 10/12/13 Page 7
  8. 8. Introduction •  Usage des TAD –  Dans une table –  Dans un attribut d’une table relationnelle –  Etc. 10/12/13 Page 8
  9. 9. Introduction •  Création d’un TAD –  Syntaxe SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! ! ! !)! ; /! 10/12/13 Page 9
  10. 10. Introduction •  Création d’un TAD –  Exemple SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 10 RUE VILLE CODE_POSTAL
  11. 11. Introduction •  Création d’un TAD –  Type utilisé par un attribut d’une table relationnelle •  Exemple SQL> CREATE TABLE employe (! !norue NUMBER PRIMARY KEY,! !dept VARCHAR2(10),! !sal NUMBER, ! !adr adresse_type);! Employe NumEmp dept sal ADR NOR UE VILLE CODE_POSTAL … … … … … 10/12/13 Page 11 RUE … … … Une table contient un TAD est une table relationnelle-objet
  12. 12. Introduction •  Manipulation des TAD –  Insertion des tuples •  Exemple (insérer les informations de l’employé numéro 1 dans la table Employé) SQL> INSERT INTO Employe( 1, 'Informatique', 2000, adresse_type(98,'Faubourg Raines',’Lyon',’69000’) ) ; 10/12/13 Page 12
  13. 13. Introduction •  Manipulation des TAD –  Modification des tuples •  Exemple (modifier le salaire et le numéro de la rue de l’employé lyonnais qui porte le numéro 1) SQL> UPDATE Employe e SET e.sal= 200, e.adr.rue=’130' WHERE e.adr.ville LIKE '%Ly%' and e.numero='1'; Utilisation d’alias obligatoire lors de la manipulation 10/12/13 Page 13
  14. 14. Introduction •  Manipulation des TAD –  Interrogation des tuples •  Exemple (trouver tous les employés lyonnais) SQL> 10/12/13 Page 14 SELECT e.numero FROM employes e WHERE e.adr.ville LIKE '%Ly%’;
  15. 15. Introduction •  Manipulation des TAD –  Suppression des tuples •  Exemple (supprimer(le(tuple(de(l’employé(dont( l’adresse(est(130(Ray(Lyon(6) SQL> 10/12/13 Page 15 DELETE FROM employes e WHERE e.adr = adresse_type(130,’Ray',’Lyon',’6’);
  16. 16. Donner&le&script&SQL& perme1ant&de&créer& ce1e&table& rela6onnelle7objet?! Numdep Secrétaire Budget nemp age nom D2 N1 28 Zidane D3 325000 N2 26 Thuram D4 10/12/13 Page 16 253000 125000 N5 26 Dessailly
  17. 17. Donner&le&script&SQL& perme1ant&& d’insérer&les&tuples& suivants&?! numdep Secrétaires budget Nemp D3 325000 D4 10/12/13 Page 17 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  18. 18. Problème!lié!à!la!table!imbriquée! numdep Secrétaires budget Nemp D3 325000 D3 10/12/13 Page 18 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  19. 19. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! Secretaire5type Nemp 10/12/13 Page 19 age nom
  20. 20. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireSOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! SQL> CREATE OR REPLACE TYPE SecretaireS_Type! !AS TABLE OF Secretaire-Type ! / ! SecretaireS_Type" Nemp 10/12/13 Page 20 age Nom
  21. 21. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer(la(table(Département)! SQL> CREATE TABLE Departement ( numdep VARCHAR2(5) PRIMARY KEY, budget NUMBER, secrétaires SecretaireS_Type ) NESTED TABLE secrétaires STORE AS tabsec; numdep Secrétaires budget Nemp 10/12/13 Page 21 D4 325000 125000 nom N2 26 Thuram N3 30 Barthez N5 D3 age 26 Dessailly N6 24 Lizarazu N7 32 Deschamps
  22. 22. Introduction •  Manipulation des TAD –  Insertion des tuples dans une table imbriquée •  Exemple (insérer toutes les informations du département D3) SQL> INSERT INTO Departement VALUES ( ‘D3’, 325000, SecretaireS-Type(Secretaire-Type(‘N2’,26,’Thuram’), Secretaire-Type(‘N3’,30,’Barthez’) ) ) ; numdep Secrétaires budget Nemp 10/12/13 Page 22 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  23. 23. Introduction •  Manipulation des TAD –  Modification des tuples dans une table imbriquée •  Exemple (modifier l’âge de tous les secrétaires du département D3 dont le nom commence par la lettre B) SQL> UPDATE THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') a SET a.age = 38 WHERE a.nom LIKE ‘B%'; numdep Secrétaires budget Nemp 10/12/13 Page 23 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  24. 24. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver l'âge des secrétaires du département D3) SELECT la.age FROM THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') la; SQL> numdep Secrétaires budget Nemp 10/12/13 Page 24 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  25. 25. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver les secrétaires de chaque département) SQL> SELECT D.numdep, S.* FROM Departement D, TABLE (D.Secrétaires) S; numdep Secrétaires budget Nemp 10/12/13 Page 25 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  26. 26. Introduction •  Manipulation des TAD –  Suppression des tuples dans une table imbriquée •  Exemple (supprimer les tuples des secrétaires du département D3 ayant plus de 30 ans) SQL> DELETE FROM the (SELECT e.Secrétaires FROM Departement e WHERE e.numero=’D3') li WHERE li.age >= 30 ; numdep Secrétaires budget Nemp 10/12/13 Page 26 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  27. 27. Donner&le&script&SQL& perme1ant&&de&créer& la&table&suivante&?! Employe NEmp dept Lieux Interventions ADR sal N° VILLE CODE_POSTAL … … … … … 10/12/13 Page 27 RUE … … … Ville Distance
  28. 28. Et si avait le schéma suivant ? Véhicule Employe NumEmp dept salaire ADR N°Véhicule Num Type Marque Date … … … … .. … … … … … … … … … … … … … Contrat NumEmp Montant … … … 10/12/13 Page 28 N°Int … Intervention Poss. Date N° Ville Distance … … … … … … … … Approche relationnelle
  29. 29. Comment le transformer en … Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 29 @contrat … … … … … Approche objet-relationnelle Date
  30. 30. Table objet-relationnelle •  Définition –  Une table est dite objet-relationnelle quand elle dépend d un TAD Les enregistrements d une table OR peuvent être considérés comme des objets car ils possèdent tous un Object ID (OID) 10/12/13 Page 30
  31. 31. Table objet-relationnelle •  Pseudo-colonnes –  ROWID •  Désigne une pseudo-colonne qui contient l adresse physique de chaque enregistrement d une base de données Oracle –  OID •  Dans Oracle, chaque objet (table, type, objets des tables, …) a un identificateur unique (OID) sur 16 positions –  REF •  Chaque objet, au sens Oracle du terme, possède un OID via une pseudo-colonne de type REF. Chaque REF est composé d une partie de l OID, des informations de la table objet-relationnelle et éventuellement du ROWID. 10/12/13 Page 31
  32. 32. Table objet-relationnelle •  Pour créer une table Objet-relationnelle ayant une structure d un type préalablement défini SQL> CREATE TABLE Nom_table OF Nom_Type ! ! ![(Contraintes_d_integrite)]! ;! 10/12/13 Page 32
  33. 33. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! ! !(no_int ! !VARCHAR2 (8),! ! !date_int !DATE,! ! !Montant ! !NUMBER)! /! contrat_typ No_int 10/12/13 Page 33 Date_int Montant
  34. 34. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! 10/12/13 Page 34
  35. 35. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! ! !(no_immat !VARCHAR2 (8),! ! !date_immat !DATE,! ! !type_v !VARCHAR2(7),! ! !marque !VARCHAR2(15))! /! veh_typ No_immat 10/12/13 Page 35 Date_immat Type_v marque
  36. 36. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! 10/12/13 Page 36
  37. 37. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 37 RUE VILLE CODE_POSTAL
  38. 38. Table objet-relationnelle •  Création des types utilisés –  Attention aux références/pointeurs SQL> CREATE OR REPLACE TYPE Lieu_intervention AS OBJECT! ! !(! ! !ref_contrat !REF contrat_typ,! ! !Ville ! !VARCHAR2(15),! ! !Distance !NUMBER)! /! Lieu_intervention ref_contrat 10/12/13 Page 38 Ville Distance
  39. 39. Table objet-relationnelle •  Création des types utilisés (à partir d’un autre type) SQL> CREATE OR REPLACE TYPE Lieux_intervention! !AS TABLE OF lieu_intervention! / ! 10/12/13 Page 39
  40. 40. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE employe_type As OBJECT (! !numero ! !VARCHAR2(5),! !nom ! !VARCHAR2(15),! !prenom ! !VARCHAR2(15),! !dept ! !VARCHAR2(20),! !veh !REF !veh_typ,! !ADR !adresse_type,! !lieux_interventions!lieux_intervention)! / ! 10/12/13 Page 40
  41. 41. Table objet-relationnelle •  Création de la table OR SQL> CREATE TABLE Employes OF employe_type! !(CONSTRAINT PK_employe PRIMARY KEY(numero))! !NESTED TABLE lieux_interventions STORE AS tab_int! ;! 10/12/13 Page 41
  42. 42. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 42 @contrat … … … … … Date
  43. 43. Le script SQL OR SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! !(no_immat !VARCHAR2 (8),! !date_immat !DATE,! !type_v !VARCHAR2(7),! !marque !VARCHAR2(15))! /! SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! Véhicule Num Type Marque Date … … … … … … … … SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! !(no_int !VARCHAR2 (8),! !date_int !DATE,! !Montant !NUMBER)! /! SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! Contrat N°Int … 10/12/13 Page 43 Montant … … … Date
  44. 44. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … … CREATE or replace TYPE adresse_type norue NUMBER, rue VARCHAR(20), ville VARCHAR2(30), @contrat / CREATE OR REPLACE TYPE employe_type As OBJECT ( numero AS OBJECT( NUMBER) REF ADR VARCHAR2(15), Distance VARCHAR2(20), veh ref_contrat REF contrat_typ, Ville VARCHAR2(15), dept CREATE OR REPLACE TYPE Lieu_intervention VARCHAR2(15), prenom / VARCHAR2(5), nom code_postal VARCHAR2(10)) 10/12/13 Page 44 Distance CREATE or REPLACE TYPE Lieux_intervention as Table of lieu_intervention AS OBJECT ( / Ville adresse_type, lieux_interventions veh_typ, lieux_intervention) / CREATE TABLE Employes OF employe_type (CONSTRAINT PK_employe PRIMARY KEY(numero)) NESTED TABLE lieux_interventions STORE AS tab_int;
  45. 45. A vous •  Table!OR! Departement numdep Secrétaires budget Nemp D3 325000 D4 10/12/13 Page 45 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  46. 46. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD SQL> INSERT INTO Nom_Table ! ! !VALUES ( V1, V2, ….., Nom_Type( ! ! !val1, val2, ….) ! ! !); ! Constructeur 10/12/13 Page 46
  47. 47. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into contrats values('1','12/12/2006',500); SQL> insert into contrats values( contrat_typ( 1','12/12/2006',500) ); Contrat N°Int … 10/12/13 Page 47 Montant … … … Date
  48. 48. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into vehicules values( veh_typ( 2', BMW , X5 ,'12/12/2006') ); Véhicule Num Marque Date … … … … … 10/12/13 Page 48 Type … … …
  49. 49. Insertion des tuples •  Dans une table OR contenant un pointeur Employe NumEmp dept sal @veh SQL> INSERT INTO Employes … select 1,'Informatique', 2000, ref(a) from vehicules a where a.no_immat='2' … ; Véhicule Num Marque Date … … … … … 10/12/13 Page 49 Type … … …
  50. 50. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Syntaxe -- Initialisation de la table imbriquée à vide ! SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type() ); -- Avec insertion de n-uplets dans la table imbriquée 10/12/13 Page 50 SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type( Nom_type1 ( …….), Nom_type1 ( …….), Nom_type1 ( …….) ) );
  51. 51. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() from vehicules a where a.no_immat='2' ; 10/12/13 Page 51
  52. 52. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() SQL> INSERT vehicules a where a.no_immat='2' from INTO Employes select 2, ’Marqua', ’Xtophe','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), ; Lieux_Intervention(Lieu_intervention(null,'Dijon',500)) from vehicules a where a.no_immat='2' ; 10/12/13 Page 52
  53. 53. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Syntaxe SQL> INSERT INTO THE (SELECT t.Tab_Imb FROM Nom_table t WHERE t.Attr_i = Valeur) SELECT V1, V2, ,REF(n)FROM Table_R n WHERE n.Attr_j = Valeur ; 10/12/13 Page 53
  54. 54. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple nécessitant l’insertion dans la table principale SQL> INSERT INTO Employes select 3, ’Xavier', ’Dupont','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention(Lieu_intervention(null,'Dijon',500), Lieu_intervention(ref(v),'Lyon',600) ) from vehicules a, contrats v where v.no_int='2' and a.no_immat='2' ; 10/12/13 Page 54
  55. 55. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple ne nécessitant pas l’insertion dans la table principale SQL> INSERT INTO the (select e.Lieux_interventions from Employes e where e.numero='3') select ref(v), Paris',800 from contrats v where v.no_int='1' ; 10/12/13 Page 55
  56. 56. Mise à jour des tuples •  Dans une table principale –  Syntaxe SQL> UPDATE Nom_de_table Alias SET Alias.Nom_Attribut1 = expression1 Alias.Nom_Attribut2 = expression2 ……. [WHERE Condition ] ; 10/12/13 Page 56
  57. 57. Mise à jour des tuples •  Dans une table principale –  Exemple SQL> UPDATE Employes e SET e.Nom='Nicolle', e.Prenom='Christophe' WHERE e.adr.ville LIKE '%Dijon%' and e.numero='1'; 10/12/13 Page 57
  58. 58. Mise à jour des tuples •  Dans une table imbriquée –  Syntaxe SQL> 10/12/13 Page 58 UPDATE THE (SELECT Nom_Alias1.Table_imbriquée FROM Table Nom_Alias1 WHERE Condition ) Nom_alias2 SET Nom_alias2.Attribut = expression WHERE Condition ;
  59. 59. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Modifier la distance d intervention à 8888 de l employé 1 dans la ville de Dijon SQL> UPDATE THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero='1') a SET a.distance = 8888 WHERE a.ville LIKE '%Dijon%'; 10/12/13 Page 59
  60. 60. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Pour l’employé 2, changer son intervention associée à la ville de Dijon, la nouvelle référence ayant pour numéro T1234 SQL> UPDATE THE ( SELECT e.lieux_interventions FROM Employes e WHERE e.numero='2') a SET a.ref_contrat = (select ref(v) from contrats v where v.No_int ='T1234') WHERE a.ville LIKE '%Dijon% ; 10/12/13 Page 60
  61. 61. Suppression des tuples •  Syntaxe générale SQL> 10/12/13 Page 61 DELETE FROM Nom_table Alias WHERE Alias.Nom_attribut = Expression ;
  62. 62. Suppression des tuples •  Condition de suppression portant sur une table imbriquée –  Exemple •  Supprimer les employés qui ont eu des interventions à Lyon SQL> DELETE FROM Employes e WHERE EXISTS(select * from the (SELECT a.lieux_interventions FROM employes a WHERE a.numero=e.numero) li WHERE li.ville = Lyon') ; 10/12/13 Page 62
  63. 63. Suppression des tuples •  Condition de suppression portant sur les n-uplets d’une table imbriquée –  Exemple •  Supprimer les interventions de l’employé 2 qui se sont déroulées à Lyon SQL> DELETE FROM the (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') li WHERE li.ville LIKE '%Lyon% ; 10/12/13 Page 63
  64. 64. Departement Donner&le&script&SQL&perme1ant&& d’insérer&le&tuple&D3,&de&rajouter& le&secrétaire&N4&à&D3,&et&de& supprimer&N2?! numdep Secrétaires budget Nemp D4 10/12/13 Page 64 325000 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 D3 253000 nom N5 D2 age 32 Deschamps
  65. 65. Interrogation des tuples •  Syntaxe générale SQL> SELECT t.Nom_attr1, t.Nom_ attr2, , …. FROM Table t; Utilisation d'un alias obligatoire pour les attributs structurés 10/12/13 Page 65
  66. 66. Interrogation des tuples •  Exemple –  Donnez le numéro, le nom et le prénom des employés qui ont un véhicule mis en circulation après le 01/06/2006 SQL> 10/12/13 Page 66 SELECT e.numero, e.nom, e.prenom FROM employes e WHERE e.VEH.date_immat>='01/12/2006';
  67. 67. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient l’employé numéro 2 SELECT la.ville FROM THE (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') la; SQL> 10/12/13 Page 67
  68. 68. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient tous les employés SQL> 10/12/13 Page 68 SELECT la.ville FROM employes e, TABLE(e.lieux_interventions) la;
  69. 69. Interrogation des tuples •  Exemple –  Donnez les numéros et les montants des contrats de l’employé numéro 1 SQL> 10/12/13 Page 69 SELECT le.ref_contrat.no_int, le.ref_contrat.montant FROM THE(SELECT e.lieux_interventions FROM employes e WHERE e.numero='1') le;
  70. 70. Interrogation des tuples •  Exemple –  Afficher les informations relatives aux contrats de l’employé numéro « 1 » SQL> SELECT (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li; 000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE034 00400B40DCB1 SQL> 10/12/13 Page 70 SELECT DEREF (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li;
  71. 71. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Syntaxe SQL> 10/12/13 Page 71 SELECT Nom_de_fonction ( paramètres )! !FROM Nom_de_relation! ![WHERE condition1]! ![GROUP BY condition2 [HAVING condition3]]!
  72. 72. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Exemple •  Afficher le nombre des employés qui habitent Dijon SQL> 10/12/13 Page 72 SELECT count(*) FROM Employes Emp WHERE emp.adr.ville = 'Dijon';
  73. 73. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Syntaxe SQL> SELECT Nom_de_fonction ( paramètres ) FROM THE (SELECT alias.tab_imb FROM Table alias WHERE alias.nom_attribut = valeur ); 10/12/13 Page 73
  74. 74. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats de l’employé numéro 1 SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1); 10/12/13 Page 74
  75. 75. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats dans la ville de Dijon pour l’employé numéro « 1 » SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1) li where li.ville='Dijon'; 10/12/13 Page 75
  76. 76. Interrogation des tuples •  Utilisation des curseurs –  Syntaxe SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2 FROM TABLE (Tab_Imb) ti) FROM table alias WHERE condition; 10/12/13 Page 76
  77. 77. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les villes respectives SQL> SELECT Emp.numero, Emp.nom, Emp.prenom, CURSOR (SELECT Li.ville FROM TABLE(lieux_interventions) Li) FROM employes Emp; 10/12/13 Page 77
  78. 78. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les contrats respectifs SQL> SELECT e.numero, e.nom, e.prenom, CURSOR (SELECT CURSOR (SELECT * FROM contrats p) FROM TABLE(e.lieux_interventions) d) FROM Employes e; 10/12/13 Page 78
  79. 79. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE or replace TYPE etudiant_type AS OBJECT (no_insee VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) not final; / CREATE or replace TYPE etudiant_IUT UNDER etudiant_type (date_inscription DATE, situa_fam CHAR(1), annee varchar2(4)) final;/ 10/12/13 Page 79
  80. 80. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE TABLE etudiants_IUT of etudiant_IUT ; 10/12/13 Page 80
  81. 81. Heritage •  Insertion –  Exemple SQL> INSERT INTO etudiants_IUT VALUES ('12345555',22,'Almamy','12/12/2005','1','IQ2'); 10/12/13 Page 81
  82. 82. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 1.  Lors de déclaration de la fonction (Create ou ALTER) SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! MEMBER FUNCTION nom_fonction1 RETURN type_données! MEMBER FUNCTION nom_fonction2 RETURN type_données! );! /! 10/12/13 Page 82
  83. 83. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 2.  Spécification du corps de la fonction SQL> CREATE TYPE BODY Nom_Type AS MEMBER FUNCTION nom_fonction1() IS BEGIN END nom_fonction1() ; MEMBER FUNCTION nom_fonction2() IS BEGIN END nom_fonction2() ; … END; / 10/12/13 Page 83
  84. 84. Conclusions! 10/12/13 Page 84

×