© Robert Godin. Tous droits réservés.

Slides:



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

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,
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
© Robert Godin. Tous droits réservés.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
Le langage SQL.
Séance /10/2004 SGBD - Approches & Principes.
Bases de données – Cours 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.
RAPPEL SUR LES BASES DE DONNÉES, LE SQL 1 er trimestre V1.0 06/01/2015.
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
SQL partie 5 1 LMD create – update – primary key secondary key.
Le langage de définition de données B.T.S. S.I.O – SI3 –
SQL : 4 fonctions d'exploitation de SGBD SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage informatique ayant pour.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
1- phpMyAdmin 3ème partie : Manipulation des données Le langage SQL 2- Gérer les tables 3- Gérer les données.
SQL partie 1 Langage de Définition de Données. SQL est un langage de définition de données  SQL est un langage de définition de données (LDD), c'est-à-dire.
Intégration web & Base de données 1 Intégration Web & Base de DonnéesMariem Farhat Intérêt des bases de données pour le Web Cours préparé par : Mariem.
Les Bases de données Définition Architecture d’un SGBD
Module de gestion des tournées de livraison
Environnement du développement de BD ORACLE REPORTS 10g
ملخص Initiation à la sgbdr
Bases de données multimédia
Structured Query Language SQL DDL
Intégration du P7 dans l’épreuve E41
Initiation aux bases de données et à la programmation événementielle
LE LANGAGE DE REQUETES SQL
Langage de manipulation de données (LMD)
Structured Query Language
Principes de programmation (suite)
Généralité sur les bases de données
Les bases de données et le modèle relationnel
Langage de Manipulation des Données LMD
SQL LID – INTERROGATIN DES DONNEES
Maria Berger - Maîtrise d'AES Algèbre relationnelle.
Manipulation D’Une Base De Données
Programmation en C++ C++ de base
Langage d’interrogation des Données LID
11 Théorie de la normalisation
I Copyright © 2004, Oracle. Tous droits réservés. Introduction.
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
2 Copyright © 2004, Oracle. Tous droits réservés. Restreindre et trier les données.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
7 Copyright © 2004, Oracle. Tous droits réservés. Utiliser les opérateurs ensemblistes.
10 Copyright © 2004, Oracle. Tous droits réservés. Créer d'autres objets de schéma.
Préface. Préface-3 Profil Avant de commencer Avant de commencer ce cours, vous devez savoir utiliser une interface graphique. Vous devez en outre être.
Préface Introduction Objectifs du chapitre I-2 Objectifs du cours I-3 Oracle10g I-4 Oracle Database 10g I-6 Oracle Application Server 10g I-7 Oracle Enterprise.
Remarque : Un nombre ou une lettre en gras fait référence à un chapitre entier ou à une annexe entière. A Affichage des dates par défaut 02-06, Ajouter.
Algèbre relationnelle
© Robert Godin. Tous droits réservés.
© Robert Godin. Tous droits réservés.
1. LE LANGAGE SQL DDL Version 2 - Janvier Le langage SQL-DDL
7 Contraintes d’intégrité en SQL
18 Bases de données parallèles et réparties
5 Introduction au modèle relationnel 5.1 Concepts de base
5 Interface entre SQL et un programme
Info Bases de données avancées
Définition des contraintes Vérification des contraintes Triggers
© Robert Godin. Tous droits réservés.
© Robert Godin. Tous droits réservés.
1. LE LANGAGE SQL DDL Version 1 - Mai 2009 corrigé le 11/2/2011
Systèmes d’Information et Application
22 Logique et bases de données
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

