BASES DE DONNÉES ET PROGRAMMATION WEB



Documents pareils
Le Langage SQL version Oracle

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

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

Langage SQL : créer et interroger une base

Cours Bases de données

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

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

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

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

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Présentation du module Base de données spatio-temporelles

Le Langage De Description De Données(LDD)

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

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

SQL Historique

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

Bases de données relationnelles

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

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

Optimisation SQL. Quelques règles de bases

TP Contraintes - Triggers

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

OpenPaaS Le réseau social d'entreprise

Information utiles. webpage : Google+ : digiusto/

1 Introduction et installation

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

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

FileMaker 13. Guide de référence SQL

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

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

Bases de données et sites WEB

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

Bases de données avancées Introduction

CREATION WEB DYNAMIQUE

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

Olivier Mondet

Les bases de données

Création et Gestion des tables

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

Quelques aspects du Relationnel-Objet du SGBD Oracle

Vincent Augusto

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

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

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

CHAPITRE 1 ARCHITECTURE

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

Introduction à JDBC. Accès aux bases de données en Java

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

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de Données Avancées

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Bases de données cours 1

Java DataBaseConnectivity

1/ Présentation de SQL Server :

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

A QUOI SERVENT LES BASES DE DONNÉES?

16H Cours / 18H TD / 20H TP

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

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

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Le langage SQL Rappels

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Intégrité des données

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

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

Cours Base de données relationnelles. M. Boughanem, IUP STRI

SQL Server 2012 Implémentation d'une solution de Business Intelligence (Sql Server, Analysis Services...)

Structured Query Language

Master Exploration Informatique des données DataWareHouse

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Compétences Business Objects

Introduction aux Bases de Données

Bases de Données Réparties

Introduction aux Bases de Données 2004/2005

Programmation d application Bases de données avec Java

Encryptions, compression et partitionnement des données

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

TP Programmation Java / JDBC / Oracle

Les bases de données Page 1 / 8

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

et les Systèmes Multidimensionnels

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

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

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

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Pour les débutants. langage de définition des données

1. Base de données SQLite

Bases de Données. Plan

Historisation des données

Groupe de Discussion Big Data Aperçu des technologies et applications. Stéphane MOUTON

Module BDR Master d Informatique (SAR)

Auto-évaluation Oracle: cours de base

NoSQL : hype ou innovation? Grégory Ogonowski / Recherches Octobre 2011

Du 10 Fév. au 14 Mars 2014

Bases de données avancées

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

Transcription:

1 BASES DE DONNÉES ET PROGRAMMATION WEB Frey Gabriel Licence 3 Informatique

Contenu général 2 Bases de données I (licence 2 Informatique) Bases de données et programmation web (licence 3 Informatique) Banques de données multimédia, Entrepôts de données et informatique décisionnelle, Fouilles de données, Fouilles de données réparties,

Organisation du module 3 Séances CM : 26h TD : 16h TP : 24h (projet) Fichiers : http://dpt-info.u-strasbg.fr/~g.frey/bddpw Moodle : BDDPW Evaluation note 1 : épreuve écrite (40mn - 1h10), coef. 2/10 note 2 : épreuve pratique, coef. 3/10 note 3 : épreuve pratique, coef. 2/10 note 4 : épreuve écrite (55mn - 1h45), coef. 3/10

4 Rappels : Concepts de Bases de Données

Système de Gestion de Fichiers 5 Programme 1 Données Programme 2 Données Programme 3 Données Système de gestion de fichiers Fichier 1 Fichier 2

Système de Gestion de Fichiers 6 Les données sont stockées dans des fichiers. Inconvénients pouvant se produire lors du stockage d une grande masse de données, accessible par différents utilisateurs et applications : différents formats de fichier, dépendant des programmes et généralement faiblement structurés, difficulté d accès à l information (index), pas de vérification sur la cohérence des données (redondances, erreurs, ), pas de contrôle des accès concurrents.

Approche Base de Données 7 Programme 1 Données Programme 2 Données Programme 3 Données SGBD Requêtes Transactions Bases de données

Définition 8 Base de données (BD) Une base de données est un ensemble d informations de grande taille, structuré, mémorisé sur un support permanent. Système de gestion de Bases de Données (SGBD) Un système de gestion de bases de données est un outil informatique permettant aux utilisateurs de structurer, d insérer, de modifier, de rechercher de manière efficace des données spécifiques au sein d une grande quantité d informations stockées sur mémoires secondaires partagées de manière transparente par plusieurs utilisateurs.

Fonctions d un SGBD 9 1. Persistance Stockage des données sur disque 2. Langage de requête sur la base Les requêtes doivent être simples, déclaratives, optimisées avant l exécution SQL (Structured Query Langage), OQL (Object Query Langage), Xquery (XML Query Langage)

