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

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)

Embed Size (px)

Citation preview

Page 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)

1

Introduction à SQL

Select-From-Where Le sens des requêtes

Requêtes imbriquées et complexesModifier des relations

(d’après les transparents de Ullman)

Page 2: 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

SQL?

SQL est un langage de haut niveau avec lequel le programmeur évite la manipulation explicite des données comme avec un langage de programmation classique

SQL est une solution viable car ses requêtes sont optimisées.

Page 3: 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)

3

Select-From-Where

La syntaxe d’une requête est la suivante :

SELECT attributs désirésFROM une ou plusieurs tablesWHERE condition (sur les tuples de la table)

Page 4: 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)

4

Un Exemple

Un schéma de base de données Les 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)

Page 5: 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)

5

Exemple

Les bières fabriquées par KroSELECT name

FROM Beers

WHERE manf = ‘Kronenbourg’;

Page 6: 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)

6

Résultat de la requèete

name‘1664’‘Kronenbourg’‘Tourtel’

La réponse est une relation composée d’un seul attribut ‘name’.

Page 7: 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)

7

Sens d’une requête sur une seule relation

Commencer avec la relation référencée dans le ‘from’

Appliquer la sélection avec la condition du ‘where’

Appliquer la projection avec les attributs de la partie ‘select’

Page 8: 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)

8

Sémantique opérationnelle

Pour implémenter cet algorithme, pensez à une variable tuple qui stocke tous les n-uplets de la relation mentionnée dans le ‘from’

Vérifiez si le tuple courant satisfait la clause WHERE

Si oui, calculez les attributs ou expressions de la clause ‘select’ à partir des composants de tuple

Page 9: 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)

9

* Dans une clause ‘select’

Quand il y a une relation mentionnée dans la partir ‘from’, le * signifie “tous les attributs de cette relation.”

Exemple using Beers(name, manf):SELECT *

FROM Beers

WHERE manf = ‘Kronenbourg’;

Page 10: 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)

10

Résultat de la requête:

name manf‘1664’ ‘Kronenbourg’

‘Kronenbourg’ ‘Kronenbourg’‘Tourtel’ ‘Kronenbourg’

La relation résultat apparaît avec tous les attributs de la relation ‘beer’

Page 11: 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)

11

Renommer les attributs

Si on souhaite que la relation résultat ait un nom d’attribut différent utiliser “AS <new name>” pour renommer l’attribut.

Exemple sur la relation Beers(name, manf):

SELECT name AS beer, manf

FROM Beers

WHERE manf = ‘Kronenbourg’

Page 12: 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)

12

Result of Query:

beer manf‘1664’ ‘Kronenbourg’

‘Kronenbourg’ ‘Kronenbourg’‘Tourtel’ ‘Kronenbourg’

Page 13: 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)

13

Les expressions dans la clause ‘select’

Une expression peut apparaître dans la partie ‘select’.

Exemple: pour Sells (bar, beer, price):SELECT bar, beer,

price * 120 AS priceInYen

FROM Sells;

Page 14: 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)

14

Résultat de la requête

bar beerpriceInYen

Joe’s Bud 300Sue’s Miller 360 … … …

Page 15: 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)

15

Un autre exemple : avec des expressions

constantes Sur la relation Likes(drinker, beer):

SELECT drinker,

‘likes Bud’ AS whoLikesBud

FROM Likes

WHERE beer = ‘Bud’;

Page 16: 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)

16

Résultat de la requête

drinker whoLikesBud‘Sally’ ‘likes Bud’‘Fred’ ‘likes Bud’ … …

Page 17: 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)

17

Expression complexe dans la partie ‘where’

À partir de la relation Sells(bar, beer, price), donner le prix de la Bud dans le bar ‘Joe’s’

SELECT priceFROM SellsWHERE bar = ‘Joe’’s Bar’ AND

beer = ‘Bud’;

Page 18: 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)

18

Points importants

Attention au caractère spécial ‘’’ (quote)

