Slides:



Advertisements
Présentations similaires
Bases de Données Avancées: Bases de Données Relationnelles
Advertisements

Manipulation des données dans SQL
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Bases de données : modèlisation et SGBD
SQL - Subtilités.
Fonctionnalités des SGBD
Algèbre relationnelle
Optimisation de Requêtes
INTEGRITE ET BD ACTIVES
LE MODELE RELATIONNEL INVENTE PAR T. CODD (IBM SAN-JOSE)
Georges Gardarin 1 LE LANGAGE DE REQUETES SQL l Origines et Evolutions l SQL1 86: la base l SQL1 89: l'intégrité l SQL2 92: la nouvelle norme l SQL3 98:
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
Rappel sur les bases de données et le vocabulaire
BASE DE DONNEES RELATIONNELLES
LE LANGAGE SQL Langage de manipulation de données (LMD)
Initiation aux bases de données et à la programmation événementielle
Les bases de données Cours assuré par: Mlle Smii imen
Chap 4 Les bases de données et le modèle relationnel
Bases de données et SGBD relationnels
L’utilisation des bases de données
Algèbre relationnelle et SQL
SQL Partie 3 : (LID : Langage d'interrogation de données)
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
Cours N°2 Base de Données & Langage SQL
Inventé par T. Codd (IBM Recherche)
1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
Bases de Données Avancées - TP2: SQL
1 SQL Manipulations Avancées (08-09) Witold Litwin.
Manipulation des données Requêtes simples
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Initiation aux bases de données et à la programmation événementielle
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
LE LANGAGE DE REQUETES SQL2
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
SQL Partie 1.
Partie2: Introduction à SQL LANGAGE DE REQUETES RELATIONNEL CHAPITRE 4: INTERROGATION DES BASES DE DONNÉES.
Traduction des opérations sous MySQL
Le langage de requêtes SQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Optimisation de requêtes
1 G. Gardarin Optimisation de Requêtes  1. Introduction  2. Arbres relationnels  3. Restructuration algébrique  4. Modèle de coût  5. Choix du meilleur.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Sélection de colonnes (la projection)
Le modèle relationnel Plan 1. Concepts descriptifs
Cours SQL.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Les bases de données Séance 8 Jointures.
Le langage SQL.
Séance /10/2004 SGBD - Approches & Principes.
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
Initiation aux bases de données et à la programmation événementielle
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Op é rateurs ensemblistes Module 4. 2 La clause GROUP BY La clause GROUP BY est nécessaire dès que l'on utilise des fonctions de calculs statistiques.
Le Langage d ’ Interrogation des donn é es (LID) Module 2.
Bases de données – Cours 3
CONCEPTS BD - Synthèse journée 1 :
Bases de données : modèlisation et SGBD Séance 3.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Langages d’interrogation et de manipulation. N. ChaignaudGM4 - Base de données2 1. Algèbre relationnelle  Ensemble d’opérations permettant de manipuler.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Langage de manipulation de données (LMD)
Transcription de la présentation:

SQL Structured Query Language INT Management

Plan du document Introduction slide 109 BD Exemple : les vins slide 112 Définition des données slide 114 Manipulation des données Recherche slide 119 Mises à jour slide 147 Traitement d’une requête slide 151

Langages de requêtes Langage de requêtes Introduction Langage de requêtes Langage de Définition de Données Langage de Manipulation de Données Langages de manipulation formels algèbre relationnelle calcul relationnel (basé sur la logique des prédicats) Langages de requêtes orientés utilisateur 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, ...)

Présentation de SQL Fonctionnalités : Le langage de manipulation Introduction Fonctionnalités : définition et manipulation de données au format relationnel contrôle des données Le langage de manipulation non procédural emprunté à l'algèbre relationnelle et au calcul relationnel de tuples 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

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

BD Exemple: les vins V R P B C L 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, qteLivree)

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

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

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

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

Contraintes d’intégrité Définition des données 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))

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

