Programme Introduction aux BD et aux SGBD Le modèle relationnel

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Bases de Données Avancées: Bases de Données Relationnelles
Licence pro MPCQ : Cours
Additions soustractions
Distance inter-locuteur
Les numéros 70 –
Les numéros
Les identités remarquables
SQL - Subtilités.
Algorithme et structure de données
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Optimisation de Requêtes
Programme Introduction aux BD et aux SGBD Le modèle relationnel
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Les fonctions.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
Les contraintes d’integrité
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
BASE DE DONNEES RELATIONNELLES
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
LE LANGAGE SQL Langage de manipulation de données (LMD)
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
Bases de données et SGBD relationnels
Titre : Implémentation des éléments finis sous Matlab
2 Ils associent les rangées de 2 requêtes UNION [ALL] INTERSECT MINUS.
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
SQL Partie 3 : (LID : Langage d'interrogation de données)
LES NOMBRES PREMIERS ET COMPOSÉS
Les chiffres & les nombres
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
La statistique descriptive
Cours N°2 Base de Données & Langage SQL
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Titre : Implémentation des éléments finis en Matlab
Manipulation des données Requêtes simples
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
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.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Limiter et trier des données
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.
Structures des données
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Nom:____________ Prénom: ___________
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Commission paritaire de suivi des opérations de reclassement repositionnement dans le cadre du droit d’option Statistiques novembre 2010.
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Optimisation de requêtes
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
Sélection de colonnes (la projection)
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.
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 de Manipulation de Données LMD Module 6.
Langage de manipulation de données (LMD)
Transcription de la présentation:

Programme Introduction aux BD et aux SGBD Le modèle relationnel Le langage de requête SQL La conception d’une BD relationnelle Protection des informations Perspectives des BD

Structured Query Language SQL Structured Query Language

Schéma de la base de référence Employé(Nom_emp, Prénom_emp, No_ss, Date_naiss, Adresse_emp, Sexe, Salaire, Comm, No_chef, Nod) Département(Nom_d, No_dept, No_dir, Date_affect) Dept_local(Num_dept, Id_loc) Projet(Nom, No_proj, Local_proj, Nod) Travaille_sur(No_ss, No_projet, Nb_heures)

Instance

Instance (suite)

Interrogation de la base de données Présentation des résultats sous forme tabulaire où: en-tête de colonne: attribut largeur de colonne cf. définition du domaine de l'attribut alias possible pour entête de colonne

Clauses minimales SELECT attr1, attr2, .... attrn FROM relation; Exemples: SELECT Nom_d FROM Département; SELECT Nom, Nod "numéro" FROM Projet;

Joker SELECT * FROM Projet;

Elimination des doublons SELECT DISTINCT Local_proj FROM Projet;

Synonymes SELECT P.Nom, P.Nod FROM Projet P;

Clause WHERE SELECT attr1, attr2, .... attrn FROM relation WHERE condition; Exemple: « Liste des employés travaillant plus de 20 heures sur un projet. » SELECT No_ss, No_projet FROM Travaille_sur WHERE Nb_heures > 20;

Exemples Liste des employés dont la commission est supérieure à leur salaire SELECT No_ss FROM Employé WHERE Comm > Salaire; Liste des employés du département 5 dont le salaire est supérieur à 300 kF WHERE Salaire > 300 AND Nod = 5; Liste des employés qui ne sont pas du département 5 SELECT No_ss FROM Employé WHERE Nod <> 5; Liste des départements localisés à Paris ou à Fontainebleau SELECT Num_dept FROM Dept_local WHERE Id_loc IN ('Paris', 'Fontainebleau');

Clause ORDER BY ORDER BY {attribut [DESC | ASC]} Liste des employés ordonnée par ordre croissant de salaire SELECT No_ss FROM Employé ORDER BY Salaire;

Exemples Liste des employés et leurs départements ordonnée par ordre décroissant de salaire à partir de 300 kF SELECT No_ss FROM Employé WHERE Salaire > 300 ORDER BY Salaire DESC; Liste des employés et leurs départements ordonnée par ordre croissant de salaire et par ordre décroissant de département SELECT No_ss FROM Employé ORDER BY Salaire, 1, Nod DESC;

Requête multi-relations Critère de jointure: clause WHERE Notation préfixée (relation.attribut) Exemple: Dans quelles villes sont les départements R&D? (Equi-jointure) SELECT Id_loc FROM Département, Dept_local WHERE Nom_d = 'R&D' AND No_dept = Num_dept;

Exemples Sur quels projets travaillent des femmes ? SELECT No_projet FROM Travaille_sur, Employé WHERE Sexe = 'F' AND Travaille_sur.No_ss = Employé.No_ss; ou FROM Travaille_sur T, Employé E AND T.No_ss = E.No_ss; Employés qui gagnent plus que leur responsable (auto-jointure) SELECT Nom_emp FROM Employé E, Employé CHEF WHERE E.No_chef = CHEF.No_ss AND E.Salaire > CHEF.Salaire

Sous-requêtes SELECT attr1, attr2, .... attrn FROM relation WHERE attribut opérateur (SELECT ...); Quels sont les employés des départements R&D ? SELECT Nom_emp FROM Employé WHERE Nod IN ( SELECT No_dept FROM Département WHERE Nom_d = 'R&D');

Expressions et fonctions numériques dans la clause SELECT Liste des employés et de leur rémunération totale (salaire et commission) SELECT E.No_ss, E.Salaire + E.Comm FROM Employé E;

Expressions numériques dans la clause WHERE Liste des employés dont la commission dépasse la moitié de leur salaire. SELECT E.No_ss FROM Employé E WHERE E.Comm > 0.5 * E.Salaire

Expressions numériques dans la clause ORDER BY Liste des employés triée par ordre croissant de rémunération totale SELECT E.No_ss FROM Employé E ORDER BY E.Comm+ E.Salaire;

Fonctions agrégats 5 fonctions agrégatives: AVG ( ): calcul de la moyenne SUM ( ): calcul de la somme MIN ( ): calcul de la valeur minimale MAX ( ): calcul de la valeur maximale COUNT ( ): calcul du nombre de tuples

AVG ( ) Donner la moyenne des salaires. SELECT AVG(Salaire) FROM Employé; Donner la moyenne des revenus d'un salarié SELECT AVG(Salaire + Comm)

SUM( ) Donner la somme des salaires, et la somme des commissions perçues par les employés. SELECT SUM(Salaire), SUM(Comm) FROM Employé; Donner la somme des salaires des employés ne percevant pas de commission. SELECT SUM(Salaire) FROM Employé WHERE Comm = 0;

MIN( ) Quel est le revenu minimum (commission comprise) ? SELECT MIN(Salaire + Comm) FROM Employé;

MAX( ) Quel est la commission maximale perçue ? SELECT MAX(Comm) FROM Employé;

COUNT() Quel est le nombre d'employés du département 5 ? SELECT COUNT(No_ss) FROM Employé WHERE Nod = 5; ou SELECT COUNT(*)

Exemples Attention SELECT Nom_emp, AVG(Salaire) FROM Employé; Donner le plus haut salaire, le plus bas salaire et la différence entre les deux SELECT MAX(Salaire), MIN(Salaire), MAX(Salaire) - MIN(Salaire) FROM Employé;

Clause GROUP BY Regroupement de tuples Relation initiale partitionnée horizontalement selon les valeurs d'un attribut ou d'un groupe d'attributs. Permet de répondre aux questions du type: donner le nombre d'employés par département.  constituer des groupes d'employés pour chaque département évaluer au sein de chacun de ces groupes le nombre d'éléments

Exemple Donner le nombre d'employés par département. SELECT Nod, COUNT(*) FROM Employé GROUP BY Nod;

Evaluation du résultat Relation initiale

Evaluation du résultat Tri et partitionnement

Evaluation du résultat

Exemples Attention: tous les attributs figurant dans la clause SELECT sans être soumis à un agrégat doivent apparaître dans la clause GROUP BY SELECT Nom_emp, AVG(Salaire) FROM Employé GROUP BY Nod; Problème

Exemples Donner le salaire moyen des femmes par département. SELECT Nod, AVG(Salaire + Comm) FROM Employé WHERE Sexe = 'F' GROUP BY Nod;

Clause HAVING Exprimer des conditions sur le résultat après partitionnement Exemple: Donner la liste des salaires moyens par département si celui-ci excède 400 kF. SELECT Nod, AVG(Salaire) FROM Employé GROUP BY Nod HAVING AVG(Salaire) > 400;

Exemple Donner la liste des salaires moyens des femmes par département si celui-ci excède 400 kF. SELECT Nod, AVG(Salaire) FROM Employé WHERE Sexe = 'F' GROUP BY Nod HAVING AVG(Salaire) > 400;

Opérateurs ensemblistes Opérateurs binaires Deux relations de même schéma en entrée

Union Donner la liste des dépenses composant la masse salariale (salaire et commission). SELECT Salaire FROM Employé UNION SELECT Comm L'opérateur d'union élimine automatiquement les doublons

Exemple Attention aux schémas Donner la liste des départements avec leurs directeurs et des départements avec leurs localisations SELECT No_dept, No_dir FROM Département UNION SELECT Num_dept, Id_loc FROM Dept_local Problème

Intersection Quels sont les employés qui encadrent d'autres employés et qui travaillent sur un projet ? SELECT No_chef FROM Employé INTERSECT SELECT No_ss FROM Travaille_sur

Différence Donner la liste des employés qui n'encadrent personne. SELECT No_ss FROM Employé EXCEPT SELECT No_chef

Questions quantifiées Prédicats ANY ALL EXISTS

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 Exemple: Quels sont les employés travaillant sur au moins un des projets de l'employé 13334. SELECT No_ss FROM Travaille_sur WHERE No_projet = ANY (SELECT No_projet WHERE No_ss =13334)

ALL Teste si la valeur d'un attribut satisfait un critère de comparaison avec tous les résultats d'une sous-requête. Exemple: Quels sont les employés les mieux payés. SELECT No_ss FROM Employé WHERE Salaire >= ALL (SELECT Salaire FROM employé)

EXISTS Teste si la réponse à une sous-requête est vide. Exemple: Donner le nom des employés travaillant au moins sur un projet. SELECT Nom_emp FROM Employé E WHERE EXISTS ( SELECT No_projet FROM Travaille_sur T WHERE T.No_ss = E.No_ss);

Exemple Quels sont les noms d'employés ayant au moins un autre employé sous leurs ordres. SELECT Nom_emp FROM Employé E1 WHERE EXISTS ( SELECT No_ss FROM Employé E2 WHERE E2.No_chef = E1.No_ss) ORDER BY Nom_emp;

Prédicat EXISTS pour exprimer une division Quels sont les départements répartis sur tous les sites? Un département est conservé s'il n'existe aucun site sur lequel il ne soit pas situé. SELECT No_dept FROM département D WHERE NOT EXISTS (SELECT Id_loc FROM Dept_local L1 WHERE NOT EXIST (SELECT L2.* FROM Dept_local L2 WHERE L2.Id_loc = L1.Id_loc AND L2.Num_dept = D.No_dept))

Synthèse SQL Equivalent AR SELECT liste d'attributs, agrégats Projection FROM liste de relations Produit cartésien WHERE conditions Restriction + jointure ou autre requête Division, jointure GROUP BY liste d'attributs HAVING condition, agrégats ORDER BY liste d'attributs UNION | INTERSECTION | EXCEPT Union, intersection, différence

Exemple complet Liste des départements avec le nombre d'employés ne percevant pas de commission et travaillant sur un projet si celui-ci est supérieur à 1 triée par ordre croissant de département. SELECT D.Nom_d, D.No_dept, COUNT(*) FROM Département D, Employé E, Travaille_sur T WHERE E.Comm=0 AND D.No_dept =E.Nod AND E.No_ss = T.No_ss GROUP BY No_dept HAVING COUNT(*) > 1 ORDER BY No_dept;

Commandes de mise à jour Insertion de nouveaux tuples: INSERT Mise à jour de valeurs: UPDATE Suppression de tuples: DELETE Suppression de tous les tuples d'une relation: TRUNCATE

INSERT Insérer des tuples dans une relation en spécifiant les valeurs à insérer INSERT INTO <relation> VALUES (<liste de valeurs>); INSERT INTO relation(<liste d'attributs>) Liste des noms d'attributs optionnelle

Exemples Créer le nouveau département "Distribution" de numéro 6, dirigé par 18886 à partir du 15/09/96. INSERT INTO département VALUES ('Distribution', 6, 18886, '15/09/96'); Créer le nouveau département "Distribution" de numéro 6, dirigé par 18886. La date d'affectation est pour l'instant inconnue. INSERT INTO département (No_dept, nom_d, No_dir) VALUES (6, 'Distribution', 18886);

Insertion à partir d'autres relations Insertion de tuples provenant d'une requête considérée comme une sous-requête INSERT INTO relation SELECT... Création de relation avec insertion simultanée de données CREATE TABLE relation AS SELECT....

UPDATE Modification des valeurs d'un ou de plusieurs attributs, dans un ou plusieurs tuples existants d'une relation. UPDATE <relation> SET <attribut> = <valeur> WHERE <expression logique> En l'absence de clause WHERE toutes les lignes sont mises à jour

Exemple Augmenter de 10 % tous les employés n'ayant pas de commission. UPDATE Employé SET Salaire = Salaire *1.1 WHERE Comm = 0;

DELETE Suppression des tuples d'une relation vérifiant un certain critère DELETE FROM <relation> WHERE <expression logique> En l'absence de la clause WHERE tous les tuples sont supprimés

Exemple Traiter la fin du projet Produit Y DELETE FROM Travaille_sur WHERE Nom = 'produitX';

TRUNCATE Suppression de tous les tuples d'une relation TRUNCATE TABLE relation; Vider la relation "projets" (après un archivage par exemple) TRUNCATE Projet;

SQL : aspect programmation

Contexte Limites du SQL interactif : absence de structure de contrôle absence de variable => Adopter un langage de type procédural SQL doit rester le seul langage d'accès aux données => SQL intégré (Embedded SQL)

Traitement d'une requête SQL SELECT nom, âge FROM Employé WHERE âge >30 Analyse Syntaxique Vérification DD Optimisation Génération d'un plan d'exécution Forme exécutable de la requête Exécution

Concepts Précompilateur Variable hôte Programme + ordres SQL => programme + appels bas niveaux BD Variable hôte Variable déclarée dans le programme hôte pour le transfert des données entre les ordres SQL intégrés et le programme hôte Utilisations: Variables paramètres des ordres SQL (programme -> SGBD); Zone de réception des données renvoyées par une interrogation (SGBD -> programme).

Exemple: Pro*C if (sqlca.sqlcode == 0) main() { exec sql include sqlca; exec sql begin declare section; int num; /* no employé*/ char nom[16]; /*nom employé*/ float sal: /* salaire*/ exec sql end declare section; printf("entrer le numéro de l'employé: "); scanf("%d", &num); exec sql select nom_emp, salaire from Employé Where num_emp =: num into:nom,:sal; if (sqlca.sqlcode == 0) { printf("nom: %s, salaire:%f\n", nom, sal); } else { if (sqlca.sqlcode == 100) { printf("Pas d'employé ayant ce numéro\n"); { printf("erreur:%d\n", sqlca.sqlcode); exit();