• Aucun résultat trouvé

Bases de données (2/4)

N/A
N/A
Protected

Academic year: 2022

Partager "Bases de données (2/4)"

Copied!
61
0
0

Texte intégral

(1)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Bases de données (2/4)

SQL avant la théorie

Stéphane Gonnord, Laurent Jouhet

Lycée du parc - Lyon

(2)

2

Plan

Contexte global Requêtes SQL

Format général Sélection, projection Opérations ensemblistes Joindre deux tables

Produit cartésien : non ! Jointure

Utilité des clés Calculs d’agrégats

Principe Formellement Exercices Exercices Finalement...

(3)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Rappels : Structured Query Language

• Base de donnée : ensemble de tables/relations.

• Communes

• Départements

• Régions

• Table/relation : ensemble den-uplets/lignes/tuples ayant tous la mêmestructure/le même schéma.

... ... ... ...

1198 1 Joyeux 223

... ... ... ...

69123 69 Lyon 484344

... ... ... ...

• Schéma relationnel : décrit la structure des tables d’une base

commune(id:entier, dep:texte, nom:texte, pop:entier)

(4)

3

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Rappels : Structured Query Language

• Base de donnée : ensemble de tables/relations.

• Communes

• Départements

• Régions

• Table/relation : ensemble den-uplets/lignes/tuples ayant tous la mêmestructure/le même schéma.

... ... ... ...

1198 1 Joyeux 223

... ... ... ...

69123 69 Lyon 484344

... ... ... ...

(5)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Rappels : Structured Query Language

• Base de donnée : ensemble de tables/relations.

• Communes

• Départements

• Régions

• Table/relation : ensemble den-uplets/lignes/tuples ayant tous la mêmestructure/le même schéma.

... ... ... ...

1198 1 Joyeux 223

... ... ... ...

69123 69 Lyon 484344

... ... ... ...

• Schéma relationnel : décrit la structure des tables d’une base

commune(id:entier, dep:texte, nom:texte, pop:entier)

(6)

4

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Autres exemples

• Prénoms

• Schéma relationnel :

(prenom:texte, classe:entier, sexe:texte)

(’Olivier’, 842, ’M’)

• Communes/départements/régions

• Schéma relationnel (3 tables) :

• communes(id:texte, dep:texte, nom:texte, pop:entier)

• departements(id:texte, reg:entier, nom:texte)

• regions(id:entier, nom:texte)

• Exemples de lignes/tuples :

(’2A041’, ’2A’, ’Bonifacio’, 2955)

(’2A’, 94, ’Corse-du-Sud’)

(94, ’Corse’)

(7)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Autres exemples

• Prénoms

• Schéma relationnel :

(prenom:texte, classe:entier, sexe:texte)

• Exemples de ligne :

(’Pierre’, 843, ’M’) (’Olivier’, 842, ’M’)

• Communes/départements/régions

• Schéma relationnel (3 tables) :

• communes(id:texte, dep:texte, nom:texte, pop:entier)

• departements(id:texte, reg:entier, nom:texte)

• regions(id:entier, nom:texte)

• Exemples de lignes/tuples :

(’2A041’, ’2A’, ’Bonifacio’, 2955)

(’2A’, 94, ’Corse-du-Sud’)

(94, ’Corse’)

(8)

4

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Autres exemples

• Prénoms

• Schéma relationnel :

(prenom:texte, classe:entier, sexe:texte)

• Exemples de ligne :

(’Pierre’, 843, ’M’) (’Olivier’, 842, ’M’)

• Communes/départements/régions

• Schéma relationnel (3 tables) :

• communes(id:texte, dep:texte, nom:texte, pop:entier)

• departements(id:texte, reg:entier, nom:texte)

• regions(id:entier, nom:texte)

(94, ’Corse’)

(9)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Autres exemples

• Prénoms

• Schéma relationnel :

(prenom:texte, classe:entier, sexe:texte)

• Exemples de ligne :

(’Pierre’, 843, ’M’) (’Olivier’, 842, ’M’)

• Communes/départements/régions