Recherche des données Syntaxe générale de recherche slide 120 Restriction et projection slide 121 Jointures slide 125 Opérateurs ensemblistes slide 130 Fonctions agrégats slide 131 Partitionnement slide 135 Prédicats et division slide 139 Synthèse slide 144 Exemple complet slide 146

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

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

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

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

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

Jointure "Donner les noms des producteurs de Pommard" SELECT nom Recherche des données "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’ Conditions de jointures Produit cartésien Nom d’attribut non ambigü

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

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

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

Exemples de jointure SQL2 Produit cartésien SELECT nom, prenom FROM vins CROSS JOIN recoltes 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’ Jointure « naturelle » L’égalité sur les attributs de même nom peut être remplacée par NATURAL JOIN, ou JOIN … USING (attrs)

Opérateurs ensemblistes Recherche des données Union (norme SQL1) Élimination automatique des doublons SELECT num FROM Producteurs UNION SELECT num FROM Buveurs Intersection (norme SQL2 !) INTERSECT Différence (norme SQL2 !) MINUS (ou EXCEPT)

Fonctions 5 fonctions prédéfinies : COUNT, SUM, MIN, MAX, AVG Recherche des données 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) : uniquement dans le SELECT, jamais dans le WHERE Ne pas mélanger dans le SELECT les fonctions et les attributs simples !

Exemples avec fonctions Recherche des données "Donner la moyenne des degrés de tous les vins" SELECT Avg(degre) FROM Vins "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 et involontaire

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

Exemples avec fonctions (3) Recherche des données " Vins dont le degré est supérieur à la moyenne des degrés des vins" SELECT * FROM Vins WHERE degre > ( SELECT AVG(degre) FROM Vins) " 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é

Partitionnement Principe Fonctions sur les groupes Recherche des données 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 Fonctions sur les groupes Restrictions sur les groupes application possible d'un critère de restriction sur les groupes obtenus clause HAVING

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

Calcul de la partition     Recherche des données Vins cru degre Pommard 12 Tavel 11 13  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  Unifier les résultats  Appliquer la restriction du HAVING initiale Vins cru degre Pommard 12 13 Tavel 11  et   et  Vins cru degre Pommard 12,5 Tavel 12

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

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

Prédicats (2) Recherche des données 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 )

Prédicats (3) EXISTS : Teste si la réponse à une sous-requête est vide Recherche des données 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)

Division avec prédicat EXISTS Recherche des données "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 SELECT R.* FROM Recoltes R WHERE P.num=R.nprod AND R.nvin=V.num ) )

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

Synthèse Recherche des données 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> : C1 Sélection des tuples de (1) respectant la condition C1 3 GROUP BY <liste attributs Ak  Aj> Partitionnement de l’ensemble obtenu en (2) suivant les valeurs Ak 4 HAVING <condition sur groupes -fonctions> : C2 Sélection des groupes de (3) vérifiant C2 5 ORDER BY <liste d’attributs Al ou n° ordre dans le SELECT> Tri des tuples obtenus en (4) suivant les valeurs Al

Synthèse (2) Condition de recherche : Condition élémentaire : Recherche des données 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 Condition élémentaire : Évaluée à Vrai ou Faux Prédicat : Comparaison : =, <, <=, >, >=, <> Attribut/valeur Attribut/attribut Intervalle :BETWEEN Chaîne : LIKE Nullité : IS NULL Appartenance : IN Quantification : EXISTS, ANY, ALL

Exemple complet Recherche des données "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

Mise à jour Mises à jour Insertion Suppression Modification

Insertion Insertion d’un seul tuple Insertion d’un ensemble de tuples Mises à jour Insertion d’un seul tuple INSERT INTO Vins VALUES (100, 'Jurançon', 1979, 12) INSERT INTO Vins (num, cru) VALUES (200, 'Gamay') 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

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

Modification « Le producteur 150 habite dans le sud ouest » Mises à jour « Le producteur 150 habite dans le sud ouest » UPDATE Producteurs SET region = ‘Sud Ouest' WHERE num = 150 «  Les degrés des Gamays augmentent de 10 % » UPDATE Vins SET degre = degre * 1.1 WHERE cru = 'Gamay' « 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')

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