Fonctions d un SGBD 10 3. Partage des données Ø Chaque utilisateur doit avoir l impression d être seul à accéder aux données Notion de transaction Cohérence des mises à jour d un utilisateur Cohérence collective : sérialisabilité 4. Fiabilité des données Vérification de contrainte d intégrité Atomicité des transactions : transaction complètement effectuée ou pas du tout Résistance aux pannes En cas de panne mémoire: restauration automatique des dernières transactions validées avant la panne En cas de panne disque : restauration d une sauvegarde, journal Mécanisme de réplication des données (mirroring)

Fonctions d un SGBD 11 5. Sécurité des données Droits des utilisateurs sur la manipulation des données Notion d autorisation Notion de groupe d utilisateur Granularité des autorisations 6. Gestion des disques Répartition des données Optimisation des performances Index, hachage, bitmap Regroupement des données Optimisation des requêtes Cache mémoire

Fonctions d un SGBD 12 7. Indépendance logique/physique Organisation physique de la BD transparente pour le développeur d application Possibilité de changer la structure physique des données sans changer le code de l application

SGBD transactionnel Exemple de transaction : Begin // début de la transaction CEpargne = CEpargne 1000 CCourant = CCourant + 1000 Commit // fin de la transaction Begin CEpargne = CEpargne 1000 >>>> panne CCourant = CCourant + 1000 Commit T1 annuler le débit! récupération de l état précédent (panne?) 13

Transaction : gestion des accès concurrents 14 Utilisateur 1 Utilisateur 2 Lire(CCourant); if (CCourant >= 100) { CCourant = CCourant 100; Ecrire(CCourant); } Lire(CCourant); if (CCourant >= 100) { CCourant = CCourant 100; Ecrire(CCourant); } Quels sont les risques?

Transaction : propriétés ACID Atomicité : Une transaction est indivisible. Elle est soit complètement exécutée soit pas du tout (unité atomique de traitement) Cohérence : une transaction doit effectuer une transition d un état cohérent de la base à un autre état cohérent (par ex: pas de violation de contrainte d intégrité). La cohérence peut être non respectée pendant l'exécution d'une transaction. En cas d échec de la transaction, la base doit retourner dans l état cohérent initial Isolation : le résultat d un ensemble de transactions concurrentes et validées correspond à une exécution successive des mêmes transactions (pas d inférence entre les transactions) Durabilité : après la fin d'une transaction, les mises à jour sont définitives même en cas de problèmes matériels (mécanisme de reprise en cas de panne) 15

Architecture SGBD Utilisateur 1 Utilisateur 2 Utilisateur 3 Utilisateur N Vue utilisateur 1 Vue utilisateur 2 Vue utilisateur N Schéma externe Vue conceptuelle Schéma logique Vue interne Schéma interne SGBD 16

Architecture 17 Niveau externe : Vues, Environnement de programmation (intégration avec un langage de programmation), Interfaces conviviales, Outils d aide (ex : conception de schémas) Niveau logique : Définition de la structure de données, Langages de description des données (LDD), Consultation et mise à jour des données : Langages de Requêtes (LR) et Langage de Manipulation de Données (LMD), Gestion de la confidentialité (sécurité), Intégrité des données Niveau physique : Gestion sur mémoire secondaire (fichiers) des données, du schéma, des index, Partage des données et gestion de la concurrence d accès, Reprise sur pannes (fiabilité), Distribution des données et interopérabilité (accès réseaux). Types d utilisateur : - Utilisateur de base - Concepteur d application - Administrateur de la base

Modèle de données 18 Modèle conceptuel Pour la conception d applications Merise, Modèle entité-association, UML, Modèle logique Pour la définition de BD supportées par un SGBD Modèle hiérarchique, réseau, relationnel, objet, Modèle physique Implémentation du SGBD: fichier simple, base de faits, XML, Organisation et stockage des données : index,

19 MODÈLE LOGIQUE DE DONNÉE RELATIONNEL

Modèle Logique de Donnée 20 Définition : le modèle logique décrit la structure de données Objectifs : Éviter les incohérences dans les données : Une personne n a qu une date de naissance, le prix d un produit est unique,. Éviter la redondance d information : La même information est stockée dans différentes relations Anomalies: insertion, suppression, modification Éviter les valeurs nulles : Difficiles à interpréter : inconnu, connu mais non disponible, inapplicable Rend les jointures difficiles à spécifier Éviter les jointures inutiles : Améliorer les performances : la jointure est une opération coûteuse

Modèle Relationnel 21 Modèle de niveau logique simple défini par Edgar Frank Codd en 1970 (prix Turing en 1986) une relation est une table à deux dimensions n-uplet ó ligne de la table attribut ó colonne de la table

SGBD Relationnel 22 Oracle database ( 47%), MySQL Microsoft SQL Server ( 17%), DB2 ( 21%) PostgreSQL, Firebird, Ingres SQLite

23 ALTERNATIVE AUX SGBD RELATIONNELS

XML XML (extensible Markup Language) Les balises définissent la structure et la sémantique n Facilite l interprétation des données (par programme ou humain) Présentation à part (XSL) Représentation de données semi-structurées n conformité optionnelle à un schéma Facilite le traitement informatique et humain Format normalisé d échange couplage faible entre les données et les systèmes Schémas DTD, XSD, XML schéma 24

