SQL Structured Query Language INT Plan du document

  • Slides: 45
Download presentation
SQL Structured Query Language INT

SQL Structured Query Language INT

Plan du document Introduction n BD Exemple : les vins n Définition des données

Plan du document Introduction n BD Exemple : les vins n Définition des données n Manipulation des données n ¨ Recherche ¨ Mises à jour n Traitement d’une requête slide 105 slide 108 slide 110 slide 115 slide 143 slide 147 104

Introduction Langages de requêtes n Langage de requêtes ¨ ¨ n Langages de manipulation

Introduction Langages de requêtes n Langage de requêtes ¨ ¨ n Langages de manipulation formels ¨ ¨ n algèbre relationnelle calcul relationnel (basé sur la logique des prédicats) Langages de requêtes orientés utilisateur ¨ ¨ ¨ n Langage de Définition de Données Langage de Manipulation de Données Structured Query Language (SQL) QUEry Language (QUEL) Query By Example (QBE) Lien avec les langages de programmation ¨ immersion d'un langage de requêtes dans un langage de programmation : approche Embedded SQL (Pascal, C, . . . ) 105

Introduction Présentation de SQL n Fonctionnalités : définition et manipulation de données au format

Introduction Présentation de SQL n Fonctionnalités : définition et manipulation de données au format relationnel ¨ contrôle des données ¨ n Le langage de manipulation non procédural ¨ emprunté à l'algèbre relationnelle et au calcul relationnel de tuples ¨ n Puissance du langage de manipulation Algèbre Relationnelle + Fonctions-Agrégats + Tri Une requête SQL (sans fonctions et tri) Suite d'opérations de l'algèbre relationnelle n 106

Introduction Présentation de SQL (2) n Origine ¨ ¨ n Normalisation ISO ¨ ¨

Introduction Présentation de SQL (2) n Origine ¨ ¨ n Normalisation ISO ¨ ¨ ¨ n langage SEQUEL du prototype de SGBD relationnel SYSTEM/R (74 -76) laboratoire de recherche IBM à San José norme SQL 1 (1986, 1989) norme SQL 2 (1992) nouvelle norme en préparation SQL 3 Langage de requêtes des SGBD relationnels ¨ ¨ ¨ ORACLE (Oracle Corporation - 1977) INGRES (Ingres Technology - 1980) DB 2 (IBM - 1984) INFORMIX (Informix Inc - 1981) SYBASE (Sybase Inc - 1984) My. SQL (1995) 107