• Schéma relationnel (3 tables) :

• communes(id:texte, dep:texte, nom:texte, pop:entier)

• departements(id:texte, reg:entier, nom:texte)

• regions(id:entier, nom:texte)

• Exemples de lignes/tuples :

(’2A041’, ’2A’, ’Bonifacio’, 2955)

(’2A’, 94, ’Corse-du-Sud’)

(10)

5

Communes, régions et départements

commune

id dep nom pop

. . . . . . . . . . . .

69023 69 Lyon 484344

. . . . . . . . . . . .

2BO50 2B Calvi 5394

. . . . . . . . . . . .

departement

id reg nom

. . . . . . . . .

69 82 Rhône

. . . . . . . . . 2B 94 Haute-Corse . . . . . . . . .

region

id nom

. . . . . .

82 Auvergne-Rhône-Alpes

. . . . . .

94 Corse

. . . . . .

(11)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Élèves, colleurs et colles

eleves

id nom prenom

0 Lyons Jacques-Louis

1 Laurent Jean

. . . . . . . . .

profs

id nom prenom

0 Théron Pierre

1 Brun Jules

. . . . . . . . .

colles

prof eleve semaine note

2 8 1 16

1 0 6 19

. . . . . . . . . . . .

(12)

6

Élèves, colleurs et colles

eleves

id nom prenom

0 Lyons Jacques-Louis

1 Laurent Jean

. . . . . . . . .

profs

id nom prenom

0 Théron Pierre

1 Brun Jules

. . . . . . . . .

colles

prof eleve semaine note

2 8 1 16

1 0 6 19

. . . . . . . . . . . .

(13)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

SQL, DDL, DML : ? ? ?

• SQL :Structured Query Language(« sequel »).

• DDL : Data Definition Language.

CREATE

,

DROP

.Pour créer/supprimer une table dans une BD, selon un schéma relationnel.

• DML : Data Manipulation Language.

INSERT

,

UPDATE

,

DELETE

. Pour alimenter les tables d’une BD : nouvelle ligne, suppression, modification.

• Interrogation des données:

SELECT

.Pour faire une requête.

(14)

7

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

SQL, DDL, DML : ? ? ?

• SQL :Structured Query Language(« sequel »).

• DDL : Data Definition Language.

CREATE

,

DROP

.Pour créer/supprimer une table dans une BD, selon un schéma relationnel.

modification.

• Interrogation des données:

SELECT

.Pour faire une requête.

(15)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

SQL, DDL, DML : ? ? ?

• SQL :Structured Query Language(« sequel »).

• DDL : Data Definition Language.

CREATE

,

DROP

.Pour créer/supprimer une table dans une BD, selon un schéma relationnel.

• DML : Data Manipulation Language.

INSERT

,

UPDATE

,

DELETE

. Pour alimenter les tables d’une BD : nouvelle ligne, suppression, modification.

• Interrogation des données:

SELECT

.Pour faire une requête.

(16)

7

SQL, DDL, DML : ? ? ?

• SQL :Structured Query Language(« sequel »).

• DDL : Data Definition Language.

CREATE

,

DROP

.Pour créer/supprimer une table dans une BD, selon un schéma relationnel.

• DML : Data Manipulation Language.

INSERT

,

UPDATE

,

DELETE

. Pour alimenter les tables d’une BD : nouvelle ligne, suppression, modification.

• Interrogation des données:

SELECT

.Pour faire une requête.

(17)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Format général : à connaître !

SELECT <attributs>, <calculs d’agrégats>

FROM <tables>

JOIN ... ON ...

WHERE <conditions>

GROUP BY <attributs>

HAVING <conditions>

ORDER BY <attribut> ASC, <attribut> DESC

Dans telles tables, tu prends les lignes vérifiant telles conditions ; tu les groupes selon tels critères. Dans les groupes, tu vas juste prendre ceux dont telle moyenne (par exemple) sur tel attribut vérifie telle condition.

Ah et puis tu vas me donner le résultat sous forme triée selon tels attributs !

(18)

8

