La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Présentations similaires


Présentation au sujet: "Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle."— Transcription de la présentation:

1 Evry, mai © INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle Protection des informations Perspectives des BD

2 SQL Structured Query Language

3 Evry, mai © INT 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)

4 Evry, mai © INT Instance

5 Evry, mai © INT Instance (suite)

6 Evry, mai © INT Interrogation de la base de données l 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 l alias possible pour entête de colonne

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

8 Evry, mai © INT Joker SELECT * FROM Projet;

9 Evry, mai © INT Elimination des doublons SELECT DISTINCT Local_proj FROM Projet;

10 Evry, mai © INT Synonymes SELECT P.Nom, P.Nod FROM Projet P;

11 Evry, mai © INT 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;

12 Evry, mai © INT 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 SELECT No_ss FROM Employé 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');

13 Evry, mai © INT 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;

14 Evry, mai © INT 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;

15 Evry, mai © INT 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;

16 Evry, mai © INT 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 SELECT No_projet FROM Travaille_sur T, Employé E WHERE Sexe = 'F' 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

17 Evry, mai © INT 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');

18 Evry, mai © INT 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;

19 Evry, mai © INT 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

20 Evry, mai © INT 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;

21 Evry, mai © INT 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

22 Evry, mai © INT AVG ( ) Donner la moyenne des salaires. SELECT AVG(Salaire) FROM Employé; Donner la moyenne des revenus d'un salarié SELECT AVG(Salaire + Comm) FROM Employé;

23 Evry, mai © INT 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;

24 Evry, mai © INT MIN( ) Quel est le revenu minimum (commission comprise) ? SELECT MIN(Salaire + Comm) FROM Employé;

25 Evry, mai © INT MAX( ) Quel est la commission maximale perçue ? SELECT MAX(Comm) FROM Employé;

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

27 Evry, mai © INT 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é;

28 Evry, mai © INT 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

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

30 Evry, mai © INT Evaluation du résultat Relation initiale

31 Evry, mai © INT Evaluation du résultat Tri et partitionnement

32 Evry, mai © INT Evaluation du résultat Résultat

33 Evry, mai © INT 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

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

35 Evry, mai © INT 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;

36 Evry, mai © INT 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;

37 Evry, mai © INT Opérateurs ensemblistes Opérateurs binaires Deux relations de même schéma en entrée

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

39 Evry, mai © INT 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

40 Evry, mai © INT 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

41 Evry, mai © INT Différence Donner la liste des employés qui n'encadrent personne. SELECT No_ss FROM Employé EXCEPT SELECT No_chef FROM Employé

42 Evry, mai © INT Questions quantifiées Prédicats –ANY –ALL –EXISTS

43 Evry, mai © INT 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é SELECT No_ss FROM Travaille_sur WHERE No_projet = ANY (SELECT No_projet FROM Travaille_sur WHERE No_ss =13334)

44 Evry, mai © INT 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é)

45 Evry, mai © INT 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);

46 Evry, mai © INT 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;

47 Evry, mai © INT 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))

48 Evry, mai © INT Synthèse SQL Equivalent AR SELECT liste d'attributs, agrégatsProjection FROM liste de relationsProduit cartésien WHERE conditionsRestriction + jointure ou autre requêteDivision, jointure GROUP BY liste d'attributs HAVING condition, agrégats ORDER BY liste d'attributs UNION | INTERSECTION | EXCEPTUnion, intersection, différence

49 Evry, mai © INT 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;

50 Evry, mai © INT 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

51 Evry, mai © INT INSERT Insérer des tuples dans une relation en spécifiant les valeurs à insérer INSERT INTO VALUES ( ); INSERT INTO relation( ) VALUES ( ); Liste des noms d'attributs optionnelle

52 Evry, mai © INT Exemples Créer le nouveau département "Distribution" de numéro 6, dirigé par à 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 La date d'affectation est pour l'instant inconnue. INSERT INTO département (No_dept, nom_d, No_dir) VALUES (6, 'Distribution', 18886);

53 Evry, mai © INT 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....

54 Evry, mai © INT UPDATE Modification des valeurs d'un ou de plusieurs attributs, dans un ou plusieurs tuples existants d'une relation. UPDATE SET = WHERE En l'absence de clause WHERE toutes les lignes sont mises à jour

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

56 Evry, mai © INT DELETE Suppression des tuples d'une relation vérifiant un certain critère DELETE FROM WHERE En l'absence de la clause WHERE tous les tuples sont supprimés

57 Evry, mai © INT Exemple Traiter la fin du projet Produit Y DELETE FROM Travaille_sur WHERE Nom = 'produitX';

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

59 SQL : aspect programmation

60 Evry, mai © INT 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)

61 Evry, mai © INT 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 Traitement d'une requête SQL

62 Evry, mai © INT Concepts Précompilateur –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).

63 Evry, mai © INT Exemple: Pro*C 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"); } else { printf("erreur:%d\n", sqlca.sqlcode); } exit(); }


Télécharger ppt "Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle."

Présentations similaires


Annonces Google