© Robert Godin. Tous droits réservés. 2018-09-22 6 Le langage SQL Structured Query Language Standard établi pour SGBD relationnel Partie LDD Conceptuel : CREATE SCHEMA, TABLE,... Externe : CREATE VIEW, GRANT,… Interne : CREATE INDEX, CLUSTER,... Partie LMD SELECT, INSERT, DELETE, UPDATE 22/09/2018 © Robert Godin. Tous droits réservés. © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 2018-09-22 Quelques liens Standard SQL: http://www.jcc.com/SQLPages/jccs_sql.htm http://www.cssinfo.com/ncitsgate.html Tutoriel et liens: http://www.contrib.andrew.cmu.edu/~shadow/sql.html Syntaxe SQL2 : http://www.contrib.andrew.cmu.edu/~shadow/sql/sql2bnf.aug92.txt http://www.sql-zone.com/ 22/09/2018 © Robert Godin. Tous droits réservés. © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 2018-09-22 Origine IBM Research (San Jose) développement du prototype System/R (Astrahan et al., 1976) SQUARE algèbre relationnelle ~ anglais (Boyce, Chamberlin, King & Hammer, 1975) SEQUEL Structured English QUEry Language (Chamberlin, Astrahan, Eswaran, Chamberlin, Griffiths & Lorie, 1976) 22/09/2018 © Robert Godin. Tous droits réservés. © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Standard ANSI/ISO SQL86 version préliminaire SQL89 (SQL, SQL1) niveau minimal supporté SQL92 (SQL2) support accru de l ’intégrité trois niveaux : entrée (SQL1+), intermédiaire, complet de plus en plus supporté SQL99? (SQL3) extension objet, TRIGGER, ROLE, SQL/PSM, ... support très variable 22/09/2018 © Robert Godin. Tous droits réservés.

6.1 Spécification schéma relationnel avec SQL (LDD SQL) Niveau conceptuel Schéma des tables (TABLE) CREATE TABLE. Domaines (DOMAIN) SQL2 intermédiaire : CREATE DOMAIN Contraintes d'intégrité PRIMARY KEY, FOREIGN KEY, UNIQUE KEY, CHECK, ASSERTION, TRIGGER 22/09/2018 © Robert Godin. Tous droits réservés.

Spécification schéma relationnel avec SQL (suite) Niveau externe Vues (VIEW) définie à partir d'autres tables (CREATE VIEW). Elle apparaît à l'utilisateur comme une table normale alors qu'elle est en réalité dérivée à partir d'autres tables normales ou virtuelles. Privilèges d'accès GRANT Niveau interne non standardisé (e.g. CREATE INDEX) 22/09/2018 © Robert Godin. Tous droits réservés.

6.1.1 Environnement, catalogue, schéma et utilisateur SQL Cluster ensemble de catalogues accessibles à une session 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Dialecte Oracle DATABASE ~ catalogue une instance Oracle monte une DATABASE à la fois Nom du SCHEMA = authorizationID du propriétaire CLUSTER Oracle  cluster de l ’environnement SQL2 méthode d ’organisation de données par grappe 22/09/2018 © Robert Godin. Tous droits réservés.

6.1.2 Création du schéma d'une table en SQL (CREATE TABLE) Forme simple Transmise à l ’interprète du LDD vérification création de la table schéma stocké dans dictionnaire de données allocation des structures physiques clause non standardisée pour organisation primaire 22/09/2018 © Robert Godin. Tous droits réservés.

