Vous êtes sur la page 1sur 60

Le langage SQL

L. Nerima

Universit de Genve

Le langage SQL But: accder aux donnes de la base de donnes SQL = Structured Query Language Langage pour les bases de donnes relationnelles SQL est dni par une norme ISO SQL - 1989 niveau I SQL - 1989 niveau II SQL 2 - 1992 SQL 3 -> SQL 99 - 1999 ... futur ... ? Existe sur tous les SGBD relationnels (Oracle,Access, MySQL, SQL Server, Sybase...), mais avec des extensions (+/- proche de la norme) Origine : SEQUEL(Structured English QUEry Language) dvelopp par IBM pour le SGBD appel SYSTEM R (au milieu des annes 70) Premire ralisation commerciale de SQL: 1979 (Oracle Corporation) Concepts de base: table, colonne, ligne

L. Nerima

Universit de Genve

Le langage SQL SQL est un langage dclaratif (par opposition un langage procdural) SQL fournit un ensemble de commandes pour une varit de tches, dont: - linterrogation de la base de donnes - linsertion, la mise jour et la suppression des donnes dans la base de donnes - la cration et la modication du schma de la BD - la dnition de vues - le contrle de laccs aux donnes - la cration d'index pour acclrer les interrogations Mais nous ne verrons que linterrogation Une commande SQL est aussi appele instruction SQL ou requte SQL.

L. Nerima

Universit de Genve

Terminologie SQL (rappel) Modle relationnel SQL


relation tuple ou n-uplet attribut domaine table (table) ligne (row) colonne (column) type de donne (data type)

Access
table enregistrement champ type de donne

Autre diffrence
les tables SQL (et Access) peuvent contenir des doublons (plusieurs lignes identiques) -> ce ne sont pas vraiment des relations.

L. Nerima

Universit de Genve

Linterrogation en SQL: la commande SELECT


En SQL, linterrogation dune base de donnes se fait

avec la commande SELECT

La commande SELECT comprend trois parties:

SELECT < liste des colonnes du rsultat> FROM WHERE < liste des tables impliques dans linterrogation> < condition de slection des tuples>

Exemple: la base de donnes Htel

Chambres (NumChambre, Prix, NbrLit, NbrPers, Confort, Equipement) Clients (NumClient, Nom, Prenom, Adresse) Rservation (NumChambre, NumClient, DateArr, DateDep)
Exemple dinterrogation:

Quelles sont les chambres avec bain et tlvision ? SELECT NumChambre, Confort FROM Chambres WHERE Confort='bain' AND Equipement='TV'

L. Nerima

Universit de Genve

La machine SQL select A1,A2,...Am from R1, R2,...,Rn where condition Excution: - faire le produit cartsien de toutes les tables cites aprs from - slectionner les entits satisfaisant la condition dcrite aprs where - projeter sur les colonnes cites aprs select

R1

R2

Rn

From produit cartsien n-uplets Where condition n-uplets t.q. condition=vrai Select projection relation rsultat

Remarques:
ce modle est un modle logique destin lutilisateur;

il lui fournit la smantique des requtes select de SQL;


lexcution relle dune requte select est diffrente:

proprits de lalgbre relationnelle -> optimisations.

L. Nerima

Universit de Genve

SQL: exemples Soit les instances de cru, vins et cepage_region: instance de la table cru:
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes La Grappe d'Or COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc

instance de la table vins:


REGION ---------------Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne COUL MILLESIME QUALITE ----- ---------- ---------rouge 1990 tres bonne blanc 1990 excellente rouge 1990 excellente blanc 1990 bonne rouge 1991 moyenne blanc 1991 mediocre rouge 1991 moyenne blanc 1991 moyenne

instance de la table cepage_region:


CEPAGE -------------------Cabernet-Sauvignon Pinot noir Semillon Chardonnay Chardonnay R_PROD ---------------Bordeaux Bourgogne Bordeaux Bourgogne Champagne COUL ----rouge rouge blanc blanc blanc

L. Nerima

Universit de Genve

SQL: exemples dinterrogation


Schma:

cru (nom_cru, commune, region, coul) vins (region, coul, millesime, qualite) cepage_region (cepage, r_prod, coul)
Interrogations:

Q1 : Tous les crus Q2: Tous les crus rouges Q3: La liste des noms de crus rouges Q4: partir de quel cpage principal est produit le Meursault blanc ? Q5: Quels sont les bons millsimes du Chteau Latour? (i.e. bon, trs bon ou excellent) Q6 : Quels sonts les crus rouges et leurs millsimes qui sont de bonne qualit? Q7: Quels sont les millsimes o les Bourgognes blancs sont de qualit suprieure au Bordeaux blancs?

L. Nerima

Universit de Genve

Interrogations SQL: solution Q1 : Tous les crus SQL> select from cru;
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes La Grappe d'Or 14 rows selected. COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc

Q2: Tous les crus rouges SQL> select from cru where coul='rouge';
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Clos Vougeot Corton Les Epenots Les Gravieres 9 rows selected. COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Vougeot Aloxe-Corton Pommard Santenay REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge rouge rouge rouge rouge

L. Nerima

Universit de Genve

Interrogations SQL: solution (suite) Q3: La liste des noms de crus rouges SQL> select nom_cru from cru where coul='rouge';
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Clos Vougeot Corton Les Epenots Les Gravieres 9 rows selected.

Q4: partir de quel cpage principal est produit le Meursault blanc ? SQL> select cepage from cepage_region, cru where region=r_prod and cepage_region.coul=cru.coul and commune='Meursault' and cru.coul=blanc;
CEPAGE -------------------Chardonnay Chardonnay Chardonnay

Remarque: nous verrons plus loin comment liminer les doublons

L. Nerima

Universit de Genve

10

Interrogations SQL: solution (suite) Q5: Quels sont les bons millsimes du Chteau Latour? (i.e. bon, trs bon ou excellent) SQL> select millesime from vins, cru where vins.region=cru.region and vins.coul=cru.coul and nom_cru='Ch. Latour' and (qualite='bonne' or qualite='tres bonne' or qualite = 'excellente');
MILLESIME ---------1990

