Sunteți pe pagina 1din 68

SQL :

Structured Query
Langage
(Suite)

SQL: Trois langages

Langage de dfinition de donnes (LDD/DDL)


cration

de relations : CREATE TABLE


modification de relations: ALTER TABLE
suppression de relations: DROP TABLE
vues, index . : CREATE VIEW ...

Langage de requtes (LMD/DML)


SELECT

.... FROM ....... WHERE ..........

Langage de manipulation de donnes (LMD /DML)


insertion

de tuples: INSERT
mise jour des tuples: UPDATE
suppression de tuples: DELETE
2

SQL : partie langage


de requtes

Structure gnrale dune requte :


le BLOC

Structure d'une requte forme de trois clauses:


SELECT <liste-attributs>
FROM <liste-tables>
WHERE <condition>

SELECT dfinit le format du rsultat cherch


FROM dfinit partir de quelles tables le rsultat
est calcul
WHERE dfinit les prdicats de slection du
rsultat
4

Exemple de requte
SELECT * FROM country

->

tous les attributs de tous les tuples dans la

table country
table Country
country

capital

population

area

Ireland

Dublin

70

Austria

Vienna

83

Utd Kingdom

London

56

244

Switzerland

Berne

41
5

SQL / Algbre

SQL/Algbre

Passage de l algbre relationnelle au


langage de requtes de SQL
Traduction de chacun des 9 oprateurs en
un bloc SQL

SQL / Algbre Identit

En algbre :
Id(R)

En SQL :
SELECT *
FROM R

SQL / Algbre Slection

En algbre :
[condition] R

En SQL :
SELECT *
FROM R
WHERE condition

Exemple de requte de slection


algbre:
[population < 20] Pays

SELECT
FROM
WHERE

*
Pays
population < 20 ;

PAYS
nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

441

* = toutes les colonnes


10

SQL / Algbre Projection

En algbre :

[ A1, A2,, An] R

En SQL :
SELECT A1,A2,An
FROM R

11

Exemple de requte de projection


SELECT
FROM

nom, capitale
Pays;

PAYS
nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

441

algbre: [nom, capitale] Pays


12

Requte de slection + projection


SELECT nom, capitale, population
PAYS

FROM Pays WHERE population < 20 ;

nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

441

rsultat

nom

capitale

population

Irlande

Dublin

Autriche

Vienne

Suisse
Berne
algbre:
13
[nom, capitale, population] ( [population < 20] Pays)

SQL / Algbre Renommage

En algbre :

(A1/B1, ..., An/Bn) R

En SQL : Impossible de
renommer des attributs. Il
faut faire des copies
logiques des relations.
SELECT *
FROM R, R R2
WHERE R.A = R2.A .

R2 peut tre vue comme


une copie logique de R
14

SQL / Algbre Produit cartsien

En algbre :
RS

En SQL :
SELECT *
FROM R, S

15

SQL / Algbre Jointure

En algbre :
R

En SQL :
SELECT *

FROM R, S
WHERE R.A1 = S.A1
AND R.A2 = S.A2

AND R.An = S.An

Avec A1, , An tous les


attributs communs R et S
16

Jointure de 2 relations
SELECT anne, lieu, pays,
capitale

JO
anne

lieu

pays

1896

Athnes

Grce

1900

Paris

France

1904

St.Louis

USA

1908

Londres

Royaume-Uni

FROM JO, PAYS


WHERE JO.pays = PAYS.nom;

PAYS
nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

441
17

Jointure de 2 relations: rsultat


PAYS

JO
anne

lieu

pays

nom

1896
1900

Athnes
Paris
St.Louis
Londres

Grce
France
USA

Irlande
Autriche

1904

1908

Royaume-Uni

capitale population surface


Dublin
Vienne
Londres
Berne

Royaume-Uni

Suisse
USA

Washington

3
8
36
7
189

70
83
244
41
441

Rsultat
anne

lieu

pays

capitale

1904

St.Louis

USA

Washington

1908

Londres

Royaume-Uni

Londres

SELECT anne, lieu, pays, capitale


FROM JO, PAYS
WHERE JO.pays = PAYS.nom ;

18

Jointure sur la mme table

Comment comparer les populations des pays?