Syntaxe générale du CREATE TABLE Syntaxe de spécificationDeColonne Syntaxe de spécificationDeContrainte 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.1.3 Types SQL Numérique exact INTEGER (ou INT) Entier (précision non standardisée) Exemples : 2, 3, 459 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 significatifs (excluant le point) et c chiffres après le point Exemples : 2.5, 456.342, 6 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Types SQL Numérique approximatif REAL Point flottant (précision non standardisée) Exemples : 3.27E-4, 24E5 DOUBLE PRECISION Point flottant à double précision (non standardisée) Exemples : 3.27265378426E-4, 24E12 FLOAT(n) Point flottant précision minimale est de n chiffres pour la mantisse 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Types SQL Chaîne de caractères (VARYING et NATIONAL : SQL2 intermédiaire) CHARACTER(n) (ou CHAR(n)) Chaîne de caractère de taille fixe égale à n Exemples : 'G. Lemoyne-Allaire', 'Paul L''Heureux ’ CHARACTER VARYING (n) (ou VARCHAR(n)) Taille variable (max de n caractères) NATIONAL CHARACTER(n) Ensemble de caractères alternatif spécifique à l'implémentation NATIONAL CHARACTER VARYING(n) Taille variable Création d ’ensembles de caractères alternatifs CREATE CHARACTER SET COLLATION : relation d ’ordre des caractères 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Types SQL Date et temps (SQL2 intermédiaire; précision p: SQL2 complet) 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. 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Types SQL Booléen (SQL2 complet) BIT (n) Vecteur de n bits. Exemples : B'00100110', X'9F' BIT VARYING (n) taille variable (max = n) Binaire long (SQL3) BINARY LARGE OBJECT (n) (BLOB(n)) n : taille en octets (ex: 1024, 5K, 3M, 2G) Exemple : X ’52CF4 ’ (hexadecimal) Longue chaîne de caractère (SQL3) CHARACTER LARGE OBJECT (n) (CLOB(n)) NATIONAL CHARACTER LARGE OBJECT (n) (NCLOB(n)) 22/09/2018 © Robert Godin. Tous droits réservés.

6.1.4 Suppression d’une table (DROP TABLE) RESTRICT rejet si élément dépendant existe ex: FOREIGN KEY CASCADE supprime élément dépendant 22/09/2018 © Robert Godin. Tous droits réservés.

6.1.5 Modification du schéma de table (ALTER TABLE) Syntaxe 22/09/2018 © Robert Godin. Tous droits réservés.

6.1.6 Le dictionnaire de données SQL (INFORMATION_SCHEMA) Normalisé en SQL2 BD relationnelle contient les méta-données d ’un CATALOG DEFINITION_SCHEMA tables INFORMATION_SCHEMA VIEWS sur les tables du DEFINITION_SCHEMA 22/09/2018 © Robert Godin. Tous droits réservés.

Exemples de VIEWS du INFORMATION_SCHEMA SCHEMATA les SCHEMA créés par CURRENT_USER DOMAINS les DOMAIN accessibles par CURRENT_USER ou PUBLIC TABLES les noms des tables accessibles par CURRENT_USER ou PUBLIC VIEWS les vues accessibles par CURRENT_USER ou PUBLIC COLUMNS les colonnes des TABLE accessibles par CURRENT_USER ou PUBLIC TABLE_CONSTRAINTS contraintes des TABLE créées par CURRENT_USER CHECK_CONSTRAINTS contraintes CHECK des TABLE créées par CURRENT_USER ASSERTIONS ASSERTION créées par CURRENT_USER TABLE_PRIVILEGES privilèges accordés par CURRENT_USER, à CURRENT_USER, ou à PUBLIC 22/09/2018 © Robert Godin. Tous droits réservés.

Dictionnaire de données Oracle avec SQL*plus

Recherche d ’une table du dictionnaire de données

© Robert Godin. Tous droits réservés. 6.2 Requêtes SQL (SELECT) Syntaxe de requêteSQL Syntaxe du selectSQL ... 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.1 Projection d'une table et la clause DISTINCT Produire les noClient et dateCommande de toutes les Commandes Multi-ensemble ! 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Clause DISTINCT Produire les noClient et dateCommande de toutes les Commandes  noClient, dateCommande (Commande) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.2 Sélection sur une table (WHERE) Sélectionner les Articles dont le prix est inférieur à $20.00 et le numéro est supérieur à 30  prixUnitaire < 20.00 ET noArticle > 30 (Article) 22/09/2018 © Robert Godin. Tous droits réservés.

