SQL - Comment tout sélectionner sauf une colonne ?

SQL - Comment tout sélectionner sauf une colonne ?

Date de sortie
April 30, 2024
Auteur
Bertrand Fabre
Comment faites-vous si vous avez besoin de 23 colonnes sur les 24 dont est composée votre table de travail ?

Sur BigQuery, car je n’ai pas vérifié sur d’autres, il existe la clause EXCEPT() à utiliser dans le SELECT.

Tout d’abord, prenons des données d’exemple :

WITH product AS (
    SELECT 1 AS ProductID, 'Laptop' AS ProductName, 'Electronics' AS Category, 'HP' AS Brand, 1200 AS Price, '2023-01-01' AS ReleaseDate, 'Yes' AS InStock, 15 AS DiscountPercent, 'Black' AS Color, 1.5 AS WeightKg UNION ALL

    SELECT 2, 'Smartphone',   'Electronics', 'Apple',     999,  '2023-03-15', 'Yes',  10, 'Silver', 0.2 UNION ALL
    SELECT 3, 'Backpack',     'Accessories', 'Nike',      70,   '2022-08-01', 'No',   5,  'Blue',   0.7 UNION ALL
    SELECT 4, 'Water Bottle', 'Accessories', 'CamelBak',  35,   '2023-04-20', 'Yes',  0,  'Green',  0.3 UNION ALL
    SELECT 5, 'Headphones',   'Electronics', 'Sony',      150,  '2022-12-05', 'Yes',  20, 'Black',  0.4
)
SELECT * 
FROM product
;

En voici le résultat :

ProductID
ProductName
Category
Brand
Price
ReleaseDate
InStock
DiscountPercent
Color
WeightKg
1
Laptop
Electronics
HP
1200
2023-01-01
Yes
15
Black
1,5
2
Smartphone
Electronics
Apple
999
2023-03-15
Yes
10
Silver
0,2
3
Backpack
Accessories
Nike
70
2022-08-01
No
5
Blue
0,7
4
Water Bottle
Accessories
CamelBak
35
2023-04-20
Yes
0
Green
0,3
5
Headphones
Electronics
Sony
150
2022-12-05
Yes
20
Black
0,4

Comme vous le voyez nous avons 10 colonnes dans notre exemple.

Maintenant, nous voudrions sélectionner toutes les lignes en stock, soit le champ InStock = ‘Yes’.

Cependant, nous voudrions afficher toutes les colonnes sauf celle que nous venons de filtrer (InStock).

Voici l’approche :

WITH product AS (
    SELECT 1 AS ProductID, 'Laptop' AS ProductName, 'Electronics' AS Category, 'HP' AS Brand, 1200 AS Price, '2023-01-01' AS ReleaseDate, 'Yes' AS InStock, 15 AS DiscountPercent, 'Black' AS Color, 1.5 AS WeightKg UNION ALL

    SELECT 2, 'Smartphone',   'Electronics', 'Apple',     999,  '2023-03-15', 'Yes',  10, 'Silver', 0.2 UNION ALL
    SELECT 3, 'Backpack',     'Accessories', 'Nike',      70,   '2022-08-01', 'No',   5,  'Blue',   0.7 UNION ALL
    SELECT 4, 'Water Bottle', 'Accessories', 'CamelBak',  35,   '2023-04-20', 'Yes',  0,  'Green',  0.3 UNION ALL
    SELECT 5, 'Headphones',   'Electronics', 'Sony',      150,  '2022-12-05', 'Yes',  20, 'Black',  0.4
)
SELECT * EXCEPT(InStock) # C'est la clause qui nous intéresse
FROM product
WHERE InStock = 'Yes' # Sélection des lignes dont les produits sont en stock
;

La syntaxe est donc :

SELECT * EXCEPT(les_noms_de_colonnes_à_exclure)

Et voici le résultat :

ProductID
ProductName
Category
Brand
Price
ReleaseDate
DiscountPercent
Color
WeightKg
1
Laptop
Electronics
HP
1200
2023-01-01
15
Black
1,5
2
Smartphone
Electronics
Apple
999
2023-03-15
10
Silver
0,2
4
Water Bottle
Accessories
CamelBak
35
2023-04-20
0
Green
0,3
5
Headphones
Electronics
Sony
150
2022-12-05
20
Black
0,4

✅ La colonne InStock n’a donc pas été prise et seules les lignes dont InStock = ‘Yes’ ont été sélectionnées.

Merci de votre lecture !