?? Toutes les paires de pays telles que le premier
pays a une population plus grande que le
deuxime pays
SELECT P1.nom, P1.population, P2.nom, P2.population
FROM PAYS as P1, PAYS as P2
WHERE P1.population > P2.population;
NB: La table PAYS est renomme en P1 et P2 (alias)
19

Jointure sur la mme table


PAYS
nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

441

PAYS
nom

capitale

population

surface

Irlande

Dublin

70

Autriche

Vienne

83

Royaume-Uni

Londres

36

244

Suisse

Berne

41

USA

Washington

189

20

441

PAYS-P1
nom
Irlande
Autriche
RU
Suisse
USA
PAYS-P2
nom
Irlande
Autriche
RU
Suisse
USA

capitale
Dublin
Vienne
Londres
Berne

population
3
8
36
7
Washington
189
capitale
Dublin
Vienne
Londres
Berne

population
3
8
36
7
Washington
189

surface
70
83
244
41
441
surface
70
83
244
41
441

rsultat

SELECT P1.nom, P1.population,


P2.nom, P2.population
FROM PAYS P1, PAYS P2
WHERE P1.population > P2.population

P1.population > P2.population

nom-P1

pop-P1

nom-P2

pop-P2

Autriche

Irlande

Autriche

Suisse

RU

36

Irlande

RU

36

Autriche

RU

36

Suisse

7
21

Jointure externe

Jointure classique: on supprime les tuples qui ne vrifient


pas la condition de jointure
Jointure externe:

SELECT

SELECT

From A, B

From A LEFT OUTER JOIN B

Where A.x = B.y (+)

On A.x = B.y

A : table dominante

Dfinition dune table dominante et dune table subordonne


On garde toutes les lignes de la table dominante quon joint avec
null

Retourne tous les tuples de A

Attention: Mettre (+) pour toutes les conditions de jointure


22

Jointure externe

Right outer join:


SELECT

SELECT

From A, B

From A RIGHT OUTER JOIN B

Where A.x (+) = B.y

On A.x = B.y

Full outer join:


SELECT
From A FULL OUTER JOIN B
On A.x = B.y
23

Jointure externe
JO

anne
1896
1900
1904

1908

lieu

nom

pays

Athnes
Paris
St.Louis
Londres

PAYS
capitale population surface

Irlande
Autriche

Grce
France
USA

Dublin
Vienne
Londres
Berne

Royaume-Uni

Royaume-Uni

Suisse
USA

Washington

3
8
36
7
189

70
83
244
41
441

Rsultat

Table

dominante

anne

lieu

pays

capitale

1896

Grce

NULL

1900

Athnes
Paris

France

NULL

1904

St Louis

USA

Washington

1908

Londres

Royaume-Uni

Londres

SELECT anne, lieu, JO.pays, capitale


FROM JO LEFT OUTER JOIN PAYS
ON JO.pays = PAYS.nom;

24

SQL / Algbre union

En algbre :

RS

En SQL :
BlocR UNION BlocS
SELECT *
FROM R

Les tuples en double sont limins


du rsultat

UNION
SELECT *
FROM S
25

SQL / Algbre intersection

En algbre :

RS

En SQL :
BlocR INTERSECT BlocS
SELECT *
FROM R
INTERSECT

Les tuples en double sont limins


du rsultat

SELECT *
FROM S

26

SQL / Algbre diffrence

En algbre :

RS

En SQL :
BlocR MINUS BlocS
SELECT *
FROM R

Les tuples en double sont limins


du rsultat

MINUS
SELECT *
FROM S
27

Diffrences

En SQL :

Le rsultat d'une requte peut contenir


plusieurs occurrences dun n-uplet,
pour avoir une seule occurrence de chaque n-uplet
dans une relation : DISTINCT
z Exemple : select distinct nom
from Personne
z

Le rsultat d'une requte peut tre tri,


Il existe une valeur spciale dite indfinie
(NULL) utilise pour remplir un champ dont on
ne connat pas la valeur.

28

Remarques

En SQL, le produit cartsien est possible


sans renommer les attributs communs.
Ex

S).

