SECTEURS NOUVEAUX ? FIASCOS IDIOTS...
Après avoir vécu plusieurs années euphoriques, certaines Start Up Internet
sont actuellement à la peine. Car même si le marché des nouvelles technologies
est fabuleux, les perspectives de croissances phénoménales, les investisseurs
ont perdu de vue la notions la plus fondamentale de l'économie : une entreprise
doit être rentable. Et bizarrement, ce point était absent de très nombreux
Business Plan, Businness Plan ayant permis à ne nombreuses sociétés de
lever des sommes astronomiques. Certaines d'entre elles n'existaient et
ne communiquaient que pour plaire à leurs investisseurs, et n'avaient même
aucune activité commerciale.
La réaction des financiers est impitoyable : la majorité des investisseurs
stoppent maintenant leurs investissements, et demandent à leurs entreprises
d'être immédiatement rentables. Tout de suite. Et, comme nous sommes de
bon montons de Panurges, les valeurs boursières baissent, des projets très
prometteurs ne trouvent plus preneurs, et les décideurs affichent une frilosité
exagérée. On oublie que de nombreuses entreprises font déjà d'énormes bénéfices,
que le commerce électronique affiche de très bons chiffres pour l'an 2000,
et que ceux ci vont tripler dans les deux ans. Que nous sommes en train
de transposer tout notre modèle économique, notre façon de travailler,
et d'organiser différemment notre société. Et surtout que c'est un sacré
chantier qui va générer une immense activité...
METIERS NOUVEAUX ? SOYONS PROS !!!
L'analogie avec le développement est évidente : Internet a permis à tout
un chacun d'ouvrir un espace chez un hébergeur, et à l'aide de livres devenus
très accessibles et facilement disponibles de commencer ses propres réalisations.
Intellectuellement, culturellement, ce fut une nouveauté fabuleuse. Dans
le même temps, les informaticiens traditionnels n'ont pas toujours pris
au sérieux ces nouvelles techniques "avec des images qui bougent", et que
"tout le monde touche". C'est pour cela que nous trouvons beaucoup d'autodidactes
dans les équipes techniques Web. Même si les informaticiens issus de formations
classiques sont maintenant de plus en plus présent au sein des équipes
de développements Internet, il est important de professionnaliser les méthodes
de travail. De cesser l'amateurisme, de réapprendre l'analyse et le génie
logiciel. En bref, de devenir hyper professionnel afin de ne pas faire
l'erreur de se décrédibiliser quand viendra pour nous aussi l'heure du
bilan technique du travail réalisé ces dernières années. Car nous aussi,
nous serons jugés, en quelque sorte, quand nos développements seront repris
pour être adaptés aux nouveaux besoins de l'entreprise, ou convertis aux
technologies futures :
Ce n'est pas parce qu'un domaine est nouveau, que les principes fondamentaux
ne sont plus valables.
LANGAGE SQL : SYNTAXE D'EXTRACTION DES DONNEES
Le langage SQL (Structured Query Langage, ou Langage d'Interrogation Structuré)
date de la fin des annés 70. (voir article Un
peu d'histoire des SGBD sur le web et ailleurs du 13 Novembre 2000).
Nous allons déjà commencer par voir comment lire les données, et ce que
cela signifie réellement.
Appuyons-nous sur ce schéma de base :
Syntaxe de la commande SELECT :
SELECT [ALL | DISTINCT ] liste de colonnes
FROM Table_1, table_2, ... , Table_n
WHERE ......
GROUP BY ......
HAVING ........
ORDER BY .......
COMPUTE .......
Exemples simples :
SELECT NOM, PRENOM FROM CLIENT
renvoie le contenu des colonnes NOM et PRENOM de la table CLIENT.
SELECT NOM as lastname, PRENOM as firstname FROM CLIENT
renverra le même contenu, mais en renommant le nom des colonnes de sorties.
SELECT LIBELLE, PRIXUNITAIRE * 0.85 as prixpromo FROM ARTICLE
affichera le nom des articles et le prix diminué de 15%. Il est donc possible
d'effectuer des calculs directement au niveau de la base de donnée, ce
qui évitera de faire appel à une partie de script spécialement développée
pour l'occasion.
Détail des clauses optionnelles :
La clause WHERE exprime les conditions de recherches.
La clause GROUP BY groupe les résultats par critères.
La clause HAVING permet de restreindre les résultats en imposant
une propriété.
La clause ORDER BY trie les résultats suivant un critère de qualification.
La clause COMPUTE génère des statistiques.
LANGAGE SQL : LA CLAUSE WHERE
Les conditions de recherches peuvent faire référence à des colonnes qui
ne sont pas incluse dans la liste de sélection. Elle est très utilisée
pour définir ce que l'on appèle des jointures :
SELECT CLIENT.NOM, CLIENT.PRENOM, FACTURE.DATE
FROM CLIENT, FACTURE
WHERE CLIENT.ID_CLIENT=FACTURE.ID_CLIENT
renverra le nom et le prénom des clients ayant des factures, ainsi que
la/les date des factures correspondantes. Il est important de faire une
jointure sur ID_CLIENT dans la clause Where, pour indiquer au moteur SQL
que la liaison entre les deux tables s'effectue sur cette colonne 'commune'.
(Nous reviendrons dans un prochain article sur le fonctionnement d'un moteur
SQL).
Nous avons plusieurs outils pour les types de condition :
Opérateur de comparaison : = , > , < , >= , <=, <>
SELECT LIBELLE, PRIXUNITAIRE
FROM ARTICLE
WHERE PRIXUNITAIRE <>'100'
renverra les articles dont le prix est différent de 100. Il est important
de mettre les côtes ' ' dans la clause Where, car sinon le moteur SQL interprétera
100 comme étant une colonne.
Intervalles : BETWEEN , NOT BETWEEN
SELECT LIBELLE, PRIXUNITAIRE
FROM ARTICLE
WHERE PRIXUNITAIRE BETWEEN '100' AND '200'
renverra les articles dont le prix est compris entre 100 et 200.
Listes : IN , NOT IN
SELECT LIBELLE, PRIXUNITAIRE
FROM ARTICLE
WHERE PRIXUNITAIRE IN ('100','200','300)
renverra les articles dont le prix est soit de 100, soit de 200, soit de
300.
Correspondances de chaînes : LIKE , NOT LIKE
Quelques jokers :
- % joker : toute chaîne de caractère
- - joker simple: un caractère, n'importe lequel
- [ ] un caractère de l'intervalle ou de l'ensemble spécifié
- [^ ] un caractère en dehors de l'intervalle ou de l'ensemble
spécifié
SELECT LIBELLE, PRIXUNITAIRE
FROM ARTICLE
WHERE LIBELLE LIKE '%teu%'
renverra les articles dont le nom contient 'teu' (pelleteuse, par exemple....)
Valeurs inconnues : IS NULL, IS NOT NULL
SELECT LIBELLE, PRIXUNITAIRE
FROM ARTICLE
WHERE PRIXUNITAIRE IS NOT NULL
renverra les articles dont le prix existera, c'est à dire aura une valeur
correspondante dans la table.
ATTENTION !!! En sql, NULL ne signifie pas 0 ,il représente une valeur indéterminée,
il signifie 'rien', comme l'ensemble vide en Mathématique.
Combinaisons : AND , OR
SELECT LIBELLE, QUANTITE, DATE
FROM ARTICLE , CONTIENT, FACTURE
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE=FACTURE.ID_FACTURE
AND PRIXUNITAIRE NOT BETWEEN '100' AND '200'
OR PRIXUNITAIRE='150'
renverra les articles, leur quantité par facture, et la date, et ceci pour
les articles dont le prix n'est pas compris entre '100' et '200' ou est
égal à '150'.
LANGAGE SQL : LES AGREGATS
Les fonctions d'agrégats calculent des valeurs à partir des données d'une
colonne particulière. Les opérateurs d'agrégat sont : sum (somme), avg
(moyenne), max (le plus grand), min (le plus petit), et count (le nombre
d'enregistrements retournés).
SELECT sum(PRIXUNITAIRE)
FROM ARTICLE, CONTIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE='123456'
renverra le montant total de la facture '123456'
SELECT avg(PRIXUNITAIRE)
FROM ARTICLE, CONTIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE='123456'
renverra le prix moyens par article de la facture '123456'
SELECT max(PRIXUNITAIRE)
FROM ARTICLE, CONTIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE='123456'
renverra le plus grand prix de la facture '123456'
SELECT min(PRIXUNITAIRE)
FROM ARTICLE, CONTIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE='123456'
renverra le plus petit prix de la facture '123456'
SELECT count(PRIXUNITAIRE)
FROM ARTICLE, CONTIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE='123456'
renverra le nombres d'articles figurants sur la facture '123456'
LANGAGE SQL : LA CLAUSE GROUP BY
La clause GROUP BY, utilisée dans une instruction SELECT,
divise le résultat d'une table en groupe. Il y a actuellement 16 niveaux
de sous-groupes possibles.
La clause GROUP BY est présente dans les requêtes qui comportent également
des fonctions d'agrégats, ces dernières produisant alors une valeur pour
chaque groupe, également appelé agrégat vectoriel.
SELECT NOM, avg(PRIXUNITAIRE), sum(PRIXUNITAIRE), ID_FACTURE
FROM ARTICLE , CONTIENT, FACTURE, CLIENT
WHERE ARTICLE.ID_ARTICLE=CONTIENT.ID_ARTICLE
AND CONTIENT.ID_FACTURE=FACTURE.ID_FACTURE
AND FACTURE.ID_CLIENT=CLIENT.ID_CLIENT
GROUP BY ID_FACTURE
renverra pour chaque facture, par nom de client, le prix moyens ainsi que
la quantité des produits présents sur chaque facture.
LE LANGAGE SQL EST TRES SOUS-ESTIME. ET POURTANT...
Il n'est pas possible de tout voir en un seul article. La prochaine fois,
je détaillerais les clauses HAVING, ORDER BY, et COMPUTE. Ensuite, je vous
montrerais comment fonctionne un moteur de base de donnée, afin de bien
comprendre de quoi il s'agit, et de montrer comment optimiser ses requêtes
SQL. Ensuite, nous nous amuseront un peu avec quelques requêtes un peu
complexes, mais qui permettront surtout d'avoir l'information en un seul
accès à la base de donnée, et de retoucher ensuite cette information le
moins possible dans le script lui-même. Autant limiter les accès à la base,
et récupérer le maximum d'information en une seule requête. Car une fois
que les requêtes principalement utilisées ont été identifiées, il y a des
méthodes très simples pour accélérer les temps de réponse de la base sur
ces requêtes. Et surtout, cela évitera de retraiter les données dans de
longues et lourdes routine de programmation, souvent illisibles, incompréhensibles,
et très très coûteuses en temps machine : il n'y a rien de pire qu'un trie
de données effectuée sous forme de pile (tableaux passés en mémoires),
alors autant éviter les lourdeurs inutiles.
Après, tout est question de choix technologique et logicielle : un programme
ou un site reposant sur une base complexe devra peut être utiliser un moteur
SQL conséquent et plus professionel...
Stéphane Lambert
http://www.vediovis.fr/
Spécialisé dans le développement Web, Stéphane LAMBERT
a fondé VEDIOVIS PRODUCTIONS en Mai 2000.
Son expérience couvre essentiellement les sites à fortes audiences,
institutionnels ou audiovisuels.
Tous droits réservés - Reproduction même
partielle interdite sans autorisation préalable
| |