BD Exemple: les vins Vins(num, cru, annee, degre) Recoltes(nvin, nprod, quantite) Producteurs(num, nom, prenom,

BD Exemple: les vins Vins(num, cru, annee, degre) Recoltes(nvin, nprod, quantite) Producteurs(num, nom, prenom, region) Buveurs(num, nom, prenom, ville) Commandes(ncde, date, nb, nvin, qte) Livraisons(ncde, no_ordre, qte. Livree) V R P B C L 108

BD Exemple Modèle E/A de la BD des vins Vins Buveurs num cru degré

BD Exemple Modèle E/A de la BD des vins Vins Buveurs num cru degré annee 0, n recoltes num nom prenom ville 0, n concerne Passer quantite 0, n Producteurs num nom prenom region 1, 1 Commandes ncde qté date 0, n Donner_lieu Livraisons (1, 1) No_ordre qte. Livrée date 109

Définition des données définition des schémas des relations n définition de vues relationnelles n

Définition des données définition des schémas des relations n définition de vues relationnelles n définition de contraintes d'intégrité n définition de droits n validation d'un traitement n définition du placement et des index (non normalisé => SGBD dépendant !!) n 110

Définition des données Domaines de base n Numériques : ¨ Entier : INTEGER, SMALLINT

Définition des données Domaines de base n Numériques : ¨ Entier : INTEGER, SMALLINT ¨ Décimal : DECIMAL (m, n), NUMBER(m, n) ¨ Réel flottant : FLOAT, REAL n n Chaîne de caractères : CHAR (n), VARCHAR(n) Temporel : DATE (dans la norme SQL 2 !) chaque SGBD possède d'autres domaines qui lui sont propres Valeur NULL : absence de valeur 111

Définition des données Schéma d’une relation n Création CREATE TABLE Vins ( num Integer,

Définition des données Schéma d’une relation n Création CREATE TABLE Vins ( num Integer, cru Char(40), annee Integer) n Mise à jour Ajout d'un attribut (norme SQL 2 !) ALTER TABLE Vins ADD COLUMN degre Integer n n Suppression (norme SQL 2 !) DROP TABLE Vins 112

Définition des données Contraintes d’intégrité n n Règle qui définit la cohérence d'une donnée

Définition des données Contraintes d’intégrité n n Règle qui définit la cohérence d'une donnée ou d'un ensemble de données de la BD Contraintes définies en SQL ¨ ¨ ¨ non nullité des valeurs d'un attribut unicité de la valeur d'un attribut ou d'un groupe d'attributs valeur par défaut pour un attribut contrainte de domaine clé primaire (un attribut ou un groupe) intégrité référentielle "minimale" CREATE TABLE Vins ( num integer PRIMARY KEY, cru char (40) NOT NULL, annee integer CONSTRAINT Cannee CHECK (annee between 1970 and 2010), degre number(4, 2) CONSTRAINT Cdegre CHECK (degre between 9. 0 and 15. 0)) 113

LDD SQL vs. Modèle relationnel Domaines limités n Clé facultative : n ¨ Doublons

LDD SQL vs. Modèle relationnel Domaines limités n Clé facultative : n ¨ Doublons ¨ Opérateur de projection différent ( DISTINCT) ¨ Relation n’est plus un ensemble 114

Recherche des données n n n n n Syntaxe générale de recherche Restriction et

Recherche des données n n n n n Syntaxe générale de recherche Restriction et projection Jointures Opérateurs ensemblistes Fonctions agrégats Partitionnement Prédicats et division Synthèse Exemple complet slide 116 slide 117 slide 121 slide 126 slide 127 slide 131 slide 135 slide 140 slide 142 115

Recherche des données Syntaxe générale de recherche Syntaxe SELECT <liste d’attributs projetés> Comment remplir

Recherche des données Syntaxe générale de recherche Syntaxe SELECT <liste d’attributs projetés> Comment remplir les clauses ? Quel résultat souhaite voir l’utilisateur, schéma du résultat ? FROM <liste de relations> Où sont les attributs dont j’ai besoin ? [WHERE <liste des critères de restriction et de jointure>] Y-a t-il des conditions sur les valeurs exprimées dans ma requête ? Ai-je plusieurs relations dans ma clause FROM ? 116

Recherche des données Restriction et projection n "Donner les vins de cru Pommard" SELECT

Recherche des données Restriction et projection n "Donner les vins de cru Pommard" SELECT num, annee, degre FROM Vins WHERE cru = ‘Pommard' NUM ANNEE DEGRE 5 1976 11. 70 23 1972 12. 00 Nombre de tuples accédés : 2 117

Recherche des données Projection n "Donner tous les vins" SELECT * FROM Vins n

Recherche des données Projection n "Donner tous les vins" SELECT * FROM Vins n "Donner la liste de tous les crus, avec élimination des doublons" SELECT DISTINCT cru FROM Vins 118

Recherche des données Restriction n "Donner les vins de degré compris entre 8 et

Recherche des données Restriction n "Donner les vins de degré compris entre 8 et 12" SELECT * FROM Vins WHERE degre >=8 AND degre <=12 SELECT * FROM Vins WHERE degre BETWEEN 8 AND 12 SELECT * FROM Vins WHERE degre IN (8, 9, 10, 11, 12) 119

Recherche des données Restriction et tri n "Donner les vins dont le cru commence

Recherche des données Restriction et tri n "Donner les vins dont le cru commence par p ou P" SELECT * FROM Vins WHERE cru LIKE ‘p%’ OR cru LIKE ‘P%’ n "Donner les crus des vins de millésime 1995 et de degré 12, triés par ordre croissant" SELECT cru FROM Vins WHERE annee=1995 AND degre = 12 ORDER BY cru 120

Recherche des données Jointure n "Donner les noms des producteurs de Pommard" SELECT nom

Recherche des données Jointure n "Donner les noms des producteurs de Pommard" SELECT nom FROM Vins V, Recoltes R, Producteurs P WHERE V. num = R. nvin AND R. nprod=P. num AND cru = ‘Pommard’ Produit cartésien Conditions de jointures Nom d’attribut non ambigü 121

Recherche des données Jointure procédurale SELECT nom FROM Producteurs WHERE num IN ( SELECT

Recherche des données Jointure procédurale SELECT nom FROM Producteurs WHERE num IN ( SELECT nprod FROM Recoltes WHERE nvin IN ( SELECT num FROM Vins WHERE cru = ‘Pommard’)) 122

Recherche des données Auto-jointure n Jointure d’une relation avec elle-même synonymes n « Donner

Recherche des données Auto-jointure n Jointure d’une relation avec elle-même synonymes n « Donner les couples de producteurs ayant le même nom. Préciser les régions » SELECT P 1. nom, P 1. region, P 2. region FROM Producteurs P 1, Producteurs P 2 WHERE P 1. nom = P 2. nom AND P 1. num > P 2. num 123

Jointure (syntaxe SQL 2) SQL 2 propose une nouvelle syntaxe plus proche de l’algèbre

Jointure (syntaxe SQL 2) SQL 2 propose une nouvelle syntaxe plus proche de l’algèbre relationnelle (jointure directement exprimée dans le FROM) n Supportée dans plusieurs SGBD (>= Oracle 9, My. SQL, SQLServer, …) n 124

Exemples de jointure SQL 2 n Produit cartésien SELECT nom, prenom FROM vins CROSS

Exemples de jointure SQL 2 n Produit cartésien SELECT nom, prenom FROM vins CROSS JOIN recoltes n Jointure SELECT nom FROM Vins V JOIN Recoltes R ON (V. num = R. nvin) JOIN Producteurs P ON (R. nprod=P. num) WHERE cru = ‘Pommard’ n Jointure « naturelle » ¨ L’égalité sur les attributs de même nom peut être remplacée par NATURAL JOIN, ou JOIN … USING (attrs) 125

Recherche des données Opérateurs ensemblistes n Union (norme SQL 1) ¨ Élimination automatique des

Recherche des données Opérateurs ensemblistes n Union (norme SQL 1) ¨ Élimination automatique des doublons SELECT num FROM Producteurs UNION SELECT num FROM Buveurs n Intersection (norme SQL 2 !) SELECT num FROM Producteurs INTERSECT SELECT num FROM Buveurs n Différence (norme SQL 2 !) SELECT num FROM Buveurs MINUS SELECT num FROM Producteurs (ou EXCEPT) 126

Recherche des données Fonctions n n 5 fonctions prédéfinies : COUNT, SUM, MIN, MAX,

Recherche des données Fonctions n n 5 fonctions prédéfinies : COUNT, SUM, MIN, MAX, AVG Principe : ¨ S'applique à l'ensemble des valeurs d'une colonne d'une relation ¨ Produit une valeur unique ¨ Pour une requête sans partionnement (plus tard) : n n uniquement dans le SELECT, jamais dans le WHERE Ne pas mélanger dans le SELECT les fonctions et les attributs simples ! 127

Recherche des données Exemples avec fonctions n "Donner la moyenne des degrés de tous

Recherche des données Exemples avec fonctions n "Donner la moyenne des degrés de tous les vins" SELECT Avg(degre) FROM Vins n "Donner la quantité totale commandée par le buveur Bac" SELECT Sum (qte) FROM Commandes, Buveurs WHERE Buveurs. nom= 'Bac' AND Buveurs. num=Commandes. nb Toute ressemblance avec des personnes existant ou ayant existé ne serait évidemment que purement fortuite 128 et involontaire

Recherche des données Exemples avec fonctions (2) n "Nombre de crus différents" SELECT COUNT(DISTINCT

Recherche des données Exemples avec fonctions (2) n "Nombre de crus différents" SELECT COUNT(DISTINCT cru) FROM Vins n "Nombre de vins" SELECT COUNT (*) FROM Vins 129

Recherche des données Exemples avec fonctions (3) n " Vins dont le degré est

Recherche des données Exemples avec fonctions (3) n " Vins dont le degré est supérieur à la moyenne des degrés des vins" SELECT * FROM Vins WHERE degre > ( SELECT AVG(degre) FROM Vins) n " Numéros de commande où la quantité commandée a été totalement expédiée" SELECT ncde FROM Commandes C WHERE qte = ( SELECT SUM(L. qte) FROM Livraisons L WHERE L. ncde = C. ncde ) L’alias « C » est visible dans le bloc imbriqué 130

Recherche des données Partitionnement n Principe partitionnement horizontal d'une relation, selon les valeurs d'un

Recherche des données Partitionnement n Principe partitionnement horizontal d'une relation, selon les valeurs d'un attribut ou d'un groupe d'attributs qui est spécifié dans la clause GROUP BY ¨ la relation est (logiquement) fragmentée en groupes de tuples, où tous les tuples de chaque groupe ont la même valeur pour l'attribut (ou le groupe d'attributs) de partitionnement ¨ n n Fonctions sur les groupes Restrictions sur les groupes application possible d'un critère de restriction sur les groupes obtenus ¨ clause HAVING ¨ 131

Recherche des données Exemples de partitionnement n " Donner, pour chaque cru, la moyenne

Recherche des données Exemples de partitionnement n " Donner, pour chaque cru, la moyenne des degrés des vins de ce cru …" SELECT cru, AVG(degre) FROM Vins GROUP BY cru n " … avec un tri par degré décroissant" SELECT cru, AVG(degre) FROM Vins GROUP BY cru ORDER BY 2 DESC n " … uniquement si ce cru concerne plus de 3 vins" SELECT cru, AVG(degre) FROM Vins GROUP BY cru HAVING COUNT(*)>=3 ORDER BY 2 DESC 132

Recherche des données Calcul de la partition n n cru degre Pommard 12 Tavel

Recherche des données Calcul de la partition n n cru degre Pommard 12 Tavel 11 Pommard 13 Tavel 12 Tavel 13 cru degre Et Pommard 12 Pommard 13 Tavel 11 Tavel 12 Tavel 13 cru degre Pommard 12, 5 Tavel 12 initiale Trier la relation selon les attributs de groupement Créer une sous-relation pour chaque paquet ayant même valeur sur l'attribut sur l'ensemble des attributs de groupement, ici « cru » Appliquer la clause SELECT sur chaque partition (dans notre exemple la valeur de cru et la moyenne des degrés sur la partition n Vins Unifier les résultats Appliquer la restriction du HAVING et Vins 133

Recherche des données Exemple de requête erronée SELECT cru, num, AVG(degre) FROM Vins GROUP

Recherche des données Exemple de requête erronée SELECT cru, num, AVG(degre) FROM Vins GROUP BY cru n n Résultat « attendu » Problème cru num AVG(degre) Pommard {1, 3, 6, 10} 12, 5 Tavel {5, 7} 12, 0 Gamay {2, 8, 11} 11, 0 Num est multivalué / cru ¨ il n’y a pas une valeur par case (pas en première forme normale) ¨ 134

Recherche des données Prédicats : ALL, ANY, EXISTS n ALL ¨ Teste si la

Recherche des données Prédicats : ALL, ANY, EXISTS n ALL ¨ Teste si la valeur d’un attribut satisfait un critère de comparaison avec tous les résultats d’une sousrequête SELECT B. num, B. nom FROM Buveurs B, Commandes C WHERE B. num = C. nb AND C. qte >= ALL( SELECT qte FROM Commandes) 135

Recherche des données Prédicats (2) n ANY : ¨ Teste si la valeur d’un

Recherche des données Prédicats (2) n ANY : ¨ Teste si la valeur d’un attribut satisfait un critère de comparaison avec au moins un résultat d’une sous-requête SELECT B. nb, B. nom FROM Buveurs B, Commandes C WHERE B. nb = C. nb AND C. qte > ANY ( SELECT qte FROM Commandes ) 136

Recherche des données Prédicats (3) n EXISTS : ¨ Teste si la réponse à

Recherche des données Prédicats (3) n EXISTS : ¨ Teste si la réponse à une sous-requête est vide ¨ "Viticulteurs ayant produit au moins un vin" SELECT P. * FROM Producteurs P WHERE EXISTS ( SELECT R. * FROM Recoltes R WHERE P. num=R. nprod) 137

Recherche des données Division avec prédicat EXISTS n n "Quels sont les viticulteurs ayant

Recherche des données Division avec prédicat EXISTS n n "Quels sont les viticulteurs ayant produit tous les vins (ceux connus de la base de données)? " Paraphrase en français : "Un viticulteur est sélectionné s'il n'existe aucun vin qui n'ait pas été produit par ce producteur" => Double négation SELECT P. * FROM Producteurs P WHERE NOT EXISTS ( SELECT V. * FROM Vins V WHERE NOT EXISTS ( SELECT R. * FROM Recoltes R WHERE P. num=R. nprod AND R. nvin=V. num ) ) 138

Division sans EXISTS SELECT P. * FROM Producteurs P WHERE P. num IN (

Division sans EXISTS SELECT P. * FROM Producteurs P WHERE P. num IN ( SELECT nprod FROM Recoltes GROUP BY nprod HAVING COUNT(*) = ( SELECT COUNT(*) FROM Vins) ) 139

Recherche des données Synthèse 6 SELECT <liste et/ou expressions attributs Aj et/ou fonctions sur

Recherche des données Synthèse 6 SELECT <liste et/ou expressions attributs Aj et/ou fonctions sur Attributs Ap> Projection de l’ensemble obtenu en (5) sur les Aj, calcul des expressions, calcul des fonctions (appliquées aux groupes s’il y en a) sur Ap 1 FROM <liste de relations Ri> Produit cartésien des relations Ri 2 WHERE <Conditions sur les tuples> : C 1 Sélection des tuples de (1) respectant la condition C 1 3 GROUP BY <liste attributs Ak Aj> Partitionnement de l’ensemble obtenu en (2) suivant les valeurs Ak 4 HAVING <condition sur groupes fonctions> : C 2 Sélection des groupes de (3) vérifiant C 2 5 ORDER BY <liste d’attributs Al ou n° ordre Tri des tuples obtenus en (4) suivant les dans le SELECT> valeurs Al 140

Recherche des données Synthèse (2) n Condition de recherche : ¨ WHERE (sélection de

Recherche des données Synthèse (2) n Condition de recherche : ¨ WHERE (sélection de tuples), HAVING (sélection de groupes) ¨ Compositions de conditions élémentaires (AND, OR, NOT) ¨ Évaluée à Vrai ou Faux n Condition élémentaire : Évaluée à Vrai ou Faux ¨ Prédicat : ¨ n Comparaison : =, <, <=, >, >=, <> ¨ ¨ n n n Attribut/valeur Attribut/attribut Intervalle : BETWEEN Chaîne : LIKE Nullité : IS NULL Appartenance : IN Quantification : EXISTS, ANY, ALL 141

Recherche des données Exemple complet n "Donnez par ordre croissant le nom et la

Recherche des données Exemple complet n "Donnez par ordre croissant le nom et la somme des quantités commandées par des buveurs bordelais, uniquement si chaque commande est d'une quantité strictement supérieure à 20 litres. " SELECT B. nom, Sum(C. qte) FROM Buveurs B, Commandes C WHERE B. num=C. nb AND B. ville = 'Bordeaux' GROUP BY B. num, B. nom HAVING MIN(C. qte) > 20 ORDER BY B. nom 142

Mises à jour Mise à jour Insertion n Suppression n Modification n 143

Mises à jour Mise à jour Insertion n Suppression n Modification n 143

Mises à jour Insertion n Insertion d’un seul tuple INSERT INTO Vins VALUES (100,

Mises à jour Insertion n Insertion d’un seul tuple INSERT INTO Vins VALUES (100, 'Jurançon', 1979, 12) INSERT INTO Vins (num, cru) VALUES (200, 'Gamay') n Insertion d’un ensemble de tuples CREATE TABLE BORDEAUX(num Integer, annee Integer, degre number(4, 2)) INSERT INTO BORDEAUX SELECT num, annee, degre FROM Vins WHERE cru = 'Bordeaux' CREATE TABLE BORDEAUX AS SELECT num, annee, degre FROM Vins WHERE cru = 'Bordeaux' 144

Mises à jour Suppression n "Supprimer tous les tuples de Vins" DELETE FROM Vins

Mises à jour Suppression n "Supprimer tous les tuples de Vins" DELETE FROM Vins n ou TRUNCATE TABLE Vins "Supprimer le vin de numéro 150" DELETE FROM Vins WHERE num = 150 n "Supprimer les vins de degré <9 ou >12" DELETE FROM Vins WHERE degre < 9 OR degre > 12 n "Supprimer les commandes passées par Belaïd" DELETE FROM Commandes WHERE nb IN ( SELECT num FROM Buveurs WHERE nom= ‘Belaïd') 145

Mises à jour Modification n « Le producteur 150 habite dans le sud ouest

Mises à jour Modification n « Le producteur 150 habite dans le sud ouest » UPDATE Producteurs SET region = ‘Sud Ouest' WHERE num = 150 n « Les degrés des Gamays augmentent de 10 % » UPDATE Vins SET degre = degre * 1. 1 WHERE cru = 'Gamay' n « Le buveur ‘Bac’ augmente ses commandes de 10 unités » UPDATE Commandes SET qte = qte + 10 WHERE nb IN ( SELECT num FROM Buveurs WHERE nom='Bac') 146

Traitement d’une requête SQL SELECT nom, prenom FROM viticulteurs WHERE region = ‘Sud ouest’

Traitement d’une requête SQL SELECT nom, prenom FROM viticulteurs WHERE region = ‘Sud ouest’ Analyse Syntaxique Schémas Droits Vérification Optimisation DD Vues Placement, index CI Statistiques Génération d'un plan d'exécution Forme exécutable de la requête Exécution BD 147