Les conditions de la clause WHERE peuvent utiliser les opérateurs AND, OR, NOT, et les parenthèses.

SQL n’est pas sensible à la casse (pas de différences entre minuscules et majuscules).

Page 19: 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)

19

Patterns

Dans la clause WHERE, on peut vouloir comparer une chaîne de caractères avec un pattern.

Forme générale: <Attribute> LIKE <pattern> <Attribute> NOT LIKE <pattern>

Pattern est une chaîne entre quotes et peut référencer les caractères spéciaux % = “any string”; _ = “any character.”

Page 20: 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)

20

Exemple

A partir de la relation Drinkers(name, addr, phone) trouver les buveurs avec 555 comme indicatif :

SELECT name

FROM Drinkers

WHERE phone LIKE ‘%555-_ _ _ _’;

Page 21: 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)

21

Les valeurs Nulles

Les tuples peuvent avoir ‘NULL’ comme valeurs de un ou de plusieurs attributs.

2 cas sont possibles : Valeurs manquantes : e.g., on ne connaît

pas l’adresse d’un bar mais on sait qu’elle existe

Inapplicable : e.g., le champ conjoint pour un célibataire.

Page 22: 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)

22

Comparer avec NULL

La logique utilisée par SQL repose sur TRUE, FALSE, UNKNOWN.

Lorsqu’une valeur est comparée à NULL, on renvoie UNKNOWN.

Une requête sélectionne un tuple si la condition de la partie ‘WHERE’ est évaluée à TRUE (pas FALSE ou UNKNOWN).

Page 23: 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)

23

Requêtes avec plusieurs relations

Les requêtes peuvent faire intervenir plusieurs relations en les mentionnant dans la clause ‘FROM’.

On peut distinguer les attributs (enlever une ambiguïté) en les préfixant avec le nom de la relation “<relation>.<attribut>”

Page 24: 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)

24

Exemple À 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 Joe’s.

SELECT beer

FROM Likes, Frequents

WHERE bar = ‘Joe’’s Bar’ AND

Frequents.drinker = Likes.drinker;

Page 25: 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)

25

Sémantique

Presque identique au cas d’une 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.

Page 26: 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)

26

Sémantique opérationnelle

Imaginez une variable tuple pour chaque relation de la clause ‘FROM’. Ces variables itèrent sur les éléments

de chacune des relations. Si ces variables tuples satisfont la

condition de la clause ‘where’, envoyez les tuples vers la clause ‘select’.

Page 27: 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)

27

Exemple

drinker bar drinker beer

tv1 tv2Sally Bud

Sally Joe’s

Likes Frequents

vers ‘select’Vérifie si égalité

Vérifie Joe’s

Page 28: 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)

28

Variables tuples explicites

Une requête peut nécessiter 2 copies de la même relation.

On peut distinguer les copies à l’aide de variables tuples explicites.

On peut aussi renommer une relation par commodité (nom trop long par exemple).

Page 29: 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)

29

Exemple A partir de la relation Beers(name,

manf), trouvez toutes les paires de bières fabriquées par le même brasseur Ne pas faire apparaître des couples

identiques (Bud, Bud). Faire apparaître les couples dans l’ordre

alphabétique. (Bud, Miller), pas (Miller, Bud).

SELECT b1.name, b2.nameFROM Beers b1, Beers b2WHERE b1.manf = b2.manf AND

b1.name < b2.name;

Page 30: 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)

30

Les sous requêtes

Une instruction parenthèsée SELECT-FROM-WHERE (subquery) peut apparaître comme valeur en différents endroits (y compris dans une autre requête).

Ceci est en particulier utilise si la requête ne renvoie qu’un seul n-uplet

Page 31: 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)

31

Exemple À partir de la relation Sells(bar, beer,

price), trouvez les bars qui servent Miller le même prix que Joe demande pour Bud.

Approche :1. Trouver le prix que Joe demande pour une

Bud.2. Trouver les bars qui servent Miller pour ce

prix.

