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

Slides:



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

SQL - Subtilités.
Algèbre relationnelle
Initiation aux bases de données et à la programmation événementielle
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
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,
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
LE LANGAGE SQL Langage de manipulation de données (LMD)
1 Bases de Données Distribuées Chapitre 22, Sections 22.6–22.14.
Calcul Relationnel Chapitre 4, Section 4.3.
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
SQL Partie 3 : (LID : Langage d'interrogation de données)
Algèbre relationnelle
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 Evaluation des Operations Relationnelles Chapitre 14, Section 14.4.
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 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,
Bases de Données II (Automne 2007)
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 de Base de Données & Langage SQL
Cours N°2 Base de Données & Langage SQL
Bases de Données Avancées - TP2: SQL
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 Survol du Stockage et de lIndexage Chapitre 8.
SQL: Requêtes, Programmation et Triggers
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. Gehrke1 Calcul Relationnel Chapitre 4, Section 4.3.
Initiation aux bases de données et à la programmation événementielle
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Transac SQL Intégrité des données.
Traduction des opérations sous MySQL
Cours 5: Sous requetes Exploitation des données Présentation  Supposez que vous voulez écrire une requête pour trouver qui a un salaire plus.
PostgreSQL – Présentation
Sous-Interrogations.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Fonctions avancées et graphiques
Sélection de colonnes (la projection)
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.
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.
Le langage SQL.
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).
1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Souheib.
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
Complément sous-requêtes
INTRODUCTION AUX BASES DE DONNEES Base et métabase
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.
Bases de données – Cours 3
Modélisation et utilisation Aurélien Marion1 Aurélien Marion
Schéma de base de données Présentation. Conception du schéma logique  Transformation du schéma conceptuel en structures de données supportées par les.
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.
Langage de manipulation de données (LMD)
SQL: Contraintes et Triggers
Transcription de la présentation:

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. Gehrke2 GROUP BY et HAVING Jusquà maintenant, nous avons appliqué des opérateurs dagrégat à tous les tuples qualifiés. Parfois, nous voulons les appliquer seulement à chacun parmi plusieurs groupes de tuples. Le nombre de groupes varie en fonction dinstances. Considérez par exemple la requête: Trouver lâge du plus jeune navigateur de chaque niveau. En général, nous ne savons pas à lavance combien de niveaux existent et ce que sont les valeurs de ces niveaux! Supposez que nous savons que les valeurs des niveaux varient de 1 à 10; nous pouvons écrire 10 requêtes de la forme suivante: SELECT MIN (S.age) FROM Sailors S WHERE S.rating = i Pour i = 1, 2,..., 10:

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke3 GROUP BY et HAVING (Suite) target-list contient (i) une liste dattributs et (ii) les termes avec opérations dagrégat (p.ex., MIN ( S.age )). La liste dattributs (i) doit être un sous-ensemble de la liste grouping- list. Intuitivement, chaque tuple de la réponse correspond à un groupe, et un groupe est un ensemble de tuples qui ont la même valeur pour tous les attributs dans grouping-list. Si un attribut de target-list nest pas dans grouping-list, plusieurs lignes dun même groupe peuvent avoir différentes valeurs pour de tels attributs et il sera difficile de choisir les quelles parmi ces valeurs pour inclusion dans la réponse de la requête. SELECT [DISTINCT] target-list FROM relation-list WHERE qualification GROUP BY grouping-list HAVING group-qualification

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke4 GROUP BY et HAVING (Suite) group-qualification contient une liste dattributs. La liste group-qualification doit contenir un attribut apparaissant comme argument dun opérateur dagrégat dans target-list. Cela garantit que les expressions qui apparaissent dans group-qualification auront une même valeur par groupe. SQL/99 contient 2 nouvelles fonctions: EVERY et ANY applicables à chaque tuple dans un groupe. (Leur sémantique est claire.) SELECT [DISTINCT] target-list FROM relation-list WHERE qualification GROUP BY grouping-list HAVING group-qualification

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke5 Évaluation Conceptuelle Le produit Cartésien de relation-list est calculé, les tuples qui ne passent pas la qualification sont éliminés, les attributs ` nonnecessaires (i.e. non mentionnés dans SELECT, GROUP BY ou HAVING) sont effacés et le reste des tuples est reparti en groupes selon la valeur des attributs dans grouping-list. group-qualification est enfin appliqué pour éliminer quelques groupes. Les expressions dans group-qualification doivent avoir une seule valeur par groupe ! En effet, un attribut de group-qualification qui nest pas un argument dun opérateur dagrégat apparaît aussi dans grouping-list. (La sémantique des clés primaires est ignorée ici!) Un tuple réponse est généré par groupe qualifié.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke6 Trouver lage du plus jeune navigateur en age de voter (i.e. âgé dau moins 18 ans) pour chaque niveau ayant au moins 2 tels navigateurs Seul S.rating et S.age sont mentionnés les clauses SELECT, GROUP BY ou HAVING ; dautres attributs sont ` nonnécessaires. La 2ème colonne du résultat reste sans nom par défaut. (Utiliser AS pour la nommer.) SELECT S.rating, MIN (S.age) AS mage FROM Sailors S WHERE S.age >= 18 GROUP BY S.rating HAVING COUNT (*) > 1 Réponse

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke7 Trouver le nombre de réservations faites pour chaque bateau rouge Grouping utilisant le join de 3 relations. Quobtenons nous si nous enlevons B.color=red de la clause WHERE et ajoutons une clause HAVING avec cette condition? Et si nous enlevons la relation Sailors et la condition contenant S.sid? SELECT B.bid, COUNT (*) AS scount FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=red GROUP BY B.bid

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke8 Trouver lage du plus jeune navigateur âgé de plus de 18 ans pour chaque niveau avec au moins deux navigateurs Ceci montre que la clause HAVING peut aussi contenir une sousrequête. Et si nous remplaçons la clause HAVING par: HAVING COUNT (*) >1 SELECT S.rating, MIN (S.age) FROM Sailors S WHERE S.age > 18 GROUP BY S.rating HAVING 1 < ( SELECT COUNT (*) FROM Sailors S2 WHERE S.rating=S2.rating)

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke9 Trouver les niveaux pour lesquels lage moyen est le minimum de tous les niveaux On ne peut pas imbriquer des opérations dagrégats! Ainsi donc, ceci est faux: SELECT S.rating FROM Sailors S WHERE S.age = ( SELECT MIN ( AVG (S2.age)) FROM Sailors S2) SELECT Temp.rating, Temp.avgage FROM ( SELECT S.rating, AVG (S.age) AS avgage FROM Sailors S GROUP BY S.rating) AS Temp WHERE Temp.avgage = ( SELECT MIN (Temp.avgage) FROM Temp) v Solution correcte (en SQL/92):

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke10 Valeurs Nulles Les valeurs des attributs dans un tuple sont parfois inconnues (p.ex., un niveau non assigné) ou inapplicables (p.ex., aucun nom dépouse). SQL a une valeur spéciale null pour de telles situations. La présence de null complique bien de choses! P.ex.: Besoin doperateurs speciaux pour contrôler si une valeur est ou nest pas nulle. Laffirmation rating>8 est-elle vraie ou fausse lorsque rating est null ? Et la signification de AND, OR et NOT? Besoin dune logique à 3 valeurs (vrai, faux et inconnu ). La signification des clauses doit être définie soigneusement. (p.ex., WHERE élimine des lignes névaluant pas à vrai.) Nouveaux opérateurs (p.ex. « outer joins ») possibles.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke11 Contraintes dIntegrité: Rappel Un IC décrit les conditions que chaque instance légale de la relation doit satisfaire. Les insertions/effacements/modifications violant les ICs ne sont pas permis. Utilisable pour assurer la sémantique de lapplication (p.ex., sid est une clé), ou prévient des inconsistances (p.ex., sname doit être une chaînes de caractères, age doit être < 200) Types de ICs : Contraintes de domaine, clés primaires, clé étrangères, contraintes générales. Contraintes de domaine : Les valeurs des attributs doivent être du type approprié. Toujours vérifiées.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke12 Contraintes Générales Utile lorsque des ICs plus généraux que les clés sont en jeux. Des requêtes peuvent être utilisées pour exprimer des contraintes. Les contraintes peuvent être nommées. CREATE TABLE Sailors ( sid INTEGER, sname CHAR(10), rating INTEGER, age REAL, PRIMARY KEY (sid), CHECK ( rating >= 1 AND rating <= 10 ) CREATE TABLE Reserves ( sname CHAR(10), bid INTEGER, day DATE, PRIMARY KEY (bid,day), CONSTRAINT noInterlakeRes CHECK (`Interlake <> ( SELECT B.bname FROM Boats B WHERE B.bid=bid)))

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke13 Contraintes sur Plusieurs Relations CREATE TABLE Sailors ( sid INTEGER, sname CHAR(10), rating INTEGER, age REAL, PRIMARY KEY (sid), CHECK ((SELECT COUNT (S.sid) FROM Sailors S) + (SELECT COUNT (B.bid) FROM Boats B) < 100) 1ère solution compliquée et fausse! Si Sailors est vide, le nombre de tuples de Boats peut être nimporte quoi! ASSERTION est la solution correcte; elle nest associée avec aucune des deux tables. CREATE ASSERTION smallClub CHECK ( (SELECT COUNT (S.sid) FROM Sailors S) + (SELECT COUNT (B.bid) FROM Boats B) < 100 ) Nombre de bateaux plus nombre de Navigateurs est < 100

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke14 Triggers Trigger: procédure qui exécute automatiquement si les changements spécifiés apparaissent dans la base de données. Trois parties: Événement (active le trigger) Condition (test si le trigger devrait être exécuté) Action (Ce qui arrive si le trigger est exécuté)

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke15 Triggers: Exemple (SQL:1999) CREATE TRIGGER youngSailorUpdate AFTER INSERT ON SAILORS REFERENCING NEW TABLE NewSailors FOR EACH STATEMENT INSERT INTO YoungSailors(sid, name, age, rating) SELECT sid, name, age, rating FROM NewSailors N WHERE N.age <= 18

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke16 Résumé SQL fut un facteur qui a joué un rôle important dans lacceptation rapide du modèle relationnel; car il est plus naturel que les premiers langages de requêtes procéduraux. SQL jouit de la complétude relationnelle; en fait il est même plus expressif que lalgèbre relationnel. même les requêtes exprimables en algèbre relationnelle peuvent être exprimées de manière plus naturelle en SQL. Beaucoup de voies alternatives décrire une requête existent; un optimisateur devrait chercher le plan dévaluation le plus performant. En pratique, les utilisateurs ont besoin dêtre conscients de la manière dont les requêtes sont optimisées et évaluées pour de meilleurs résultats.

Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke17 Résumé (Suite) NULL est utilisé pour les valeurs dattributs inconnues et comportent beaucoup de complications. SQL permet la spécification de contraintes dintégrité. Les triggers répondent aux changements dans la base de données.