Q6 : Quels sonts les crus rouges et leurs millsimes qui sont de bonne qualit? SQL> select cru., millesime from cru, vins where cru.region=vins.region and cru.coul=vins.coul and cru.coul='rouge' and (qualite='bonne' or qualite='tres bonne' or qualite = 'excellente');

L. Nerima

Universit de Genve

11

Interrogations SQL: solution (de plus en plus difcile)


NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Clos Vougeot Corton Les Epenots Les Gravieres 9 rows selected. COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Vougeot Aloxe-Corton Pommard Santenay REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne COUL MILLESIME ----- ---------rouge 1990 rouge 1990 rouge 1990 rouge 1990 rouge 1990 rouge 1990 rouge 1990 rouge 1990 rouge 1990

Q7: Quels sont les millsimes o les Bourgognes blancs sont de qualit suprieure au Bordeaux blancs? SQL> select bourg.millesime from vins as bord,vins as bourg where bord.region='Bordeaux' and bord.coul='blanc' and bourg.region='Bourgogne' and bourg.coul='blanc' and bourg.millesime=bord.millesime and bourg.qualite > bord.qualite;
MILLESIME ---------1991

Remarque: pour que cette interrogation SQL donne toujours le rsultat escompt, il faudrait que le type de donnes de la colonne qualit soit numrique (voir plus loin).

L. Nerima

Universit de Genve

12

La forme complte de la commande SELECT A laide dexemples, nous allons examiner en dtail les diffrentes parties de la commande SELECT, savoir

les colonnes du rsultat - lutilisation de - les noms de colonnes ambigus - les fonctions daggrgation - alias pour une colonne

les tables de linterrogation

- alias pour une table


la table comme ensemble(limination des doublons) la condition de slection

- la selection sans condition - les oprateurs de comparaison - les interrogations imbriques - les quanticateurs en SQL ( , )
la jointure externe le regroupement les oprations ensemblistes le tri du rsultat

L. Nerima

Universit de Genve

13

Instance de la table vins1 Pour faciliter lcriture des conditions sur la qualit du vin
Instance de la table vins1:
REGION ---------------Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne Bordeaux Bordeaux Bourgogne Bourgogne COUL MILLESIME QUALITE ----- ---------- ---------rouge 1985 7 blanc 1985 5 rouge 1985 7 blanc 1985 7 rouge 1986 6 blanc 1986 7 rouge 1986 5 blanc 1986 7 rouge 1987 4 blanc 1987 4 rouge 1987 5 blanc 1987 5 rouge 1988 5 blanc 1988 7 rouge 1988 7 blanc 1988 7 rouge 1989 6 blanc 1989 7 rouge 1989 7 blanc 1989 7 rouge 1990 6 blanc 1990 7 rouge 1990 7 blanc 1990 5 rouge 1991 4 blanc 1991 3 rouge 1991 4 blanc 1991 4

L. Nerima

Universit de Genve

14

Les colonnes du rsultat (dispayed column)

Cas de base
les colonnes que lon dsire afcher comme rsultat doivent tre numres aprs select Q3: La liste des noms de crus rouges select nom_cru from cru where coul='rouge'
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Clos Vougeot Corton Les Epenots Les Gravieres

Utilisation de
select from ... entrane laffichage de toutes les colonnes de toutes les tables cite aprs from Q8: La description des crus des bourgognes 1990 select from cru, vins where cru.region=vins.region and cru.coul=vins.coul and region=bourgogne and millesime=1990
NOM_CRU -------------Les Perrieres Les Charmes La Grappe d'Or Clos Vougeot Corton Les Epenots Les Gravieres COMMUNE -----------Meursault Meursault Meursault Vougeot Aloxe-Corton Pommard Santenay REGION --------Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----blanc blanc blanc rouge rouge rouge rouge REGION --------Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----blanc blanc blanc rouge rouge rouge rouge MILL ---1990 1990 1990 1990 1990 1990 1990 QUALITE -------bonne bonne bonne excellente excellente excellente excellente

L. Nerima

Universit de Genve

15

Les colonnes du rsultat (suite) la requte select t.,... from t,... a pour effet dafcher toutes les colonnes de la table t Q6 : Quels sonts les crus rouges et leurs millsimes qui sont de bonne qualit? select cru., millesime from cru, vins where cru.region=vins.region and cru.coul=vins.coul and cru.coul='rouge' and (qualite='bonne' or qualite='tres bonne' or qualite = 'excellente');

Noms de colonne ambigus


ce cas se produit lorsque linterrogation se rfre des colonnes qui portent le mme nom mais qui appartiennent des tables diffrentes -> pour lever lambigut, il faut prxer le nom de la colonne par le nom de la table laquelle elle appartient Q4: partir de quel cpage principal est produit le Meursault blanc ? select cepage from cepage_region, cru where region=r_prod and cepage_region.coul=cru.coul and commune='Meursault';
CEPAGE -------------------Chardonnay Chardonnay Chardonnay

L. Nerima

Universit de Genve

16

Les colonnes du rsultat (suite)

Les fonctions daggrgation


oprent sur une liste de valeurs; on les utilise gnralement sur une colonne
avg: calcule la moyenne dune liste count: compte le nombre dlments dune liste min: donne la valeur minimum dune liste max: donne la valeur maximum dune liste sum: calcule la somme dune liste

Q9: La capacit thorique d'acceuil de l'htel select sum(nbr_pers) from CHAMBRES


SUM(NBR_PERS) ------------56

L. Nerima

Universit de Genve

17

Les colonnes du rsultat (suite)

Alias pour une colonne


permet de donner un nom une colonne du rsultat; lors de lutilisation dune fonction daggrgation: Q9a: select sum(nbr_pers) as [capacit de lhtel] from chambres
capacit de lhtel ------------------56

