LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité SQL2 92: la nouvelle norme SQL3 98: les évolutions objets 1. Origines et Evolutions(1/2) SQL est dérivé de l'algèbre relationnelle et de SEQUEL (1974/1976- Lab. de recherche IBM à San José) Il existe trois versions normalisées, du simple au complexe : SQL1 86 version minimale SQL1 89 addendum (intégrité) SQL2 (92) langage complet à 3 niveaux Une version 3 étendue (objets, règles) est en préparation. La plupart des systèmes supportent SQL1 complet 1 2 Origines et Evolutions(2/2) Types de données (domaines) Il a été intégré à SQL/DS, DB2, ORACLE, INGRES, Langage de requêtes des SGBDR - ORACLE (Oracle Corp. - 77) - INGRES (Ingres Technology - 80) - DB2 (IBM - 1984) - INFORMIX (Informix Inc - 81) - SYBASE (Sybase Inc - 84) Les types principaux INTEGER DECIMAL (m,n) virgule) FLOAT CHAR (n) VARCHAR DATE TIME entier (32 bits) décimaux de mchiffres (dont n après la réels flottants chaîne de n caractères chaîne variable d au plus n car. dates (année, mois et jour) instants (heure, minute, seconde) 3 4
OPERATIONS Opérations de base select, insert, update, delete Opérations additionnelles définition et modification de schémas définition de contraintes d'intégrité définition de vues accord des autorisations gestion de transactions ORGANISATION DU LANGAGE SQL comprend quatre parties : Le langage de définition de schéma (Tables, Vues, Droits) Le langage de manipulation (Sélection et mises à jour) La spécification de modules appelables (Procédures) L'intégration aux langages de programmation (Curseurs) 5 6 SQL: SQL: Langage de définition de données (schéma, LDD) création de relations : CREATE TABLE modification de relations: ALTER TABLE suppression de relations: DROP TABLE vues: CREATE VIEW... LANGAGE DE CONTROLE DE DONNEES GRANT et REVOKE BEGIN et END TRANSACTION COMMIT et ROLLBACK Langage de manipulation de données (LMD) insertion de tuples: INSERT mise à jour des tuples: UPDATE suppression de tuples: DELETE 7 8
Langage de Définition de Données Commandes pour créer, modifier et supprimer les éléments du schéma (tables, vues, index) CREATE SCHEMA créer un schéma CREATE TABLE créer une table (une relation) CREATE VIEW créer une vue sur les donnéesexistantes DROP {TABLE VIEW } supprimer une table ou une vue ALTER {TABLE VIEW } modifier une table ou une vue CREATE TABLE Commande créant une table terminologie SQL: relation table, attribut colonne CREATE TABLE nom-table { ( nom-col type-col [DEFAULT valeur] [contraintecol] )* [contrainte-table] AS requête-sql }; 9 10 CREATE TABLE exemple Contraintes CREATE TABLE Pays ( nom VARCHAR(20) NOT NULL, capitale VARCHAR(15), Contrainte sur une colonne (contrainte-col) [NOT] NULL UNIQUE population DECIMAL(4,2) DEFAULT 0, PRIMARY KEY surface DECIMAL(5,0) DEFAULT 0 ); Contraintes sur une table (contrainte-table) UNIQUE (nom -col)* PRIMARY KEY (nom-col)* FOREIGN KEY (nom-col)* REFERENCES nom_table [(nom-col)*] UNIQUE et PRIMARY KEY sont incompatibles 11 12
Exemple CREATE TABLE Pays ( nom VARCHAR(20) PRIMARY KEY, capitale VARCHAR(15), population DECIMAL(4,2), surface DECIMAL(5,0) ); DROP TABLE DROP : supprimer une table supprime la table et tout son contenu DROP TABLE nom-table; CREATE TABLEJO ( année DECIMAL(4,0), lieu VARCHAR(15), pays VARCHAR(20), PRIMARY KEY (année), FOREIGN KEY (pays) REFERENCES Pays (nom)); 13 14 ALTER TABLE ALTER TABLE Modifier la définition d une table Ajouter une colonne ou une contrainte, mot clé : ADD Modifier une colonne ou une contrainte, mot clé : MODIFY Changer le nom de la table, mot clé : RENAME ALTER TABLE nom-table { RENAME TO nouveau-nom-table ADD ( [ (nom-col type-col [DEFAULT valeur] [contrainte-col])* ] [contrainte-table] ) MODIFY (nom-col [type-col] [DEFAULT valeur] [contrainte-col])* }; 15 16
ALTER TABLE exemple ALTER TABLE Pays ADD COLUMN sign varchar(3); Langage d interrogation SELECT A1,, An FROM R1,, Rm WHERE [condition] Ai un nom d'attribut (de colonne) Rj un nom de relation (de table) SELECT définit le format du résultat cherché FROM définit à partir de quelles tables le résultat est calculé WHERE définit les prédicats de sélection du résultat 17 18 Exemple de requête (sélection seule) SELECT * FROM Pays WHERE population < 20 ; Exemple de requête (projection seule) SELECT nom, capitale FROM Pays; 19 * = toutes les colonnes (spécification dynamique) 20
Exemple de requête (sélection+projection) SELECT nom, capitale, population FROM Pays WHERE population < 20 ; Jointure de 2 relations SELECT année, lieu, pays, capitale FROM JO, Pays WHERE JO.pays = Pays.nom ; 21 22 Jointure de 2 relations: résultat jointure sur la même table SELECT année, lieu, pays, capitale FROM JO, Pays WHERE JO.pays = Pays.nom ; 23 24
jointure sur la même table Comparer les populations des pays SELECT P1.nom, P1.population, P2.nom, P2.population FROM Pays P1, Pays P2 WHERE P1.population > P2.population ; => Toutes les paires de pays telles que le premier pays a une population plus grande quele deuxième pays P1 Exemple P2 NB: La table Pays est renommée en P1 et P2 25 26 Jointure naturel Jointure multiple En algèbre : R S En SQL : SELECT * FROM R, S WHERE R.A1 = S.A1 AND R.A2= S.A2 AND R.An = S.An Avec A1, A2,, Anattributs communs à R,S En algèbre : R S T V En SQL : SELECT * FROM R, S, T, V WHERE R.A1 = S.A1 AND R.A1 = T.A1 AND R.A1 = V.A1 AND R.A2= S.A2 AND R.A2= T.A2 AND R.A2= V.A2 Avec A1, A2attributs communs à R,S, T et V 27 28
Produit cartésien Exemple En algèbre: R x S (R et S n ont pas d attributs communs) En SQL: SELECT * FROM JO J1, JO J2; SELECT * FROM R, S 29 30 Union, Intersection, Differénce Exemple En algèbre: R S (R et S ont les mêmes attributs) En SQL: SELECT *FROM R UNION SELECT * FROM S En algèbre: R S -> INTERSECT En algèbre: R - S -> MINUS SELECT * FROM JO WHERE année >1900 UNION SELECT * FROM JO WHERE année<1900 ; 31 32
SQL et algèbre relationnelle SELECT A1,, An FROM R1,, Rm WHERE [condition] Determiner le resultat Ecriture des conditions Produit Cartesien R 1 x R 2 x... X R m Elimination des tuples grâce à la condition Elimination des attributs 33 34 Opérateurs de comparaison Opérateurs logiques = égal <> différent > plus grand que >= plus grand ou égal < plus petit que <= plus petit ou égal WHERE surface = 200 WHERE capitale <> Paris WHERE population > 8 WHERE population >= 8 WHERE surface < 83 WHERE surface <= 83 Tous les prédicats: AND WHERE population<10 AND surface<500 Un des prédicats: OR WHERE population<10 OR surface<500 Négation de la condition : NOT SELECT P1.nom, P2.nom, P1.capitale FROM PAYS P1, PAYS P2 WHERE P1.capitale = P2.capitale AND NOT P1.nom = P2.nom ; 35 36
Expressions logiques Appartenance à un ensemble: IN Combinaisons: WHERE ( ensoleillement > 80% ANDpluviosité < 200 ) OR température > 30 WHERE ensoleillement > 80% AND ( pluviosité < 200 OR température > 30 ) WHERE monnaie = Pound OR monnaie = Euro OR Équivalent à: monnaie = Franc WHERE monnaie IN ( Pound, Euro, Franc ) NOT IN: non appartenance à un ensemble 37 38 Valeur dans un intervalle: BETWEEN WHERE population >= 50 AND population <= 60 Équivalent à: WHERE population BETWEEN 50 AND 60 NOT BETWEEN Conditions partielles % : zéro ou n importe quel caractère WHERE pays LIKE %lande -> Irlande, Islande, Finlande, Hollande WHERE pays LIKE %ran% -> Iran, France _ : exactement un caractère WHERE pays LIKE I_lande -> Irlande, Islande NOT LIKE 39 40
Valeurs calculées SELECT nom, population, surface, natalité FROM PAYS WHERE (population * 1000 / surface) < 50 AND (population * natalité / surface) > 0 Requêtes Imbriquées 41 42 BD Exemple : Livraisons Requêtes Imbriquées: IN P ( np, nomp, couleur, poids, prix ) les produits U ( nu, nomu, ville, pays ) F ( nf, nomf, type, ville, pays ) PUF ( np, nu, nf, quantité ) np, nu, nf dans PUF sont des identifiants externes sur P, U et F (respectivement)) les usines les fournisseurs les livraisons Nom et couleur des produits livrés par le fournisseur 1 Solution 1 : la jointure déclarative SELECT nomp, couleur FROM P, PUF WHERE PUF. np = P. np AND nf = 1 ; Solution 2 : la jointure procédurale (par emboîtement ) SELECT nomp, couleur FROM P WHERE np IN ( SELECT np FROM PUF WHERE nf = 1) ; 1. Ensemble des produits livrés par le fournisseur 1 2. Nom et couleur des produits du fournisseur 1 43 44
Composition de conditions Nom des fournisseurs qui approvisionnent une usine de Londres ou de Paris en un produit rouge SELECT nomf FROM F WHERE nf IN (SELECT nf FROM PUF WHERE np IN (SELECT np FROM P SELECT nomf FROM PUF, P, F, U WHERE couleur = 'rouge' AND PUF.np = P.np AND PUF.nf = F.nf AND PUF.nu = U.nu WHERE couleur = 'rouge ) AND (U.ville = 'Londres' AND nu IN OR U.ville = 'Paris'); (SELECT nu FROM U WHERE ville = 'Londres' OR ville = 'Paris') ) ; Quantificateurs : ANY Numéro des fournisseurs de produits rouges SELECT nf Equivalent au IN FROM PUF WHERE np = ANY ( SELECT np FROM P WHERE couleur = 'r ouge' ) ; Numéro des fournisseurs dont le numéro est inférieur au numéro des fournisseurs fournissant des produits pesant plus d une tonne SELECT nf FROM PUF WHERE nf < ANY ( SELECT R.nf FROM P, PUF R WHERE poids > 1000 and R.NP=P.NP ) ; 45 46 Quantificateurs : ALL Numéros des fournisseurs qui ne fournissent que des produits rouges SELECT nf FROM F WHERE 'rouge' = ALL ( SELECT couleur FROM P WHERE np IN ( SELECT np FROM PUF WHERE PUF.nf = F.nf ) ) ; Conditions sur des ensembles: CONTAINS Inclusion des ensembles (E1 E2) Noms des fournisseurs qui fournissent tous les produits rouges SELECTnomf FROM F WHERE (SELECTnp FROM PUF WHERE PUF.nf = F.nf ) CONTAINS ( SELECT np FROMP WHERE P.couleur = 'rouge' ) E1: Ensemble des produits du fournisseur nf E2: Ensemble des produits rouges 47 48
Conditions sur des ensembles: EXISTS Test si l ensemble n est pas vide (E ) Noms des fournisseurs qui fournissent au moins un produit rouge SELECT nomf FROM F WHERE EXISTS ( SELECT * FROM PUF, P WHERE PUF.nf = F.nf AND PUF.np = P.np AND P.couleur = 'rouge' ) ; Traitement des résultats Fonctions sur les colonnes Élimination de tuples répétés (DISTINCT) Définition de l ordre des tuples (ORDER BY) Regroupement de résultats (GROUP BY) 49 50 Fonctions sur des colonnes Exemple Attributs calculés Ex:SELECT nom, population*1000/surface FROM PAYS Opérateurs sur attributs numériques SUM: somme des valeurs des tuplessélectionnés AVG : moyenne Opérateurs sur tous types d attributs MIN: minimum MAX: maximum COUNT: nombre de tuplessélectionnés Opérateur agrégation SELECT MIN(population), MAX(population), AVG(population), SUM(surface), COUNT(*) FROM Pays WHERE continent = Europe ; la population du plus petit pays d Europe, la population du pays le plus grand, la moyenne des populations de tous les pays d Europe, la somme des surfaces et le nombre de pays d Europe 51 52
Aggrégation et blocs emboîtés Suppression des doubles: DISTINCT SELECT nom, population FROM Pays WHERE population < ( SELECT AVG(population) FROM Pays) ; SELECTDISTINCTcontinent FROM PAYS ; 53 54 ORDER BY GROUP BY SELECT continent, nom, population FROM PAYS WHERE surface > 60 ORDER BY continent DESC, nom ASC ; Partition de l ensemble des tuples en groupes homogènes SELECT continent, MIN(population), MAX(population), AVG(population), SUM(surface), COUNT(*) FROM PAYS GROUP BY continent ; 55 56
Exemple2 (GROUP BY) Produire le nombre de Commandes passées par chacun des Clients qui ont passé au moins une Commande SELECT noclient, COUNT(*) AS nombrecommandes FROM Commande GROUP BY noclient Table Commande nocommande datecommande noclient 1 01/06/2000 10 3 02/06/2000 10 4 05/07/2000 10 2 02/06/2000 20 6 09/07/2000 20 5 09/07/2000 30 7 15/07/2000 40 8 15/07/2000 40 noclient nombrecommandes 10 3 20 2 30 1 40 2 HAVING Condition sur les éléments de partition de l ensemble des tuples en groupes homogènes SELECT continent, MIN(population), MAX(population), AVG(population), SUM(surface), COUNT(*) FROM PAYS GROUP BY continent HAVING continent = 'Europe' ; 57 58 Exemple2 (HAVING) Produire le nombre de Commandes passées par chacun des Clients qui ont passé deux Commandes ou plus SELECT noclient, COUNT(*) AS nombrecommandes FROM Commande GROUP BY noclient HAVING COUNT(*) >= 2 Table Commande nocommande datecommande noclient 1 01/06/2000 10 3 02/06/2000 10 4 05/07/2000 10 2 02/06/2000 20 6 09/07/2000 20 5 09/07/2000 30 7 15/07/2000 40 8 15/07/2000 40 noclient nombrecommandes 10 3 20 2 30 1 40 2 Manipulation des données insertion mise à jour suppression 59 60
Commandes de manipulation INSERT INTO: ajouter un tupledans une table UPDATE: changer des valeurs dans les tuples d une table DELETE FROM: éliminer les tuples d une table INSERT INSERT INTO {nom_table} [ (nom_col)* ] { VALUES (valeur)* sous-requête }; INSERT INTO JO VALUES (1996, 'Atlanta', 'USA') ; INSERT INTO JO (année, lieu) VALUES (2000, 'Sydney') ; 61 62 INSERT et requête UPDATE INSERT INTO Pays SELECT nom, capitale, surface FROM Pays1 WHERE capitale IS NOT NULL ; UPDATE Pays SET population = 4 WHERE nom = 'Irlande'; UPDATE Ville SET pays = 'RFA' WHERE pays = 'RDA'; 63 64
DELETE FROM DELETE FROM {nom_table} WHERE condition; DELETE FROM PAYS WHERE population > 30 ; DELETE FROM PAYS ; vider la table Table virtuelle (VIEW) Table Article noarticle description prixunitaire quantitéenstock 10 Cèdre en boule 10.99 10 20 Sapin 12.99 10 40 Epinette bleue 25.99 10 50 Chêne 22.99 10 60 Erable argenté 15.99 10 70 Herbe à puce 10.99 10 80 Poirier 26.99 10 81 Catalpa 25.99 10 90 Pommier 25.99 10 95 Génévrier 15.99 10 CREATE VIEW ArticlePrixModique AS SELECT noarticle, description, prixunitaire FROM Article WHERE prixunitaire < 15 SELECT * FROM ArticlePrixModique VIEW ArticlePrixModique noarticle description prixunitaire 10 Cèdre en boule 10.99 20 Sapin 12.99 70 Herbe à puce 10.99 65 66 Implémentation mentation des tables virtuelles SQL - Valeurs nulles 67 CREATE VIEW ArticlePrixModique AS SELECT noarticle, description, prixunitaire FROM Article WHERE prixunitaire < 15 SELECT * FROM ArticlePrixModique SELECT * FROM ( SELECT noarticle, description, prixunitaire FROM Article WHERE prixunitaire < 15) Représentation de valeurs d attribut non renseignés 68 Valeur Spéciale NULL INSERT INTO VINS (NV, CRU, MILL, COULEUR) VALUES ( PERB1, PèreBenoit, NULL, Rouge) Nouveaux tests IS NULL, IS NOT NULL Effets sur les comparaisons Valeurs des prédicats TRUE, FALSE, UNKNOWN (1, 2, NULL) = (3, NULL, 4) IS FALSE (1, 2, NULL) < (3, NULL, 4) IS TRUE (1, 2, NULL) = (1, NULL, 4) IS UNKNOWN (1, 2, NULL) > (NULL, 2, 4) IS UNKNOWN Nouveaux tests IS UNKOWN, IS NOT UNKNOWN Effet sur les tris pour les tris, les NULL sont égales entre elles et plus grandes que les autres valeurs
UTILISATION DE SQL DEPUIS UN LP Intégration de deux systèmes de types utilisation d'un pré-compilateur et d'une librairie Passage de l'ensembliste au tuple à tuple utilisation de curseurs et Fetch Exemple ProgramPL/1-SQL EXEC SQL BEGIN DECLARE SECTION ; DCL VAR1 CHAR(20) ; SELECT DCL VAR2 INT ; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE C1 CURSOR FOR SELECT FROM WHERE :VAR1 EXEC SQL OPEN C1 ; DO WHILE SQLCODE = 0 Curseur BEGIN EXEC SQL FETCH C1 INTO :VAR2 69 SGBD SQL1-89 : INTEGRITE VALEURS PAR DEFAUT CREATE TABLE VINS 70 ( NV INT UNIQUE, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2), NVT INT, PRIX FIXED(7,2) DEFAULT 40 ) CONTRAINTES DE DOMAINES SALAIRE INT CHECK BETWEEN 6000 AND 100000 SQL1-89 : INTEGRITE REFERENTIELLE CLE PRIMAIRE ET CONTRAINTE REFERENTIELLE CREATE TABLE VINS 71 ( NV INT PRIMARY KEY, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2), NVT INT REFERENCES VITICULTEURS, PRIX DEFAULT 40 ) REFERENCE EN PRINCIPE LA CLE PRIMAIRE celle de VITICULTEURS LA NORMALISATION DE SQL GROUPE DE TRAVAIL ANSI/X3/H2 et ISO/IEC JTC1/SC2 DOCUMENTS ISO : SQL1-86 :Database Language SQL X3.135 ISO -9075-1987) SQL1-89 :Database Language SQLwith Integrity Enhancement X3.168 ISO-9075-1989 SQL2-92 :Database Language SQL2 X3.135 ISO-9075-1992 ARGUMENTS POUR : Réduction des coûts d'apprentissage 72 Portabilité des applications Longévité des applications Langage de communication inter-systèmes ARGUMENTS CONTRE : Manque de rigueur théorique Affaiblit la créativité
POSITION DES VENDEURS 3. SQL2 Problèmes : SQLCODE (0 ou <0 si erreur) Trois niveaux distingués : ALTER / DROP Table Dynamique SQL (Prepare, Execute) Méta-base normalisée Modèles internes (Index, Espaces, ) SQL VENDEUR.1 Entry SQL2 = SQL89 + manques Intermediate SQL2 =Compléments relationnels SQL SQL Full SQL2 = Gadgets en plus SQL VENDEUR.2 STANDARD VENDEUR.3 73 74 SQL2 Entry SQL2 Intermediate Codes réponses SQLSTATE Renommage des colonnes résultats Mots clés utilisables entre " " Métabasenormalisée (schémas) TYPES DE DONNEES DATE AVEC OPERATIONS DATE, TIME et TIMESTAMP Intervalles de temps CASCADE DES MISES A JOUR Suppression en cas d' intégrité référentielle avec options Cascader les suppressions (CASCADE) Rendre nul l'attribut référençant (NULLIFY) DIFFERENTS ALPHABETS ET ORDRES DE LETTRES 75 76
SQL2 Intermediate POSSIBILITE DE CREER DES DOMAINES CREATE DOMAINE MONEY IS DECIMAL (5,2) DEFAULT (-1) CHECK (VALUE = -1 OR VALUE > 0) NOT NULL JOINTURE EXTERNE (OUTER -JOIN) SELECT FROM R1 [NATURAL] [{LEFT RIGHT}] JOIN R2 [ON (A=B)], WHERE EXPRESSIONS DE SELECT [OUTER] UNION INTERSECT EXCEPT SQL2 Full Extension des dates et temps Expressions étendues avec correspondances de colonnes Possibilité de SELECT en argument d'un FROM Vues concrètes Contraintes d'intégrité multi-tables Contrôles d'intégrité différés 77 78 SQL - Intégrité SQL - Intégrité Contraintes d intégrité ensemble de règles devant être vérifiées par les tuples de la base de données Contraintes de Domaine associées à une domaine Les couleurs de vin ne peuvent être que Rouge, Blanc ou Rose CREATE DOMAIN COULEURSVIN CHAR(10) CONSTRAINT ICCV CHECK ( VALUE IN ( Rouge, Blanc, Rose ) ) Les colonnes de domaine VILLES ne peuvent prendre la valeur nulle CREATE DOMAIN VILLES CHAR(15) CONSTRAINT ICVILLES CHECK ( VALUE IS NOT NULL ) Contraintes Générales appliquées à une combinaison arbitraire de colonnes entre les tables de la base Les millésimes des vins ne peuvent dépasser l année en cours CREATE ASSERTION ICMILL CHECK (SELECT MAX(MILL) FROM VINS) <= EXTRACT(YEAR FROM CURRENT_DATE) Aucun buveur ne peut boire plus de 1000 bouteilles de vins rouges CREATE ASSERTION ICQTEROUGE CHECK (NOT EXISTS( SELECT * FROM ABUS, VINS WHERE ABUS.NV=VINS.NV AND COULEUR= Rouge GROUP BY ABUS.NB HAVING SUM(QTE) > 1000 ) ) Exercice : On ne peut consommer plus que ce qui est produit 79 80
SQL - Intégrité Exercice : On ne peut consommer plus que ce qui est produit CREATE ASSERTION ICCons CHECK ( (SELECT SUM(Qte) FROM VINS)>= (SELECT SUM(Qte ) FROM ABUS)) SQL - Intégrité Contraintes de Table associées à une table spécifique contraintes check vérifient les valeurs prises dans une ou plusieurs colonnes Les consommations sont toujours supérieures à 0 CONSTRAINT QTEPOSITIVE CHECK (ABUS.QTE > 0 ) contraintes sur la clé (candidate/primaire) vérifie si le groupe d'attributs clé a une valeur unique CREATE TABLE BUVEURS( NB...,..., PRIMARY KEY (NB)) CREATE TABLE VINS( CRU..., MILL...,..., PRIMARY KEY (CRU, MILL)) 81 82 SQL - Intégrité 4. SQL3 - Composants 83 contraintes sur les clés étrangères vérifie si la valeur de clé étrangère correspond à un tuple de la table référencée CREATE TABLE ABUS( NB..., CRU..., MILL...,..., PRIMARY KEY (NB,CRU, MILL)) FOREIGN KEY (NB) REFERENCES BUVEURS, FOREIGN KEY (CRU,MILL) REFERENCES VINS) des actions peuvent être effectuées sur la relation comportant des clés étrangères FOREIGN KEY (NB) REFERENCES BUVEURS, ON DELETE effect ON UPDATE effect, FOREIGN KEY (CRU,MILL) REFERENCES VINS ON DELETE effect ON UPDATE effect) effect = { CASCADE NO ACTION SET DEFAULT SET NULL } Liming Chen Composants multiples Framework, Foundation, Binding 84 CLI, PSM Transactions, temporal, real-time Interface client SQL/CLI du SAG (X/OPEN) Procédures stockées Persistent Stored Modules (PSM) Objets Récursion Déclencheurs
Un Standard en Evolution PROPOSITION CONCURRENTE DE L'ODMG Accord entre constructeurs de SGBD Objets Support du modèle pur objet de l'omg Variation de SQL traitant des collections imbriquées Accord ANSI X3 H2 et ODMG Définition d'un langage d'interrogation intégrant relationnel et objet Convergence relationnel-objet vers SQL3 SQL3 prévu pour 1999 intégrera L4G Objet Règles (BD actives) 5. CONCLUSION Un standard de plus en plus complet et de plus en plus suivi Attention aux approximations et imitations incomplètes Tout existe dans les propositions SQL2 ou SQL3 Une référence pour implémenter et utiliser chaque aspect des BD Le langage universel sur lequel s'appuie les progiciels SQL réussira-t-il à bien intégrer l'objet? 85 86 EXERCICE Exercice: BASE DE DONNEES 1- Donner la couleur et le cru des vins VITICULTEURS (NVT, NOM, PRENOM, VILLE, REGION) VINS (NV, CRU, MILLESIME, DEGRE, NVT,Couleur, PRIX,QTE) BUVEURS (NB, NOM, PRENOM, VILLE) ABUS (NV, NB,DATE,QTE) GROS_BUVEURS (NB, NOM, PRENOM) 2- Donner la couleur et le cru des vins (sans doublon) 3- Donner les vins rouges et blancs et des millésimes entre 1987 et1989 4- Donner les noms des buveurs commençant par DU 5- Donner les noms des buveurs ayant bu un vin ainsi que la quantité bue 6- Donner le nom des buveurs habitant Paris et ayant bu un vin rouge ainsi que le cru bu 87 88
Exercice : 7- Donner les noms des buveurs habitant la même ville 8- Donner le nom des buveurs habitant Paris et ayant bu un vin rouge 9- Donner le nom des buveurs habitant Paris n ayant pas bu de vin r ouge 10- Donner le nombre de vins 11- Donner le nom des buveurs ayant consommer un vin plus que la moyenne Solution: 1- Donner la couleur et le cru des vins SELECT VINS.CRU, VINS.COULEUR FROM VINS 2- Donner la couleur et le cru des vins (sans doublon) SELECT DISTINCT VINS.CRU, VINS.COULEUR FROM VINS 89 90 Solution: Solution: 3- Donner les vins rouges et blancs et des millésimes entre 1987 et1989 SELECT * FROM VINS WHERE (VINS.COULEUR= Rouge OR VINS.COULEUR= Blanc ) AND (MILL>=1987 AND MILL <= 1989) ou bien AND (MILL BETWEEN 1987 AND 1989) ou bien AND (MILL IN (1987, 1988, 1989)) 4- Donner les noms des buveurs commençant par DU SELECT NOM FROM BUVEURS WHEREUPPER(SUBSTRING(BUVEURS.NOM FROM 1 TO 2)) = DU ou bien WHERE BUVEURS.NOM LIKE DU% Jointure 5- Donner le nom des buveurs ayant bu un vin ainsi que la quantité bue SELECT BUVEURS.NOM, ABUS.QTE FROM BUVEURS, ABUS WHERE BUVEURS.NB=ABUS.NB 91 92
Solution: Restriction-Jointure-Projection 6- Donner le nom des buveurs habitant Paris et ayant bu un vin rouge ainsi que le cru bu SELECT BUVEURS.NOM, VINS.CRU FROMBUVEURS, ABUS, VINS WHERE BUVEURS.NB=ABUS.NB AND ABUS.NV=VINS.NV AND BUVEURS.VILLE= Paris AND VINS.COULEUR= Rouge Auto-Jointure : jointure d'une relation avec elle-même 7- Donner les noms des buveurs habitant la même ville SELECT B1.NOM AS NOM, B2.NOM AS NOM2, B1.VILLE AS VILLE FROMBUVEURS AS B1, BUVEURS AS B2 WHERE B1.VILLE=B2.VILLE Solution: Expression procédurale des requêtes 8- Donner le nom des buveurs habitant Paris et ayant bu un vin rouge SELECT BUVEURS.NOM FROM BUVEURS WHERE BUVEURS.VILLE= Paris AND BUVEURS.NB IN ( SELECT ABUS.NB FROMABUS, VINS WHERE ABUS.NV = VINS.NV AND VINS.COULEUR= Rouge ) ) 93 94 Solution: Solution: SOL2: Donner le nom des buveurs habitant Paris et ayant bu un vin rouge SELECT B.NOM FROM BUVEURS AS B WHERE B.VILLE= Paris AND EXISTS ( SELECT * FROM ABUS, VINS WHERE ABUS.NV=VINS.NV AND NB = B.NB AND VINS.COULEUR= Rouge ) 9- Donner le nom des buveurs habitant Paris n ayant pas bu de vin rouge SELECT FROM BUVEURS WHERE BUVEURS.NOM BUVEURS.VILLE= Paris AND BUVEURS.NB NOT IN ( SELECT ABUS.NB FROM ABUS, VINS WHERE ABUS.NV = VINS.NV AND VINS.COULEUR= Rouge ) 95 96
Solution: 10- Donner le nombre de vins SELECT COUNT(*) FROM VINS 11- Donner le nom des buveurs ayant consommer un vin plus que la moyenne SELECT BUVEURS.NOM FROM BUVEURS, ABUS WHERE BUVEURS.NB=ABUS.NB AND ABUS.QTE > (SELECT AVG(QTE) FROM ABUS) 97