Informatique Bases de données. Requêtes SQL.

120  Download (0)

Texte intégral

(1)

Informatique

Bases de données Requêtes SQL

Benedicte.Le-Grand@univ-paris1.fr

denecker@univ-paris1.fr

(2)

Objectifs et Programme

1) Comment construire une « bonne » base de données relationnelle ?

2) Comment retrouver des informations dans une BD relationnelle ?

– Langage algébrique

– Langage SQL

(3)

Base de données Vins

Buveur (NumBuveur, NomB, PrenomB, VilleB) Viticulteur (NumVitic, NomV, PrenomV, VilleV) Vin ( NumVin, Cru, Millesime, Region, NumVitic)

Commande (NumCom,NumBuveur, NumVin, QtteCommandee, DateCom) Livraison (NumCom, QtteLivree, DateLiv)

Les clés étrangères sont soulignées en

pointillés Les clés primaires sont soulignées en

trait plein

(4)

Base de données Vins

Buveur (NumBuveur, NomB, PrenomB, VilleB) Viticulteur (NumVitic, NomV, PrenomV, VilleV) Vin ( NumVin, Cru, Millesime, Region, NumVitic)

Commande (NumCom,NumBuveur, NumVin, QtteCommandee, DateCom) Livraison (NumCom, QtteLivree, DateLiv)

Les clés étrangères sont soulignées en

pointillés Les clés primaires sont soulignées en

trait plein

(5)

Buveur

NumBuveur NomB PrenomB VilleB

1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS 1450 PASCAL YVES MACON 1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

Viticulteur

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

NumCom QtteLivree DateLiv

2 12 30/12/87

1 6 15/07/87

2 6 27/12/87

3 12 20/11/87

4 6 20/12/87

6 8 28/12/87

7 3 30/12/87

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16

Vin

Livraison

NumVitic NomV PrenomV VilleV

1 MOULIN JEAN MACON

3 MORIN JULES BENAIS

4 VALLEE CLAUDE SAINT NICOLAS

5 COULIS DUTHEIL CHINON

10 PARENT PIERRE POMMARD

15 BARANCOURT TOURS SUR MARNE

16 JADOT LOUIS BEAUNE

18 MEDEVILLE CHARLES PREIGNAC

20 TISSOT JACQUES ARBOIS

21 LYNCH-BAGES PAUILLAC

22 CHATEAU MONBRISON MARGAUX

23 CHATEAU MOULIN A VENT CASTELNAU DE MEDOC

(6)

SQL : Structured Query Language

Langage de Définition des Données (LDD)

• Créer / modifier / supprimer les schémas de relation

Ø CREATE TABLE : créer une table Ø ALTER TABLE : modifier le schéma Ø DROP TABLE : supprimer une

table

Langage de Manipulation des Données (LMD)

• Créer, modifier, supprimer, interroger les données

(n-uplets)

Ø INSERT : insérer un n-uplet Ø UPDATE : mettre à jour

Ø DELETE : supprimer un n-uplet Ø SELECT : interroger la base

(récupérer les n-uplets)

(7)

SQL : Structured Query Language

Langage de Définition des Données (LDD)

• Créer / modifier / supprimer les schémas de relation

Ø CREATE TABLE : créer une table Ø ALTER TABLE : modifier le schéma Ø DROP TABLE : supprimer une

table

Langage de Manipulation des Données (LMD)

• Créer, modifier, supprimer, interroger les données

(n-uplets)

Ø INSERT : insérer un n-uplet Ø UPDATE : mettre à jour

Ø DELETE : supprimer un n-uplet Ø SELECT : interroger la base

(récupérer les n-uplets)

(8)

CREATE TABLE

Buveur (NumBuveur, NomB, PrenomB, VilleB)

CREATE TABLE Buveur

( NumBuveur integer PRIMARY KEY,

NomB char(25) NOT NULL,

PrenomB char(25) NOT NULL, VilleB char (30)

);

Domaine de valeur

Le numéro du buveur est un entier

Les autres attributs sont

NumBuveur est la clé primaire

Valeur obligatoire

Le prénom du buveur

ne peut pas être nul

(vide) : il doit être

renseigné

(9)

Domaines de valeurs à connaître

Types de données

Numériques :

INTEGER : entier long

FLOAT : nb réel

Chaînes de caractères :

CHAR (n) : chaîne de caractères de longueur n

Temporelles :

DATE : date (2009-11-09)

TIME : heure (00:11:22.333)

Logiques :

Boolean : valeur booléenne, vrai ou faux (‘True’ ou ‘False’)

(10)

10

CREATE TABLE Vin (

NumVin INTEGER PRIMARY KEY, Cru CHAR(15) ,

Millesime INTEGER , Region CHAR(15) ,

NumVitic INTEGER REFERENCES viticulteur(NumVitic) );

