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

Opérateurs de synthèse sur les champs numériques
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.

Opérateurs concernant les champs textes
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 

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

Aristeri.com est le site de Bernard Andruccioli Mentions légales -
/?rubrique=SQL_CalculerResource id #14