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

1 Introduction à SQL Select-From-Where Le sens des requêtes Requêtes imbriquées et complexes Modifier des relations (daprès les transparents de Ullman)

Présentations similaires


Présentation au sujet: "1 Introduction à SQL Select-From-Where Le sens des requêtes Requêtes imbriquées et complexes Modifier des relations (daprès les transparents de Ullman)"— Transcription de la présentation:

1 1 Introduction à SQL Select-From-Where Le sens des requêtes Requêtes imbriquées et complexes Modifier des relations (daprès les transparents de Ullman)

2 2 SQL? uSQL est un langage de haut niveau avec lequel le programmeur évite la manipulation explicite des données comme avec un langage de programmation classique u SQL est une solution viable car ses requêtes sont optimisées.

3 3 Select-From-Where uLa syntaxe dune requête est la suivante : SELECT attributs désirés FROM une ou plusieurs tables WHERE condition (sur les tuples de la table)

4 4 Un Exemple uUn schéma de base de données wLes attributs soulignés désignent la clé. Beers(name, manf) Bars(name, addr, license) Drinkers(name, addr, phone) Likes(drinker, beer) Sells(bar, beer, price) Frequents(drinker, bar)

5 5 Exemple u Les bières fabriquées par Kro SELECT name FROM Beers WHERE manf = Kronenbourg;

6 6 Résultat de la requèete name 1664 Kronenbourg Tourtel La réponse est une relation composée dun seul attribut name.

7 7 Sens dune requête sur une seule relation uCommencer avec la relation référencée dans le from uAppliquer la sélection avec la condition du where uAppliquer la projection avec les attributs de la partie select

8 8 Sémantique opérationnelle uPour implémenter cet algorithme, pensez à une variable tuple qui stocke tous les n-uplets de la relation mentionnée dans le from uVérifiez si le tuple courant satisfait la clause WHERE uSi oui, calculez les attributs ou expressions de la clause select à partir des composants de tuple

9 9 * Dans une clause select uQuand il y a une relation mentionnée dans la partir from, le * signifie tous les attributs de cette relation. uExemple using Beers(name, manf): SELECT * FROM Beers WHERE manf = Kronenbourg;

10 10 Résultat de la requête: namemanf 1664 Kronenbourg Kronenbourg Kronenbourg Tourtel Kronenbourg La relation résultat apparaît avec tous les attributs de la relation beer

11 11 Renommer les attributs uSi on souhaite que la relation résultat ait un nom dattribut différent utiliser AS pour renommer lattribut. uExemple sur la relation Beers(name, manf): SELECT name AS beer, manf FROM Beers WHERE manf = Kronenbourg

12 12 Result of Query: beermanf 1664 Kronenbourg Kronenbourg Kronenbourg Tourtel Kronenbourg

13 13 Les expressions dans la clause select uUne expression peut apparaître dans la partie select. uExemple: pour Sells (bar, beer, price): SELECT bar, beer, price * 120 AS priceInYen FROM Sells;

14 14 Résultat de la requête barbeerpriceInYen JoesBud300 SuesMiller360 … … …

15 15 Un autre exemple : avec des expressions constantes uSur la relation Likes(drinker, beer): SELECT drinker, likes Bud AS whoLikesBud FROM Likes WHERE beer = Bud;

16 16 Résultat de la requête drinkerwhoLikesBud Sallylikes Bud Fredlikes Bud …

17 17 Expression complexe dans la partie where uÀ partir de la relation Sells(bar, beer, price), donner le prix de la Bud dans le bar Joes SELECT price FROM Sells WHERE bar = Joes Bar AND beer = Bud;

18 18 Points importants uAttention au caractère spécial (quote) uLes conditions de la clause WHERE peuvent utiliser les opérateurs AND, OR, NOT, et les parenthèses. uSQL nest pas sensible à la casse (pas de différences entre minuscules et majuscules).

