Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections 15.5.

Slides:



Advertisements
Présentations similaires
26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom.
Advertisements

Bases de Données Avancées: Bases de Données Relationnelles
Transformation de documents XML
SQL - Subtilités.
Algèbre relationnelle
Introduction aux Entity Beans
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Les contraintes d’integrité
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
Rappel sur les bases de données et le vocabulaire
BASE DE DONNEES RELATIONNELLES
LE LANGAGE SQL Langage de manipulation de données (LMD)
Chap 4 Les bases de données et le modèle relationnel
1 Bases de Données Distribuées Chapitre 22, Sections 22.6–22.14.
Calcul Relationnel Chapitre 4, Section 4.3.
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 ] [,...]
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
SQL Partie 3 : (LID : Langage d'interrogation de données)
Mise en œuvre du langage MDX
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Contrôle de lAccès Simultané Chapitre 17.
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 Evaluation des Operations Relationnelles Chapitre 14, Section 14.4.
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections 15.5.
SQL: Contraintes et Triggers
Algèbre Relationnelle
Optimisation des Requêtes Relationnelles
1 Évaluation des Requêtes: Survol Chapitre Objectifs Catalogue Préliminaires: Techniques de base pour traiter des requêtes Chemin daccès Correspondance.
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Évaluation des Requêtes: Survol Chapitre 12.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Le Modèle Relationnel Chapitre 3.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Survol du Stockage et de lIndexage Chapitre 8.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Contraintes et Triggers Chapitre 5,
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Gestion des Transactions: Survol Chapitre 16.
Bases de Données II (Automne 2007)
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6, Sections
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Le Modèle Relationnel Chapitre 3.
Indexes à Arbres et Indexes à Hachage
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Algèbre Relationnelle Chapitre 4, Sections 4.1 – 4.2.
Cours N°2 Base de Données & Langage SQL
1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
Manipulation des données Requêtes simples
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Survol du Stockage et de lIndexage Chapitre 8.
SQL: Requêtes, Programmation et Triggers
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Calcul Relationnel Chapitre 4, Section 4.3.
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.
Traduction des opérations sous MySQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Créer des packages.
Optimisation de requêtes
Institut Supérieur d’Informatique
Module 7 : Utilisation de requêtes élaborées
Sélection de colonnes (la projection)
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
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.
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
Complément sous-requêtes
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.
Introduction Module 1.
Introduction au langage PL/SQL
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.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Langage de manipulation de données (LMD)
Transcription de la présentation:

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections 15.5

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke2 Survol des Composantes de SQL « Data manipulation language »: utilisé pour poser des requêtes et insérer, effacer ou modifier des lignes. « Data definition language »: utilisé pour créer, détruire ou modifier les tables et vues. Triggers et contraintes dintégrité avancées: utilisés pour spécifier des actions que le SGBD exécutera automatiquement. SQL incorporé: permet à SQL dêtre appelé dun langage hôte. SQL dynamique : permet de créer et dexécuter des requêtes pendant lexécution dun programme dapplication.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke3 Survol des Composantes de SQL (Suite) Exécution client serveur et accès à distance aux BDs: commandes sur laccès à un serveur distant. Gestion des transactions: contrôle lexécution des transactions. Sécurité: contrôle laccès des utilisateurs au système. Divers composantes: orientation objet, récursivité, aide à la décision, XML, données spatiales, exploration des données (data mining), etc. DML, DDL, triggers et ICs seront vu dans ce module.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke4 Exemples dinstances R1 S1 S2 Nous utiliseront ces instances des relations Sailors et Reserves. Si la clé pour la rélation Reserves contenait seulement les attributs sid et bid, comment la sémantique de cet exemple serait-elle différente?

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke5 Requête SQL de Base relation-list Une liste des noms de relation (possiblement avec une variable détendue («range-variable») après chaque nom). target-list Une liste dattributs des relations dans relation-list qualification Comparaisons (Attr op const ou Attr1 op Attr2, où op est une des opérations ) combinées en utilisant les particules logiques AND, OR et NOT. DISTINCT est un mot-clé optionnel indiquant que la réponse ne devrait pas contenir des duplicata. Par défaut les duplicata ne sont pas éliminés. SELECT [DISTINCT] target-list FROM relation-list WHERE qualification

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke6 Stratégie dÉvaluation Conceptuelle La sémantiques dune requête SQL est définie en termes de la stratégie dévaluation suivante: Calculer le produit Cartésien de relation-list. Effacer du résultat tous les tuples ne remplissant pas les qualifications. Effacer les attributs qui ne sont pas dans target-list. Si DISTINCT est spécifié, éliminer les ligne redondantes (duplicata). Cette stratégie est probablement la moins efficiente manière de calculer la réponse à une requête! Un optimisateur trouvera sûrement une stratégie plus efficiente de calculer les mêmes réponses.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke7 Exemple dÉvaluation Conceptuelle SELECT S.sname FROM Sailors S, Reserves R WHERE S.sid=R.sid AND R.bid=103

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke8 Une Note sur les Variables dÉtendue Leur utilisation nest strictement nécessaire que si la même relation apparaît deux fois dans la clause FROM. Ainsi la requête précédente pourrai aussi être écrite comme suit: SELECT S.sname FROM Sailors S, Reserves R WHERE S.sid=R.sid AND bid=103 SELECT sname FROM Sailors, Reserves WHERE Sailors.sid=Reserves.sid AND bid=103 Lutilisation des variables détendue est cependant considérée comme un bon style! OR

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke9 Trouver des navigateurs qui ont réservé au moins un bateau Lajout de DISTINCT ferait-il une différence dans cette requête? Quel serait leffet du remplacement de S.sid par S.sname dans la clause SELECT ? Lajout de DISTINCT à cette dernière variante de la requête ferait-il une différence? SELECT S.sid FROM Sailors S, Reserves R WHERE S.sid=R.sid

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke10 Expressions et Chaînes («Strings») Illustre lutilisation dexpressions arithmétiques et des filtrages des chaînes («string pattern matching»): Trouver des triplets (formés des âges des navigateurs et de deux autres attributs définis par des expressions) pour des navigateurs dont les noms commencent et se terminent par B et contiennent au moins 3 caractères. AS et = sont deux manières de nommer des attributs dans le résultat. LIKE est utilisé pour le filtrage des chaînes de caractères. `_ est utilisé pour un caractère (manquant) et `% tient lieu de 0 ou plus dun caractère arbitraire. SELECT S.age, age1=S.age-5, 2*S.age AS age2 FROM Sailors S WHERE S.sname LIKE B_%B

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke11 Trouver les sids des navigateurs qui ont réservé un bateau rouge ou vert UNION: peut être utilisée pour calculer lunion de deux ensembles de tuples qui sont compatibles vis-à-vis de lunion (Ces derniers étant eux- mêmes le résultat des requêtes SQL). Si nous remplaçons OR par AND dans la première version, quel serait le résultat? Si nous remplacons UNION par EXCEPT nous calculons la différence.) SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND (B.color=red OR B.color=green) SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=red UNION SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=green

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke12 Trouver les sids des navigateurs qui ont réservé un bateau rouge et un bateau vert INTERSECT: Peut être utilisé pour calculer lintersection de deux ensembles de tuples qui compatibles vis-à-vis de lunion. Inclus dans le standard SQL/92, mais certains systèmes ne le supportent pas. Contrastez la symétrie des requêtes utilisant UNION et INTERSECT avec lasymétrie des autres requêtes exprimant la même chose. SELECT S.sid FROM Sailors S, Boats B1, Reserves R1, Boats B2, Reserves R2 WHERE S.sid=R1.sid AND R1.bid=B1.bid AND S.sid=R2.sid AND R2.bid=B2.bid AND (B1.color=red AND B2.color=green) SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=red INTERSECT SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=green Clé !

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke13 Requêtes Imbriquées («Nested Queries») Ceci est un mécanisme très puissant de SQL: une clause WHERE peut contenir une requête SQL! (En fait, les clauses FROM et HAVING le peuvent aussi.) Pour trouver les navigateurs qui nont pas réservé le bateau #103, on utilise NOT IN. La sémantique des requêtes imbriquées est comparable à lévaluation des boucles imbriquées : Pour chaque tuple de Sailors, vérifier la qualification en calculant la sousrequête. SELECT S.sname FROM Sailors S WHERE S.sid IN ( SELECT R.sid FROM Reserves R WHERE R.bid=103) Trouver les noms des navigateurs qui réservé le bateau #103:

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke14 Requêtes Imbriquées avec Corrélation EXISTS est un autre opérateur de comparaison densemble semblable à IN. Si UNIQUE est utilisé et * est remplacé par R.bid, la requête cherche les navigateurs avec au plus une reservation pour le bateau #103. (UNIQUE verifie sil y a des duplicata; * dénote tous les attributs. Pourquoi remplacer * par R.bid ?) Cette exemple montre pourquoi, en général, la sousrequête doit etre recalculée pour chaque tuple de Sailors. SELECT S.sname FROM Sailors S WHERE EXISTS ( SELECT * FROM Reserves R WHERE R.bid=103 AND S.sid=R.sid) Trouver les noms des navigateurs qui ont réservé le bateau #103:

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke15 Opérateurs de Comparaison dEnsemble On déjà vu IN, EXISTS et UNIQUE. Leur négation sont aussi utilisées NOT IN, NOT EXISTS et NOT UNIQUE. Il y a aussi: op ANY, op ALL, op IN Trouver les navigateurs dont le niveau est plus grand que celui dun navigateur appelé Horatio: SELECT * FROM Sailors S WHERE S.rating > ANY ( SELECT S2.rating FROM Sailors S2 WHERE S2.sname=Horatio)

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke16 Expression des Requêtes INTERSECT en Utilisant IN De même, les requêtes EXCEPT peuvent être re-écrites en utilisant NOT IN. Pour trouver les noms ( names) (pas les sid s) des navigateurs qui ont réservé des bateaux rouges et des bateaux vert, il suffit de remplacer S.sid par S.sname dans la clause SELECT. Trouver les sids des navigateurs qui ont réservé un bateau rouge et un bateau vert: SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=red AND S.sid IN ( SELECT S2.sid FROM Sailors S2, Boats B2, Reserves R2 WHERE S2.sid=R2.sid AND R2.bid=B2.bid AND B2.color=green)

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke17 Division en SQL Cette requête est difficile à exprimer sans utiliser EXCEPT : SELECT S.sname FROM Sailors S WHERE NOT EXISTS (( SELECT B.bid FROM Boats B) EXCEPT ( SELECT R.bid FROM Reserves R WHERE R.sid=S.sid)) SELECT S.sname FROM Sailors S WHERE NOT EXISTS ( SELECT B.bid FROM Boats B WHERE NOT EXISTS ( SELECT R.bid FROM Reserves R WHERE R.bid=B.bid AND R.sid=S.sid)) Navigateurs S tel que... il ny a aucun bateau B sans... un tuple de Reserves montrant que S a réservé B Trouver les navigateurs qui ont réservé tous les bateaux. (1) (2)

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke18 Opérateurs dAgrégat Ces opérateurs sont une extension très significative de lalgèbre relationnelle. COUNT (*) COUNT ( [ DISTINCT ] A) SUM ( [ DISTINCT ] A) AVG ( [ DISTINCT ] A) MAX (A) MIN (A) SELECT AVG (S.age) FROM Sailors S WHERE S.rating=10 SELECT COUNT (*) FROM Sailors S SELECT AVG ( DISTINCT S.age) FROM Sailors S WHERE S.rating=10 SELECT S.sname FROM Sailors S WHERE S.rating= ( SELECT MAX (S2.rating) FROM Sailors S2) Une seule colonne SELECT COUNT ( DISTINCT S.rating) FROM Sailors S WHERE S.sname=Bob

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke19 Trouver le nom et lage du (des) navigateur(s) le(s) plus vieux La première requête est illégale! (La raison sera examinée lorsque nous discuterons GROUP BY.) La troisième requête est équivalente à la seconde et est permise dans SQL/92, mais nest pas supportée dans certains systèmes. SELECT S.sname, MAX (S.age) FROM Sailors S SELECT S.sname, S.age FROM Sailors S WHERE S.age = ( SELECT MAX (S2.age) FROM Sailors S2) SELECT S.sname, S.age FROM Sailors S WHERE ( SELECT MAX (S2.age) FROM Sailors S2) = S.age