: schma(RS) = A (de R), B (de R), B (de S), C (de

En SQL, si plusieurs attributs ont le mme


nom, pour rsoudre lambigut, on spcifie
la relation auquel lattribut appartient.
Ex

: select A, R.B, C
from R, S
29

Ecriture des
conditions

Oprateurs de comparaison

= gal

WHERE surface = 200

<> diffrent

WHERE capitale <> Paris

> plus grand que

WHERE population > 8

>= plus grand ou gal

WHERE population >= 8

< plus petit que

WHERE surface < 83

<= plus petit ou gal

WHERE surface <= 83

31

Oprateurs logiques

Tous les prdicats : AND

ex: WHERE population<10 AND surface<500

Un des prdicats : OR

ex: WHERE population<10 OR surface<500

Ngation de la condition : NOT


ex:

SELECT
P1.nom, P2.nom, P1.capitale
FROM
PAYS P1, PAYS P2
WHERE
P1.capitale = P2.capitale
AND NOT P1.nom = P2.nom ;
32

Expressions logiques

Combinaisons:
WHERE ( ensoleillement > 80% AND pluviosit < 200 )
OR temprature > 30
WHERE ensoleillement > 80% AND
( pluviosit < 200 OR temprature > 30 )

33

Appartenance un ensemble: IN

WHERE

monnaie = Pound
monnaie = Schilling
monnaie = Franc

quivalent :

OR
OR

WHERE monnaie IN (Pound, Schilling, Franc)

NOT IN: non appartenance un ensemble


34

Comparaison un ensemble: ALL

SELECT * FROM Employee


WHERE salary >= 1400
AND salary >= 3000);

quivalent :
SELECT * FROM Employee
WHERE salary >= ALL ( 1400, 3000);
35

Valeur dans un intervalle: BETWEEN

WHERE population >= 50


population <= 60

AND

quivalent :
WHERE population BETWEEN 50 AND 60

NOT BETWEEN
36

Conditions partielles (wildcards)


% : zro ou nimporte quel caractre (x
caractres)

WHERE pays LIKE %lande

-> Irlande, Islande, Finlande, Hollande

WHERE pays LIKE %ran%

-> Iran, France

_ : exactement un caractre

WHERE pays LIKE I_lande

-> Irlande, Islande

NOT LIKE

37

Valeurs calcules

SELECT nom, population, surface, natalit


FROM

PAYS

WHERE (population * 1000 / surface) < 50


AND (population * natalit / surface) > 0

SELECT nom, ( population * 1000 / surface )


FROM

PAYS
Valeurs numriques: + - * /
Chaines de caractres:

38

NULL <> 0 !!!

Null = valeur inconnue ou non dfinie:

Pays ( nom , montagne )


SELECT nom
FROM

PAYS

WHERE montagne IS NULL

-> Pays Bas


NULL = Pas de valeur

39

Operations sur NULL

NULL dans conditions:

( population > 0 ) ?
z

( population = NULL ) ?
z

La

si population est NULL, le rsultat est "unknown" donc "false"

le test retourne toujours "false":

syntaxe correcte est: ( population IS NULL )

NULL dans expression arithmtique:

( population + NULL ) retourne NULL


40

Oprations sur NULL

NULL dans fonction SQL


Concat

(nom, '-', prnom) retourne NULL si


prnom null
Concat ( nom, '-', NVL(prenom,' ')) retourne 'dupont-'
z NVL(attribut,valeur de remplacement): retourne la
valeur de remplacement lorsque que la valeur de
lattribut est NULL.
z

Fonctions
z

d'agrgation ignorent les NULL:

Moyenne(1000, null, null, null, and 2000) =


(1000+2000)/2
41

Rsum

If A is:
10
10
10
10
NULL
NULL
NULL
NULL
NULL
NULL

Condition
a
a
a
a
a
a
a
a
a
a

IS NULL
IS NOT NULL
= NULL
!= NULL
IS NULL
IS NOT NULL
= NULL
!= NULL
= 10
!= 10

Evaluates to:
FALSE
TRUE
UNKNOWN
UNKNOWN
TRUE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
UNKNOWN
42

Requtes avec blocs


embots

BD Exemple : Livraisons
P ( np , nomp , couleur , poids , prix ) les produits
U ( nu , nomu , ville , pays )
F ( nf , nomf , type , ville , pays )
PUF ( np, nu, nf , quantit )

les usines
les fournisseurs
les livraisons

np, nu, nf dans PUF sont des identifiants externes


sur P, U et F (respectivement)

44

Jointure par blocs embots : IN ()


Nom et couleur des produits livrs par le fournisseur 1
Solution 1 : la jointure dclarative
SELECT nomp, couleur FROM P, PUF
WHERE PUF.np = P.np AND nf = 1 ;