XML <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> <!-- Catalogue de la pépinière Plein de Foin --> <!DOCTYPE Catalogue [ <!ELEMENT Catalogue (Article)+> <!ELEMENT Article (noarticle,description,prixunitaire)> <!ELEMENT noarticle (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT prixunitaire (#PCDATA)>]> <Catalogue> <Article> <noarticle>10</noarticle> <description>cèdre en boule</description> <prixunitaire>10.99</prixunitaire> </Article> <Article> <noarticle>20</noarticle> <description>sapin</description> <prixunitaire>12.99</prixunitaire> </Article> </Catalogue> <Article> <Catalogue> <Article>... <noarticle> <description> <prixunitaire> <noarticle> <description> <prixunitaire> 10 Cèdre en boule 10,99 20 Sapin 12,99 25

OLTP On-Line Transaction Processing Requêtes simples, rapides, fréquentes Mise à jour des n-uplets assez fréquentes Nombre de n-uplets relativement important 26

OLAP On-Line Application Processing Requête analytique Très grand ensemble de données Peu de requêtes mais complexes et longues Pas nécessaire d avoir une base de données totalement à jour 27

Architecture d'entrepôt de données BD opérationnelle (OLTP) BD opérationnelle (OLTP) Extraction : épuration, filtrage, synthèse, transformation, fusion Entrepôt de données («data wharehouse») Analyse (OLAP), prospection Autre source de données Chaîne de traitement : extraction, transformations, analyses 28

Schéma en étoile OLAP <<Table>> Client <<PK>> noclient nomville Table de faits <<Table>> Ventes noclient noarticle datevente montant <<Table>> Article <<PK>> noarticle catégorie Tables de dimensions <<Table>> Période <<PK>> datevente mois trimestre année 29

Extensibilité 30 En cas d ajout de données, il est possible : d augmenter la taille des tables (extensibilité verticale) d augmenter le nombre de serveurs de données et de répartir les tables sur ces serveurs (extensibilité horizontale)

Bases de données réparties 31 Bénéfices potentiels Performance Fiabilité et disponibilité Expansion graduelle (scalabilité) Inconvénients Complexité accrue Transactions réparties Évaluation de requêtes réparties Répartition du dictionnaire de données Coût important n conception, administration,

Théorème CAP 32 Trois propriétés d un système d information distribué : cohérence (Consistency), disponibilité (Availability) et distributivité (Partition) Un système ne peut que garantir deux de ces propriétés à la fois Lorsqu un système d information réparti s agrandit, il doit choisir entre la cohérence et la disponibilité : Privilégie la cohérence : SGBD relationnel Privilégie la disponibilité : NoSQL

NoSQL 33 Not Only SQL Bases de données généralement non relationnelles Schéma non normalisé, non fixé, pas forcément de jointure Transaction : propriétés ACID pas nécessairement respectées «cohérent au bout d un certain nombre d évènements» : BASE (Basically Available, Soft state, Eventual consistency) Exemple de solutions NoSQL : BigTable (Google), Cassandra (Facebook, Reddit, ), couchdb, mongodb

Types de base NoSQL 34 Key-Value data store Document based store Column based store Graph based store

SQL 35

SQL 36 Structured Query Langage Standard établi pour les SGBD relationnel Dérivé de l algèbre relationnel SQL est un langage où l utilisateur décrit le résultat à obtenir (Quoi?) SQL est non-procédural : le SGBD détermine l enchaînement des traitements à effectuer afin d obtenir le résultat (Comment) Avantage d être un langage déclaratif : pas de boucles infinies, pas d explosion mémoire

Standard SQL 37 SQL est un standard ANSI/ISO Plusieurs mises à jour du langage : SQL1 : première version standardisée (1986,1987) SQL2 : mise à jour majeure (type date, opérations ensemblistes, ) SQL3 : déclencheurs, types composites, fonctionnalités orientées objets, SQL:2003, SQL:2006, SQL:2008, SQL:2011 Variations par rapport au SQL standard propre à chaque SGBD

Langages de requêtes 38 Langage de Définition de Données (LDD) : Définition de relations, contraintes d intégrité, Définition de vues Définition d index UDF (User Defined Function), Procédure Langage de Contrôle de données (LCD) : Définitions des droits : GRANT, REVOKE Contrôle de transaction : BEGIN, COMMIT, ROLLBACK Langage de Manipulation de Données (LMD) : Interrogation : SELECT Définition, modification, suppression : INSERT, UPDATE, DELETE

39 Dictionnaire de données Tables contenant les informations sur les objets de la base (métadonnées) Normalisé dans le standard SQL : DEFINITION_SCHEMA (Tables, non directement accessibles) INFORMATION_SCHEMA (Vues) Sous Oracle, les vues du dictionnaires ont des noms de la forme : USER_<Objet> : objets appartenant à l utilisateur courant ALL_<Objet> : objets accessibles à l utilisateur courant DBA_<Objet> : tous les objets de la base (vue réservée à l administrateur) Exemples de tables du dictionnaires : DICTIONARY (DICT), USER_TABLES (TABS), USER_TAB_COLUMNS (COLS), USER_USERS, Sous PostgreSQL : INFORMATION_SCHEMA (conforme SQL standard) Liste des tables : SELECT * FROM INFORMATION_SCHEMA.TABLES; ou \dt

Type SQL : Numérique exact 40 INTEGER (ou INT) Entier (précision non standardisée) SMALLINT Petit entier (précision non standardisée) NUMERIC(p, c) (ou DECIMAL(p, c) ou DEC(p, c) Nombre décimal avec p chiffres au total, dont c chiffres après la virgule

Type SQL: Numérique Réel 41 REAL n Point flottant (précision non standardisée) n Exemples : 3.27E-4, 24E5 DOUBLE PRECISION n Point flottant à double précision (non standardisée) n Exemples : 3.27265378426E-4, 24E12

Type SQL : Chaîne de caractères 42 Chaîne de caractères (VARYING et NATIONAL : SQL2 intermédiaire) CHARACTER(n) Chaîne de caractère de taille fixe égale à n CHARACTER VARYING (n) Taille variable (max de n caractères) NATIONAL CHARACTER(n) Ensemble de caractères alternatif (autres langues) NATIONAL CHARACTER VARYING(n) TEXT Taille variable Sous Oracle : CHARACTER ó CHAR CHARACTER VARYING ó VARCHAR2 NATIONAL CHARACTER ó NCHAR NATIONAL CHARACTER VARYING ó NVARCHAR2

Type SQL : Date 43 Date et temps DATE année (quatre chiffres), mois (2 chiffres) et jour (2 chiffres) Exemple : DATE '1998-08-25' TIME[(p)] heure (2 chiffres), minutes (2 chiffres), secondes (2 + p chiffres) Exemple : TIME '14:04:32.25' TIMESTAMP[(p)] DATE + TIME Exemple : TIMESTAMP '1998-08-25 14:04:32.25' INTERVAL Représente un intervalle de temps. Sous Oracle : DATE : précision jusqu à la seconde, format par défaut dépend de la configuration du SGBD (sous Codd : DD-MON-YY ) TIMESTAMP : précision jusqu à la fraction de seconde TIMESTAMP, TIMESTAMP WITH TIME ZONE, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

44 Type : autres Logique à 3 valeurs de vérité : TRUE, FALSE, UNKNOWN NULL = NULL? NULL OR TRUE? ROW(1, NULL) = ROW (1, NULL)? n IS DISTINCT FROM Binaire long (SQL3) BINARY LARGE OBJECT (n) (BLOB(n)) Longue chaîne de caractère (SQL3) CHARACTER LARGE OBJECT (n) (CLOB(n)) NATIONAL CHARACTER LARGE OBJECT (n) (NCLOB(n)) Sous Oracle : Pas de type booléen (NUMBER(1) avec contraintes) BLOB, CLOB, NCLOB disponible (4GB),BFILE (External LOB)

Tableaux 45 Type tableau: Type[] Constante tableau: {val1, val2, val3,, valn} Accès: tab[n] (premier élément a comme indice 1) Slice: tab[start:end] Les tableaux peuvent être concaténés pour obtenir un nouveau tableau Les fonctions IN, NOT IN, ANY, ALL peuvent être utilisées pour vérifier si un élément appartient à un tableau Sous Oracle : VARRAY

Type personnalisé 46 CREATE TYPE rat AS ( p int, q int ); CREATE TABLE tabrat ( n rat ); INSERT INTO tabrat VALUES ( ROW(1,2) ); SELECT (n).p FROM tabrat; SELECT (A.n::rat).p FROM (SELECT n FROM tabrat ) AS A;

Rappel SQL 47 CREATE TABLE ( NomCol1 TYPE, NomColn TYPE [<contraintes colonnes>], PRIMARY KEY (Col1, ), FOREIGN KEY (Col1, ) REFERENCES tableetrangères(colet1, ), [<contraintes lignes>] );

Mise à jour des données INSERT : insertion de lignes dans une table En précisant les lignes à insérer Les lignes à insérer sont le résultat d une requête UPDATE : modification de lignes d une table En précisant les lignes à modifier Les lignes à modifier sont le résultat d une requête DELETE : suppression de lignes dans une table Suppression de toutes les lignes Suppression des lignes vérifiant une condition de sélection 48

INSERT INSERT INTO <nom table> [(<nom de colonne> + )] { VALUES (<CONSTANTE> + ) <commande de recherche> }; Généralement dans une table Si la liste des colonnes n est pas indiquée, les valeurs doivent être fournies dans l ordre de déclaration des colonnes de la table Les attributs pour lesquels aucune valeur n est spécifiée auront comme valeur NULL (l insertion sera refusée si la valeur NULL n est pas une valeur valide pour ces attributs) 49

Exemples INSERT INTO dpt VALUES (5, 'Ressource humaine', 15001, 115423); INSERT INTO dpt (deptno, dnom) VALUES (6, 'Développement'); INSERT INTO emp (empno, enom, eprenom, adresse, mgr, deptno) ( SELECT empno, enom, eprenom, adresse, mgr, deptno FROM stagiaire WHERE duree > 12 ); INSERT ALL WHEN order_total < 1000000 THEN INTO small_orders WHEN order_total > 1000000 AND order_total < 2000000 THEN INTO medium_orders WHEN order_total > 2000000 THEN INTO large_orders SELECT order_id, order_total, sales_rep_id, customer_id FROM orders; 50

UPDATE UPDATE <nom_table> SET <nom_de_colonne = < <valeur> NULL > > + { WHERE <condition_de_recherche> }; 51

Exemples UPDATE emp SET mgr = 12; UPDATE emp SET salaire = salaire + 500 WHERE mgr = 12; UPDATE emp SET salaire = 60000, mgr IS NULL WHERE empno = 12; UPDATE emp E SET (salaire,deptno) = ( SELECT salaire, deptno FROM emp M WHERE M.empno=E.mgr ) RETURNING sum(salaire) INTO :varoracle; 52

DELETE DELETE FROM <nom table> [WHERE <condition de recherche>]; Exemple : DELETE FROM projet; DELETE FROM emp WHERE deptno = 10; 53

54 TRUNCATE, MERGE (SQL standard) Supprimer les n-uplets d une table et désallouer l espace mémoire correspondant TRUNCATE table1; Les commandes MERGE ou <UPDATE OR INSERT INTO> permettent d ajouter à une relation des n-uplets s ils ne sont pas déjà présents dans cette relation et les mettre à jour sinon : merge into customers(id,name) c using (select id, name from customers_delta where id > 10) cd on (c.id = cd.id) when matched then update set name = cd.name when not matched then insert (id, name) values (cd.id, cd.name);

55 SELECT Exemples : SELECT * FROM emp WHERE salaire > 35000 AND deptno BETWEEN 1 AND 5; SELECT * FROM emp WHERE enom LIKE 'J%';

SELECT 56 Syntaxe SELECT [DISTINCT] col1 AS alias_col1,, coln [INTO variables] FROM table t1,, table tn WHERE ; Opérations ensemblistes sur le résultat des requêtes SQL : <req1> UNION INTERSECT EXCEPT <req2> ORACLE : <req1> UNION INTERSECT MINUS <req2> UNION, INTERSECT, MINUS supprime les doublons (utiliser UNION ALL, INTERSECT ALL ou MINUS ALL pour les conserver)

57 ORDER BY, LIMIT Tri des n-uplets résultats : ORDER BY col1,, col2 [ASC DESC] [NULLS FIRST NULLS LAST] Ne sélectionner que N n-uplets à partir du K ième : SELECT * FROM table ORDER BY col1 LIMIT n OFFSET k; Il est aussi possible d utiliser ROWNUM, ROW_NUMBER() ou RANK() qui contient l indice du n-uplet courant (Oracle n accepte que cette solution) SELECT * FROM (SELECT row_number() OVER (ORDER BY col1) AS rang FROM t order by t desc) AS tab1 WHERE rang <= 3;

58 Jointure SELECT * FROM dpt, emp WHERE emp.deptno = dpt.deptno; Syntaxe jointure : plus explicite sur le type de jointure utilisé Extrait les conditions de jointures des critères de restrictions Jointure naturelle : NATURAL JOIN Exemple : SELECT * FROM dpt NATURAL JOIN emp; Au mins une colonne de même nom doit exister dans les deux tables Jointure naturelle partielle : JOIN USING ( ) Exemple : SELECT * FROM dpt JOIN emp USING (deptno); Jointure : JOIN/ INNER JOIN ON Exemple : SELECT * FROM emp e1 INNER JOIN emp e2 ON e1.mgr=e2.emp; Jointure externe : LEFT/RIGHT/FULL OUTER JOIN Exemple : SELECT * FROM emp LEFT OUTER JOIN dpt ON emp.deptno = dpt.deptno; Tous les n-uplet de emp seront affichés même si la condition de jointure n est pas réalisée. Dans ce cas, les attributs de dpt associés aux valeurs de emp n ayant pas de correspondance auront comme valeur NULL. Produit cartésien : CROSS JOIN

59 Fonctions d agrégation SQL Partition d une table avec la clause GROUP BY SELECT deptno, count(empno) AS nbemp FROM emp GROUP BY deptno; empno name deptno 7639 SMITH 20 deptno nbemp 7521 CLARK 20 20 2 7834 KING 30 30 1 8456 SCOTT 40 40 2 6210 TURNER 40 50 1 9566 WARD 50 Colonnes résultats d une requête GROUP BY, uniquement colonnes de groupage ou résultats de fonctions d agrégation Fonctions d agrégation : AVG, COUNT, MAX, MIN, SUM,

60 Fonctions d agrégation SQL Restriction des partitions sélectionnées avec la clause HAVING SELECT deptno, count(empno) AS nbemp FROM emp GROUP BY deptno HAVING count(empno) > 1; empno name deptno 7639 SMITH 20 7521 CLARK 20 7834 KING 30 8456 SCOTT 40 6210 TURNER 40 9566 WARD 50 deptno nbemp 20 2 40 2 Attention à bien distinguer les conditions de restriction sur les n-uplets (WHERE ) des conditions de restriction sur les groupes (HAVING )

61 Fonctions fenêtres Les fonctions fenêtres permettent d ajouter à un enregistrement les résultats d une fonction d agrégation Ecrire une requête permettant de visualiser pour chaque employé, son nom, sa fonction, son âge ainsi que l âge moyen des employés de l entreprise : SELECT enom, job, age, avg(age) OVER () FROM emp; Ecrire une requête permettant de visualiser pour chaque employé, son nom, sa fonction, son âge ainsi que l âge moyen des employés de son département : SELECT enom, job, age, avg(age) OVER (PARTITION BY deptno) FROM emp; SELECT enom, deptno, age, rank() OVER (PARTITION BY deptno ORDER BY age DESC) FROM emp;

Sous-requêtes 62 Une sous-requête est une requête SQL imbriquée dans une autre requête SQL Une sous-requête peut apparaitre juste après : SELECT FROM WHERE Si cela est possible, toujours préférer l utilisation de jointures à celle de requêtes imbriquées

63 Sous-requêtes dans le SELECT SELECT E.enom, ( SELECT D.dnom FROM dpt AS D WHERE E.deptno=D.deptno ) FROM emp AS E; Que se passe t- il si la sous- requête retourne plusieurs résultats? Si possible, désimbriquer la requête SELECT enom, dnom FROM emp NATURAL JOIN dpt; SELECT D.dnom, ( SELECT count(*) FROM emp AS E WHERE E.deptno=D.deptno ) FROM dpt AS D;

64 Sous-requête dans le FROM SELECT E2.enom FROM ( SELECT * FROM emp AS E1 WHERE E1.salaire > 2000) AS E2 WHERE E2.salaire < 3000; SELECT E.enom FROM emp AS E WHERE E.salaire > 2000 AND E.salaire < 3000;

Sous-requête dans le WHERE 65 SELECT enom FROM emp WHERE empno IN (SELECT mgr FROM emp); SELECT E1.enom FROM emp AS E1 JOIN emp AS E2 ON E1.empno = E2.mgr;

Requêtes corrélées 66 Sous-requête corrélée à la requête principale SELECT E1.empno, E1.enom FROM emp AS E1 WHERE E1.salaire > (SELECT E2.salaire FROM emp AS E2 WHERE E1.mgr = E2.empno); SELECT E1.enom FROM emp AS E1 JOIN emp AS E2 ON E1.mgr = E2.empno WHERE E1.salaire > E2.salaire; Il n est pas forcément facile de désimbriquer toutes les requêtes SELECT E1.empno, E1.enom FROM emp AS E1 WHERE E1.salaire > (SELECT max(e2.salaire) FROM emp AS E2 WHERE E2.mgr = E1.empno);

Tests d existence 67 EXISTS / NOT EXISTS SELECT dnom FROM dpt WHERE EXISTS (SELECT * FROM emp WHERE emp.deptno = dpt.deptno) SELECT dnom FROM dpt NATURAL JOIN emp;

Quantificateurs 68 ALL : le résultat de la comparaison d une valeur au résultat d une sous-requête doit être vérifié pour tous les n-uplets résultat d une sous-requête. SELECT empno, enom FROM emp e1 WHERE e1.salaire > ALL ( SELECT e2.salaire FROM emp e2 WHERE e2.mgr = e1.empno ); SOME/ANY : le résultat de la comparaison d une valeur au résultat d une sous-requête doit être vérifié pour au moins un des n-uplets résultat d une sous-requête. SELECT empno, enom FROM emp e1 WHERE e1.salaire > ANY ( SELECT e2.salaire FROM emp e2 WHERE e2.mgr = e1.empno ); Transformer les requêtes imbriquées en jointures : Facile pour les tests d existences : IN, EXISTS, SOME Difficile pour les quantificateurs universels : NOT IN, NOT EXISTS, ALL

Requête monotone 69 Une requête est monotone si lorsqu on ajoute des n-uplets aux tables en entrée, le nombre de n-uplets de la table résultat ne diminue pas Parmi les opérations suivantes, lesquelles sont monotones? SELECT FROM WHERE JOIN UNION, INTERSECT, MINUS

70 Emp Requête monotone (empno, enom, salaire, job, deptno) Travaille (empno, projno) Projet (projno, pnom, deptno) Les requêtes suivantes sont-elles monotones? les employés qui travaillent sur un projet du département 10 mais pas sur un projet du département 50 les employés dont le métier est analyste et qui n ont pas le salaire le plus important de leur département Les requêtes monotones peuvent être désimbriquées Les requêtes monotones peuvent donc être résolues par un simple SELECT FROM WHERE Pour les requêtes qui ne sont pas monotones, il est nécessaire d utiliser quelque chose en plus : MINUS, NOT IN, ALL, partitionnement,

Requête monotone 71 Les requêtes suivantes sont-elles monotones? les employés qui travaillent sur un projet du département 10 les employés qui ne travaillent que sur des projets du département 10 Les employés qui travaillent sur tous les projets du département 10 Les employés qui ne travaillent sur aucun projet du département 10 Les employés qui travaillent sur un projet qui n est pas du département 10

72 Désimbriquation de requête utilisant des fonctions d agrégation SELECT DISTINCT D.deptno, (SELECT count(*) FROM emp AS E WHERE E.deptno=D.deptno) FROM dpt AS D; SELECT dnom, count(*) FROM emp NATURAL JOIN dpt GROUP BY deptno, dnom; Les requêtes sont-elles équivalentes? SELECT dnom, count(*) FROM emp RIGHT OUTER JOIN dpt GROUP BY deptno, dnom;

73 Désimbriquation de requête utilisant des fonctions d agrégation SELECT DISTINCT E.enom FROM emp AS E WHERE ( SELECT count(projno) FROM projet AS P WHERE P.empno=E.empno ) > 5; SELECT enom FROM emp NATURAL JOIN projet GROUP BY empno HAVING count(projno) > 5;

Sous-requête WITH 74 Permet de déclarer une table temporaire (généralement le résultat d une sousrequête qui n existera que le temps de la requête) : WITH temp1 AS (SELECT FROM WHERE ), tempn AS (SELECT FROM WHERE ) SELECT FROM temp1,, tempn, WHERE ; Exemple : WITH partavg AS (SELECT AVG(current_qt) AS avg_qt FROM part) SELECT part_number, (SELECT avg_qt FROM partavg) FROM part WHERE current_qt > (SELECT avg_qt FROM partavg);

Requêtes récursives (SQL) 75 Parcours d arborescence/graphe WITH RECURSIVE Chemin(x,y) AS UNION (SELECT x,y FROM Arc) (SELECT C1.x, C2.y FROM Chemin C1, Chemin C2 WHERE C1.y = C2.x) SELECT * FROM Chemin; Table Arc x y 1 3 2 3 3 4 3 5 Table Chem in x y 1 3 2 3 3 4 3 5 1 4 1 5 2 4 2 5

Requêtes récursives (Oracle) 76 Parcours d arborescence/graphe SELECT x, y FROM Chemin START WITH x in (1,2,3) CONNECT BY PRIOR y=x; Table Arc x y 1 3 2 3 3 4 3 5 Table Chem in x y 1 3 2 3 3 4 3 5 1 4 1 5 2 4 2 5 Possibilité d utiliser l attribut level pour connaitre la profondeur de récursivité CONNECT BY NOCYCLE: permet d éviter de boucler

Correspondance de texte 77 LIKE 'CAT' LIKE 'C%' 'CAT' LIKE '_A_' SIMILAR TO permet d utiliser des expressions régulières (REGEXP_LIKE sous ORACLE) 'CAT' SIMILAR TO '(C R)% (préférer ~ sous postgresql) Recherche texte dans des documents Il est préférable que le texte des documents soit indexé et que les termes recherchés soit des lexèmes Exemple sous postgresql: SELECT to_tsvector(document) @@ to_tsquery('running & dog') FROM document_list;

Préparer une instruction SQL 78 Avant l exécution proprement dite d une instruction SQL, les différents plans d évaluation possibles sont évalués. Cette opération est relativement couteuse. Si une requête est exécutée plusieurs fois, il peut être avantageux de «préparer la requête» : le meilleur de plan de requête ne sera recherché qu une seule fois. Exemple: PREPARE planexec(text,int) AS SELECT enom, salaire FROM emp WHERE job=$1 AND salaire>=$2; EXECUTE planexec('analyst',3000); EXECUTE planexec('clerk',2000);

VUE 79

Vue : définition 80 Table virtuelle de la base de données dont le contenu est défini par une requête La vue n existe pas en tant qu ensemble de données stockées sur le disque seule la requête décrivant la vue est stockée

Vue : avantages 81 indépendance logique exemple: infodepartement_vue(iddept, nomdept, Loc, nbemp, SalTot); simplification de requêtes département de plus de 10 employés et dont la masse salariale est inférieure à 20 K? isolation des modifications sécurité - - emp sans indiquer le salaire emp_vue(idemp, nom, prénom, job, iddept) intégrité des données

Vue : inconvénients 82 performance n la traduction de la requête peut être longue restriction des mises à jour n possibilité de mise à jour qu à partir de vues simples

Vue : syntaxe 83 CREATE [OR REPLACE] VIEW nomvue [col, ] AS SELECT [WITH CHECK OPTION [CONSTRAINT nom]]; DROP VIEW nomvue; RENAME ancien_nom TO nouveau_nom;

Vue : exemple 84 CREATE VIEW emp_recherche AS SELECT * FROM emp NATURAL JOIN dpt WHERE dnom='recherche' ; SELECT * FROM emp_recherche ;

85 Vue : mise à jour Conditions construite sur une seul table possible sur vue comportant une jointure si les modifications/ suppressions/insertions ne concernent qu une table de la jointure pas de GROUP BY les colonnes résultats doivent être des colonnes réelles de la table (non calculées) la vue contient toutes les colonnes NOT NULL de la table Permet d insérer à travers la vue de nouvelles lignes de supprimer des lignes de la table à partir de la vue de mettre à jour la table par l intermédiaire de la vue

Vue : contrôle d intégrité 86 CHECK OPTION : cette clause permet d interdire d insérer ou de modifier à travers la vue des n-uplets qui ne satisferaient pas à la définition de la vue.

Check Option: exemple 87 > CREATE OR REPLACE VIEW empinge AS SELECT * FROM emp WHERE job= 'Ingenieur' WITH CHECK OPTION CONSTRAINT Check_inge; > UPDATE empinge SET job='manager' WHERE idemp='1123' ; > ORA-01402: view WITH CHECK OPTION clause violation

Vue matérialisée 88 Vue physique d'une table (SNAPSHOT) Duplication des données nécessité de synchroniser les données à n utiliser que pour des requêtes particulièrement lourdes La fréquence des mises à jour de la vue matérialisée est à préciser

Vue matérialisée : syntaxe 89 CREATE MATERIALIZED VIEW <nomvue> REFRESH <précisions mise à jour> AS <requête>; Les données de la table sont copiées dans la vue matérialisée à sa création

90 Vue matérialisée : mode de rafraichissement Modes de rafraichissement de la vue : sur commit : clause ON COMMIT à la demande (asynchrone, mode par defaut) : clause ON DEMAND (utilise des procédures du package standard DBMS_MVIEW). execute DBMS_REFRESH.MAKE('group_vue', 'vuemat1'); execute DBMS_REFRESH.REFRESH('group_vue'); périodique : clauses START WITH et NEXT, qui précise une date de début et une période de temps intermédiaire CREATE MATERIALIZED VIEW vuemat1 REFRESH START WITH SYSDATE NEXT SYSDATE + 1 AS SELECT * FROM emp WHERE job = 'ANALYST';

LIMITES SQL 91

92 Embedded SQL Les manques de SQL structures de programme structures de contrôle structures de données facilités pour les entrées/sortie problème pour développer des applications Approche «Embedded SQL» Insertion de SQL dans un langage de programmation technique de pré-compilation normalisation (Pascal, C, ) Pro*C/C++ pour Oracle Inconvénients deux systèmes de types correspondance ensembliste/unaire deux styles de programmation

Exemple : JDBC // Exemple de programme JAVA qui utilise le pilote JDBC OCI8 d'oracle // pour insérer une ligne dans la table Client // Il faut importer le paquetage java.sql pour utiliser JDBC import java.sql.*; class ClientInsertJDBC { public static void main (String args []) throws SQLException, ClassNotFoundException, java.io.ioexception { // Charger le pilote JDBC d'oracle Class.forName ("oracle.jdbc.driver.oracledriver"); // Connexion à une BD Connection uneconnection = DriverManager.getConnection ("jdbc:oracle:oci8:@", "Scott", "Tiger"); // Création d'un énoncé associé à la Connection Statement unenoncésql = uneconnection.createstatement (); // Insertion d'une ligne dans la table Client int n = unenoncésql.executeupdate ("INSERT INTO CLIENT " + "VALUES (100, 'Smith', '911')"); System.out.println ("Nombre de lignes inserees:" + n); 93 } } // Fermeture de l'énoncé et de la connexion unenoncésql.close(); uneconnection.close();

Exemple: SQLJ (préprocesseur SQL) // Définition de la classe IteratorClient avec liaison par nom #sql iterator IteratorClient(int noclient, String nomclient); // Création d'un objet itérateur IteratorClient uniteratorclient; // Liaison de l'énoncé SELECT de l'itérateur #sql uniteratorclient = { SELECT idclient, nomclient FROM Client WHERE idclient > 40}; // Accès au résultat du SELECT par itération sur les lignes while (uniteratorclient.next()){ System.out.println("Numéro du client : " + uniteratorclient.idclient()); System.out.println("Nom du client : " + uniteratorclient.nomclient()); } // Fermer l'itérateur uniteratorclient.close(); 94

Annexe : SQL intégré dans un langage de programmation LINQ (.net) var ensemblepays = new Pays[]{ new Pays("France", 60000000, 550000), new Pays("Turquie", 70000000, 750000), new Pays("Chine", 1300000000, 9600000), new Pays("USA", 300000000, 9000000), new Pays("Maroc", 31000000, 450000), new Pays("Suisse", 7500000, 40000) }; var grospays = from p in ensemblepays where p.superficie > 1000000 select p; foreach (var p in grospays) { Console.WriteLine(p); } 95

Extensions procédurales SQL 96 Principe : ajout à SQL de structures de contrôle SQL + outils procéduraux notion de «procédures stockées» Standardisation : PSM (Persistent Stored Modules) Exemples : MySQL : SQL/PSM Oracle : PL/SQL PostgreSQL : PL/PSM et PLpgSQL SQLserver : Transact-SQL