Syntaxe de conditionSQL Syntaxe (incomplète) de la conditionSimple : 22/09/2018 © Robert Godin. Tous droits réservés.

ConditionSQL - BETWEEN Sélectionner les Commandes du mois de juin de l'année 2000 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. ConditionSQL - IN Sélectionner les Commandes du Client dont le noClient est 10 ou 40 ou 80 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. ConditionSQL - LIKE Sélectionner les Clients dont le nomClient contient le mot Le 2ième lettre du nomClient = o et dernière lettre est un k 22/09/2018 © Robert Godin. Tous droits réservés.

ConditionSQL - IS NOT NULL Sélectionner les Articles dont la description n'est pas une valeur nulle 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.3 Sélection-projection sur une table Produire les noClient et dateCommande des Commandes dont la date est supérieure au 05/07/2000 Laboratoire Créer le schéma de la BD PleinDeFoin : SchemaVentesPleinDeFoin.sql Exercices 1 a), b) , c) , n), o) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.4 Produit cartésien avec SELECT-FROM Produire toutes les combinaisons possibles de lignes de Client et de Commande... Client  Commande 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.5 Jointure naturelle avec SELECT-FROM-WHERE Produire les informations au sujet des Clients et de leurs Commandes  Client.noClient, nomClient, noTéléphone, noCommande, dateCommande ( Client.noCliente = Commande.noClient (Client  Commande)) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.6 Jointure avec JOIN (SQL2) Produire les informations au sujet des Clients et de leurs Commandes Jointure- (si noms de colonnes de jointure sont différents) Client  Commande 22/09/2018 © Robert Godin. Tous droits réservés.

4.2.7 Jointure de plusieurs tables Sélectionner les nomClient des Clients qui ont commandé au moins un plant d'herbe à puce  nomClient ( description = “Herbe à puce ” (Client  Commande  LigneCommande  Article)) 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.2.8 Formulations équivalentes, performance et indépendance des données ~Algèbre relationnelle Ordre quelconque des tables du FROM la plupart du temps… AND commutatif… Processus d ’évaluation de requête 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.9 Définition d'un alias (clause AS) ~ renommer () Laboratoire Exercices 1 d) e) f) h) 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Auto-jointure Quels sont les Clients qui ont le même numéro de téléphone?  Client.noClient, Client2.noClient, ( Client.noTéléphone = Client2.noTéléphone (Client   Client2 (Client)))  noClient, noClient2 (Client   Client2(noClient2, nomClient2, noTéléphone) (Client)) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.10 Jointure externe (OUTER JOIN) Produire les informations au sujet des Clients et de leurs Commandes incluant les informations sur les Clients qui n’ont pas placé de Commande Oracle « + » après colonne pour inclure la valeur NULL Client =  Commande 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.11 Opérations ensemblistes (UNION, INTERSECT, EXCEPT) Produire les noms et numéros de téléphone des Employés qui sont aussi des Clients de la pépinière Laboratoire Exercices 1 g) i) j) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.12 Expressions générales sur les colonnes La liste des noArticle avec le prixUnitaire avant et après inclusion de la taxe de 15% 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.2.12 Expressions (suite) Produire le détail de chacun des Articles commandés la Commande #1 incluant le prix total avant et après la taxe de 15% pour chacun des Articles commandés 22/09/2018 © Robert Godin. Tous droits réservés.

Expression sur colonne du WHERE Les Articles dont le prixUnitaire incluant la taxe de 15% est inférieur à $16.00 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Opérateurs Conversions automatiques entre types compatibles 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Pseudo-colonnes Les Commandes de la journée 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Sélection par un CASE Produire la quantité qui a été livrée pour l'Article #50 de la Commande #4 22/09/2018 © Robert Godin. Tous droits réservés.