ou pour expliciter une colonne: Q10: les qualits du millsime 1986 select region,coul,millesime,qualite as [QUALITE (1 7)] from vins1 where millesime=1986;
REGION ---------------Bordeaux Bordeaux Bourgogne Bourgogne COUL MILLESIME QUALITE(1 7) ----- ---------- -------------rouge 1986 6 blanc 1986 7 rouge 1986 5 blanc 1986 7

L. Nerima

Universit de Genve

18

Les tables de linterrogation (selected table)

Cas de base
toutes les tables impliques dans linterrogation doivent tre cites aprs from Q5:Quels sont les bons millsimes du Chteau Latour? select millesime from vins, cru where vins.region=cru.region and vins.coul=cru.coul and nom_cru='Ch. Latour' and (qualite='bonne' or qualite='tres bonne' or qualite = 'excellente');
MILLESIME ---------1990

Alias pour une table lorsquil faut joindre plusieurs fois la mme table:
Q7: Quels sont les millsimes o les Bourgognes blancs sont de qualit suprieure au Bordeaux blancs? select bourg.millesime from vins1 as bord, vins1 as bourg where bord.region='Bordeaux' and bord.coul='blanc' and bourg.region='Bourgogne' and bourg.coul='blanc' and bourg.millesime=bord.millesime and bourg.qualite > bord.qualite;
MILLESIME ---------1985 1987 1988 1991

L. Nerima

Universit de Genve

19

La table comme ensemble Rappel: une table SQL peut contenir plusieurs tuples identiques

Utilisation de distinct
limine les doublons du rsultat Q4a: partir de quel cpage principal est produit le Meursault blanc ? select distinct cepage from cepage_region, cru where region=r_prod and cepage_region.coul=cru.coul and commune='Meursault' and cru.coul=blanc;
CEPAGE -------------------Chardonnay

Remarques: - llimination des doublons est coteuse car elle ncessite le tri pralable des tuples - les oprateurs ensemblistes union, intersect et minus liminent automatiquement les doublons du rsultat (voir plus loin)

L. Nerima

Universit de Genve

20

La condition de slection

Cas de base
la commande SELECT slectionne tous les tuples de la table (ou des tables) spcie aprs FROM qui satisfont la condition de slection spcie aprs WHERE Q2: Tous les crus rouges select from cru where coul='rouge';
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Clos Vougeot Corton Les Epenots Les Gravieres COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Vougeot Aloxe-Corton Pommard Santenay REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge rouge rouge rouge rouge

Slection sans condition


lomission de la partie WHERE indique quil ny a aucune condition de slection des tuples -> tous les tuples de la table spcie aprs WHERE sont slectionns Q1 : Tous les crus select from cru;
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem ... 14 rows selected. COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes ... REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux ... COUL ----rouge rouge rouge rouge rouge blanc ...

L. Nerima

Universit de Genve

21

La condition de slection (suite)

Les oprateurs de comparaison


=, <, <=, >, >=, <> in et not in: appartenance (resp. non appartenance)

une liste Q5a: Quels sont les bons millsimes du Chteau Latour? select millesime from vins, cru where vins.region=cru.region and vins.coul=cru.coul and nom_cru='Ch. Latour' and qualite in ('bonne', 'tres bonne', 'excellente');
MILLESIME ---------1990

like: appartenance une chane de caractre

TITRE NOM_AUTEUR -------------------------------------------------- ---------------PRENOM_AUTEUR COD NUM ANNEE ---------------- --- ------ ---------L'ordinateur va-t'il imposer sa maniere de penser? Moeckli Gustave TS 10 1984 Quand je pense "a", l'ordinateur repete "a" Luc LNQ 658 1993 Demenjoz

Q11: La liste des articles qui contiennent le mot 'ordinateur' dans leur titre select * from article where titre like '*ordinateur*';

L. Nerima

Universit de Genve

22

Les oprateurs de comparaison (suite)


between: appartenance un intervalle

Q12: Nombre de chambres dont le prix est compris entre 85 et 120 francs select count() from chambres where prix between 85 and 120
count(*) --------12

is null et is not null: comparaison avec la valeur null;

utilis gnralement pour rechercher dans une table les tuples dont la valeur dun attribut est indnie; Q13: Le nom des clients qui nont pas annonc leur date de dpart select nom from clients, reservation where clients.num_client=reservations.num_client and date_dep is null;
NOM --------DUPONT

L. Nerima

Universit de Genve

23

La condition de slection (suite)

Interrogations imbriques
certaines interrogations ncessite la connaissance pralable de certaines donnes de la bd pour pouvoir spcier la condition de slection Q14: Quels sont les millsimes du Bordeaux rouge dont la qualit est suprieure la moyenne ( qualit moyenne des millsimes du Bordeaux rouge) select millesime from vins1 where region='Bordeaux' and coul='rouge' and qualite > (select avg(qualite) from vins1 where region='Bordeaux' and coul='rouge');
MILLESIME ---------1985 1986 1989 1990

Q15: La recette du 25 dcembre 1989 select sum(prix) from chambres where num_chambre in (select num_chambre from reservations where date_arr <= 25-dec-89 and date_dep > 25-dec-89)
SUM(PRIX) ---------600

L. Nerima

Universit de Genve

24

Les quanticateurs en SQL ( , ) Exists (), not exists()


permet de tester si le rsultat dune interrogation

imbrique contient au moins un tuple (respectivement aucun tuple). Soit la relation langue
NOM_CANTON ---------------Appenzell R.E. Appenzell R.I. Argovie Bale-Campagne Bale-Ville Berne Berne Fribourg Fribourg Geneve Glaris Grisons Grisons Grisons Jura ... LANGUE_PARLEE ---------------allemand allemand allemand allemand allemand allemand francais allemand francais francais allemand allemand romanche italien francais ...

Q16: Quels sont les cantons suisse o lon ne parle pas lallemand? select from canton where not exists (select from langue where canton.nom_canton=langue.nom_canton and langue_parlee='allemand');
NOM_CANTON CHEF_LIEU DATE_ENTRE ------------------ ---------------- ----------Geneve Geneve 1815 Jura Delemont 1979 Neuchatel Neuchatel 1815 Tessin Bellinzone 1803 Vaud Lausanne 1803