CREATE TABLE Livraison ( NumCom INTEGER, QtteLivree INTEGER, DateLiv DATE,

PRIMARY KEY (NumCom, DateLiv),

FOREIGN KEY (NumCom) REFERENCES commande (NumCom) );

NumVitic est une clé étrangère

NumCom et DateLiv forment la clé primaire

Vin ( NumVin, Cru, Millesime, Region, NumVitic)

Livraison (NumCom, QtteLivree, DateLiv)

(11)

Manipulation de la base de données

INSERT INTO : ajout de nouveaux n-uplets

SELECT : + tard… (requêtes)

12

INSERT INTO BUVEUR VALUES (1500 ,'FRADET' ,'PHILIPPE' ,'MACON’);

INSERT INTO VITICULTEUR VALUES (15 ,'BARANCOURT' ,NULL ,'TOURS SUR MARNE' );

SELECT NomB, PrenomB FROM Buveur

WHERE VilleB = ‘MACON’

(12)

Objectifs et Programme

1) Comment construire une « bonne » base de données relationnelle ?

2) Comment retrouver des informations dans une BD relationnelle ?

– Langage algébrique

– Langage SQL

(13)

SQL : Structured Query Language

Langage de Définition des Données (LDD)

• Créer / modifier / supprimer les schémas de relation

Ø CREATE TABLE : créer une table Ø ALTER TABLE : modifier le schéma Ø DROP TABLE : supprimer une

table

Langage de Manipulation des Données (LMD)

• Créer, modifier, supprimer, interroger les données

(n-uplets)

Ø INSERT : insérer un n-uplet Ø UPDATE : mettre à jour

Ø DELETE : supprimer un n-uplet Ø SELECT : interroger la base

(récupérer les n-uplets)

(14)

SQL : affichage du contenu complet d’une table

SELECT *

FROM table

Le résultat de l’opération est l’ensemble de tous les attributs de tous les n-uplets de la table

Relation concernée

(15)

bdd.univ-paris1.fr

(16)
(17)

Lister toutes les informations sur les viticulteurs

SQL : affichage du contenu complet

d’une table

(18)

Lister toutes les informations sur les viticulteurs

SELECT FROM

*

Viticulteur;

Le symbole * représente tous les attributs

SQL : affichage du contenu complet

d’une table

(19)

SQL : Projection

SELECT attr 1 , attr 2 FROM table

Le résultat de l’opération SELECT … FROM

est l’ensemble de TOUS les n-uplets (doublons conservés)

mais contenant uniquement les attributs indiqués (attr 1 , attr 2 …)

SELECT correspond à une projection sur les attributs recherchés

Ce qui vient derrière le SELECT correspond à l’information attendue (résultat)

Opérateur de projection : liste des attributs demandés

Relation concernée par la projection

(20)

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

Quelles sont les villes des buveurs

enregistrés dans la base ?

(21)

SELECT VilleB FROM Buveur ;

Nouveau schéma composé des attributs

conservés

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

N-uplets en double : conservés

Quelles sont les villes des buveurs

enregistrés dans la base ?

(22)

SQL : Projection

et suppression des doublons

SELECT DISTINCT attr 1 , attr 2

FROM table

Le résultat de l’opération SELECT … FROM est l’ensemble des n-uplets DISTINCTS

mais contenant uniquement les attributs indiqués (attr 1 , attr 2 …)

= équivalent de la projection avec l’algèbre relationnelle

Opérateur de projection : liste des attributs demandés

Relation concernée par la projection

(23)

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

Quelles sont les villes des buveurs

enregistrés dans la base ?

(24)

Nouveau schéma composé des attributs

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

SELECT DISTINCT VilleB

FROM Buveur ; N-uplets en double :

supprimés Quelles sont les villes des buveurs

enregistrés dans la base ?

(25)

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

Quelles sont les noms et prénoms

des buveurs enregistrés dans la base ?

(26)

Nouveau schéma composé des attributs

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS

1450 PASCAL YVES MACON

1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

Quelles sont les noms et prénoms des buveurs enregistrés dans la base ?

SELECT NomB, PrenomB

FROM Buveur ;

(27)

A vous !

Quels sont les crus des vins enregistrés dans la base ?

Buveur (NumBuveur, NomB, PrenomB, VilleB) Viticulteur (NumVitic, NomV, PrenomV, VilleV) Vin ( NumVin, Cru, Millesime, Region, NumVitic)

Commande (NumCom,NumBuveur, NumVin, QtteCommandee, DateCom)

Livraison (NumCom, QtteLivree, DateLiv)

(28)

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16 190 SAINT EMILION 1981 BORDEAUX 18

Quels sont les crus des

vins enregistrés dans

la base ?

(29)