Quelques fonctions SQL2 POSITION(patron IN chaîne) CHARACTER_LENGTH(chaîne) OCTET_LENGTH (chaîne) BIT_LENGTH(chaîne) EXTRACT(champ FROM dateOuTime) SUBSTRING (chaîne FROM indiceDébut FOR nombreCaractères) UPPER | LOWER (chaîne) TRIM ([LEADING|TRAILING|BOTH] caractère FROM chaîne) CAST(expression AS type) … Voir documentation du SGBD 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.13 Expressions et conditions sur les valeurs nulles (NULL) Arithmétique opérande NULL => NULL Comparaison (>, <, …) opérande NULL => UNKNOWN 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. NULL pour les nuls ? Si x est NULL UNKNOWN OR UNKNOWN = UNKNOWN pas dans le résultat ! 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.2.14 Fonctions de groupe Le nombre d'Articles différents à vendre ainsi que le prixUnitaire moyen des Articles 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. suite 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.15 Partition d'une table avec la clause GROUP BY Produire le nombre de Commandes passées par chacun des Clients qui ont passé au moins une Commande 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Pour chacune des LigneCommande pour lesquelles au moins une Livraison a été effectuée, produire le noCommande et noArticle, la quantité totale livrée et le nombre de Livraisons effectuées 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.2.16 Clause HAVING Produire le nombre de Commandes passées par chacun des Clients qui ont passé deux Commandes ou plus 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Produire le nombre de Commandes passées par chacun des Clients qui ont passé deux Commandes ou plus après le 02/06/2000 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.17 Tri du résultat (ORDER BY) Les Clients en ordre alphabétique du nom Laboratoire Exercices 1 q) s) t) v) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18 SELECT imbriqué 6.2.18.1 Opération élément de (IN) Les Clients qui ont passé au moins une Commande Client  Commande 22/09/2018 © Robert Godin. Tous droits réservés.

Ligne à plusieurs colonnes Chercher les LigneCommandes pour lesquelles au moins une Livraison a été effectuée 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.2 SELECT imbriqué qui retourne une ligne Sélectionner les Commandes du Client Hugh Paycheck Exception si plusieurs lignes retournées par SELECT imbriqué 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.3 SELECT imbriqué corrélé Produire les informations au sujet des Clients qui ont passé au moins une Commande Référence à une colonne non locale 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.4 Test d’ensemble vide (EXISTS) Produire les informations au sujet des Clients qui ont passé au moins une Commande 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.5 Test de double (UNIQUE) Vérifier s'il y a plus d’un Client qui porte le même nom Clients qui ont passé au moins deux Commandes 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.6 Quantificateurs (ALL, SOME/ANY) Commandes passées après la dernière Livraison (date ultérieure) Commandes passées après au moins une des Livraisons 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.7 Test d'inclusion entre deux tables et division T1  T2 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Quelles sont les noCommande des Commandes qui incluent tous les Articles dont le prixUnitaire est $10.99  Lab Exercices 1 e) f) j) k) p) u) m) 22/09/2018 © Robert Godin. Tous droits réservés.

6.2.18.8 SELECT imbriqué dans le FROM Produire les noClient et dateCommande des Commandes dont la dateCommande est supérieure au 05/07/2000 Laboratoire Exercices 2 a) b) 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.2.19 Récursivité en SQL3 22/09/2018 © Robert Godin. Tous droits réservés.

6.3 Opérations de mise à jour des tables en SQL Insert Delete Update 22/09/2018 © Robert Godin. Tous droits réservés.

6.3.1 Insertion dans une table (INSERT) Insérer une nouvelle ligne dans la table Client Changer l ’ordre de défaut 22/09/2018 © Robert Godin. Tous droits réservés.

Insertion d ’une partie des colonnes 22/09/2018 © Robert Godin. Tous droits réservés.

Insertion à partir d ’un SELECT Produire les lignes de DétailLivraison pour la Livraison #106 à partir des LigneCommandes de la Commande #7 22/09/2018 © Robert Godin. Tous droits réservés.

