06. Manipulations des champs

En SQL, les colonnes, également appelées champs, jouent un rôle central dans la gestion des bases de données. La maîtrise de leur manipulation est essentielle pour tirer pleinement parti de ce langage.

Selection de tous les champs

Un symbole particulièrement récurrent dans les requêtes SQL est l'étoile "*", qui représente la sélection de toutes les colonnes d'une table. Par exemple, pour extraire l'ensemble des colonnes de la table product, la requête suivante sera utilisée.

/* L'étoile "*" va selectionner toutes 
   les colonnes de la table dans le "FROM" */
SELECT *
FROM product

Attention : Cependant, bien que l'utilisation de "*" soit pratique pour récupérer toutes les colonnes, elle peut présenter quelques inconvénients. Par exemple, si la table a un grand nombre de colonnes ou si certaines colonnes contiennent des données sensibles, récupérer toutes les données peut être inefficace ou inapproprié. Il est souvent recommandé d'indiquer explicitement les colonnes nécessaires plutôt que d'utiliser "*". Cela peut améliorer la performance de la requête en évitant de récupérer des données inutiles et permet de limiter l'accès à des informations sensibles.

Question 6.1

Utilise la table customer pour afficher toutes les colonnes. Utilise la console SQL pour y répondre.

Nom de colonne avec espace

Lorsqu'une colonne contient un espace dans son nom, il faut mettre le nom de la colonne entre guillemets doubles (") dans la requête SQL. Par exemple, supposons qu'il y ait un champ avec un espace comme VolKilo (COPA). Il faudra l'écrire de la manière suivante :

SELECT customerID, productID, 
       "VolKilo (COPA)"
FROM perform21

Cependant, l'utilisation d'espaces dans les noms de colonnes est une mauvaise pratique en SQL. Bien que ça puisse sembler plus lisible à première vue, cela peut entraîner des complications et des erreurs lors de l'écriture de requêtes SQL. Les raisons pour lesquelles l'utilisation d'espaces dans les noms de colonnes est déconseillée comprennent :

1. La lisibilité des requêtes
Les espaces dans les noms de colonnes nécessitent l'utilisation de guillemets doubles pour être référencés dans les requêtes. Cela peut rendre les requêtes plus complexes à écrire et plus facilement engendrer des erreurs.

2. La portabilité du code
Certains SGBDR peuvent ne pas prendre en charge les noms de colonnes avec des espaces ou la gestion de ces derniers peut changer d'un système à un autre. Cela peut entraîner des problèmes de portabilité du code.

-- SQL Server accepte les espaces sans guillemets spéciaux
SELECT [Date Creation], [Nom Client]
FROM Commandes;

-- PostgreSQL nécessite des guillemets doubles
SELECT "Date Creation", "Nom Client" 
FROM Commandes;

-- MySQL accepte les backticks
SELECT `Date Livraison`, `Prix Total`
FROM Factures;

-- Oracle nécessite des guillemets doubles
SELECT "Date Livraison", "Prix Total"
FROM Factures;

Question 6.2

Utilise la table perform21 pour afficher CustomerID, ProductID, VolKilo (COPA), NOS (COPA) et COGS (COPA). Utilise la console SQL pour y répondre.

Important : Pour éviter ces problèmes, il est généralement recommandé de nommer les colonnes sans utiliser d'espaces, en utilisant des conventions telles que le camelCase (par exemple, "nomDeLEmploye" ou "NomDeLEmploye") ou le snake_case (par exemple, "nom_de_l_employe").

-- Solution 1 : Utiliser des underscores
SELECT date_creation, nom_client
FROM commandes;

-- Solution 2 : Utiliser la notation camelCase
SELECT dateCreation, nomClient 
FROM commandes;

-- Solution 3 : Éviter totalement les espaces et caractères spéciaux
SELECT datecreation, nomclient
FROM commandes;

Calcul Arithmétique

La clause SELECT est principalement utilisée pour spécifier les colonnes que l'on souhaite inclure dans les résultats d'une requête. Cependant, il est possible d'afficher de nouvelles colonnes dans le résultat d'une requête en effectuant des manipulations sur des colonnes déjà existantes.