Solution 2 : la jointure procdurale (par embotement)

SELECT nomp, couleur


Outer
query FROM P
WHERE np IN
( SELECT np
Nested
FROM PUF
query
WHERE nf = 1) ;

2. Nom et
couleur des
produits du
fournisseur 1
1. Ensemble
des produits
livrs par le
fournisseur 1
45

Jointure par blocs embots : IN ()

SELECT nomp, couleur FROM P


WHERE np IN
( SELECT np
FROM PUF
WHERE nf = 1) ;
IN compare chaque valeur de np avec l'ensemble
(ou multi-ensemble) de valeurs retourn par la
sous-requte
IN peut aussi comparer un tuple de valeurs:
SELECT

nu FROM U
WHERE (ville, pays) IN (SELECT ville, pays FROM F)
46

Composition de conditions
Nom des fournisseurs qui approvisionnent une usine de
Londres ou de Paris en un produit rouge
SELECT nomf FROM F
WHERE nf IN
(SELECT nf FROM PUF
WHERE np IN
(SELECT np FROM P

SELECT nomf
FROM PUF, P, F, U
WHERE couleur = 'rouge'
AND PUF.np = P.np
AND PUF.nf = F.nf
AND PUF.nu = U.nu

AND (U.ville = 'Londres'


WHERE couleur = 'rouge')
OR U.ville = 'Paris');
AND nu IN
(SELECT nu FROM U
WHERE ville = 'Londres' OR ville = 'Paris') ) ;
47

Quantificateurs : ANY (ou SOME)


Numro des fournisseurs de produits rouges:
SELECT nf
FROM PUF
WHERE np = ANY ( SELECT np FROM P
WHERE couleur = 'rouge' ) ;
Equivalent au IN: Existe t'il dans l'ensemble au moins un
lment qui vrifie la condition?
Numro des fournisseurs fournissant des produits dont le
numro est infrieur au numro des produits pesant plus
dune tonne:
SELECT nf
FROM PUF
WHERE np < ANY ( SELECT np FROM P
WHERE poids > 1000 ) ;

48

Quantificateurs : ALL
Numros des fournisseurs qui ne fournissent que des
produits rouges
ALL: tous les lments de l'ensemble
doivent vrifier la condition
SELECT nf
FROM F
WHERE 'rouge' = ALL
( SELECT couleur
FROM P
WHERE np IN

La requte imbrique est


r-value pour chaque
tuple de la requte (ici
pour chaque nf)

( SELECT np
FROM PUF
WHERE PUF.nf = F.nf ) ) ;
49

Conditions sur des ensembles: EXISTS

Test si lensemble nest pas vide (E )

Noms des fournisseurs qui fournissent au moins


un produit rouge

SELECT nomf
FROM F
ce fournisseur
WHERE EXISTS
( SELECT *
FROM
PUF, P
WHERE PUF.nf = F.nf
AND PUF.np = P.np
Produit fourni
AND P.couleur = 'rouge' )50;
est rouge

Recapitulation: blocs embots


attr IN requte

attr NOT IN requte

condition vrai si vrifie pour une des valeurs


retourne par la requte

attr oprateur ANY requte

condition vrai si vrifie pour au moins une des valeurs


retourne par la requte

attr oprateur ALL reqete

condition vrai si vrifie pour toutes les valeurs


retournes par la requte

EXISTS requte

NOT EXISTS requte

Teste si lensemble nest pas vide

51

Traitement des
rsultats

Fonctions sur des colonnes

Attributs calculs
Ex:

SELECT nom, population*1000/surface FROM PAYS

Oprateurs sur attributs numriques


SUM:
AVG:

somme des valeurs des tuples slectionns


moyenne

Oprateurs sur tous types dattributs

Oprateur
agrgation

MIN:

minimum
MAX:
maximum
COUNT: nombre de tuples slectionns
53

PAYS
nom
capitale population surface continent
Irlande
Dublin
3
70
Europe
Autriche
Vienne
8
83
Europe
R-Uni
Londres
36
244
Europe
Suisse
Berne
7
41
Europe
USA
Washington
189
441
Amerique
Retourne un tuple avec:

SELECT MIN(population),
MAX(population),
AVG(population),
SUM(surface),
COUNT(*)
FROM PAYS
WHERE continent = Europe