Nouveau schéma composé des attributs

conservés

Vin

Cru

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16 190 SAINT EMILION 1981 BORDEAUX 18

Quels sont les crus des vins enregistrés dans la base ?

N-uplets en double :

supprimés

(30)

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16 190 SAINT EMILION 1981 BORDEAUX 18

Quels sont les crus des vins enregistrés dans la base ?

Vin

Cru

(31)

Nouveau schéma composé des attributs

conservés

N-uplets en double : supprimés

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16 190 SAINT EMILION 1981 BORDEAUX 18

SELECT DISTINCT Cru FROM Buveur ;

Quels sont les crus des vins enregistrés dans la base ?

Vin

Cru

(32)

SQL : Variantes du SELECT

– Possibilité d’afficher un autre nom (ALIAS) pour l’attribut

• Uniquement pour l’affichage, la table n’est pas modifiée

SELECT VilleB FROM Buveur ;

Quelles sont les villes des buveurs enregistrés dans la base ?

(33)

SQL : Variantes du SELECT

– Possibilité d’afficher un autre nom (ALIAS) pour l’attribut

• Uniquement pour l’affichage, la table n’est pas modifiée

Alias SELECT VilleB FROM Buveur ;

Quelles sont les villes des buveurs enregistrés dans la base ?

SELECT VilleB AS ‘Ville des Buveurs’ FROM Buveur ;

Apostrophes

ou guillemets

(34)

SQL : Restriction

SELECT attr 1 , attr 2

FROM table

WHERE condition

Le résultat de l’opération SELECT … FROM … WHERE

est l’ensemble de TOUS les n-uplets (pas de suppression des doublons) respectant la condition

et contenant uniquement les attributs indiqués (attr , attr …) Opérateur de projection : liste d’attributs demandés

Opérateur de restriction : condition de conservation des n-uplets

Relation concernée par la requête

(35)

SQL : Clause WHERE

• La clause WHERE correspond à une restriction sur les n-uplets

Condition sur l'information que l'on recherche

WHERE condition

– Opérateurs relationnels : <, <=, =, <>, >=, >

– Opérateurs arithmétiques : +, -, *, / – Opérateurs logiques : AND, OR, NOT

– Autres : LIKE, BETWEEN, IS NULL, IN, EXISTS…

(36)

Quels sont les n-uplets de la table Vins

dont le millésime est 1978 ?

SQL : Restriction

(37)

Quels sont les n-uplets de la table Vins

dont le millésime est 1978 ?

Schéma identique

Uniquement les n-uplets qui

vérifient la condition La Restriction permet

d’enlever des n-uplets qui ne vérifient pas la condition de restriction

SELECT * FROM Vin

WHERE Millesime = 1978 ;

SQL : Restriction

(38)

Quelle requête pour obtenir le nom et le prénom des buveurs parisiens ?

Ce qu’on recherche (projection) NomB, PrenomB

Table Buveur Condition de restriction : VilleB = ‘PARIS’

Restriction et Projection

SELECT DISTINCT NomB, PrenomB FROM Buveur

WHERE VilleB = ‘PARIS’ ;

(39)

SQL : Restriction avec condition complexe

Nom des buveurs qui n’habitent ni Paris ni Mâcon

SELECT NomB

FROM Buveur

WHERE VilleB <> PARIS' AND VilleB <> ‘MACON’

Nom des buveurs qui habitent Paris ou Mâcon

SELECT NomF, AdrF FROM Fournisseur

WHERE VilleF ='Paris' OR VilleF = 'Marseille'

Attribut qu'on veut : NomB

Relation utilisée Condition

VilleB ≠ Paris ET

VilleB ≠ Mâcon

Condition VilleB = Paris

OU

VilleB = Mâcon

(40)

SQL : Clause WHERE avec opérateur LIKE

L’opérateur LIKE permet de tester si un attribut

de type chaîne de caractères contient une sous-chaîne

'_' remplace 1 seul caractère : VilleB LIKE ‘_ _ _ON’

SELECT VilleB

FROM Buveur

WHERE VilleB LIKE ‘_ _ _ON’

'%' remplace une sous-chaîne : Ville LIKE ‘%ON'

SELECT VilleB

FROM Buveur

(41)

SQL : intervalle

Numéro des commandes où le nombre de bouteilles est compris entre 6 et 12

SELECT NumCom FROM Commande

WHERE QtteCommandee >= 6 AND QtteCommandee <= 12 ;

(42)

SQL : intervalle

Numéro des commandes où le nombre de bouteilles est compris entre 6 et 12

Possibilité d’utiliser l’opérateur BETWEEN

SELECT NumCom FROM Commande

WHERE QtteCommandee >= 6 AND QtteCommandee <= 12 ;

SELECT NumCom FROM Commande

