SQL est basé sur l algèbre et le calcul relationnels Il a été intégré à SQL/DS, DB2, puis Oracle, Ingres,

Documents pareils
LE LANGAGE SQL2 1. INTRODUCTION

SQL Historique

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Langage SQL : créer et interroger une base

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Bases de Données relationnelles et leurs systèmes de Gestion

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Intégrité des données

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Le langage SQL Rappels

Bases de données relationnelles

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

INTEGRITE ET BD ACTIVES

Le Langage De Description De Données(LDD)

TP Contraintes - Triggers

Le Langage SQL version Oracle

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Les bases de données

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

1 Introduction et installation

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Devoir Data WareHouse

MySQL / SQL EXEMPLES

Introduction au Système de Gestion de Base de Données et aux Base de Données

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Intégrité sémantique dans les bases de données relationnelles

Cours Bases de données 2ème année IUT

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Introduction aux Bases de Données 2004/2005

Création et Gestion des tables

Historisation des données

A QUOI SERVENT LES BASES DE DONNÉES?

TP Bases de données réparties

Bases de données avancées

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

16H Cours / 18H TD / 20H TP

Olivier Mondet

A QUOI SERVENT LES BASES DE DONNÉES?

CREATION WEB DYNAMIQUE

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Le langage SQL (première partie) c Olivier Caron

Notes de cours : bases de données distribuées et repliquées

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Administration des bases de données. Jean-Yves Antoine

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

PHP 5. La base de données MySql. A. Belaïd 1

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

Bases de données et sites WEB

FileMaker 13. Guide de référence SQL

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Cours SQL. Base du langage SQL et des bases de données

OpenPaaS Le réseau social d'entreprise

Bases de Données Avancées

Les bases fondamentales du langage Transact SQL

Structured Query Language

OBJECTIFS ET ARCHITECTURE DES SGBD

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Gestion de base de données

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

LA GESTION DES VUES 1. INTRODUCTION

Quelques aspects du Relationnel-Objet du SGBD Oracle

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Vincent Augusto

Optimisation SQL. Quelques règles de bases

Auto-évaluation Oracle: cours de base

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Corrigés détaillés des exercices

I4 : Bases de Données

Bases de Données Réparties

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

I. MySQL : Serveur et SGBD

TP3 : Creation de tables 1 seance

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Panorama des Bases de Données

Exercices sur SQL server 2000

1/ Présentation de SQL Server :

Bases de données et sites WEB Licence d informatique LI345

Les BASES de DONNEES dans WampServer

SQL Server 2000, Analysis Services et DTS

Chapitre Introduction : Notion de Bases de données. 2. Définition : BD Répartie. 3. Architecture des SGBD. 4. Conception des bases réparties

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

Cours: Administration d'une Base de Données

Configurer la supervision pour une base MS SQL Server Viadéis Services

TD n 10 : Ma première Base de Données

Cours: Les Jointures 1

Sybase Adaptive Server Enterprise 15

Comprendre les bases de données

Transcription:

SQL 1/66

SQL: historique SQL est basé sur l algèbre et le calcul relationnels Il a été intégré à SQL/DS, DB2, puis Oracle, Ingres, Il existe trois normes : SQL1 (1986) version minimale SQL1 (1989) + intégrité SQL2 (1992) langage complet Une version 3 étendue à l objet vient être proposée. La plupart des systèmes supportent SQL1 complet 2/66

Rappel algèbre Notion de relation Schéma : Nom de relation + ensemble d attributs Extension : ensemble de tuples (n-uplets) Cinq opérations de base Π, Projection, Restriction X, Produit cartésien U, Union -, Différence Autres opérations déduites l><l, Jointure, Intersection, Division ρ, Renommage 3/66