- la pop. du plus petit pays dEurope,


- la pop. du plus grand,
- la moyenne des pop. de tous les pays
dEurope,
- la somme des surfaces des pays
dEurope
- le nombre de pays dEurope
54

DISTINCT
PAYS
nom

capitale

population surface

Irlande
Dublin
Autriche
Vienne
R-Uni
Londres
Suisse
Berne
USA
Washington

3
8
36
7
189

70
83
244
41
441

continent
Europe
Europe
Europe
Europe
Amerique

Suppression des doubles:


SELECT DISTINCT continent
FROM PAYS

Europe
Amerique

55

PAYS

ORDER BY
Tri des

nom

capitale population surface continent

Irlande

Dublin

70

Europe

Autriche

Vienne

83

Europe

R-Uni

Londres

36

244

Europe

Suisse

Berne

41

Europe

USA

Washington

189

441

Amerique

tuples du
rsultat

SELECT continent, nom, population

rsultat
continent population

FROM PAYS
WHERE surface > 60
ORDER BY continent, nom DESC
ASC/DESC

nom

Europe

36

Royaume-Uni

Europe

Irlande

Europe

Autriche

Amerique

189

USA

56

PAYS
nom

capitale

Irlande

Dublin

70

Europe

Autriche

Vienne

83

Europe

Royaume-Uni

Londres

36

244

Europe

Suisse

Berne

41

Europe

USA

Washington

189

441

Amerique

GROUP BY

population surface

continent

Partition de lensemble des tuples en groupes


homognes
SELECT

continent, MIN(population), MAX(population),


AVG(population), SUM(surface), COUNT(*)
FROM PAYS
GROUP BY continent ;
rsultat

un tuple par
continent

continent MIN(pop) MAX(pop)

AVG(pop) SUM(surf)

Europe

36

13,5

438

Amerique

189

189

189

441

COUNT
4

57

Condition HAVING

SELECT FROM WHERE GROUP BY HAVING


<condition>
Partition de lensemble des tuples en groupes homognes

SELECT continent, SUM(population)


FROM PAYS GROUP BY continent
HAVING SUM(surface) > 439 ;

Attention la condition ne porte pas sur chaque tuple de la


table comme pour le where mais sur lensemble des tuples
dun groupe:

On retourne la population totale par continent, tel que chaque


continent a une superficie > 439
rsultat

un tuple par
continent

continent SUM(pop)
Europe

54

Amerique

189

58

Attention
SELECT surface, MIN(population)
FROM Pays
WHERE continent = Europe;

Requte incorrecte !
Rgle: chaque attribut dans clause SELECT est inclus dans
oprateur dagrgation ou inclus dans clause GROUP BY

59

Renommage du nom des attributs:


AS
SELECT MIN(population) AS min_pop,
MAX(population) AS max_pop,
AVG(population) AS avg_pop,
SUM(surface)

AS sum_surface,

COUNT(*)

AS count

FROM PAYS
WHERE continent = Europe ;
60

Langage de
Manipulation de
donnes

Manipulation des donnes

INSERT INTO: ajouter un tuple dans une


table ou vue

UPDATE: changer les tuples dune table ou


vue

DELETE FROM: liminer les tuples dune


table ou vue
62

INSERT INTO

INSERT INTO olympics


VALUES (1996, Atlanta, U.S.A)

1996

Atlanta

U.S.A.

1996

Atlanta

null

INSERT INTO olympics


(year, location)
VALUES (1996, Atlanta)

63

INSERT

INSERT INTO {nom_table nom_vue}


[ (nom_col)* ]
{ VALUES (valeur)* sous-requte };

64

UPDATE

UPDATE country
SET capital = Londres
WHERE country = Ireland
UPDATE country
SET drive = L, rainfall = rainfall/2
WHERE country <> France AND drive = R

65

UPDATE
UPDATE {nom_table nom_vue}
SET { (nom_col)* = (sous-requte)
nom_col = { valeur (sous-requte)} }*
WHERE condition;

66

DELETE FROM

DELETE FROM country


WHERE population > 50

-> liminer les pays dont la population est > 50

DELETE FROM country

-> la fin du Monde


67

DELETE

DELETE FROM {nom_table nom_vue}


WHERE condition;

68

S-ar putea să vă placă și