Page 32: 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)

32

Requête + sous requête

SELECT barFROM SellsWHERE beer = ‘Miller’ AND

price = (SELECT price FROM Sells WHERE bar = ‘Joe’’s Bar’

AND beer = ‘Bud’);

Le prix fixéPar Joe pour Une Bud

Page 33: 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)

33

L’opérateur IN

<tuple> IN <relation> rend VRAI ssi le tuple fait partie de la relation. <tuple> NOT IN <relation> est le

contraire. IN-expressions peuvent apparaître

dans les clauses WHERE. la <relation> est souvent le

résultat d’une sous requête.

Page 34: 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)

34

Exemple

À 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

Page 35: 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)

35

L’opérateur Exists

EXISTS( <relation> ) est VRAI ssi la <relation> n’est pas vide.

Peut apparaître dans une clause WHERE.

Page 36: 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)

36

L’opérateur ANY

x = ANY( <relation> ) est une condition booléene qui indique si x est égal à au moins un tuple de la relation.

Exemple: x >= ANY( <relation> ) signifie que x ne peut pas être plus petit que les tuples de la relation À noter : les tuples ne peuvent avoir

qu’un seul composant.

Page 37: 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)

37

Exemple avec l’opérateur ALL

À partir de la relation Sells(bar, beer, price), trouvez la ou les bières facturées au prix le plus élevé

SELECT beerFROM SellsWHERE price >= ALL(

SELECT priceFROM Sells);

Le prix pour la requête externe ne doit pas être inférieur

Page 38: 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)

38

Opérations ensemblistes

Union, intersection, et différence sur des relations sont exprimées de la manière suivante : ( subquery ) UNION ( subquery ) ( subquery ) INTERSECT ( subquery ) ( subquery ) EXCEPT ( subquery )

Page 39: 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)

39

Différentes jointures comme en algèbre

relationnelle Jointure naturelle:

R NATURAL JOIN S; Produit cartésien:

R CROSS JOIN S; Exemple:

Likes NATURAL JOIN Serves;

Page 40: 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)

40

Aggrégats

SUM, AVG, COUNT, MIN, et MAX peuvent être appliqués à une colonne dans la clause SELECT

COUNT(*) compte le nombre de tuples

NULL n’apparaît jamais dans l’évaluation d’un agrégat

Page 41: 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)

41

Exemple

À partir de la relation Sells(bar, beer, price), trouvez le prix moyen de la Bud:

SELECT AVG(price)

FROM Sells

WHERE beer = ‘Bud’;

Page 42: 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)

42

Grouper

On peut faire suivre une expression SELECT-FROM-WHERE par GROUP BY et une liste d’attributs.

La 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

Page 43: 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)

43

exemple

À 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;

Page 44: 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)

44

Un autre exemple

À partir de Sells(bar, beer, price) et de Frequents(drinker, bar), donnez pour chaque buveur le prix moyen de la Bud dans les bars qu’ils fréquentent :

SELECT drinker, AVG(price)FROM Frequents, SellsWHERE beer = ‘Bud’ AND

Frequents.bar = Sells.barGROUP BY drinker;

Page 45: 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)

45

Restriction sur la partie SELECT

Si une agrégation est utilisée, chaque élément de la clause SELECT doit être soit :

1. Agrégée, soit2. un attribut de la liste mentionnée

par GROUP BY.

Page 46: 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)

46

Clauses HAVING

HAVING <condition> peut suivre une clause GROUP BY

Si oui, la condition s’applique à chaque groupe et les groupes qui ne la satisfont pas sont éliminés.

Page 47: 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)

47

Les conditions HAVING

Ces conditions peuvent référencer n’importe quelle relation de la liste FROM.

Elles 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é

Page 48: 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)

48

Exemple: HAVING

À 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 Pete’s.

Page 49: 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)

49

Solution

SELECT beer, AVG(price)FROM SellsGROUP BY beerHAVING COUNT(bar) >= 3 OR

