Calculer à partir des données.
La règle en matière de base de données consiste à ne pas sauvegarder des éléments calculés, mais qui sont disponibles à chaque fois que l'on en a besoin. On peut donc créer des champs (colonnes) qui contiennent des informations calculées à partir de colonnes disposant de données quantitatives. Il est également possible de disposer d'informations synthétiques concernant une colonne.
Création de colonnes (champs) calculé(e)s
Les prix des ouvrages sont en €; Nous allons les convertir en francs (1€=6.55957 F)
SELECT titre, prix*6.55967 FROM livre
titre | prix*6.55967 |
Les Modernes | 45.91769 |
Les désillusions du progrès | 78.71604 |
Un plat qui se mange froid | 39.35802 |
Moon | 144.31274 |
Statistiques descriptives | 163.99175 |
Introduction à la philosophie politique | 0.00000 |
L'étranger | 26.23868 |
La peste | 52.47736 |
Au bonheur des dames | 45.91769 |
Le premier aigle | 45.91769 |
La peau de chagrin | 52.47736 |
Eugénie grandet | 45.91769 |
L'amant | 65.59670 |
Un barrage contre le pacifique | 39.35802 |
La vie devant soi | 59.03703 |
sql | 52.47736 |
MySQL | 0.00000 |
La debâcle | 39.35802 |
Le tourisme à la Martinique : sous la plage, les conflits | 98.39505 |
Le père Goriot | 45.91769 |
Nana | 45.91769 |
Le prix en francs n'est pas sauvegardé, mais est disponible à la demande.
On remarque donc que les champs contenant des valeurs numériques sont concernés par les opérateurs clasiques (+ - * /) soit entre eux, soit en introduisant une constante comme ci-dessus. Des fonctions également très conues peuvent leur être appliquées: ABS() (Valeur absolue) , COS() (Cosinus), SIN() (Sinus), PI() (Renvoie la valeur de pi) , EXP() (Exponentielle), SQRT() (Racine carrée), TAN() (Tangente).
Certains calculs nécessitent la connaissance d'opérateurs; Ainsi l'opérateur CONCAT permet d'effectuer une concaténation du contenu de deux colonnes: nom de l'auteur et le siecle au cours duquel il a écrit.
SELECT CONCAT(nom , siecle) FROM auteur
CONCAT(nom , siecle) |
perry20-21 ème |
hillerman20-21 ème |
camus20 ème |
balzac19 ème |
zola19 ème |
duras20 ème |
aron20 ème |
aron20 ème |
gary20 ème |
py20 ème |
grais20 ème |
jonquet20-21 ème |
forta20-21 ème |
dubois20-21 ème |
perry20 ème |
Opérateurs concernant les éléments calculés
AVG() | Moyenne |
COUNT() | Compte le nombre de lignes |
MAX() | Maximum |
MIN() | Minimum |
MOD() | Reste de la division |
SUM() | Somme |
VAR() | Variance |
STDDEV() | Ecart type |
SIGN() | Renvoie le signe d'un champ |
ABSVAL() | Valeur absolue |
TRUNCATE() | Limite le nombre de décimales sans arrondir. |
ROUND() | Arrondi avec précision demandée |
Ces opérateurx nécessitent parfois des instructions de regroupement qui seront abordées plus loin.
CONCAT() | Concaténation |
LCASE() ou LOWER() | Conversion en minuscule |
UCASE() ou UPPER() | Conversion en MAJUSCULES |
LENGHT() | Nombre de caractères |
LOCATE() | Position d'une sous-chaine dans une chaine de caractères |
LEFT() | n Premiers caractères à gauche d'une chaîne de caractères |
RIGHT() | n Premiers caractères à droite d'une chaîne de caractères |
SUBSTR() | Sous_chaîne du contenu d'un champs |
LTRIM() | Supprime les espaces à gauche d'une chaîne de caractères |
RTRIM() | Supprime les espaces à droite d'une chaîne de caractères |
SOUNDEX() | Retourne le SOUNDEX d'un champ |
Et vous vous posez la question suivante: qu'est-ce que le soundex? C'est en effet la bonne question! La fonction SOUNDEX() est basée sur un algorithme qui convertit toute chaîne de caractères en un code alphanumérique qui décrit la représentation phonétique de celle-ci. Ce code alphanumérique est alors bien pratique pour comparer les simulitudes et/ou les différences entre deux chaînes de caractères... Voyons cela sur un exempe pratique: nous souhaitons rechercher le nom d'un auteur mais nous ne sommes pas certain de connaître l'orthographe exacte de son nom. Par exemple nous cherchons le nom jonquet mais nous supposons qu'il s'écrit jonket.
SELECT nom, prenom FROM auteur WHERE SOUNDEX(nom) LIKE SOUNDEX('jonket')
nom | prenom |
jonquet | thierry |
Utilisons quelques fonctions:
Prix moyen d'un livre:
SELECT AVG(prix) FROM livre
AVG(prix) |
8.6190 |
L'intitulé de la colonne lors du retour n'est pas terrible, et son interprétaion réservée aux initiés... évitons cela avec un ALIAS de la manière suivante (rofitons en pour arondir à deux décimales):
SELECT ROUND(AVG(prix),2) AS Prix_Moyen FROM livre
Prix_Moyen |
8.62 |
C'est de suite plus clair.
Nombre d'auteurs
SELECT COUNT(*) FROM auteur
Nombre_Auteurs |
15 |
Combinons plusieurs de ces opérateurs: Le résultat fait bien comprendre l'objectif.
SELECT COUNT(*) as Nb_Livres, AVG(prix) AS Prix_Moyen, MAX(prix) AS Prix_Maxi, MIN(prix) AS Prix_Mini From livre
Nb_livres | Prix_Moyen | Prix_Maxi | Prix_Mini |
21 | 8.6190 | 25 | 0 |
A vous
Rappel du modèle:
auteur (id_auteur, nom, prenom, pseudo,
nationalite, siecle)
editeur (id_editeur, nom, adresse, collections)
genre (id_genre, type, precisions)
livre (code, titre, nb_pages, prix, #id_auteur,
#id_genre, #id_editeur)
Saisir les requêtes permettant d'obtenir les informations suivantes:
1 - Nombre moyen de pages par livre
2 - Prix en $ de chaque livre
3 - Nombre moyen de pages des ouvrages ayant chacun un nombre de pages supérieur à 200
4 - Prix moyen par page de chaque livre (4 décimales). On affichera le titre, le prix, le nombre de pages et ce prix par page (tri croissant sur ce dernier champ)
5 - Nom et prénoms des auteurs dont le nom ressemble à peri.
Saisir votre requête