6.3.2 Suppression de lignes (DELETE) Supprimer toutes les lignes de la table Client Supprimer le Client #70 de la table Client Supprimer les Clients qui n'ont pas passé de Commande 22/09/2018 © Robert Godin. Tous droits réservés.

6.3.3 Modification de lignes (UPDATE) Changer le noTéléphone du Client #10 pour (222)222-2222 Augmenter tous les prixUnitaires des Articles de 10% Modification de plusieurs colonnes à la fois Laboratoire Exercices 1 x) y) z) 22/09/2018 © Robert Godin. Tous droits réservés.

6.3.4 Gestion des transactions en SQL COMMIT WORK confirme la transaction en cours ROLLBACK WORK annule la transaction en cours Début de transaction implicite début de session fin de la précédente Commande LDD provoque un COMMIT 22/09/2018 © Robert Godin. Tous droits réservés.

6.4 Niveau externe du schéma en SQL Gestion de la sécurité GRANT Tables virtuelles VIEWS 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.4.1 Sécurité en SQL (GRANT) 6.4.1.1 Identification et authentification Identification des utilisateurs authorizationID PUBLIC : tous les utilisateurs Authentification mot de passe … Oracle SYS, SYSTEM CREATE USER authorizationID ... 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.4.1.2 Privilèges privilège : objet : 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Exemples 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Privilèges (suite) Commandes LDD propriétaire du schéma Création d ’une VIEW sur T SELECT sur T FOREIGN KEY sur T privilège REFERENCES sur T ROLE ensemble de privilèges SQL3, Oracle 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.1.3 Suppression de privilèges 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2 Table virtuelle (VIEW) 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.1 Implémentation des tables virtuelles Résolution des vues par modification de requête 22/09/2018 © Robert Godin. Tous droits réservés.

Résolution des vues par matérialisation Table stockée Redondance Maintenance de la cohérence Meilleure performance du SELECT Moins bonne performance des mises à jour Entrepôts de données 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.2 Mise à jour de tables virtuelles Une seule table sans DISTINCT colonnes simples pas de SELECT imbriqué 22/09/2018 © Robert Godin. Tous droits réservés.

Exemple de mise à jour par modification de requête 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.3 Problèmes de mise à jour d'une table virtuelle Sémantique incohérente... 22/09/2018 © Robert Godin. Tous droits réservés.

Rejet de mise à jour incohérente avec WITH CHECK OPTION 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.4 Hiérarchie de tables virtuelles 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.5 Renommer les colonnes d'une VIEW N.B. Modification interdite 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.4.2.6 Indépendance logique des données et encapsulation par les tables virtuelles Catalogue (noArticle, description, prixUnitaire) Inventaire (noArticle, quantitéEnStock) 22/09/2018 © Robert Godin. Tous droits réservés.

6.4.2.7 Sécurité par les tables virtuelles 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.5 Schéma interne Non standardisé organisation primaire de la table organisations secondaires (INDEX) Voir Volume II 22/09/2018 © Robert Godin. Tous droits réservés.

6.6 Interface entre SQL et un programme SQL incomplet Défaut d'impédance (impedance mismatch) modèle de données BD  modèle de données du langage de programmation 22/09/2018 © Robert Godin. Tous droits réservés.

Librairie spécialisée (Call-Level Interface - SQL/CLI) API spécifique au SGBD non portable Standard de facto ODBC développé par Microsoft pour le C aligné sur X/Open, ISO CLI portable pilote ODBC pour client/serveur JDBC pour Java SQL3 : SQL/CLI 22/09/2018 © Robert Godin. Tous droits réservés.

SQL enchâssé (Embedded SQL) Code SQL dans le source du langage hôte Syntaxe spéciale Pré-compilation Oracle : pro*C/C++, pro*COBOL, …, JSQL Moins portable pré-compilateur spécifique au SGBD traduit en API du SGBD JSQL ->API standard JDBC 22/09/2018 © Robert Godin. Tous droits réservés.