Format général : à connaître !

SELECT <attributs>, <calculs d’agrégats>

FROM <tables>

JOIN ... ON ...

WHERE <conditions>

GROUP BY <attributs>

HAVING <conditions>

ORDER BY <attribut> ASC, <attribut> DESC

Dans telles tables, tu prends les lignes vérifiant telles conditions ; tu les groupes selon tels critères. Dans les groupes, tu vas juste prendre ceux dont telle moyenne (par exemple) sur tel attribut vérifie telle condition.

Ah et puis tu vas me donner le résultat sous forme triée selon tels attributs !

(19)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Un exemple musclé

Ouch !

SELECT eleve, eleves.nom, COUNT(*) AS plantages FROM eleves

JOIN colles ON eleve = ide WHERE note < 8

GROUP BY eleve HAVING plantages = 5 ORDER BY plantages

Alors, que vient-on de demander ?

Don’t panic... on va commencer par des choses plus simples !

(20)

9

Un exemple musclé

Ouch !

SELECT eleve, eleves.nom, COUNT(*) AS plantages FROM eleves

JOIN colles ON eleve = ide WHERE note < 8

GROUP BY eleve HAVING plantages = 5 ORDER BY plantages

Alors, que vient-on de demander ?

Don’t panic... on va commencer par des choses plus simples !

(21)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Sélection, projection

• Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

• Exemples :

• SELECT * -- tous les attributs

FROM communes

• SELECT nom, pop FROM communes

• SELECT nom, pop FROM communes WHERE pop > 100000

• SELECT * FROM triangles

WHERE ab = bc AND bc = ac -- un seul =

(22)

10

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Sélection, projection

• Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

• Exemples :

• SELECT * -- tous les attributs

FROM communes

SELECT nom, pop FROM communes WHERE pop > 100000

• SELECT * FROM triangles

WHERE ab = bc AND bc = ac -- un seul =

(23)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Sélection, projection

• Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

• Exemples :

• SELECT * -- tous les attributs

FROM communes

• SELECT nom, pop FROM communes

• SELECT nom, pop FROM communes WHERE pop > 100000

• SELECT * FROM triangles

WHERE ab = bc AND bc = ac -- un seul =

(24)

10

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Sélection, projection

• Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

• Exemples :

• SELECT * -- tous les attributs

FROM communes

• SELECT nom, pop FROM communes

• SELECT nom, pop FROM communes WHERE pop > 100000

(25)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Sélection, projection

• Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

• Exemples :

• SELECT * -- tous les attributs

FROM communes

• SELECT nom, pop FROM communes

• SELECT nom, pop FROM communes WHERE pop > 100000

• SELECT * FROM triangles

(26)

11

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ... UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(27)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

• Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ... UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(28)

11

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(29)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

• Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ...

UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?

n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(30)

11

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

• Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ...

UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(31)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

• Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ...

UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(32)

11

Opérations ensemblistes

• Union, intersection, différence : Bof...

• Rarement utile en pratique

• Mais au programme !

• Attention à ne pas écrire n’importe quoi (torchons, serviettes...)

• SQL :

SELECT ... FROM ...

UNION

SELECT ... FROM ...

SELECT ... FROM ... INTERSECT SELECT ... FROM ...

SELECT ... FROM ... EXCEPT SELECT ... FROM ...

• Et si les attributs sont différents ?n’importe quoi

• Produit cartésien :

• Définition : comme en maths :

A×B={(a,b)|a∈Aetb∈B}

• SQL : pas comme en maths ! SELECT * from table1 , table2

(33)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

De l’inutilité du produit cartésien

• Deux tables :

commune

nom dep

Lyon 69

Calvi 2B Corte 2B

departement

id nom

69 Rhône

2B Haute-Corse

• Et leur produit :

commune×departement

nom dep id nom

Lyon 69 69 Rhône

Lyon 69 2B Haute-Corse

Calvi 2B 69 Rhône

Calvi 2B 2B Haute-Corse

Corte 2B 69 Rhône

Corte 2B 2B Haute-Corse

(34)

12

De l’inutilité du produit cartésien