L. Nerima

Universit de Genve

25

La jointure externe En postxant dans la condition les colonnes dune table par (+), on spcie une jointure externe.

Exemple: soit les tables cabine et reservation:


cabine
NUM_CABINE NBR_PERS CONFORT PRIX ---------- ---------- ------- ---------1 2 bain 4000 2 2 douche 3500 3 1 bain 2500 4 2 douche 3000 5 2 douche 3000 6 4 douche 5000

reservation
NUM_CABINE ---------1 5 6 NOM_CLIENT ---------Arditi P. Dupont J. Dupont J.

Requte: Afcher toutes les cabines et le nom du client qui a rserv la cabine. select cabine., nom_client from cabine, reservation where cabine.num_cabine = reservation.num_cabine
NUM_CABINE NBR_PERS CONFORT PRIX NOM_CLIENT ---------- ---------- ------- ---------- ---------1 2 bain 4000 Arditi P. 5 2 douche 3000 Dupont J. 6 4 douche 5000 Dupont J.

select cabine., nom_client from cabine, reservation where cabine.num_cabine = reservation.num_cabine(+)


NUM_CABINE NBR_PERS CONFORT PRIX NOM_CLIENT ---------- ---------- ------- ---------- ---------1 2 bain 4000 Arditi P. 2 2 douche 3500 3 1 bain 2500 4 2 douche 3000 5 2 douche 3000 Dupont J. 6 4 douche 5000 Dupont J.

L. Nerima

Universit de Genve

26

Les regroupements permet dappliquer les fonctions daggrgation des sous-groupes de tuples Q17: Le prix minimum et maximum des chambres par type de confort select confort, min(prix) 'PRIX MINIMUM', max(prix) 'PRIX MAXIMUM' from chambres group by confort;
CONFORT PRIX MINIMUM PRIX MAXIMUM ------- ------------ -----------BAIN 120 180 DOUCHE 100 100 WC 80 90

Q18: Combien de crus rouges et de crus blancs sont produits dans chaque commune? select commune, coul, count() from cru group by commune, coul;
COMMUNE ---------------Aloxe-Corton Barsac Margaux Meursault Meursault Pauillac Pommard Santenay Sauternes St. Julien Vougeot COUL COUNT(*) ----- ---------rouge 1 blanc 1 rouge 2 blanc 3 rouge 1 rouge 2 rouge 1 rouge 1 blanc 1 rouge 1 rouge 1

11 ligne(s) slectionne(s).

L. Nerima

Universit de Genve

27

Les oprations ensemblistes oprateurs: union (), intersect () et minus ()


les oprandes doivent avoir le mme nombre de

colonnes et les colonnes correspondantes doivent tre gales en type (pas forcment en taille)
lutilisation de ces oprateurs implique implicitement la

clause distinct Q19: Quels sont les termes employs pour dcrire lquipement et le confort dune chambre? select confort 'TERMES' from chambres union select equipement from chambres;
TERMES -----BAIN DOUCHE NON TV WC

Dans Access
attention: seul lunion est disponible

L. Nerima

Universit de Genve

28

Le tri du rsultat
le rsultat est tri selon une ou plusieurs cls de tri; sil y a plusieurs cls de tri, la premire de la liste est la

cl primaire, la deuxime est la cl secondaire etc.


asc -> ordre croissant (par dfaut) desc -> ordre dcroissant

Q11: les cantons suisses dans lordre dentre dans la confdration et par ordre alphabtique select from canton order by date_entree asc, nom_canton asc
NOM_CANTON ---------------Nidwald Obwald Schwytz Uri Lucerne Zurich Glaris Zoug Berne Fribourg Soleure Bale-Campagne Bale-Ville Schaffhouse Appenzell R.E. Appenzell R.I. Argovie Grisons Saint-Gall Tessin Thurgovie Vaud Geneve Neuchatel Valais Jura CHEF_LIEU DATE_ENTREE ---------------- ----------Stans 1291 Sarnen 1291 Schwytz 1291 Altdorf 1291 Lucerne 1332 Zurich 1351 Glaris 1352 Zoug 1352 Berne 1353 Fribourg 1481 Soleure 1481 Liestal 1501 Bale 1501 Schaffhouse 1501 Herisau 1513 Appenzell 1513 Aarau 1803 Coire 1803 Saint-Gall 1803 Bellinzone 1803 Frauenfeld 1803 Lausanne 1803 Geneve 1815 Neuchatel 1815 Sion 1815 Delemont 1979

26 ligne(s) slectionne(s).

L. Nerima

Universit de Genve

29

Modle dexcution complet de la machine SQL Modle dexcution complet (tir de Modle relationnel et SQL, thorie et pratique, J. Guyot)
R1 R2 ... Rn

From .... Produit catsien n-uplet Where .... prdicat

...
select .... projection Group by .... regroupement et calcul Having ... prdicat relation Union, intersect, minus .... Oprations ensemblistes

Order by .....

Tri du rsultat

L. Nerima

Universit de Genve

30

Les vues

L. Nerima

Universit de Genve

31

Le concept de vue dans les bases de donnes


Jusqu prsent: une table (ou relation) est associe

une instance o les tuples sont stocks physiquement les tuples


Une vue est une table logique dnie partir dautres

tables (ou vues)


On dnit une vue en spciant une interrogation Linstance dune vue est value au moment o elle

est active dans une requte

L. Nerima

Universit de Genve

32

Soit la base de donnes des cantons suisses relation canton