WHERE QtteCommandee BETWEEN 6 AND 12 ;

Il peut s’agir d’intervalles

entre des chaînes de

caractères, des dates…

(43)

SQL : IS NULL / IS NOT NULL

• Condition dans la clause WHERE

IS NULL

• si la valeur d'un attribut est inconnue (NULL)

IS NOT NULL

• si la valeur d'un attribut n’est pas inconnue (NOT NULL)

Nom des viticulteurs qui n'ont

pas renseigné leur prénom :

(44)

SQL : IS NULL / IS NOT NULL

• Condition dans la clause WHERE

IS NULL

• si la valeur d'un attribut est inconnue (NULL)

IS NOT NULL

• si la valeur d'un attribut n’est pas inconnue (NOT NULL)

Nom des viticulteurs qui n'ont pas renseigné leur prénom : SELECT NomV

FROM Viticulteur

WHERE PrenomV IS NULL

(45)

Produit cartésien entre Buveur et Commandes SELECT *

FROM Buveur, Commande

R ´ S R

Produit cartésien

S

SQL : Produit cartésien

Buveur

NumBuveur NomB PrenomB VilleB

1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS 1450 PASCAL YVES MACON 1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

(46)

Combinaison de toutes les n-uplets de Buveur et de

Commande Concaténation

des 2 schémas

R ´ S R

S

SQL : Produit cartésien

SELECT *

FROM Buveur, Commande

(47)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s)

de jointure Buveur Commande

NumBuveur=NumBuveur

(48)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s) de jointure

SELECT *

FROM Buveur, Commande

Buveur Commande

NumBuveur=NumBuveur

FAUX !!!!!

(49)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s) de jointure

SELECT *

FROM Buveur, Commande

WHERE NumBuveur= NumBuveur

FAUX !!!!!

(50)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s) de jointure

SELECT *

FROM Buveur, Commande

Buveur Commande

NumBuveur=NumBuveur

(51)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s) de jointure

SELECT *

FROM Buveur AS B, Commande as C WHERE B.NumBuveur= C.NumBuveur

Buveur Commande

NumBuveur=NumBuveur

(52)

SQL : Jointure

• La clause FROM indique les relations à utiliser

– Lorsque l'on introduit plusieurs relations, le SELECT porte sur le produit cartésien

– La clause WHERE introduit alors la(les) condition(s) de jointure

SELECT *

FROM Buveur AS B, Commande as C

(53)

Exemples de jointures

FROM / WHERE : quelques exemples de jointure

Lister les noms des buveurs qui ont fait des commandes et les dates de ces commandes

Buveur

NumBuveur NomB PrenomB VilleB

1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS 1450 PASCAL YVES MACON 1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

(54)

Exemples de jointures

FROM / WHERE : quelques exemples de jointure

Lister les noms des buveurs qui ont fait des commandes et les dates de ces commandes

SELECT NomB, DateCom

FROM Buveur AS B, Commande AS C WHERE B.NumBuveur= C.NumBuveur

ou bien

SELECT NomB, DateCom

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur

L'usage d'un alias (AS …) permet de distinguer les attributs de la table

Fournisseur

de ceux de la table Livraison

(55)

Exemples de jointures

FROM / WHERE : quelques exemples de jointure

Lister les noms des buveurs qui ont fait des commandes et les dates de ces commandes

SELECT NomB AS 'Nom du buveur', DateCom AS 'Date de commande' FROM Buveur AS B, Commande AS C

WHERE B.NumBuveur= C.NumBuveur

(56)

Exemples de jointures

FROM / WHERE : quelques exemples de jointure

Lister les noms des buveurs qui ont fait des commandes et les dates de ces commandes

SELECT NomB, DateCom

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur

Lister les noms des buveurs parisiens qui ont fait des commandes et les dates de ces commandes

Relations nécessaires

Attributs que l'on veut (résultat attendu)

Condition de jointure

(57)

Exemples de jointures

FROM / WHERE : quelques exemples de jointure

Lister les noms des buveurs qui ont fait des commandes et les dates de ces commandes

SELECT NomB, DateCom

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur

Lister les noms des buveurs parisiens qui ont fait des commandes et les dates de ces commandes

SELECT NomB, DateCom

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur AND VilleB=‘PARIS’

Condition de jointure Condition de restriction

58

Relations nécessaires

Attributs que l'on veut (résultat attendu)

(58)

Exemples de jointures

Lister les crus des Vins produits par des viticulteurs dont le

nom commence par ‘CHÂTEAU’. On indiquera également le

nom du viticulteur associé à chaque cru.

(59)

Exemples de jointures

Lister les crus des Vins produits par des viticulteurs dont le nom commence par ‘CHÂTEAU’. On indiquera également le nom du viticulteur associé à chaque cru.