• Deux tables :

commune

nom dep

Lyon 69

Calvi 2B Corte 2B

departement

id nom

69 Rhône

2B Haute-Corse

• Et leur produit :

commune×departement

nom dep id nom

Lyon 69 69 Rhône

Lyon 69 2B Haute-Corse

Calvi 2B 69 Rhône

Calvi 2B 2B Haute-Corse

Corte 2B 69 Rhône

Corte 2B 2B Haute-Corse

(35)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Jointure

• Deux tables :

commune

nom dep

Lyon 69

Calvi 2B Corte 2B

departement

id nom

69 Rhône

2B Haute-Corse

• Et unejointurenaturelle :

communeondepartement

nom dep id nom

Lyon 69 69 Rhône

Calvi 2B 2B Haute-Corse Corte 2B 2B Haute-Corse

• Une base de données estpenséedès le départ autour des jointures de tables.

(36)

13

Jointure

• Deux tables :

commune

nom dep

Lyon 69

Calvi 2B Corte 2B

departement

id nom

69 Rhône

2B Haute-Corse

• Et unejointurenaturelle :

communeondepartement

nom dep id nom

Lyon 69 69 Rhône

Calvi 2B 2B Haute-Corse Corte 2B 2B Haute-Corse

• Une base de données estpenséedès le départ autour des jointures de tables.

(37)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Jointure

Formellement :R1 on

a=b

R2R1×R2... (cf.algèbre relationnelle)

Et siR1etR2ont deux attributs de même nom ?

En SQL : deux syntaxes équivalentes :

• SELECT ...

FROM table1 JOIN table2 ON condition WHERE...

• SELECT ...

FROM table1, table2 WHERE condition AND ...

SQL, encore :

• WHERE table1.foo = table2.bar

• SELECT ...

FROM table1 JOIN table2 JOIN table3 ON condition1 AND condition2 WHERE...

(38)

14

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Jointure

Formellement :R1 on

a=b

R2R1×R2... (cf.algèbre relationnelle)

Et siR1etR2ont deux attributs de même nom ?

FROM table1 JOIN table2 ON condition WHERE...

• SELECT ...

FROM table1, table2 WHERE condition AND ...

SQL, encore :

• WHERE table1.foo = table2.bar

• SELECT ...

FROM table1 JOIN table2 JOIN table3 ON condition1 AND condition2 WHERE...

(39)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Jointure

Formellement :R1 on

a=b

R2R1×R2... (cf.algèbre relationnelle)

Et siR1etR2ont deux attributs de même nom ?

En SQL : deux syntaxes équivalentes :

• SELECT ...

FROM table1 JOIN table2 ON condition WHERE...

• SELECT ...

FROM table1, table2 WHERE condition AND ...

SQL, encore :

• WHERE table1.foo = table2.bar

• SELECT ...

FROM table1 JOIN table2 JOIN table3 ON condition1 AND condition2 WHERE...

(40)

14

Jointure

Formellement :R1 on

a=b

R2R1×R2... (cf.algèbre relationnelle)

Et siR1etR2ont deux attributs de même nom ?

En SQL : deux syntaxes équivalentes :

• SELECT ...

FROM table1 JOIN table2 ON condition WHERE...

• SELECT ...

FROM table1, table2 WHERE condition AND ...

SQL, encore :

• WHERE table1.foo = table2.bar

• SELECT ...

FROM table1 JOIN table2 JOIN table3 ON condition1 AND condition2 WHERE...

(41)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(42)

15

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(43)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(44)

15

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(45)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(46)

15

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

(47)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exemples, utilité des clés

• Clé: ensemble d’attributs caractérisant les éléments d’une table.

• Clé primaire: attribut UNIQUE caractérisant les éléments d’une table.

• Bien avoir le schéma relationnel devant les yeux.

• Exemples :

• FROM communes JOIN departements -- Ne pas oublier SELECT ON communes.dep = departements.id

• FROM eleves JOIN colles ON ide = eleve

• FROM eleves JOIN colles JOIN profs ON ide = eleve AND prof = idp