NOM_CANTON ---------------Nidwald Obwald Schwytz Uri Lucerne Zurich Glaris Zoug Berne Fribourg Soleure Bale-Campagne Bale-Ville Schaffhouse Appenzell R.E. Appenzell R.I. Argovie Grisons Saint-Gall Tessin Thurgovie Vaud Geneve Neuchatel Valais Jura CHEF_LIEU DATE_ENTREE ---------------- ----------Stans 1291 Sarnen 1291 Schwytz 1291 Altdorf 1291 Lucerne 1332 Zurich 1351 Glaris 1352 Zoug 1352 Berne 1353 Fribourg 1481 Soleure 1481 Liestal 1501 Bale 1501 Schaffhouse 1501 Herisau 1513 Appenzell 1513 Aarau 1803 Coire 1803 Saint-Gall 1803 Bellinzone 1803 Frauenfeld 1803 Lausanne 1803 Geneve 1815 Neuchatel 1815 Sion 1815 Delemont 1979

26 ligne(s) slectionne(s).

Relation langue
NOM_CANTON ---------------Appenzell R.E. Appenzell R.I. Argovie Bale-Campagne Bale-Ville Berne Berne Fribourg Fribourg Geneve Glaris Grisons Grisons Grisons Jura ... LANGUE_PARLEE ---------------allemand allemand allemand allemand allemand allemand francais allemand francais francais allemand allemand romanche italien francais ...

L. Nerima

Universit de Genve

33

Exemple: la vue les cantons romands En SQL SQL> create view canton_romand as select canton. from canton, langue where canton.nom_canton=langue.nom_canton and langue_parlee='francais';
Vue cre.

Exemples dinterrogation: Q: Tous les cantons romands SQL> select from canton_romand;
NOM_CANTON ---------------Berne Fribourg Geneve Jura Neuchatel Valais Vaud CHEF_LIEU DATE_ENTREE ---------------- ----------Berne 1353 Fribourg 1481 Geneve 1815 Delimont 1979 Neuchatel 1815 Sion 1815 Lausanne 1803

7 ligne(s) slectionne(s).

L. Nerima

Universit de Genve

34

Vues en SQL (suite) Q: Quels sont les cantons romands entrs dans la confdration au 19me sicle? SQL> select from canton_romand where date_entree between 1800 and 1899 order by date_entree;
NOM_CANTON ---------------Vaud Geneve Neuchatel Valais CHEF_LIEU DATE_ENTREE ---------------- ----------Lausanne 1803 Geneve 1815 Neuchatel 1815 Sion 1815

L. Nerima

Universit de Genve

35

Vues: modle dexcution Comment cela fonctionne-t-il? Les termes de la requte sont substitus lexicalement par les termes de la vue: a) l'identicateur de la vue dans la clause FROM de la requte est substitu par les identicateurs spcis dans la clause FROM de la vue. b) les colonnes de la requte sont substitues par les expressions spcies dans la clause SELECT de la vue. c) la clause WHERE de la vue est ajoute la clause WHERE de la requte. d) Dans les cas les plus simples, la clause GROUP BY de la vue est ajoute la requte.

L. Nerima

Universit de Genve

36

Exemple dexcution

Soit la vue create view canton_romand as select canton. from canton, langue where canton.nom_canton = langue.nom_canton and langue_parlee='francais'; et la requte:
select from canton_romand where date_entree between 1800 and 1899 order by date_entree; Application des rgles: a) select * from canton, langue where date_entree between 1800 and 1899 order by date_entree; b) select canton.* from canton, langue where date_entree between 1800 and 1899 order by date_entree; c) select canton.* from canton, langue where date_entree between 1800 and 1899 and canton.nom_canton = langue.nom_canton and langue_parlee='francais' order by date_entree; Cest la requte que nous aurions crite si les vues nexistaient pas !

L. Nerima

Universit de Genve

37

Vues: utilit
Vues: multiplier les reprsentations logiques Ide centrale: crer une indpendance logique entre

le schma de la base de donnes et les applications qui lutilisent

L. Nerima

Universit de Genve

38

Vues contextuelles On construit une nouvelle relation (vue) partir dun ensemble de relations On utilise ensuite la vue (contextuelle) au lieu des schmas sous-jacents

Exemple
CREATE VIEW hotel (NUM_CLIENT, NOM, PRENOM, ADRESSE, NUM_CHAMBRE, PRIX, NBR_LITS, NBR_PERS, CONFORT, EQUIPEMENT, DATE_ARR, DATE_DEP) AS SELECT CLIENTS.NUM_CLIENT, NOM, PRENOM, ADRESSE, CHAMBRES.NUM_CHAMBRE, PRIX, NBR_LITS, NBR_PERS, CONFORT, EQUIPEMENT, DATE_ARR, DATE_DEP FROM CHAMBRES, CLIENTS, RESERVATIONS WHERE Clients.num_client=Reservations.num_client AND Chambres.num_chambre=Reservations.num_chambre

L. Nerima

Universit de Genve

39

