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
  • BETWEENAND… : 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

Les bonnes pratiques sql

Les bonnes pratiques sql

INNER JOIN
Syntaxe
SELECT * from Clients INNER JOIN Commandes ON CLIENTS.ID_Client = Commandes.ID_Client
Autre écriture possible :
SELECT * from Clients, Commandes WHERE Clients.ID_Client = Commandes.ID_Client
Résultat
bonnes pratiques sql
Commentaire
Retourne les informations Clients ayant passé une commande.
LEFT OUTER JOIN
Syntaxe
SELECT * from Clients LEFT OUTER JOIN Commandes ON Clients.ID_Client = Commandes.ID_Client
Résultat
bonnes pratiques sql
Commentaire
Retourne les informations de tous les clients, avec leurs informations commandes s'ils en ont eu.
Astuce
En ajoutant la clause "WHERE Commandes.ID_Client IS NULL" à la requête, on ne retient que les clients qui n'ont pas passé de commande.
RIGHT OUTER JOIN
Syntaxe
SELECT * from Clients RIGHT OUTER JOIN Commandes ON Clients.ID_Client = Commandes.ID_Client
Résultat
bonnes pratiques sql
Commentaire
Retourne les informations de toutes les commandes, avec leurs informations clients si le client est référencé.
Astuce
En ajoutant la clause "WHERE Clients.ID_Client IS NULL" à la requête, on ne retient que les commandes sans client référencé.
FULL OUTER JOIN
Syntaxe
SELECT * from Clients FULL OUTER JOIN Commandes ON Clients.ID_Client = Commandes.ID_Client
Résultat
bonnes pratiques sql
Commentaire
Retourne toutes les informations des 2 tables.

Les sous requêtes SQL

Sous-requête FROM
Syntaxe
Select ID_Client, sum(Quantité) as Quantité, sum(Quantité) /
Quantité_Global as Ratio_Quantité
From Commande, (Select sum(Quantité) as Quantité_Global
From Commande) as Global
Group by ID_Client
Résultat
bonnes pratiques sql
Astuce
Bien nommer les champs de la sous-requête !
Sous-requête Where (1 ligne)
Syntaxe
Select Date,ID_Client, Quantité, prix
From Commande
where Date = (Select max(Date)
From Commande)
Résultat
bonnes pratiques sql
Commentaire
Vous pouvez utiliser tous les opérateurs classiques du WHERE.
Sous-requête Where (plusieurs lignes)
Syntaxe
Select *
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)
Résultat
bonnes pratiques sql
Commentaire
Le mot clef ALL impose que la condition soit valide sur toutes les lignes. Vous pouvez aussi utiliser le mot clef ANY pour que la condition soit valide sur au moins 1 des lignes de la sous-requête.
Sous-requête SELECT
Syntaxe
Select Date,ID_Client,ID_Produit,Quantité, prix, (Select avg(prix)
From Commande)
as Prix_Moyen
from Commande
Résultat
bonnes pratiques sql
Commentaire
Comparatif des commande par rapport au prix moyen.

Pour aller plus loin...

Sous-requête synchronisée
Explication
Les sous-requêtes synchronisées sont des sous-requêtes qui sont liées dans une clause WHERE à la requête principale
Syntaxe
Select ID_Client, Nom, Prénom, Ville, Date_dernière_commande
From Client c
Left outer join ( Select max(Date) as Date_dernière_commande
From Commande co
Where co.ID_Client = c.ID_Client)
Résultat
bonnes pratiques sql
Commentaire
Liste des clients avec leur date de dernière commande.

Astuce :

CTE (Commom Table Expression)
Explication
L'utilisation de CTE vous permet de simplifier la syntaxe de vos requêtes, particulièrement les sous-requêtes FROM
Syntaxe
With Commande_global as (Select sum(Quantité) as Quantité_Global
From Commande)

Select ID_Client, sum(Quantité) as Quantité, sum(Quantité) / Quantité_Global as Ratio_Quantité
From Commande, Commande_Global
Group by ID_Client
Résultat
Idem exemple sous-requête From
bonnes pratiques sql
Commentaire
Bien nommer les champs de la sous-requête !

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 !