19 19 Patterns uDans la clause WHERE, on peut vouloir comparer une chaîne de caractères avec un pattern. uForme générale: w LIKE w NOT LIKE uPattern est une chaîne entre quotes et peut référencer les caractères spéciaux w% = any string; w_ = any character.

20 20 Exemple uA partir de la relation Drinkers(name, addr, phone) trouver les buveurs avec 555 comme indicatif : SELECT name FROM Drinkers WHERE phone LIKE %555-_ _ _ _;

21 21 Les valeurs Nulles uLes tuples peuvent avoir NULL comme valeurs de un ou de plusieurs attributs. u2 cas sont possibles : wValeurs manquantes : e.g., on ne connaît pas ladresse dun bar mais on sait quelle existe wInapplicable : e.g., le champ conjoint pour un célibataire.

22 22 Comparer avec NULL uLa logique utilisée par SQL repose sur TRUE, FALSE, UNKNOWN. uLorsquune valeur est comparée à NULL, on renvoie UNKNOWN. uUne requête sélectionne un tuple si la condition de la partie WHERE est évaluée à TRUE (pas FALSE ou UNKNOWN).

23 23 Requêtes avec plusieurs relations uLes requêtes peuvent faire intervenir plusieurs relations en les mentionnant dans la clause FROM. uOn peut distinguer les attributs (enlever une ambiguïté) en les préfixant avec le nom de la relation.

24 24 Exemple uÀ partir des relations Likes(drinker, beer) et Frequents(drinker, bar), donnez les bières appréciées par au moins une personne qui fréquente le bar Joes. SELECT beer FROM Likes, Frequents WHERE bar = Joes Bar AND Frequents.drinker = Likes.drinker;

25 25 Sémantique uPresque identique au cas dune seule relation: 1.Commencez avec le produit cartésien de toutes les relations intervenant dans la clause FROM 2.Appliquez la condition de sélection mentionnée dans la clause WHERE. 3.Projetez sur la liste des attributs et expressions de la clause SELECT.

26 26 Sémantique opérationnelle uImaginez une variable tuple pour chaque relation de la clause FROM. wCes variables itèrent sur les éléments de chacune des relations. uSi ces variables tuples satisfont la condition de la clause where, envoyez les tuples vers la clause select.

27 27 Exemple drinker bardrinker beer tv1tv2 Sally Bud Sally Joes Likes Frequents vers select Vérifie si égalité Vérifie Joes

28 28 Variables tuples explicites uUne requête peut nécessiter 2 copies de la même relation. uOn peut distinguer les copies à laide de variables tuples explicites. uOn peut aussi renommer une relation par commodité (nom trop long par exemple).

29 29 Exemple uA partir de la relation Beers(name, manf), trouvez toutes les paires de bières fabriquées par le même brasseur wNe pas faire apparaître des couples identiques (Bud, Bud). wFaire apparaître les couples dans lordre alphabétique. (Bud, Miller), pas (Miller, Bud). SELECT b1.name, b2.name FROM Beers b1, Beers b2 WHERE b1.manf = b2.manf AND b1.name < b2.name;

30 30 Les sous requêtes uUne instruction parenthèsée SELECT- FROM-WHERE (subquery) peut apparaître comme valeur en différents endroits (y compris dans une autre requête). uCeci est en particulier utilise si la requête ne renvoie quun seul n-uplet

31 31 Exemple uÀ partir de la relation Sells(bar, beer, price), trouvez les bars qui servent Miller le même prix que Joe demande pour Bud. uApproche : 1.Trouver le prix que Joe demande pour une Bud. 2.Trouver les bars qui servent Miller pour ce prix.

32 32 Requête + sous requête SELECT bar FROM Sells WHERE beer = Miller AND price = (SELECT price FROM Sells WHERE bar = Joes Bar AND beer = Bud); Le prix fixé Par Joe pour Une Bud