Exemple de vue contextuelle: les lexiques du LATL Chaque lexique monolingue est structur en deux tables: - la table des mots qui contient toutes les formes chies des mots. Ex: pour le verbe jouer, joue, joues, jouons etc. donneront lieu autant de tuples dans la table - la table des lexmes qui contient toutes les lectures syntaxiques (et smantiques) dun mot. Ex: pour le verbe jouer, on aura une lecture intransitive (les enfants jouent), transitive avec prp. objet (jouer du piano), etc
create table f_word(key char(24), word_index number(9), lexeme_index number(9), cat number(2), mode number(10), tense number(10), ... create table f_lexeme(lexeme_index number(9), word_index number(9), type number(3), features number(10), nb_arg number(1),...

Vue des items lexicaux (~ ce que lon trouve dans un dictionnaire traditionnel):
create view f_item as select key, f_lexeme.lexeme_index lexeme_index, f_lexeme.cat cat, features,... from f_word, f_lexeme where f_word.word_index = f_lexeme.word_index

L. Nerima

Universit de Genve

40

Vue contextuelle: implmentation des sous-classes Exemple: les priodiques create table priodique(ISSN number(10), titre char(30), est_un_quotidien char(1), est_une_revue char(1), frquence_de_parution char(20)) create table JourDeParution(ISSN number(10), jour number(1))
Les revues:

create view revue as select ISSN, titre, frquence_de_parution from priodique where est_une_revue=o

Les quotidiens:

create view quotidien as select ISSN, titre, quotidien frquence_de_parution from priodique where est_un_quotidien=o

L. Nerima

Universit de Genve

41

Vues interfaces Interfacer un schma Supposons quon doit utiliser une bd qui possde dj un schma de relations (quon na pas le droit de modier) -> on cre des vues sur les relations existantes
les applications (p.e. requtes SQL) seront bases sur

les vues
les vues sont dnies de manires faciliter lcriture

des applications
si le schma de la base change, il suft dadapter les

vues, sans avoir modier les applications


changer la terminologie dans les schmas

Exemple: multilinguisme create view Customer as select num_client cust_no, nom surname, prenom rstname, adresse address from clients

L. Nerima

Universit de Genve

42

Vues attributs calculs Lorsque la valeur dun attribut est entirement dtermine par de linformation existant dj dans la base Exemple: create view personne_avec_age as select nom, prenom, date() - date_de_naissance age from personne Remarque: date() donne la date systme daujourdhui

L. Nerima

Universit de Genve

43

Vues dductives Programmation logique: partir dun ensemble de faits et de rgles de dduction, on dduit de nouvelles informations. Rappel: en PROLOG, faits + rgles (clauses de Horn) En SQL, faits seront reprsents par les tuples contenus dans les tables les rgles seront dnies par les vues Exemples: soit le schma de larbre gnalogique:
create table pers(nom char(20), sexe char(1)); create table geni(parent char(20), enfant char(20));

A partir des donnes contenues dans ces 2 tables, nous aimerions poser les questions:
? - qui est la soeur de ... ? ? - qui sont les grand-parents ... ? ? - qui est le cousin de ... ? ? - qui est l'anctre de ... ?

Les vues suivantes rpondent ces questions:


CREATE VIEW femme AS SELECT nom FROM pers WHERE sexe='F'; CREATE VIEW homme AS SELECT nom FROM pers WHERE sexe='H';

L. Nerima

Universit de Genve

44

Vues dductives (suite)


CREATE VIEW pere_de AS SELECT parent pere ,enfant FROM geni,homme WHERE geni.parent=homme.nom; CREATE VIEW mere_de AS SELECT parent mere,enfant FROM geni,femme WHERE geni.parent=femme.nom; CREATE VIEW soeur_de AS SELECT a.enfant soeur,b.enfant nom FROM geni a,geni b,femme WHERE a.parent=b.parent AND a.enfant=femme.nom AND a.enfant<>b.enfant ; CREATE VIEW frere_de AS SELECT a.enfant frere,b.enfant nom FROM geni a,geni b,homme WHERE a.parent=b.parent AND a.enfant=homme.nom AND a.enfant<>b.enfant; CREATE VIEW grandpere_de AS SELECT a.pere grandpere,b.enfant petitenfant FROM pere_de a,geni b WHERE a.enfant=b.parent; CREATE VIEW grandmere_de AS SELECT a.mere grandmere,b.enfant petitenfant FROM mere_de a,geni b WHERE a.enfant=b.parent; CREATE VIEW grandparent_de(grandparent, petitenfant) AS SELECT grandpere, petitenfant FROM grandpere_de union SELECT grandmere, petitenfant FROM grandmere_de;

L. Nerima

Universit de Genve

45

Questions sur vues dductives Question: Les soeurs de Jacques ?


SELECT distinct * FROM soeur_de WHERE nom='jacques';

Question: Les grand-parents dAmlie?


SELECT distinct * FROM grandparent_de WHERE petitenfant='amlie';

La question des anctres est plus difcile car elle fait intervenir la notion de rcursivit. Dnition danctre:
X est anctre de Z si 1)X est le gniteur de Z ou bien si 2) X est anctre de Y et Y est le gniteur de Z

En toute gnralit, il n'est pas possible de crer des vues rcursives. Avec la clause connect on peut dnir certaines vues rcursives
CREATE VIEW ancetre_de AS SELECT a.nom ancetre, b.nom descendant FROM pers a, pers b WHERE b.nom in (SELECT enfant FROM geni connect by prior enfant=parent start with parent=a.nom);

L. Nerima

Universit de Genve

46

Commentaires sur les vues


en interrogation, une vue se comporte exactement

comme une table


les modications travers les vues sont restreintes

aux vues ne contenant pas les oprations de: - la clause distinct - jointure - les aggrgations (group by) - les connexions (connect by) En Access - crer une requte (p.e. en SQL) - sauver la requte -> on pourra lutiliser comme vue dans dautres requtes

L. Nerima

Universit de Genve

47

Dnition des schmas de relation en SQL

Soit le schma relationnel de la bd articles de journaux:


EDITEUR adresse_ed nom ed JOURNAL nom_redenchef

code j nom_j nom_ed

prenom_redenchef

NUMERO code j num annee jour mois

ARTICLE titre nom auteur prenom auteur code j num annee PERSONNE nom prenom adresse

En SQL:
create table editeur (nom_ed char(28), adresse_ed char(16)); create table journal (code_j char(3), nom_j char(20), nom_ed char(28), nom_redenchef char(16), prenom_redenchef char(16));

L. Nerima

Universit de Genve

48

Dnition des schmas de relation en SQL (suite) create table article (titre varchar2(50), nom_auteur char(16), prenom_auteur char(16), code_j char(3), num char(6), annee number(4)); create table personne (nom char(16), prenom char(16), adresse char(16)); create table numero (code_j char(3), num char(6), annee number(4), jour number(2), mois char(3));

Interrogation du dictionnaire de SQL


SQL> select table_name, column_name, data_type, data_length, data_precision, data_scale from user_tab_columns where table_name='NUMERO'
TABLE_NAME ----------NUMERO NUMERO NUMERO NUMERO NUMERO COLUMN_NAME ----------CODE_J NUM ANNEE JOUR MOIS DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE --------- ----------- -------------- ---------VARCHAR2 3 VARCHAR2 6 NUMBER 22 4 0 NUMBER 22 2 0 VARCHAR2 3