beer IN (SELECT name FROM Beers WHERE manf = ‘Pete’’s’);

Bières brassées par Pete’s.

Groupes de bières composées de au moins 3 bars non NULLEt groupes de bières brassées par Pete’s.

Page 50: 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)

50

Modification de la base

Une commande de modification s’exprime presque comme une requête

Une modification ne retourne pas un résultat comme une requête mais modifie la base de données

3 sortes de modifications sont possibles :1. Insérer un ou plusieurs tuples2. Détruire un ou plusieurs tuples.3. Mettre à jour un ou plusieurs tuples

Page 51: 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)

51

Insertion

Pour insérer un seul tuple:INSERT INTO <relation>VALUES ( <list of values> );

Exemple:.INSERT INTO Likes

VALUES(‘Sally’, ‘Bud’);

Page 52: 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)

52

Spécifier des attributs dans INSERT

Plusieurs raisons :1. On ne se préoccupe plus de l’ordre des

attributs.2. On n’a pas de valeurs pour tous les

attributs et on veut que des valeurs par défaut ou NULL soient insérées

Page 53: 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)

53

Exemple

INSERT INTO Likes(beer, drinker)

VALUES(‘Bud’, ‘Sally’);

Page 54: 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)

54

Insérer plusieurs Tuples

On peut insérer directement le résultat d’une relation :

INSERT INTO <relation>( <subquery> );

INSERT INTO BARS-de-BREST (Select * from BARS where address = ‘Brest’)

Page 55: 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)

55

destruction

Pour retirer des n-uples satisfaisant une condition:

DELETE FROM <relation>WHERE <condition>;

Page 56: 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)

56

Exemples

Retirer de la relation Likes(drinker, beer) le fait que Sally aime Bud:

DELETE FROM LikesWHERE drinker = ‘Sally’ AND

beer = ‘Bud’; Virer tous les tuples de la relation

Likes:DELETE FROM Likes;

Page 57: 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)

57

Mises à jour

Pour mettre à jour des attributs d’une relation

UPDATE <relation>SET <list of attribute

assignments>WHERE <condition on

tuples>;

Page 58: 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)

58

Exemple: Update

Pour mettre à 555-1212 le numéro de téléphone de Fred:

UPDATE DrinkersSET phone = ‘555-1212’WHERE name = ‘Fred’;

Fixer à 4 le prix max des bières:UPDATE SellsSET price = 4.00WHERE price > 4.00;

Page 59: 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)

59

Déclarer une relation

Syntaxe :CREATE TABLE <name> (

<list of elements>);

Et on peut retirer une relation:DROP TABLE <name>;

Page 60: 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)

60

Déclarer une table

Des couples (attributs, types). Types classiques:

INT ou INTEGER (synonymes). REAL ou FLOAT (synonymes). CHAR(n ) = chaîne de taille fixe – n VARCHAR(n ) = chaîne de taille

variable (max n)

Page 61: 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)

61

Exemple: Création de Table

CREATE TABLE Sells (

bar CHAR(20),

beerVARCHAR(20),

price REAL

);

Page 62: 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)

62

Dates et Times

DATE et TIME sont des types de SQL.

Une valeur de date:DATE ‘yyyy-mm-dd’

Exemple: DATE ‘2004-04-27’

Page 63: 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)

63

Référence à TIME

Une valeur de TIME:TIME ‘hh:mm:ss’

Exemple: TIME ’15:30:02’

Page 64: 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)

64

Vues

Une vue est une table virtuelle , une relation définie à partir du contenu d’autres tables et vues.

Déclarées par:CREATE VIEW <name> AS <query>;

Page 65: 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)

65

Exemple: définition d’une vue

CanDrink(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 ASSELECT drinker, beerFROM Frequents, SellsWHERE Frequents.bar = Sells.bar;

Page 66: 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)

66

Accèder à une vue

On peut interroger une vue tout comme une relation

Exemple:SELECT beer FROM CanDrink

WHERE drinker = ‘Sally’;