• FROM clubs AS c1 JOIN matchs JOIN clubs AS c2 ON c1.idc = eq1 AND c2.idc = eq2

(48)

16

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

Principe :

1. On regroupe (en général) les lignes suivant des attributs ; 2. On applique unefonction d’agrégationà chacun de ces groupes.

3. On peut encore une fois sélectionner des lignes avec HAVING

SELECT reg, departements.nom, COUNT(*) FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

COUNT(*) va compter le nombre de lignes dans chaque groupe !

reg nom COUNT(*)

1 Guadeloupe 1

11 Seine-et-Marne 8

. . . . . . . . .

(49)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

Principe :

1. On regroupe (en général) les lignes suivant des attributs ; 2. On applique unefonction d’agrégationà chacun de ces groupes.

3. On peut encore une fois sélectionner des lignes avec HAVING

Fonctions :MIN, MAX, COUNT(...), AVG(...), SUM(...)

SQL :

SELECT reg, departements.nom, COUNT(*) FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

COUNT(*) va compter le nombre de lignes dans chaque groupe !

reg nom COUNT(*)

1 Guadeloupe 1

11 Seine-et-Marne 8

. . . . . . . . .

(50)

16

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

Principe :

1. On regroupe (en général) les lignes suivant des attributs ; 2. On applique unefonction d’agrégationà chacun de ces groupes.

3. On peut encore une fois sélectionner des lignes avec HAVING

Fonctions :MIN, MAX, COUNT(...), AVG(...), SUM(...)

SQL :

SELECT reg, departements.nom, COUNT(*) FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

1 Guadeloupe 1

11 Seine-et-Marne 8

. . . . . . . . .

(51)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

Principe :

1. On regroupe (en général) les lignes suivant des attributs ; 2. On applique unefonction d’agrégationà chacun de ces groupes.

3. On peut encore une fois sélectionner des lignes avec HAVING

Fonctions :MIN, MAX, COUNT(...), AVG(...), SUM(...)

SQL :

SELECT reg, departements.nom, COUNT(*) FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

COUNT(*) va compter le nombre de lignes dans chaque groupe !

reg nom COUNT(*)

1 Guadeloupe 1

11 Seine-et-Marne 8

(52)

17

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

• Condition en amont (

WHERE

) et/ou aval (

HAVING

)

SELECT reg, departements.nom, COUNT(*) AS nb_dep FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

HAVING nb_dep >= 5

24 Cher 6

. . . .

• À retenir :

Penser à projeter (SELECT) les attributs selon lesquels on a groupé (GROUP BY) les lignes.

(53)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Agrégats

• Condition en amont (

WHERE

) et/ou aval (

HAVING

)

SELECT reg, departements.nom, COUNT(*) AS nb_dep FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

HAVING nb_dep >= 5

reg nom count(*)

11 Seine-et-Marne 8

24 Cher 6

. . . .

• À retenir :

Penser à projeter (SELECT) les attributs selon lesquels on a groupé (GROUP BY) les lignes.

(54)

17

Agrégats

• Condition en amont (

WHERE

) et/ou aval (

HAVING

)

SELECT reg, departements.nom, COUNT(*) AS nb_dep FROM departements JOIN regions

ON reg = regions.id GROUP BY reg

HAVING nb_dep >= 5

reg nom count(*)

11 Seine-et-Marne 8

24 Cher 6

. . . .

• À retenir :

Penser à projeter (SELECT) les attributs selon lesquels on a groupé (GROUP BY) les lignes.

(55)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exercices

Avec les tables aux schémas relationnels déjà vus, déterminer...

• la note maximale parmi toutes les colles ;

SELECT MAX(note) FROM colles

• la note maximale parmi toutes les colles de Jaques-Louis Lions ;

SELECT MAX(note)

FROM colles JOIN eleves ON ide = eleve WHERE nom="Lions"

• la liste des moyennes des élèves ;

SELECT eleve, nom, AVG(note) FROM colles JOIN eleves

ON ide = eleve

GROUP BY eleve