Extension procédurale à SQL (Persistent Stored Modules - SQL/PSM) structures de contrôle procédures, fonctions, packages support direct des types SQL pour les variables exécution au niveau serveur de BD Oracle PL/SQL 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.1 SQL enchâssé Syntaxe Insertion d'une ligne dans la table Client 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. Variables partagées Déclaration Utilisation de variables partagées Vérification d ’exceptions avec SQLSTATE 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.1.1 SELECT à ligne unique 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.1.2 Curseur SQL 22/09/2018 © Robert Godin. Tous droits réservés.

6.6.1.3 Mises à jour par curseur 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.1.4 SQL dynamique 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.2 Connexion (CONNECT) 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.2 Connexion (CONNECT) Syntaxe du CONNECT Exemple avec SQL enchâssé en C Pour passer d ’un connexion à l ’autre Pour terminer une connexion 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.3 JDBC API standard pour JAVA Ensemble de classes Besoin d ’installer un pilote JDBC dans l ’environnement JAVA 22/09/2018 © Robert Godin. Tous droits réservés.

6.6.3.1 Architecture pour les pilotes JDBC 22/09/2018 © Robert Godin. Tous droits réservés.

6.6.3.2 Etablissement d'une connection Charger les pilotes JDBC d ’ Oracle N.B. La librairie des pilotes Oracle doit être accessible à la machine virtuelle Java. Voir http://www.info.uqam.ca/~godin/livres.html Avec JDK 1.1 (problème avec bloc statique) utiliser : DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); Établir une connexion avec le pilote OCI8 pour un serveur Oracle local OCI8 est un pilote de type 2 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.3.4 Exécution d'une opération de mise à jour (INSERT, DELETE, UPDATE) 22/09/2018 © Robert Godin. Tous droits réservés.

© Robert Godin. Tous droits réservés. 6.6.3.5 Exécution d'un SELECT 22/09/2018 © Robert Godin. Tous droits réservés.

6.6.3.6 Gestion des transactions Par défaut : auto-commit Pour modifier Pour un commit explicite : Pour un rollback : 22/09/2018 © Robert Godin. Tous droits réservés.

ResultSet scrollable, sensitive et updatable sous JDBC 2.0 Paramètres à la création du Statement ex:uneConnection.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE) Scrollable first(), last(), beforeFirst(), afterLast(), next(), previous(), relative(n), absolute(n) Sensitive voit des mises à jour en cours Updatable updateXXX(), updateRow(), deleteRow(), insertRow(), moveToInsertRow() 22/09/2018 © Robert Godin. Tous droits réservés.

6.6.3.7 Gestion des exceptions Mécanisme try/catch de JAVA 22/09/2018 © Robert Godin. Tous droits réservés.

Exemple d ’applette avec pilote JDBC type 4 (thin)

© Robert Godin. Tous droits réservés. 6.6.3.8 Compilation et exécutions multiples avec la classe PreparedStatement Compilation + exécution combinée au executeQuery Compilation au prepareStatement Compilation avec paramètres 22/09/2018 © Robert Godin. Tous droits réservés.

Considérations client/serveur Coût important de communication Limiter le nombre d ’appels au serveur de BD Solutions combiner plusieurs opérations SQL en une si possible combiner plusieurs opérations dans une procédure/fonction (stored) exécutée au niveau serveur extension procédurale (SQL/PSM, Oracle PL/SQL) support d ’un langage hôte (JAVA, C , C++, COBOL,…) JDBC 2.0 Statement peut contenir un lot d ’énoncés (batch update) unEnoncé.addBatch(), unEnoncé.executeBatch() 22/09/2018 © Robert Godin. Tous droits réservés.

Chercher le nomClient et noTéléphone d ’un Client Eviter : Utiliser plutôt : 22/09/2018 © Robert Godin. Tous droits réservés.