Skip to content

Commit aed65ba

Browse files
author
0h My Goat
committed
feat: chapitre 4 ✨
1 parent c44b334 commit aed65ba

File tree

8 files changed

+616
-1
lines changed

8 files changed

+616
-1
lines changed

Espace Formateur

cours/04_vues-et-fonctions.slides.md

Lines changed: 359 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,359 @@
1+
---
2+
title: Template
3+
theme: solarized
4+
author: Alexandre Devos
5+
company: Octocorn
6+
contributors:
7+
- Alexandre Devos
8+
---
9+
10+
# SQL : Vues
11+
12+
![SQL](./assets/sql.png) <!-- .element width="30%" align="left" -->
13+
14+
![MySQL](./assets/mysql.png) <!-- .element width="30%" align="right" -->
15+
16+
17+
----
18+
19+
## Vues
20+
21+
### Définition
22+
23+
- Une vue est une requête SQL stockée dans la base de données.
24+
- Table virtuelle, dont les lignes sont issues d'une ou plusieurs tables de la base de données.
25+
26+
----
27+
28+
## Vues
29+
30+
### Autrement dit
31+
32+
- Créer une vue revient à créer une nouvelle table contenant le résultat d'une requête.
33+
- On pourra la manipuler comme une table classique.
34+
- Elle ne peut contenir que des `SELECT`.
35+
36+
----
37+
38+
## Vues
39+
40+
### Objectifs
41+
42+
- Eviter de dupliquer du code. (et de recréer des tables).
43+
- Simplifier les requêtes complexes.
44+
- On peut se baser sur une vue pour faire des opérations
45+
46+
----
47+
48+
## Vues
49+
50+
### Création
51+
52+
```sql
53+
CREATE VIEW nom_vue AS
54+
SELECT colonne1, colonne2, ...
55+
FROM table
56+
WHERE condition;
57+
```
58+
59+
----
60+
61+
## Vues
62+
63+
### Exemple
64+
65+
```sql
66+
CREATE VIEW `Promotions_en_cours` AS
67+
SELECT
68+
eleves.nom AS 'Nom',
69+
eleves.prenom as 'Prénom',
70+
TIMEDIFF(NOW(), date_naissance) AS 'Age',
71+
classes.annee AS Promotion
72+
FROM eleves
73+
LEFT JOIN classes ON eleves.classe_id = classes.id
74+
WHERE classes.annee = 2024
75+
```
76+
77+
> Que contiendra cette vue ?
78+
79+
----
80+
81+
## Vues
82+
83+
### Exemple
84+
85+
- On pourra ensuite utiliser cette vue comme une table classique.
86+
87+
```sql
88+
SELECT * FROM `Promotions_en_cours`
89+
```
90+
91+
----
92+
93+
## Vues
94+
95+
### Quelques précisions
96+
97+
- Utilisez des alias pour les colonnes, surtout en cas de doublons.
98+
- La requête ne doit pas faire référence à des variables locales.
99+
- Les tables doivent exister avant de créer la vue.
100+
- La vue ne peut pas contenir de sous requête `SELECT` dans la clause `FROM`.
101+
102+
---
103+
104+
## Fonctions
105+
106+
107+
![SQL](./assets/sql.png) <!-- .element width="30%" align="left" -->
108+
109+
![MySQL](./assets/mysql.png) <!-- .element width="30%" align="right" -->
110+
111+
----
112+
113+
## Fonctions
114+
115+
### Définition
116+
117+
- Une fonction est un bloc de code qui effectue une tâche spécifique.
118+
- SQL propose de nombreuses fonctions, ayant chacune un rôle bien précis.
119+
- Il en existe deux types : les fonctions d'**agrégation** et les fonctions **scalaires**.
120+
121+
----
122+
123+
## Fonctions Scalaires
124+
125+
### Définition
126+
127+
- Une fonction scalaire est une fonction qui concerne une seule valeur.
128+
- Elle permet de manipuler des données.
129+
- Elle ne retourne qu'une seule valeur.
130+
- Elle peut être utilisée dans une requête SQL comme une colonne.
131+
132+
----
133+
134+
## Fonctions Scalaires
135+
136+
### Arrondis
137+
138+
```mysql
139+
SELECT ROUND(12.345, 2); -- Arrondi à x (2) décimales
140+
SELECT CEIL(12.345); -- Arrondit supérieur
141+
SELECT FLOOR(12.345); -- Arrondit inférieur
142+
SELECT TRUNCATE(12.345, 2); -- Tronque à x (2) décimales
143+
```
144+
145+
----
146+
147+
## Fonctions Scalaires
148+
149+
### Exposants et racies
150+
151+
```mysql
152+
SELECT POW(2, 3); -- 2 puissance 3
153+
SELECT SQRT(9); -- Racine carrée
154+
```
155+
156+
----
157+
158+
## Fonctions Scalaires
159+
160+
### Autres
161+
162+
```mysql
163+
SELECT SIGN(-12); -- Renvoie -1 si négatif, 0 si nul, 1 si positif
164+
SELECT ABS(-12); -- Renvoie la valeur absolue
165+
SELECT MOD(12, 5); -- Renvoie le reste de la division euclidienne
166+
```
167+
168+
----
169+
170+
## Fonctions Scalaires
171+
172+
### Longueur des chaines
173+
174+
```mysql
175+
SELECT LENGTH('Hello'); -- Renvoie le nombre d'octets
176+
SELECT CHAR_LENGTH('Hello'); -- Renvoie le nombre de caractères
177+
SELECT BIT_LENGTH('Hello'); -- Renvoie le nombre de bits
178+
```
179+
180+
> 1 octet = 8 bits = 1 caractère
181+
182+
----
183+
184+
## Fonctions Scalaires
185+
186+
### TRIM
187+
188+
- Supprime des caractères en début et fin de chaine.
189+
190+
```mysql
191+
-- Espaces avant et après
192+
SELECT TRIM(' Octocorn ') AS both_espace,
193+
-- Espaces avant
194+
TRIM(LEADING FROM ' Octocorn ') AS lead_espace,
195+
-- Espaces après
196+
TRIM(TRAILING FROM ' Octocorn ') AS trail_espace,
197+
198+
-- e avant et après
199+
TRIM('e' FROM 'eeeeOctocorneeee') AS both_e,
200+
-- e avant
201+
TRIM(LEADING 'e' FROM 'eeeOctocorneee') AS lead_e,
202+
-- e après
203+
TRIM(BOTH 'e' FROM 'eeeOctocorneee') AS both_e,
204+
```
205+
206+
----
207+
208+
## Fonctions Scalaires
209+
210+
### SUBSTRING
211+
212+
- Renvoie une sous chaine de caractères.
213+
214+
```mysql
215+
SELECT SUBSTRING('Octocorn', 2) AS from2,
216+
-- Affiche après avoir sauté 1 caractères
217+
SUBSTRING('Octocorn' FROM 3) AS from3,
218+
-- Affiche à partir du troisième caractère
219+
SUBSTRING('Octocorn', 2, 3) AS from2long3,
220+
-- Affiche 3 caractères à partir du second
221+
SUBSTRING('Octocorn' FROM 3 FOR 1) AS from3long1;
222+
-- Affiche 1 caractère à partir du troisième
223+
```
224+
225+
----
226+
227+
## Fonctions Scalaires
228+
229+
### Changer la casse
230+
231+
```mysql
232+
SELECT UPPER('Octocorn') AS upper, -- En majuscules
233+
LOWER('Octocorn') AS lower, -- En minuscules
234+
```
235+
236+
> On peut aussi utiliser `UCASE` et `LCASE`
237+
238+
----
239+
240+
## Fonctions Scalaires
241+
242+
### LEFT et RIGHT
243+
244+
- Renvoie une sous chaine de caractères.
245+
246+
```mysql
247+
SELECT LEFT('Octocorn', 2) AS left, -- 2 premiers caractères
248+
RIGHT('Octocorn', 2) AS right; -- 2 derniers caractères
249+
```
250+
251+
----
252+
253+
## Fonctions Scalaires
254+
255+
### Et d'autres !
256+
257+
- `REVERSE` : Inverse une chaine de caractères.
258+
- `REPEAT` : Répète une chaine de caractères.
259+
- `REPLACE` : Remplace une chaine de caractères.
260+
- `INSERT` : Insère une chaine de caractères.
261+
262+
----
263+
264+
## Fonctions d'agrégation
265+
266+
### Définition
267+
268+
- Une fonction d'agrégation est une fonction qui concerne un ensemble de valeurs.
269+
- Elles permettent entre autres de faire des statistiques, générer des totaux, groupements, etc.
270+
271+
> Ecoutez bien, car vous allez avoir besoin de ces fonctions pour vos exercices !
272+
273+
----
274+
275+
## Fonctions
276+
277+
### Compter
278+
279+
```mysql
280+
SELECT COUNT(*) AS nb_eleves FROM eleves; -- Nombre d'élèves
281+
SELECT COUNT(DISTINCT classe_id) AS nb_classes FROM eleves; -- Nombre de classes
282+
```
283+
284+
----
285+
286+
## Fonctions
287+
288+
### MIN et MAX
289+
290+
```mysql
291+
SELECT MIN(date_naissance) AS min_date FROM eleves; -- Date de naissance la plus ancienne
292+
SELECT MAX(date_naissance) AS max_date FROM eleves; -- Date de naissance la plus récente
293+
SELECT SUM(age) AS sum_age FROM eleves; -- Somme des âges
294+
SELECT AVG(age) AS avg_age FROM eleves; -- Moyenne des âges
295+
```
296+
297+
----
298+
299+
## Fonctions
300+
301+
### GROUP BY
302+
303+
- Permet de grouper les résultats selon une colonne.
304+
- Elimine les doublons.
305+
306+
```mysql
307+
SELECT classe_id,
308+
COUNT(*) AS nb_eleves
309+
FROM eleves
310+
GROUP BY classe_id;
311+
```
312+
313+
> Que comprenez vous ici ?
314+
315+
----
316+
317+
## Fonctions
318+
319+
### GROUP BY
320+
321+
```mysql
322+
SELECT classe_id,
323+
COUNT(*) AS nb_eleves
324+
FROM eleves
325+
GROUP BY classe_id;
326+
```
327+
328+
Ici, nous avons le nombre d'élèves par classe, tout simplement.
329+
330+
----
331+
332+
## Fonctions
333+
334+
### HAVING
335+
336+
- Permet de filtrer les résultats d'un `GROUP BY`.
337+
- Remplace le `WHERE` dans ce cas.
338+
339+
```mysql
340+
SELECT classe_id,
341+
COUNT(*) AS nb_eleves
342+
FROM eleves
343+
GROUP BY classe_id
344+
HAVING nb_eleves > 2;
345+
```
346+
347+
> N'affichera que les classes de plus de 2 élèves.
348+
349+
----
350+
351+
## A vous de jouer !
352+
353+
Réalisez la partie 2 du TP Beer !
354+
355+
----
356+
357+
## La suite !
358+
359+
[index](index.html)

0 commit comments

Comments
 (0)