Next Decision vous liste quelques astuces et bonnes pratiques SQL.
Les bonnes pratiques du SQL
- Toujours faire une requête simple. Quand ce n'est pas possible, complexifier progressivement !
- Nommer les tables de façon logique
- Ne pas hésiter à ouvrir son explorateur de SGBD pour vérifier ses requêtes
NB : Attention, les fonctions avancées varient en fonction des SGBD => GOOGLE IT !
Ordre pour faire une requête SQL
SELECT [DISTINCT ou ALL] : Liste des colonnes séparées par une virgule (Attention à l'orthographe ! )
FROM : Nom des tables sur lesquelles porte le SELECT
WHERE : Filtre portant sur les données (conditions validées = données affichées)
GROUP BY : Définition de regroupement pour les fonctions d'agrégat (SUM, MIN, MAX...)
HAVING : Conditions sur les regroupements des lignes par fonction d'agrégat
ORDER BY : Tri des données du résultat
SQL et les opérateurs de sélection
- * : Récupère toutes les colonnes des tables dans la clause FROM
- DISTINCT : Permet d'éliminer les lignes en doublon
- AS : Crée un alias à une colonne pour la requête en cours
Conditions et restrictions SQL
Pour la clause WHERE, il existe plusieurs opérateurs :
- = : Egalité
- <, <= : Inférieur à, inférieur ou égal à
- >, >= : supérieur à, supérieur ou égal à
- !=, <>, ^= : différent de (à vérifier selon votre SGBD)
- IN : Pour rechercher une chaîne de caractère précise
- BETWEEN… AND… : Pour chercher une plage de données numériques (les bornes sont inclues)
- LIKE : Permet de récupérer les données ressemblant au référentiel. Souvent utilisé avec le %
- Exemple : WHERE Nom LIKE ‘B%’ va ramener les noms commençant par B
- IS [NOT] TRUE, FALSE, UNKNOWN, NULL : Permet de faire des comparaisons logiques
- OR, AND : Connecteurs logiques entre différentes conditions
SQL et les tris
- La clause ORDER BY permet de trier les colonnes. Sans précision, ASC par défaut.
- ASC spécifie l'ordre ascendant (de A à Z ou du plus petit au plus grand)
- DESC spécifie l'ordre descendant (de Z à A ou du plus grand au plus petit)
Exemple : ORDER BY col1 ASC, col2 DESC, col3 ASC
Les jointures SQL
Autre écriture possible :
SELECT * from Clients, Commandes WHERE Clients.ID_Client = Commandes.ID_Client
Les sous requêtes SQL
Quantité_Global as Ratio_Quantité
From Commande, (Select sum(Quantité) as Quantité_Global
From Commande) as Global
Group by ID_Client
From Commande
where Date = (Select max(Date)
From Commande)
From Commande
Where Quantité > ALL ( Select Quantité
From Commande
Where ID_Produit = 'C')
(les commandes ayant plus de quantités vendues que les commandes du produit C)
From Commande)
as Prix_Moyen
from Commande
Pour aller plus loin...
From Client c
Left outer join ( Select max(Date) as Date_dernière_commande
From Commande co
Where co.ID_Client = c.ID_Client)
Astuce :
From Commande)
Select ID_Client, sum(Quantité) as Quantité, sum(Quantité) / Quantité_Global as Ratio_Quantité
From Commande, Commande_Global
Group by ID_Client
Les fonctions SQL
Elles sont de plusieurs types et permettent de manipuler les données.
Quelques-unes sont standard, mais bien souvent elles sont spécifiques au SGBD.
SQL et les fonctions d'agrégats
Elles sont standard et seront accompagnées d'un GROUP BY.
- SUM() : Pour calculer la somme sur un ensemble d'enregistrements
- MAX() : Pour récupérer la valeur maximum d'une colonne sur un ensemble de lignes. Cela s'applique à la fois pour des données numériques ou alphanumériques.
- MIN() : Pour récupérer la valeur minimum de la même manière que MAX()
- AVG() : Pour calculer la moyenne sur un ensemble d'enregistrements
- COUNT() : Pour compter le nombre d'enregistrements sur une table ou une colonne distincte
SQL et les fonctions texte
Il y a peu de fonctions standard.
- UPPER() : Pour tout passer en majuscule
- LOWER() : Pour tout passer en minuscule
- TRIM() : Supprime les vides / blanc en début et fin de chaîne
- LEFT(chaîne, longueur) : Pour créer une nouvelle chaîne de caractère de la longueur donnée en partant de la gauche de la chîne renseignée. Fonctionne de la même manière en partant de la droite avec RIGHT(chîne, longueur)
- REPLACE(chaîne, à remplacer, remplacement) : Remplace des caractères dans une chaîne
- CONCAT(chaîne1, chaîne2) : Concatène plusieurs chaînes pour n'en obtenir plus qu'une seule.
- LENGTH() ou LEN() pour SQL Server : Permet de calculer la longueur d'une chaîne de caractères
SQL et les fonctions dates
Chaque SGBD a son système de gestion des dates.
Regarder sur le net est presque une obligation à ce niveau-là, donc Google it !
Une fonction particulière, le CASE WHEN : Permet d'utiliser des commandes de types "si... sinon..."
Exemple :
SELECT col1,
CASE WHEN col2 = 1 THEN ’un‘
WHEN col2 =2 THEN ‘deux’
WHEN col2 =3 THEN ‘trois’
ELSE ‘autre’
END
FROM table1
Les valeurs de la colonne col2 sont comparées aux différentes conditions et retournent les valeurs correspondantes. La clause ELSE est facultative.
Le CASE WHEN permet d'afficher des messages conditionnels ou de faire des comparaisons.
SQL et le langage de manipulation de données
INSERT : Permet d'ajouter des lignes dans une table existante. On peut rajouter des conditions au besoin avec la clause WHERE.
Exemple :
INSERT INTO table1 (col1,...)
VALUES (val1,...)
UPDATE : Permet de modifier les valeurs d'un ou plusieurs champs dans une ou plusieurs lignes d'une table. Le WHERE est facultatif mais si absent, toutes les lignes seront mises à jour.
Exemple :
UPDATE table1
SET col1 = exp1, col2 = exp2, …
WHERE condition
DELETE : Permet de supprimer des lignes dans une table
NB : si pas de WHERE, toutes les lignes seront supprimées !
Exemple :
DELETE FROM table1
WHERE condition
SQL et le langage de définition des données
CREATE : Permet de créer une table et ses colonnes avec ou sans contraintes
Exemple :
CREATE TABLE table1
(col1 type1 contraintes, col2 type2 contraintes, …)
Type : VARCHAR, INTEGER, FLOAT, DATE, BIT, …
Contraintes : [NOT] NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, REFERENCES
ALTER : Permet de modifier une table en ajoutant (ADD, en modifiant 5MODIFY) ou en supprimant 5DROP) une colonne
Exemple :
ALTER TABLE table1
ADD (col1 type1, …) ou
MODIFY (col1 type1, …) ou
DROP COLOMN col1
NB : La colonne supprimée ne doit pas être référencée par une clé étrangère.
DROP : Permet de supprimer une table
NB : Si le commit est fait, pas de ROLLBACK disponible !
Exemple :
DROP TABLE table1
Dans PostgreSQL : rajouter CASCADE si la table que vous voulez supprimer est référencé par une clé ou une vue.
Ainsi s'achève notre wiki sur les bonnes pratiques SQL.
Vous souhaitez aller plus loin ? Nous vous proposons une formation Langage SQL et requêtage.
Vous recherchez des consultants experts en SQL, bases de données et optimisation SQL?
Next Decision est là ! alors Contactez-nous !