33 33 Lopérateur IN u IN rend VRAI ssi le tuple fait partie de la relation. w NOT IN est le contraire. uIN-expressions peuvent apparaître dans les clauses WHERE. ula est souvent le résultat dune sous requête.

34 34 Exemple uÀ partir des relations Beers(name, manf) et Likes(drinker, beer), donnez les noms et brasseurs pour chaque bière aimée par Fred SELECT * FROM Beers WHERE name IN (SELECT beer FROM Likes WHERE drinker = Fred); Les bières aimées par Fred

35 35 Lopérateur Exists uEXISTS( ) est VRAI ssi la nest pas vide. uPeut apparaître dans une clause WHERE.

36 36 Lopérateur ANY ux = ANY( ) est une condition booléene qui indique si x est égal à au moins un tuple de la relation. uExemple: x >= ANY( ) signifie que x ne peut pas être plus petit que les tuples de la relation wÀ noter : les tuples ne peuvent avoir quun seul composant.

37 37 Exemple avec lopérateur ALL uÀ partir de la relation Sells(bar, beer, price), trouvez la ou les bières facturées au prix le plus élevé SELECT beer FROM Sells WHERE price >= ALL( SELECT price FROM Sells); Le prix pour la requête externe ne doit pas être inférieur

38 38 Opérations ensemblistes uUnion, intersection, et différence sur des relations sont exprimées de la manière suivante : w( subquery ) UNION ( subquery ) w( subquery ) INTERSECT ( subquery ) w( subquery ) EXCEPT ( subquery )

39 39 Différentes jointures comme en algèbre relationnelle uJointure naturelle: R NATURAL JOIN S; uProduit cartésien: R CROSS JOIN S; uExemple: Likes NATURAL JOIN Serves;

40 40 Aggrégats uSUM, AVG, COUNT, MIN, et MAX peuvent être appliqués à une colonne dans la clause SELECT u COUNT(*) compte le nombre de tuples uNULL napparaît jamais dans lévaluation dun agrégat

41 41 Exemple uÀ partir de la relation Sells(bar, beer, price), trouvez le prix moyen de la Bud: SELECT AVG(price) FROM Sells WHERE beer = Bud;

42 42 Grouper uOn peut faire suivre une expression SELECT-FROM-WHERE par GROUP BY et une liste dattributs. uLa relation qui résulte de lévaluation de SELECT-FROM-WHERE est divisée en groupes en fonction de la valeurs des attributs et toute agrégation est évaluée uniquement sur chacun des groupes

43 43 exemple uÀ partir de la relation Sells(bar, beer, price), trouvez le prix moyen de chaque bière : SELECT beer, AVG(price) FROM Sells GROUP BY beer;

44 44 Un autre exemple uÀ partir de Sells(bar, beer, price) et de Frequents(drinker, bar), donnez pour chaque buveur le prix moyen de la Bud dans les bars quils fréquentent : SELECT drinker, AVG(price) FROM Frequents, Sells WHERE beer = Bud AND Frequents.bar = Sells.bar GROUP BY drinker;

45 45 Restriction sur la partie SELECT uSi une agrégation est utilisée, chaque élément de la clause SELECT doit être soit : 1.Agrégée, soit 2.un attribut de la liste mentionnée par GROUP BY.

46 46 Clauses HAVING uHAVING peut suivre une clause GROUP BY uSi oui, la condition sapplique à chaque groupe et les groupes qui ne la satisfont pas sont éliminés.

47 47 Les conditions HAVING uCes conditions peuvent référencer nimporte quelle relation de la liste FROM. uElles peuvent référencer les attributs de ces relations, tant que ces attributs ont un sens dans le groupe : 1.Un attribut de groupage (grouping attribute), ou 2.aggrégé

48 48 Exemple: HAVING uÀ partir des relations Sells(bar, beer, price) et Beers(name, manf), donnez le prix moyen des bières servies dans au moins 3 bars ou brassées par Petes.