(56)

18

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exercices

Avec les tables aux schémas relationnels déjà vus, déterminer...

• la note maximale parmi toutes les colles ;

SELECT MAX(note) FROM colles

• la note maximale parmi toutes les colles de Jaques-Louis Lions ;

ON ide = eleve WHERE nom="Lions"

• la liste des moyennes des élèves ;

SELECT eleve, nom, AVG(note) FROM colles JOIN eleves

ON ide = eleve

GROUP BY eleve

(57)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Exercices

Avec les tables aux schémas relationnels déjà vus, déterminer...

• la note maximale parmi toutes les colles ;

SELECT MAX(note) FROM colles

• la note maximale parmi toutes les colles de Jaques-Louis Lions ;

SELECT MAX(note)

FROM colles JOIN eleves ON ide = eleve WHERE nom="Lions"

• la liste des moyennes des élèves ;

SELECT eleve, nom, AVG(note) FROM colles JOIN eleves

ON ide = eleve

GROUP BY eleve

(58)

18

Exercices

Avec les tables aux schémas relationnels déjà vus, déterminer...

• la note maximale parmi toutes les colles ;

SELECT MAX(note) FROM colles

• la note maximale parmi toutes les colles de Jaques-Louis Lions ;

SELECT MAX(note)

FROM colles JOIN eleves ON ide = eleve WHERE nom="Lions"

• la liste des moyennes des élèves ;

SELECT eleve, nom, AVG(note) FROM colles JOIN eleves

ON ide = eleve

GROUP BY eleve

(59)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

• la liste des départements avec leur nombre de communes ;

SELECT dep, departements.nom, COUNT(*) FROM departements JOIN communes

ON dep = departements.id

GROUP BY dep

(60)

19

• la liste des départements avec leur nombre de communes ;

SELECT dep, departements.nom, COUNT(*) FROM departements JOIN communes

ON dep = departements.id

GROUP BY dep

(61)

Contexte global Requêtes SQL Joindre deux tables Calculs d’agrégats Finalement...

Un algorithme de conception de requêtes

Plusieurs passages sont possibles...

1.

SELECT

: quels attributs (et/ou agrégats) nous intéressent ? 2.

FROM

: issus de quelles tables ?

3.

JOIN ... ON

: si on jointntables, il y aa priori n−1 conditions de jointures.

4.

WHERE

: quelles conditions/restrictions en amont ?

5.

GROUP BY

: comment veut-on regrouper les tuples ?ajouter au

SELECT

.

6.

HAVING

: restrictions en aval, portant sur les agrégats.

7. Sous-requètes éventuelles, paramétrées ou non ; utilisation de Python...

Références

Documents relatifs

Exemple : Afficher tous les noms des employés qu’une seule fois. SELECT DISTINCT nom FROM employe. VII) Les groupes de

ALTER TABLE employee ADD CONSTRAINT nom CHECK (lname &lt;&gt; ’’ AND fname &lt;&gt; ’’);. -- ALTER TABLE DROP CONSTRAINT

Eastwood Clint Eastwood Clint Cumberbatch Benedict Freeman Martin Sellers Peter Sellers Peter Sellers Peter. SELECT ne retourne pas un ensemble de n-uplets mais en fait une liste

Eastwood Clint The good, the Bad and the Ugly Blondie Eastwood Clint Gran Torino Walt Kowalski Cumberbatch Benedict Study in Pink Sherlock Holmes Freeman Martin Study in Pink Dr

On peut les supprimer : SELECT DISTINCT nom , prenom FROM PERSONNE , JOUE WHERE id = idacteur ;.

Dans le langage SQL il est possible d’utiliser des alias pour renommer temporairement une colonne ou une table dans une requête. Cette astuce est particulièrement utile pour

– si un même type d’entité intervient plusieurs fois dans un même type d’association, on doit explicitement indiquer le rôle de chaque entité – si on a

NumEtud Nom Prenom Adresse DateNais Sexe NumCours NomCours NomProf NbHC NbHTD NbHTP NumEtud NumCours Note. E1