L. Nerima

Universit de Genve

49

Dnition des schmas de relation en SQL (suite)

Soit le schma de la bd les grands crus de France:


CRU nom_cru commune region coul VINS1 region coul millesime qualite

CEPAGE_REGION cepage r_prod coul

Dnition des schmas de relation en SQL:


create table cru (nom_cru char(20), commune char(16), region char(16), coul char(5)); create table vins1 (region char(16), coul char(5), millesime number(4), qualite char(1)); create table cepage_region (cepage char(20), r_prod char(16), coul char(5));

L. Nerima

Universit de Genve

50

Insertion, modif et suppression des donnes en SQL

Insertion dun tuple (exemple):


avant linsertion
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes La Grappe d'Or COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc

14 ligne(s) slectionne(s).

insert into cru (nom_cru, commune, rgion, coul) values (Sous-le-Dos-dAne, Meursault, Bourgogne,rouge);
1 ligne cre.

aprs linsertion
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes La Grappe d'Or Sous-le-Dos-dAne COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc rouge

15 ligne(s) slectionne(s).

L. Nerima

Universit de Genve

51

Modication des donnes en SQL

Modication dun tuple (exemple):


avant la modication
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes La Grappe d'Or Sous-le-Dos-dAne COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc rouge

15 ligne(s) slectionne(s).

SQL> update cru set nom_cru='Goutte d''Or' where nom_cru='La Grappe d''Or';
1 ligne mise jour.

aprs la modication
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes Goutte d'Or Sous-le-Dos-dAne COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc rouge

15 ligne(s) slectionne(s).

L. Nerima

Universit de Genve

52

Suppression des donnes en SQL

Suppression dun tuple (exemple):


avant la suppression
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Les Charmes Goutte d'Or Sous-le-Dos-dAne COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc blanc rouge

15 ligne(s) slectionne(s).

SQL> delete from cru where nom_cru='Les Charmes';


1 ligne supprime.

aprs la supression
NOM_CRU -------------------Ch. Margaux Ch. Rausan-Segla Ch. Latour Ch. Lynch-Bages Ch. Lagrange Ch. d'Yquem Ch. Myrat Clos Vougeot Corton Les Epenots Les Gravieres Les Perrieres Goutte d'Or Sous-le-Dos-dAne COMMUNE ---------------Margaux Margaux Pauillac Pauillac St. Julien Sauternes Barsac Vougeot Aloxe-Corton Pommard Santenay Meursault Meursault Meursault REGION ---------------Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bordeaux Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne Bourgogne COUL ----rouge rouge rouge rouge rouge blanc blanc rouge rouge rouge rouge blanc blanc rouge

14 ligne(s) slectionne(s).

(Pour en savoir plus A-38 A-44)

L. Nerima

Universit de Genve

53

La dnition des contraintes dintgrit en SQL Une contrainte dintgrit est une rgle qui restreint les valeurs possibles pour une ou plusieurs colonnes dans une table. Nous ne verrons que la dnition des contraintes de cl (primary key) et des contraintes de rfrence (foreign key) qui correspondent aux trois rgles dintgrit minimum du modle relationnel

Dnition dune cl primaire (primary key)


Dnition de la cl dune table -> unicit des valeurs et

valeurs non nulles


Cette cl pourra tre rfrences dans une contrainte

de rfrence.

Exemple: base de donnes articles de journaux (pour le schma, voir p. 33)


alter table editeur add (constraint pk_editeur primary key (nom_ed)); alter table journal add (constraint pk_journal primary key (code_j)); alter table numero add (constraint pk_numero primary key (code_j, num, annee));

L. Nerima

Universit de Genve

54

Dnition des contraintes dintgrit en SQL (suite) alter table personne add (constraint pk_personne primary key (nom, prenom));

Exemple de violation dune contrainte de cl:


SQL> insert into personne(nom,prenom) values ('Monnier','Claude');
1 ligne cre.

SQL> insert into personne(nom,prenom) values ('Monnier','Claude');


insert into personne(nom,prenom)values ('Monnier','Claude') * ERREUR la ligne 1: ORA-00001: Prsence d'une cl duplique dans l'index

L. Nerima

Universit de Genve

55

La dnition des contraintes de rfrence Une contrainte de rfrence dsigne une colonne ou une combinaison de colonnes comme cl externe (foreign key) et tablit une association entre cette cl externe et la cl primaire de la table rfrence.

Dnition dune cl externe (foreign key)


la table qui contient la cl externe est appele table

enfant
la table qui contient la cl primaire rfrence est

appele table parent


contrainte de rfrence -> la valeur de la cl externe

de chaque tuple de la table enfant doit exister comme valeur de cl dun tuple de la table parent (c--d que chaque tuple de la table enfant doit faire rfrence un tuple qui existe dans la table parent)

Exemples:
alter table journal add (constraint fk_ed_journal foreign key(nom_ed) references editeur, constraint fk_red_journal foreign key(nom_redenchef, prenom_redenchef)references personne(nom,prenom)) alter table numero add (constraint fk_numero foreign key (code_j) references journal);

L. Nerima

Universit de Genve

56

La dnition des contraintes de rfrence (suite) alter table article add (constraint fk_n_article foreign key(code_j, num, annee) references numero, constraint fk_aut_article foreign key(nom_auteur, prenom_auteur)references personne(nom,prenom));

Exemple de violation dune contrainte de rfrence:


SQL> insert into article (titre, nom_auteur, prenom_auteur, code_j,num,annee) values('La SBS naime pas les extraterrestres', 'Genoud', 'Madeleine', 'LAS', '11', 1994);
insert into article (titre,nom_auteur,prenom_auteur,code_j,num,annee) * ERREUR la ligne 1: ORA-02291: violation de contrainte NERIMA.FK_AUT_ARTICLE d'intgrit - touche parent introuvable

il y a violation de la contrainte de rfrence fk_aut_article car 'Genoud Madeleine' nexiste pas dans dans la table PERSONNE