49 49 Solution SELECT beer, AVG(price) FROM Sells GROUP BY beer HAVING COUNT(bar) >= 3 OR beer IN (SELECT name FROM Beers WHERE manf = Petes); Bières brassées par Petes. Groupes de bières composées de au moins 3 bars non NULL Et groupes de bières brassées par Petes.

50 50 Modification de la base uUne commande de modification sexprime presque comme une requête uUne modification ne retourne pas un résultat comme une requête mais modifie la base de données u3 sortes de modifications sont possibles : 1.Insérer un ou plusieurs tuples 2.Détruire un ou plusieurs tuples. 3.Mettre à jour un ou plusieurs tuples

51 51 Insertion uPour insérer un seul tuple: INSERT INTO VALUES ( ); uExemple:. INSERT INTO Likes VALUES(Sally, Bud);

52 52 Spécifier des attributs dans INSERT uPlusieurs raisons : 1.On ne se préoccupe plus de lordre des attributs. 2.On na pas de valeurs pour tous les attributs et on veut que des valeurs par défaut ou NULL soient insérées

53 53 Exemple INSERT INTO Likes(beer, drinker) VALUES(Bud, Sally);

54 54 Insérer plusieurs Tuples uOn peut insérer directement le résultat dune relation : INSERT INTO ( ); INSERT INTO BARS-de-BREST ( Select * from BARS where address = Brest)

55 55 destruction uPour retirer des n-uples satisfaisant une condition: DELETE FROM WHERE ;

56 56 Exemples uRetirer de la relation Likes(drinker, beer) le fait que Sally aime Bud: DELETE FROM Likes WHERE drinker = Sally AND beer = Bud; uVirer tous les tuples de la relation Likes: DELETE FROM Likes;

57 57 Mises à jour uPour mettre à jour des attributs dune relation UPDATE SET WHERE ;

58 58 Exemple: Update uPour mettre à 555-1212 le numéro de téléphone de Fred: UPDATE Drinkers SET phone = 555-1212 WHERE name = Fred; uFixer à 4 le prix max des bières: UPDATE Sells SET price = 4.00 WHERE price > 4.00;

59 59 Déclarer une relation uSyntaxe : CREATE TABLE ( ); uEt on peut retirer une relation: DROP TABLE ;

60 60 Déclarer une table uDes couples (attributs, types). uTypes classiques: wINT ou INTEGER (synonymes). wREAL ou FLOAT (synonymes). wCHAR(n ) = chaîne de taille fixe – n wVARCHAR(n ) = chaîne de taille variable (max n)

61 61 Exemple: Création de Table CREATE TABLE Sells ( barCHAR(20), beerVARCHAR(20), priceREAL );

62 62 Dates et Times uDATE et TIME sont des types de SQL. uUne valeur de date: DATE yyyy-mm-dd wExemple: DATE 2004-04-27

63 63 Référence à TIME uUne valeur de TIME: TIME hh:mm:ss wExemple: TIME 15:30:02

64 64 Vues uUne vue est une table virtuelle, une relation définie à partir du contenu dautres tables et vues. uDéclarées par: CREATE VIEW AS ;

65 65 Exemple: définition dune vue uCanDrink(drinker, beer) est une vue qui contient les paires drinker-beer telles que le buveur (drinker) fréquente au moins un bar qui sert la bieère beer : CREATE VIEW CanDrink AS SELECT drinker, beer FROM Frequents, Sells WHERE Frequents.bar = Sells.bar;

66 66 Accèder à une vue uOn peut interroger une vue tout comme une relation uExemple: SELECT beer FROM CanDrink WHERE drinker = Sally;


Télécharger ppt "1 Introduction à SQL Select-From-Where Le sens des requêtes Requêtes imbriquées et complexes Modifier des relations (daprès les transparents de Ullman)"

Présentations similaires


Annonces Google