Restriction : nom du viticulteur

« ressemble à » ‘CHATEAU%'

Condition de jointure SELECT Cru, NomV

FROM Vin V, Viticulteur Vit

WHERE V.NumVitic=Vit.numVitic

AND nomV LIKE "CHATEAU%"

(60)

Quelle opération ?

N° COMMANDE PERIODE MONTANT

28 29 30 52

Octobre Octobre Novembre Décembre

1986 2024 1610 512

N° COMMANDE PERIODE MONTANT

28 29 Octobre

Octobre 1986

2024

?

COMMANDES

(61)

Quelle opération ?

Cru Mill Région Qualité

VOLNAY BOURGOGNE CHENAS BEAUJOLAIS JULIENAS BEAUJOLAIS

Cru Région

VOLNAY 1983 BOURGOGNE A VOLNAY 1979 BOURGOGNE B CHENAS 1983 BEAUJOLAIS A JULIENAS 1986 BEAUJOLAIS C

?

VINS

(62)

Quelle opération ?

Couleur Edition Rouge

Blanc Vert

Luxe Broché Cartonné Titre Auteur

X Y

Hugo

Yourcenar

LIVRE EDITION

Titre Auteur Couleur Edition

X X X Y Y

Hugo Hugo Hugo

Yourcenar Yourcenar

Rouge Blanc Vert Rouge Blanc

Luxe Broché Cartonné Luxe Broché

?

(63)

Quelle opération ?

02 10 72 62

S1 S8 S6 S1

Num_emp Nom_emp Num_service e1

e2 e3 e4

EMPLOYE SERVICE

Num_service Nom_service S1

S6 S8 S4

Informatique Mathématiques Sociologie

Anglais

02 10 72 62

S1 S8 S6 S1

Informatique Sociologie

Mathématiques Informatique Num_emp Nom_emp Num_service Nom_service

e1 e2 e3 e4

?

(64)

Quel est le numéro des buveurs qui n’ont fait aucune commande ?

Différence

SQL : Différence

Buveur

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS 1450 PASCAL YVES MACON 1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

On cherche les numéros des buveurs présents dans la table Buveur

mais absents dans la table Commande

(65)

Quel est le numéro des buveurs qui n’ont fait aucune commande ?

Différence

SQL : Différence

Buveur

NumBuveur NomB PrenomB VilleB 1100 COMBET ALINE DIJON 1200 MAURY FRANCOIS PARIS 1300 JAMET FLORENCE VERSAILLES 1350 GRAVINEL SOPHIE NICE 1400 GAUTHIER ROBERT PARIS 1450 PASCAL YVES MACON 1500 FRADET PHILIPPE MACON 1600 DUPOND ALAIN PARIS 1700 COMBES EDOUARD PARIS 1750 DURIEUX BLAISE CHINON

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

On cherche les numéros des buveurs présents dans la table Buveur mais absents dans la table Commande

1350 1450 1700 1750

(66)

Quel est le numéro des buveurs qui n’ont fait aucune commande ?

Différence

SQL : Différence

SELECT NumBuveur FROM Buveur B

WHERE B.NumBuveur NOT IN ( SELECT C.NumBuveur

FROM Commande) ;

SELECT NumBuveur FROM Buveur B