Rappel calcul relationnel ou calcul à variable n-uplet Langage formel basé sur la logique des prédicats du premier ordre Requêtes en calcul relationnel {t φ(t) } t désigne une variable n-uplet et φ(t) une formule bien formée Formules, composées à partir de : termes atomiques : variables t, noms de relations et constantes opérateurs, =, <, >, connecteurs, v et negation Quantificateurs et SQL Version commerciale du calcul relationnel 4/66

Exemple de requête Schéma : Viticulteurs (NVT, Nom, Prénom, Ville, Région) Vins (NV, Cru, Millésime, Degré, NVT, Prix) Buveurs (NB, Nom, Prénom, Ville) Abus(NV, NB,Date,Qté) Quels sont les viticulteurs qui ont produit au moins un vin de 1983 (nom et cru)? {t:cru, nom v w ( v Vins ^ w Viticulteurs ^ t(cru) = v(cru) ^ t(nom)=w(nom) ^ w(nvt) = v(nvt) ^ v(mill) =1983 } 5/66

Quels sont les viticulteurs qui ont produit au moins un vin de 1983 (nom et cru)? {t:cru, nom v w ( v Vins ^ w Viticulteurs ^ t(cru) = v(cru) ^ t(nom)=w(nom) ^ w(nvt) = v(nvt) ^ v(mill) =1983 } SELECT W.nom, V.cru FROM Viticulteurs W, Vins V WHERE V.nvt = W.nvt and V.mill = 1983; Algèbre relationnelle? 6/66

SQL1 : Composantes de base Langage de manipulation de données (DML) SELECT INSERT UPDATE OPEN FETCH CLOSE DELETE Langage de définition de données (DDL) CREATE TABLE CREATE VIEW DROP TABLE DROP VIEW Langage de contrôle de données GRANT et REVOKE BEGIN et END TRANSACTION COMMIT et ROLLBACK 7/66

Types de données en SQL Types atomiques: Chaînes de caractères: CHAR(20), VARCHAR(50) ex. Paris Nombres: INT, BIGINT, SMALLINT, FLOAT Autres: MONEY, DATETIME, Enregistrements (tuple) contiens des attributs atomiques Table (relation) ensemble de tuples 8/66

Details SQL n est pas «sensible à la casse» SELECT = Select = select Region = region Sauf pour les chaînes de caractères: Paris paris 9/66

Select (forme de base) : principe et sémantique Une requête SQL est une description dans une syntaxe propre à ce langage d éléments contenus dans une base de données Format simplifié : SELECT [DISTINCT] Attribut 1, Attribut 2, Attribut p FROM Relation 1, Relation 2, Relation k WHERE Conditions Q [ORDER BY ASC/DESC] [{UNION INTERSECT EXCEPT } SELECT ] Condition: arithmétique (=, <, >,,, ) textuelle (LIKE: exp. réguliers avec caractères spéciaux %, _ ) sur intervalle (BETWEEN) sur liste (IN) 10/66

2 sémantiques (interprétations) équivalentes SELECT a 1, a 2,, a p FROM R 1 AS x 1, R 2 AS x 2,, R k AS x 2 WHERE Conditions ; π Attribut1,Attribut2,, Attributp ( σ Q ( R1 X R2 X X Rk) ) ) Résultat = {} for x 1 in R 1 do for x 2 in R 2 do.. for x k in R k do if Conditions then Résultat = Résultat {(a 1,,a p )} return Résultat 11/66

Quels sont les viticulteurs qui ont produit au moins un vin de 1983 (nom et cru)? {t:cru, nom v w ( v Vins ^ w Viticulteurs ^ t(cru) = v(cru) ^ t(nom)=w(nom) ^ w(nvt) = v(nvt) ^ v(mill) =1983 } SELECT W.nom, V.cru FROM Viticulteurs W, Vins V WHERE V.nvt = W.nvt and V.mill = 1983; Algèbre relationnelle? 12/66

Select : exemples de requêtes (1) Liste des crus sans doublons, ordonné. SELECT DISTINCT Cru FROM Vins ORDER BY Cru ASC; Noms des buveurs ayant bus du Beaujolais 87 ou 88. SELECT DISTINCT Nom FROM Buveurs B, Vins V, Abus WHERE B.nb = Abus.nb AND Abus.nv = V.nv AND Cru LIKE '%Beaujolais%' AND millesime IN (1987, 1988) ; 13/66

Select : exemples de requêtes (2) Exemple d utilisation du OR : Noms et prénoms des buveurs de vins de degré inconnu ou compris entre 11 et 13. SELECT Nom, Prénom FROM Buveurs B, Vins V, Abus A WHERE B.nb = A.nb AND A.nv = V.nv AND (degre BETWEEN 11 AND 13 OR degre IS NULL); 14/66

Union / Intersection SELECT nvt FROM Viticulteurs WHERE region= Bourgogne OR/AND nom= Dupont ; SELECT nvt FROM Viticulteurs WHERE region= Bourgogne UNION/INTERSECT SELECT nvt FROM Viticulteurs WHERE nom= Dupont ; 15/66

Difference SELECT nvt FROM Viticulteurs WHERE region= Bourgogne AND nom <> Dupont ; SELECT nvt FROM Viticulteurs WHERE region= Bourgogne EXCEPT/MINUS SELECT nvt FROM Viticulteurs WHERE nom= Dupont ; 16/66

Imbrication (sous-requêtes) Une requête SQL «imbriquée» peut apparaître dans: la partie SELECT (en général à éviter) la partie FROM (en général à éviter) la partie WHERE parfois incontournable 17/66

Imbrication dans le SELECT Pour chaque vin la région ou il est produit. SELECT V.nv, (SELECT DISTINCT W.region FROM Viticulteurs W WHERE W.nvt=V.nvt) FROM Vins V; Corrélation Et si un vin est produit dans plusieurs régions? Sans imbrication? 18/66

Imbrication dans le SELECT Pour chaque vin la région ou il est produit. SELECT V.nv, (SELECT DISTINCT W.region FROM Viticulteurs W WHERE W.nvt=V.nvt) FROM Vins V; Et si un vin est produit dans plusieurs regions? Sans imbrication? SELECT V.nv, W.region FROM Viticulteurs W, Vins V WHERE W.nvt=V.nvt; 19/66

Imbrication dans le SELECT Pour chaque vin le nombre de régions ou il est produit. SELECT DISTINCT V.nv, (SELECT count(w.region) FROM Viticulteurs W FROM Vins V; WHERE W.nvt=V.nvt) Sans imbrication? On va voir le GROUP BY 20/66

Imbrication dans le FROM SELECT * FROM (SELECT * FROM Vins V WHERE V.millesime = 1983) as temp WHERE temp.prix < 15; Sans imbrication? 21/66

Imbrication dans le WHERE Possibilité de blocs imbriqués par : IN, EXISTS, NOT EXISTS, ALL, ANY SELECT nom FROM Viticulteurs W WHERE W.nvt IN (SELECT V.nvt FROM Vins V WHERE V.mill = 1983); SELECT nom FROM Viticulteurs W WHERE W.nvt NOT IN (SELECT V.nvt FROM Vins V WHERE V.mill = 1983); 22/66

Imbrication: EXISTS / NOT EXISTS Noms des crus bus par au moins un buveur. SELECT DISTINCT cru FROM Vins V WHERE EXISTS ( SELECT * FROM Abus A WHERE A.nv = V.nv ); 23/66

Imbrication: ANY SELECT DISTINCT region FROM Viticulteurs W WHERE 10 < ANY (SELECT degre FROM Vins V WHERE V.nvt=W.nvt ); Sans imbrication? 24/66

Imbrication: ANY SELECT DISTINCT region FROM Viticulteurs W WHERE 10 < ANY (SELECT degre FROM Vins V WHERE V.nvt=W.nvt ); SELECT DISTINCT region FROM Viticulteurs W, Vins V WHERE 10 < degre and V.nvt=W.nvt; Les quantificateurs existentiels (ANY, EXISTS, IN) > requête sans imbrication? Facile! 25/66

Imbrication: ALL SELECT * FROM Vins V WHERE V.degre > ALL (SELECT degre FROM Vins W WHERE W.millesime = 1983); 26/66

Requêtes monotones Soit Q une requête sur les relations R, S, T, ; soit Q(R, S, T, ) le résultat de Q. Définition Q est monotone ssi : R R, S S, Q(R, S, ) Q(R,S, ) Théorème Toutes les requêtes select-from-where sont monotones. La requête précédente n est pas monotone. Quantificateurs universels (NOT IN, NOT EXISTS, ALL) -> l imbrication ne peut pas être évité. 27/66

Division (1) Les buveurs qui ont bu tous les vins. SELECT B. nb FROM Buveurs B WHERE NOT EXISTS ((SELECT V.nv FROM Vins V) EXCEPT (SELECT A.nv FROM Abus A WHERE A.nb=B.nb)) (2) SELECT B.nb FROM Buveurs B WHERE NOT EXISTS (SELECT V.nv FROM Vins V WHERE NOT EXISTS (SELECT Buveurs nb tels que... A.nv FROM Abus A aucun vin nv sans... WHERE A.nv=V.nv AND A.nb=B.nb)) tuple «nb a bu nv» 28/66

Fonctions et agrégat Fonction Fonction de calcul en ligne appliquée sur un ou plusieurs attributs Exemple : DEGRE * QUANTITE / 100 Agrégat MIN, MAX, AVG, SUM, COUNT A l exception de COUNT, les agrégats s appliquent à un seul attributs par défaut, COUNT s applique au doublons 29/66

Exemple: agrégat SELECT AVG(degre*millesime) FROM Vins; SELECT count(millesime) FROM Vins; SELECT count(*) FROM Vins; COUNT(millesime) ne s applique pas pour millesime=null SELECT count(distinct degre) FROM Vins; 30/66

GROUP BY SELECT FROM [WHERE [GROUP BY liste de projection liste de tables critère de jointure AND critère de restriction] A1, A2,, Ak (attributs de partitionnement)] Partitionnement horizontal d'une relation selon les valeurs d'un groupe d'attributs, suivi d'un regroupement par une fonction de calcul en colonne (Sum, Min, Max, Avg, Count) Calculer le degré moyen pour chaque cru. SELECT CRU, AVG(DEGRE) as moyenne FROM Vins GROUP BY CRU; La liste de projection peut contenir 1. n importe quels agrégats 2. des attributs parmi A1,, Ak, mais pas d autres attributs! 31/66

Sémantique du GROUP BY calcul des parties FROM et WHERE partitionnement horizontal (grouping) selon les attributs du GROUPBY calcul de la partie SELECT: attributs qui apparaissent dans la liste GROUPBY et agrégats. Observation: chaque groupe sera non-vide. SELECT R.A, count(*) FROM R WHERE R.B < 55 GROUP BY R.A; Toujours > 0! 32/66

Exemples GROUP BY / agrégats (2) Vins! CRU! MILL! DEGRE! QUANTITE! CHABLIS!! CHABLIS!! VOLNAY!! VOLNAY!! MEDOC! 1977!! 1987!! 1977!! 1986!! 1985! 10.9!! 11.9!! 10.8!! 11.2!! 11.2! 100!! 250!! 400!! 300!! 200! SELECT MOY(DEGRE) FROM Vins; SELECT CRU, SUM(QUANTITE) FROM Vins GROUP BY CRU; AVG! DEGRE! 11.2! SUM! CRU! QUANTITE! CHABLIS!! VOLNAY!! MEDOC! 350!! 700!! 200! 33/66

GROUP BY vs. imbrication SELECT cru, AVG(degre) as moyenne FROM Vins WHERE millesime < 2000 GROUP BY cru; SELECT DISTINCT cru, (SELECT AVG(degre) FROM Vins Y WHERE Y.nv=X.nv AND Y.millesime < 2000) AS moyenne FROM Vins X WHERE X.millesime < 2000; 34/66

Forme plus générale du GROUP BY SELECT FROM [WHERE [GROUP BY [HAVING liste de projection liste de tables critère de jointure AND critère de restriction] attributs de partitionnement] critère de restriction sur les partitions] HAVING : conditions sur des agrégats. Calculer le degré moyen et le degré minimum pour tous les crus de 94 dont le degré minimum est supérieur à 12. SELECT cru, AVG(degre), MIN(degre) FROM Vins WHERE millesime = 1994 GROUP BY cru HAVING MIN(degre) > 12; 35/66

Sémantique avec HAVING SELECT S FROM R1,,Rn WHERE Q1 GROUP BY A1,,Ak HAVING Q2; Calculer les parties FROM et WHERE (appliquer les conditions Q1) Grouper selon A1,, Ak Appliquer les conditions Q2 sur chaque groupe Calculer les agrégats de la liste S et retourner le attributs/agrégats de S 36/66

NULLs en SQL NULL interprétations: La valeur n existe pas La valeur existe mais elle est inconnue La valeur ne s applique pas etc. Dans la spécification du schéma, on peut indiquer si un attribut peut être NULL ou pas. Comment gérer les NULLs? 37/66

NULLs Si x= NULL alors 3*(3-x)/=NULL Si x= NULL alors x= Alice est UNKNOWN En SQL nous avons 3 valeurs booléennes FALSE = 0 UNKNOWN = 0.5 TRUE = 1 38/66

NULLs C1 AND C2 = min(c1, C2) C1 OR C2 = max(c1, C2) NOT C1 = 1 C1 SELECT * FROM Personnes WHERE (age < 30) AND (taille > 180 OR poids > 80); Rule in SQL: include only tuples that yield TRUE age=20 taille=null poids=100 En SQL: on garde un tuple uniquement si conditions = TRUE 39/66

NULLs Résultat inattendu: SELECT * FROM Personnes WHERE age < 30 OR age >= 30; Certaines personnes ne sont pas dans le résultat! 40/66

NULLs Syntaxe SQL pour NULLs: x IS NULL x IS NOT NULL SELECT * FROM Personnes WHERE age < 30 OR age >= 30 OR age IS NULL; 41/66

Outerjoin (jointure externe) Les jointure explicite en SQL = inner joins : produit(nom, catégorie) achat(prodnom, magasin) SELECT produit.nom, achat.magasin FROM produit JOIN achat ON produit.nom = achat.prodnom; Equivalent: SELECT produit.nom, achat.magasin FROM produit, achat WHERE produit.nom = achat.prodnom; Mais les produits qui n ont pas été achetés sont perdus! 42/66

Outerjoin Left outer join (jointure externe gauche) en SQL: produit(nom, catégorie) achat(prodnom, magasin) SELECT produit.nom, achat.magasin FROM produit LEFT OUTER JOIN achat ON produit.nom = achat.prodnom; 43/66

produit achat nom catégorie Prodnom magasin DVD Visio DVD Fnac Camera Photo Camera Surcouf Portable Info Camera Fnac nom magasin DVD Fnac Camera Surcouf Camera Fnac Portable NULL 44/66

Application Calculer pour chaque produit, le nombre total d achats en septembre produit(nom, catégorie) achat(prodnom, mois, magasin) SELECT produit.nom, count(*) FROM produit, achat WHERE produit.nom = achat.prodnom and achat.mois = Septembre GROUP BY produit.nom; Où est le problème? 45/66

Solution on doit utiliser l attribut (égal à NULL) pour obtenir 0 SELECT produit.nom, count(magasin) FROM produit LEFT OUTER JOIN achat ON produit.nom = achat.prodnom WHERE achat.mois = Septembre GROUP BY produit.nom; Maintenant on obtient aussi les produits sans achats. 46/66

Outer Joins Left outer join: Inclut les tuples gauches même s il n y a pas de correspondant Right outer join: Inclut les tuples gauches même s il n y a pas de correspondant Full outer join: Inclut les tuples gauches et droites même s il n y a pas de correspondant 47/66

Create table CREATE TABLE Vins ( NV NUMBER(6) UNIQUE, CRU CHAR(10), ANNEE NUMBER(4), DEGRE NUMBER(5, 2), NVT NUMBER(3), PRIX NUMBER(5, 2) ); DROP TABLE Vins; ALTER TABLE Vins ADD COLUMN type : char; 48/66

Create view CREATE VIEW Gros_Buveurs AS SELECT nb, nom, prenom, FROM WHERE Buveurs, Abus buveurs.nb = Abus.nb AND Abus.quantite > 100; DROP VIEW 49/66

Insert INSERT INTO nom de relation [( attribut [, attribut] )] VALUES (valeur [, valeur] ) spécification de requête Valeurs manquants sont mises à NULL On peut ne pas donner les noms des attributs si dans l ordre Exemples INSERT INTO Vins (nv, cru, millesime) VALUES (112, "JULIENAS", NULL); INSERT INTO Buveurs (nb, nom, prenom) SELECT nvt, nom, prenom FROM Viticulteurs WHERE ville LIKE '%DIJON% ; 50/66

Update UPDATE nom de relation SET attribut = expression de valeur NULL [attribut = expression de valeur NULL] [WHERE critère de recherche] Exemple UPDATE Abus SET qte = qte * 1.1 WHERE Abus.nv IN SELECT nv FROM Vins WHERE cru = 'VOLNAY' AND millesime = 1990; 51/66

Delete DELETE FROM [WHERE nom de relation critère de recherche] Exemple: DELETE FROM Abus WHERE nv IN SELECT nv FROM Vins WHERE degre IS NULL; Question: peut-on effacer une seule occurrence d un tuple qui apparaît plusieurs fois dans une relation? 52/66

Contraintes d intégrité en SQL Types: Clés primaires/secondaires Contraintes sur les valeurs d un attribut Contraintes sur un tuple Contraintes globale: assertions 53/66

Clés Clé primaire et contrainte référentielle CREATE TABLE Vins ( NV NUMBER(6) PRIMARY KEY, CRU CHAR(10), ANNEE NUMBER(4), DEGRE NUMBER(5,2), NVT NUMBER(3) REFERENCES VITICULTEURS, PRIX NUMBER(5,2) DEFAULT 40 ) Référence la clé primaire de VITICULTEURS 54/66

Clés Clé primaire, contrainte référentielle, unicité CREATE TABLE Vins ( NV NUMBER(6), CRU CHAR(10), ANNEE NUMBER(4), DEGRE NUMBER(5,2), NVT NUMBER(3), PRIX NUMBER(5,2) DEFAULT 40, PRIMARY KEY(NV,CRU), UNIQUE (NV, ANNEE), FOREIGN KEY (nvt) REFERENCES Viticulteurs(nvt) ) On peut avoir un seul PRIMARY KEY, mais plusieurs UNIQUE 55/66

Contraintes sur un attribut VALEURS PAR DEFAUT CREATE TABLE Vins ( NV NUMBER(6) UNIQUE, CRU CHAR(10), ANNEE NUMBER(4) NOT NULL, DEGRE NUMBER(5,2), NVT NUMBER(3), PRIX NUMBER(5,2) DEFAULT 40 ) CONTRAINTES DE DOMAINES SALAIRE NUMBER(8, 2) CHECK BETWEEN 6000 AND 100000 56/66

Norme actuelle (SQL2-92) Trois niveaux : Entry SQL2 SQL89 + manques Intermediate SQL2 Compléments relationnels Full SQL2 Gadgets en plus 57/66

Solutions BD pour le développement d applications Embedded SQL Procédures stockées (stored procedures) Déclencheurs (triggers) 58/66

ESQL : SQL dans un langage de programmation Intégration de deux systèmes de types utilisation d'un pré-compilateur Passage du traitement ensembliste au traitement tuple à tuple utilisation de curseurs et Fetch Exemple de programme en C/SQL... EXEC SQL INCLUDE SQLCA.H ;... EXEC SQL BEGIN DECLARE SECTION ; VARCHAR A[20], B[20]; NUMBER C; EXEC SQL END DECLARE SECTION ; scanf("%s", A);... EXEC SQL DECLARE C1 CURSOR FOR SELECT FROM WHERE = :A EXEC SQL OPEN C1 ; WHILE (SQLCA.SQLCODE = 0) { EXEC SQL FETCH C1 INTO :B, :C;... Curseur SELECT SGBD 59/66

Procédure stockée Procédure écrite en L3G/SQL ou L4G/SQL définie au niveau du schéma de la base et stockée dedans. Avantages : partitionnement des traitements entre client et serveur limiter le trafic sur le réseau, partager des procédures Rapidité d exécution Exemple : Réservations Transactionnelles Réservations Batch Etablir la réservation 60/66

Déclencheur (Trigger) Action base de données déclenchée suite à l'apparition d'un événement particulier Forme : {BEFORE AFTER} <événement> THEN <action> Un événement peut être : une opération sur une table (m-à-j) un événement externe (heure, appel, etc.) Une action peut être : une requête BD (mise à jour) un abort de transaction l'appel à une procédure stockée 61/66

Déclencheur avec condition (Règle) Il est possible d'ajouter une condition au déclenchement de l'action Une condition est une qualification portant sur la base. Exemples : BEFORE UPDATE FROM EMPLOYE IF SALAIRE > 100.000 THEN ABORT TRANSACTION 62/66

Conclusion Un standard de plus en plus complet et de plus en plus suivi Approximations et imitations incomplètes Une référence pour implémenter et utiliser chaque aspect des BD SQL VENDEUR 2 SQL VENDEUR 3 SQL VENDEUR 1 SQL STANDARD SQL réussira-t-il à bien intégrer l'objet? 63/66

Exemple : Bars à Bière (schéma Entité/Association) 1:N Bar 1:N Servie fréquente 1:M 1:N Aime 0:M Bière 0:1 0:M favorite 0:M Buveur 64/66

Schéma relationnel Aimer (bière, buveur) Servir ( bière, bar) Fréquenter ( buveur, bar) Bar (nom, ville, rue) Bière (nom, type, degré) Buveur(nom, prénom, favorite) 65/66

Requêtes Q1 - Les bars qui servent une bière appréciée par 'Dupont' Q2 - Les buveurs qui vont dans les mêmes bars que Dupont Q3 - Les buveurs qui fréquentent au moins un bar où l'on sert une bière qu'ils aiment Q4 - Les buveurs qui ne fréquentent aucun bar où l'ont sert une bière qu'ils aiment Q5 - Les buveurs qui fréquentent tous les bars Q6 - Les buveurs qui fréquentent tous les bars qui servent au moins une bière qu'ils aiment Q7 - Les buveurs qui ne fréquentent que les bars qui ne servent que les bières qu'ils aiment Q8 - Donner pour chaque buveur, le nombre de bars servant une bière qu'ils aiment Q9 - Les buveurs qui fréquentent au moins 2 bars où l'on sert une bière qu'ils aiment Q10 Le degré moyen par type de bière Q11 La bière ayant le degré le plus élevé Q12 Le type de bière ayant le degré moyen le plus élevé 66/66