L. Nerima

Universit de Genve

57

SQL: une histoire damour... On se propose de donner toutes les variantes en franais de la clbre phrase tire du Bourgeois Gentilhomme Belle marquise, vos beaux yeux me font mourir damour. Solution: 1 on dcoupe la phrase en cinq parties indivisibles que lon insre dans une table ( une seule colonne) appele marquise:
marquise P -------------belle marquise vos beaux yeux me font mourir d'amour

2 on produit toutes les permutations possibles en joignant 5 fois la table marquise avec elle-mme et en liminant les tuples dont deux colonnes ont mme valeur: SQL> select from marquise m1, marquise m2, marquise m3, marquise m4,marquise m5 where m2.p <> m1.p and m3.p not in (m1.p,m2.p) and m4.p not in (m1.p,m2.p,m3.p) and m5.p not in (m1.p,m2.p,m3.p,m4.p);
P -------------d'amour mourir d'amour me font mourir me font P -------------mourir d'amour me font d'amour me font mourir P -------------me font me font mourir mourir d'amour d'amour P -------------vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux P -------------belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise

L. Nerima

Universit de Genve

58

d'amour mourir d'amour vos beaux yeux mourir vos beaux yeux d'amour me font d'amour vos beaux yeux me font vos beaux yeux mourir me font mourir vos beaux yeux me font vos beaux yeux d'amour mourir d'amour me font mourir me font d'amour mourir d'amour belle marquise mourir belle marquise d'amour me font d'amour belle marquise me font belle marquise mourir me font mourir belle marquise me font belle marquise d'amour mourir d'amour vos beaux yeux mourir vos beaux yeux d'amour mourir d'amour belle marquise mourir belle marquise d'amour vos beaux yeux d'amour belle marquise vos beaux yeux belle marquise mourir

mourir d'amour vos beaux yeux d'amour vos beaux yeux mourir me font d'amour vos beaux yeux d'amour vos beaux yeux me font me font mourir vos beaux yeux mourir vos beaux yeux me font mourir d'amour me font d'amour me font mourir mourir d'amour belle marquise d'amour belle marquise mourir me font d'amour belle marquise d'amour belle marquise me font me font mourir belle marquise mourir belle marquise me font mourir d'amour vos beaux yeux d'amour vos beaux yeux mourir mourir d'amour belle marquise d'amour belle marquise mourir vos beaux yeux d'amour belle marquise d'amour belle marquise vos beaux yeux vos beaux yeux

vos beaux yeux vos beaux yeux mourir mourir d'amour d'amour vos beaux yeux vos beaux yeux me font me font d'amour d'amour vos beaux yeux vos beaux yeux me font me font mourir mourir me font me font mourir mourir d'amour d'amour belle marquise belle marquise mourir mourir d'amour d'amour belle marquise belle marquise me font me font d'amour d'amour belle marquise belle marquise me font me font mourir mourir vos beaux yeux vos beaux yeux mourir mourir d'amour d'amour belle marquise belle marquise mourir mourir d'amour d'amour belle marquise belle marquise vos beaux yeux vos beaux yeux d'amour d'amour belle marquise

me font me font me font me font me font me font mourir mourir mourir mourir mourir mourir d'amour d'amour d'amour d'amour d'amour d'amour belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise me font me font me font me font me font me font mourir mourir mourir mourir mourir mourir d'amour d'amour d'amour d'amour d'amour d'amour belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux mourir mourir mourir mourir mourir mourir d'amour

belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux me font me font me font me font me font me font me font me font me font me font me font me font me font me font me font me font me font me font me font

L. Nerima

Universit de Genve

59

vos beaux yeux mourir belle marquise vos beaux yeux belle marquise d'amour me font d'amour vos beaux yeux me font vos beaux yeux d'amour me font d'amour belle marquise me font belle marquise d'amour vos beaux yeux d'amour belle marquise vos beaux yeux belle marquise me font vos beaux yeux me font belle marquise vos beaux yeux belle marquise mourir me font mourir vos beaux yeux me font vos beaux yeux mourir me font mourir belle marquise me font belle marquise mourir vos beaux yeux mourir belle marquise vos beaux yeux belle marquise me font vos beaux yeux me font belle marquise vos beaux yeux belle marquise

mourir belle marquise mourir belle marquise vos beaux yeux me font d'amour vos beaux yeux d'amour vos beaux yeux me font me font d'amour belle marquise d'amour belle marquise me font vos beaux yeux d'amour belle marquise d'amour belle marquise vos beaux yeux vos beaux yeux me font belle marquise me font belle marquise vos beaux yeux me font mourir vos beaux yeux mourir vos beaux yeux me font me font mourir belle marquise mourir belle marquise me font vos beaux yeux mourir belle marquise mourir belle marquise vos beaux yeux vos beaux yeux me font belle marquise me font belle marquise vos beaux yeux

belle marquise vos beaux yeux vos beaux yeux mourir mourir vos beaux yeux vos beaux yeux me font me font d'amour d'amour belle marquise belle marquise me font me font d'amour d'amour belle marquise belle marquise vos beaux yeux vos beaux yeux d'amour d'amour belle marquise belle marquise vos beaux yeux vos beaux yeux me font me font vos beaux yeux vos beaux yeux me font me font mourir mourir belle marquise belle marquise me font me font mourir mourir belle marquise belle marquise vos beaux yeux vos beaux yeux mourir mourir belle marquise belle marquise vos beaux yeux vos beaux yeux me font me font

d'amour d'amour d'amour d'amour d'amour belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux me font me font me font me font me font me font d'amour d'amour d'amour d'amour d'amour d'amour belle marquise belle marquise belle marquise belle marquise belle marquise belle marquise vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux vos beaux yeux me font me font me font me font me font me font mourir mourir mourir mourir mourir mourir

me font me font me font me font me font mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir mourir d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour d'amour

120 ligne(s) slectionnes

L. Nerima

Universit de Genve

60