Par exemple, imaginons que la machine enregistrant les commandes présente un dysfonctionnement : elle sous-évalue chaque commande de 5 kg. Pour corriger cela, nous ajoutons 5 kg à chaque commande enregistrée :

SELECT customerID, productID,
       "VolKilo (COPA)"+5
FROM perform21

La nouvelle colonne "VolKilo (COPA)"+ 5 porte le nom de son calcul. Pour renommer cette colonne, la clause AS est ajoutée :

SELECT customerID, productID,
       "VolKilo (COPA)"+5 AS newVolKilo
FROM perform21

A présent la nouvelle colonne est renommée en newVolKilo. Elle ajoute 5 kg à chaque volume enregistré pour les commandes.

Important : La colonne newVolKilo apparait dans les résultats de la requête mais la table perform21 reste inchangée.

Question 6.3

Utilise la table perform21 pour afficher CustomerID, ProductID, VolKilo (COPA), NOS (COPA), COGS (COPA) et la différence entre NOS (COPA) qui représente les coûts et COGS (COPA) qui représente les ventes. Cette nouvelle colonne sera appelée benefice. Utilise la console SQL pour y répondre.

Question 6.4

Utilise la table perform21 pour afficher le benefice réalisé sur chaque commande sous forme de pourcentage. Utilise la console SQL pour y répondre.

Rappel :
  • NOS (COPA) : Montant des biens à la vente (contribue au chiffre d'affaire).
  • COGS (COPA) : Montant des biens à l'achat (coût).

Ajout de Constantes

Pour ajouter une colonne constante, il suffit de spécifier une valeur fixe ou une expression constante dans la clause SELECT. Cela peut être réalisé en inscrivant uniquement la valeur qui doit être répétée entre guillemets simples : '.

Voici un exemple où la colonne nommée codePays est crée. Elle prend la valeur 'FR' (France) pour toutes les lignes :

SELECT *, 'FR' as codePays
FROM customer

La requête indique que la colonne codePays sera ajoutée à la suite de toutes les colonnes déjà présente dans la table customer.

Question 6.5

Ajoute une colonne catégorie qui va prendre la valeur client pour l'ensemble des lignes.

Lignes Distinctes

Jusqu'à présent, les clauses SELECT et FROM nous ont permis de voir le contenu des tables. Par exemple pour la table perform21, nous avons vu les différents produits commandés par les différents clients. Mais maintenant, si nous voulons afficher le nombre de produits différents commandés, il faut utiliser la clause DISTINCT. Elle permet d'éliminer les doublons.

Voici un exemple simple pour illustrer son utilisation :

SELECT productID
FROM perform21

La requête ci-dessus affiche l'ensemble des produits commandés, ce qui représente 21 726 enregistrement (lignes).

SELECT DISTINCT productID
FROM perform21

La requête ci-dessus affiche l'ensemble des produits différents commandés, ce qui représente 520 enregistrement (lignes).

Dans cet exemple DISTINCT est utilisé pour afficher uniquement les valeurs uniques de la colonne productID. Si la clause DISTINCT n'est pas spécifiée, le produit (le champ productID) apparaitra pour chaque enregistrement.

Lorsque DISTINCT est utilisé sur une selection de plusieurs colonnes, la différence ne se fait plus au niveau de la valeur mais au niveau de la ligne toute entière.

Voici un exemple où l'ensemble des produits différents commandés par consommateur est affiché. Chaque combinaison client-produit est unique, éliminant ainsi les doublons.

SELECT DISTINCT customerID, productID
FROM perform21

Ici, la requête renvoie les combinaisons uniques client-produit. Elle élimine toutes les combinaisons qui apparaissent en doublon.

Question 6.6

Utilise la table perform21 pour afficher toutes les journées différentes où il y a eu des commandes.

SQL Console

Category Num Sales Usd
ABC 123 $26.4M
No Results

Retourner vers:
Question 6.1
Question 6.2
Question 6.3
Question 6.4
Question 6.5