WHERE NOT EXISTS ( SELECT *

FROM Commande C

(67)

Quel est le numéro des buveurs qui n’ont fait aucune commande ?

68 Différence

SQL : Différence

SELECT NumBuveur FROM Buveur B

WHERE B.NumBuveur NOT IN ( SELECT C.NumBuveur

FROM Commande) ;

SELECT NumBuveur FROM Buveur B

WHERE NOT EXISTS ( SELECT *

FROM Commande C

WHERE B.NumBuveur = C.NumBuveur) ;

(68)

Quel est le nom des buveurs qui n’ont fait aucune commande ?

Différence

Différence

SELECT NomB FROM Buveur B

WHERE B.NumBuveur NOT IN ( SELECT C.NumBuveur

FROM Commande) ;

SELECT NomB FROM Buveur B

WHERE NOT EXISTS ( SELECT *

FROM Commande C

(69)

Quel est le nom des buveurs qui n’ont fait aucune commande ?

Différence

Différence

SELECT NomB FROM Buveur B

WHERE B.NumBuveur NOT IN ( SELECT C.NumBuveur

FROM Commande) ;

SELECT NomB FROM Buveur B

WHERE NOT EXISTS ( SELECT *

FROM Commande C

WHERE B.NumBuveur = C.NumBuveur) ;

(70)

Quels sont les numéros des viticulteurs qui produisent du vin de cru SAUTERNES et du vin de cru SAINT EMILION ?

Intersection

SQL : Intersection

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

175 MEURSAULT 1980 BOURGOGNE 16 190 SAINT EMILION 1981 BORDEAUX 18

Vin

(71)

Différence

SQL : Intersection

SELECT V1.NumVitic FROM Vin V1

WHERE V1.Cru = ‘SAUTERNES’

AND V1.NumVitic IN

( SELECT V2.NumVitic FROM Vin V2

WHERE V2.Cru = ‘SAINT EMILION’) ;

Quels sont les numéros des viticulteurs qui produisent du vin de cru SAUTERNES et du vin de cru SAINT EMILION ?

SELECT V1.NumVitic FROM Vin V1

WHERE V1.Cru = ‘SAUTERNES’

AND EXISTS

( SELECT *

FROM Vin V2

WHERE V2.Cru = ‘SAINT EMILION’

AND V1.NumVitic = V2.NumVitic) ;

(72)

Différence

SQL : Intersection

SELECT V1.NumVitic FROM Vin V1

WHERE V1.Cru = ‘SAUTERNES’

AND V1.NumVitic IN

( SELECT V2.NumVitic FROM Vin V2

WHERE V2.Cru = ‘SAINT EMILION’) ;

Quels sont les numéros des viticulteurs qui produisent du vin de cru SAUTERNES et du vin de cru SAINT EMILION ?

SELECT V1.NumVitic FROM Vin V1

WHERE V1.Cru = ‘SAUTERNES’

AND EXISTS

( SELECT *

FROM Vin V2

WHERE V2.Cru = ‘SAINT EMILION’

AND V1.NumVitic = V2.NumVitic) ;

(73)

R (A, B) ÷ S (B) = D (A) avec :

n-uplets de R dont les valeurs de A sont associées à toutes les valeurs de B en S

74

« Quels sont les A de la relation R qui sont associés

à tous les B de la relation S ? »

R (A, B) S (B)

T (A) x y

x z z

1 2 3 3 1

1 3

x z x et z sont associés à toutes

les valeurs de S (1 et 3)

Division a c x

y a x

a y a z b y c x c y

÷

R1

R2

a1 a2 a2 a1

A B

B

A

SQL : Division

÷

(74)

• Trouver les les noms des buveurs qui ont goûté tous les vins.

SQL : Division

• Utilisation de l’opérateur NOT EXISTS

Nom des buveurs qui ont commandé tous les vins î

Nom des buveurs pour lesquels

il n’existe pas de vin qu’ils n’ont pas commandé î

Nom des buveurs

pour lesquels il n'existe pas de Vin

pour lequel il n'existe pas de Commande

(75)

Nom des buveurs qui ont commandé tous les vins

SELECT B.Nom FROM Buveur B

WHERE NOT EXISTS ( SELECT V.*

FROM Vin V

WHERE NOT EXISTS ( SELECT C.*

FROM Commande C

WHERE C.NumBuveur = B.NumBuveur AND C.NumVin = V.NumVin )

)

76

Nom des buveurs

pour lesquels il n'existe pas de Vin

pour lequel il n'existe pas une Conso pour ce buveur et ce vin

SQL : Division

(76)

Quelle opération ?

INGENIEUR

Num_empl Nom_empl 3

15 28

Jojo Loulou Riri

Num_empl Nom_empl 3

15

Jojo Loulou

CHEF DE SERVICE

Num_empl Nom_empl 3

21 15 56

Jojo Sophie Loulou Babette

?

(77)

Quelle opération ?

Nom_étu Nom_UV Toto

Jojo Babette

Maths Maths Chimie

Num_empl Nom_UV Toto

Jojo

Physique Chimie Nom_étu Nom_UV

Toto Jojo Toto Babette Jojo

Maths Maths Physique Chimie Chimie

INSCRITS

RECUS

?

(78)

Quelle opération ?

OUVRIER

Num_empl Nom_empl 15

17 56

Loulou Fifi Babette

Num_empl Nom_empl 3

21

Jojo Sophie

CADRE

Num_empl Nom_empl 3

21 15 17

Jojo Sophie Loulou Fifi Babette

?

(79)

NVIT CRU

200 Tavel

100 Gamay

500 Gamay

300 Fronsac

100 Tavel

300 Gamay

100 Fronsac

NOM Tavel Gamay Fronsac

Quelle opération ?

CRU VIT-CRU

?

NVIT

100

(80)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les viticulteurs, triés par leur nom (ordre alphabétique)

SELECT * FROM Viticulteur ORDER BY NomV ASC ;

Ex : Infos sur les vins, triés par millésime décroissant SELECT * FROM Employe

ORDER BY Salaire DESC ;

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

(81)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les viticulteurs, triés par leur nom (ordre alphabétique)

SELECT * FROM Viticulteur ORDER BY NomV ASC ;

Ex : Infos sur les vins, triés par millésime décroissant SELECT * FROM Employe

ORDER BY Salaire DESC ;

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

(82)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les viticulteurs, triés par leur nom (ordre alphabétique)

SELECT * FROM Viticulteur ORDER BY NomV ASC ;

Ex : Infos sur les vins, triés par millésime décroissant SELECT * FROM Employe

ORDER BY Salaire DESC ;

ASC est optionnel (par défaut) Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

(83)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les viticulteurs, triés par leur nom (ordre alphabétique)

SELECT * FROM Viticulteur ORDER BY NomV ASC ;

Ex : Infos sur les vins, triés par millésime décroissant SELECT * FROM Employe

ORDER BY Salaire DESC ;

84

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

NumVitic NomV PrenomV VilleV

15 BARANCOURT TOURS SUR MARNE

22 CHATEAU MONBRISON MARGAUX

23 CHATEAU MOULIN A VENT CASTELNAU DE MEDOC

5 COULIS DUTHEIL CHINON

16 JADOT LOUIS BEAUNE

21 LYNCH-BAGES PAUILLAC

18 MEDEVILLE CHARLES PREIGNAC

3 MORIN JULES BENAIS

1 MOULIN JEAN MACON

10 PARENT PIERRE POMMARD

20 TISSOT JACQUES ARBOIS

(84)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les vins, triés par millésime décroissant SELECT * FROM Employe

ORDER BY Salaire DESC ;

SELECT * FROM E mploye

ORDER BY Salaire DESC ;

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

(85)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les vins, triés par millésime décroissant SELECT * FROM Vin

ORDER BY millesime DESC ;

SELECT * FROM E mploye

ORDER BY Salaire DESC ;

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

(86)

ORDER BY attr1, attr2 … permet de trier le résultat selon les attributs précisés

ORDER BY attr ASC | DESC permet de spécifier le sens du tri (ascendant ou descendant)

Infos sur les vins,

triés par millésime décroissant SELECT * FROM Vin

ORDER BY millesime DESC ;

SELECT * FROM E mploye

Pas d'équivalence en Algèbre !!

Tri du résultat : ORDER BY

NumVin Cru Millesime Region NumVitic 100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

170 BOUZY 1984 CHAMPAGNE 15

160 BOURGUEIL 1984 LOIRE 3

85 CHINON 1983 LOIRE 5

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

98 MOULIS 1981 BORDEAUX 23

190 SAINT EMILION 1981 BORDEAUX 18 88 CHAMBERTIN 1980 BOURGOGNE 1 175 MEURSAULT 1980 BOURGOGNE 16

90 MARGAUX 1978 BORDEAUX 22

150 MONTHELIE 1978 BOURGOGNE 10

(87)

Fonctions de calcul

– Fonction de calcul : s'applique sur un ensemble de n-uplets et renvoie une valeur unique

– Calcul sur les valeurs prises par un attribut

AVG ( DISTINCT | ALL attribut ) : moyenne des valeurs prises par un attribut (entier ou réel)

• avec DISTINCT : sans les doublons

• avec ALL : avec les doublons

SUM ( DISTINCT | ALL attribut ) : somme des valeurs prises par un attribut (entier ou réel)

MAX ( attribut ) : maximum des valeurs prises par un attribut (entier, réel, caractères ou date)

MIN ( attribut ) : minimum des valeurs prises par un attribut (entier, réel, caractères ou date)

– Comptage des n-uplets

COUNT( * ) , COUNT ( ALL | DISTINCT attribut )

Pas d'équivalence

en Algèbre !!

(88)

Fonctions de calcul

Exemple

Quelle est la quantité maximale commandée (dans une même commande ?)

SELECT SUM ( QtteCommandee ) FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

(89)

Fonctions de calcul

Exemple

Quelle est la quantité maximale commandée (dans une même commande ?)

;

SELECT MAX(QtteCommandee) FROM Commande ;

fonction MAX dans le SELECT, car c’est le résultat du calcul que l’on veut afficher

comme résultat

MAX(QtteCommandee)

24

(90)

Fonctions de calcul

Exemple

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

(91)

Fonctions de calcul

Exemple

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

(92)

Fonctions de calcul

Exemple

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

SUM(QtteCommandee)

12

(93)

Fonctions de calcul

Exemple

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

94 NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

Commande

(94)

Fonctions de calcul

Exemples

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

(95)

Fonctions de calcul

Exemples

Quantité totale

de bouteilles commandées par le buveur n° 1600 SELECT SUM ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

Quantité maximale commandée par le buveur n° 1600 SELECT MAX ( QtteCommandee )

FROM Commande

WHERE NumBuveur = 1600 ;

96

MAX(QtteCommandee )

6

(96)

Fonctions de calcul

Comptage

COUNT compte le nombre de n-uplets

COUNT( * ) , COUNT ( ALL | DISTINCT attribut )

– dans le cas de * : y compris les valeurs nulles – avec DISTINCT : sans les doublons

– avec ALL : avec les doublons

Nombre de vins différents commandés SELECT COUNT ( DISTINCT NumVin ) FROM Commande ;

Pas d'équivalence en Algèbre !!

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

Commande

(97)

Fonctions de calcul

Comptage

COUNT compte le nombre de n-uplets

COUNT( * ) , COUNT ( ALL | DISTINCT attribut )

– dans le cas de * : y compris les valeurs nulles – avec DISTINCT : sans les doublons

– avec ALL : avec les doublons

Nombre de vins différents commandés SELECT COUNT ( DISTINCT NumVin ) FROM Commande ;

Pas d'équivalence en Algèbre !!

COUNT( DISTINCT NumVin )

6

(98)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent être dans la clause SELECT

Quantité moyenne commandée

SELECT AVG(QtteCommandee) FROM Commande ;

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

11 1200 140 12 12/12/89

12 1100 120 6 13/12/89

Commande

(99)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent être dans la clause SELECT

Quantité moyenne commandée

SELECT AVG(QtteCommandee) FROM Commande ;

AVG(QtteCommandee)

9.8000

(100)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Numéro des buveurs ayant fait des commandes supérieures à la moyenne

SELECT NomB

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur AND qtteCommandee >=

(SELECT AVG (QtteCommandee)

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

Commande

AVG(QtteCommandee)

9.8000

(101)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Numéro des buveurs ayant fait des commandes supérieures à la moyenne

SELECT DISTINCT NumBuveur FROM Commande

WHERE qtteCommandee >=

(SELECT AVG (QtteCommandee) FROM Commande) ;

NumBuveur 1200

1400

1500

(102)

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Quel est le nom du buveur qui a fait la commande maximale ?

SELECT NomB

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur

AND QtteCommandee = ( SELECT MAX(QtteCommandee) FROM Commande) ;

Fonctions de calcul

(103)

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Quel est le nom du buveur qui a fait la commande maximale ?

SELECT NomB

FROM Buveur B, Commande C

WHERE B.NumBuveur = C.NumBuveur

AND QtteCommandee = ( SELECT MAX(QtteCommandee) FROM Commande) ;

105

Fonctions de calcul

NomB

FRADET

(104)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Numéro des buveurs ayant TOUJOURS fait des commandes supérieures à la moyenne

SELECT DISTINCT NumBuveur FROM Commande

WHERE qtteCommandee >=

(SELECT AVG (QtteCommandee) FROM Commande) ;

NumCom NumBuveur NumVin QtteCommandee DateCom

1 1600 90 6 10/06/87

2 1500 100 18 20/11/87

3 1500 88 24 10/09/87

4 1600 175 6 12/02/87

5 1300 140 3 18/03/87

6 1100 140 8 24/12/87

7 1200 88 3 24/12/87

8 1400 140 12 10/12/88

Commande

AVG(QtteCommandee)

9.8000

(105)

Fonctions de calcul

Remarque : les fonctions de calcul peuvent aussi être utilisées dans la clause WHERE

Numéro des buveurs ayant TOUJOURS fait des commandes supérieures à la moyenne

SELECT DISTINCT NumBuveur FROM Commande

WHERE NumBuveur NOT IN

(SELECT NumBuveur FROM Commande

WHERE QtteCommandee<=

(SELECT (AVG(QtteCommandee) FROM Commande)

) ;

NumBuveur 1400

1500

(106)

Partitionnement

Objectif : partitionnement horizontal d'une relation en sous-relations selon 1 ou plusieurs attributs

SELECT NumBuveur FROM Commande

GROUP BY NumBuveur ;

– On retrouve alors dans le résultat une ligne par sous-relation

Pas d'équivalence en Algèbre !!

NumVin Cru Millesime Region NumVitic

80 SAUTERNES 1982 BORDEAUX 18

84 PAUILLAC 1982 BORDEAUX 21

85 CHINON 1983 LOIRE 5

86 CHINON 1978 LOIRE 4

88 CHAMBERTIN 1980 BOURGOGNE 1

90 MARGAUX 1978 BORDEAUX 22

98 MOULIS 1981 BORDEAUX 23

100 CHAMPAGNE BRUT 1988 CHAMPAGNE 15

120 CHINON 1985 LOIRE 4

128 BOURGUEIL 1985 LOIRE 4

140 POMMARD 1976 BOURGOGNE 10

150 MONTHELIE 1978 BOURGOGNE 10

160 BOURGUEIL 1984 LOIRE 3

170 BOUZY 1984 CHAMPAGNE 15

Vin

Figure

Updating...

Références

Updating...

Sujets connexes :