SQLite - Clause UNIONS

Bonjour, futurs magiciens des bases de données ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de SQLite et explorer la clause magique UNIONS. En tant que votre enseignant bienveillant du quartier, je vais vous guider à travers cette aventure étape par étape. Alors, sortez vos baguettes virtuelles (claviers) et c'est parti !

SQLite - UNIONS Clause

Qu'est-ce qu'un UNION ?

Imaginez que vous avez deux listes distinctes de vos saveurs de glace préférées - une de l'été dernier et une de cet été. Et si vous vouliez combiner ces listes en une super liste de toutes vos saveurs préférées ? C'est essentiellement ce qu'un UNION fait dans SQLite, mais avec des tables de base de données au lieu de saveurs de glace !

Une clause UNION dans SQLite vous permet de combiner les ensembles de résultats de deux ou plusieurs instructions SELECT. C'est comme créer une grande fête où différents groupes de données peuvent se mélanger et former un nouveau groupe plus large.

Syntaxe de base

La syntaxe de base d'un UNION ressemble à ceci :

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

Reprenons cela :

  1. Nous avons deux instructions SELECT.
  2. Chaque instruction SELECT peut interroger des tables différentes.
  3. Le mot-clé UNION se situe entre ces instructions, agissant comme un pont.

Règles importantes

Avant de plonger dans des exemples, examinons quelques règles cruciales pour utiliser UNION :

  1. Le nombre et l'ordre des colonnes dans toutes les instructions SELECT doivent être les mêmes.
  2. Les types de données des colonnes correspondantes doivent être compatibles.
  3. Par défaut, UNION supprime les lignes en double (nous verrons comment changer cela plus tard).

UNION en action

Créons quelques tables d'exemple et voyons UNION en action !

-- Créer et remplir la table 'employees'
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);

INSERT INTO employees (name, department) VALUES
('Alice', 'HR'),
('Bob', 'IT'),
('Charlie', 'Finance');

-- Créer et remplir la table 'contractors'
CREATE TABLE contractors (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);

INSERT INTO contractors (name, department) VALUES
('David', 'Marketing'),
('Eve', 'IT'),
('Frank', 'HR');

Maintenant, utilisons UNION pour combiner ces tables :

SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;

Cette requête renverra :

Alice    HR
Bob      IT
Charlie  Finance
David    Marketing
Eve      IT
Frank    HR

Qu'est-ce qui s'est passé ici ? La clause UNION a combiné les résultats des deux tables, nous giving une liste complète de tous les travailleurs (employés et entrepreneurs) sans duplicats.

La magie de la déduplication

Avez-vous remarqué quelque chose d'intéressant ? Même si nous avons deux personnes dans le département HR (Alice et Frank), ils apparaissent tous deux dans notre résultat. C'est parce que UNION supprime automatiquement les lignes en double basées sur toutes les valeurs des colonnes.

Si nous avions quelqu'un avec exactement le même nom et département dans les deux tables, UNION ne les afficherait qu'une fois. Par exemple :

INSERT INTO contractors (name, department) VALUES ('Alice', 'HR');

SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;

Cela nous donnerait toujours le même résultat que précédemment, sans 'Alice' supplémentaire dans HR.

La clause UNION ALL

Parfois, vous pourriez vouloir conserver toutes les lignes, même si elles sont en double. C'est là que UNION ALL entre en jeu. C'est comme dire à la base de données : "Je veux tout le monde à cette fête, même s'ils ont un jumeau !"

Modifions notre requête précédente :

SELECT name, department FROM employees
UNION ALL
SELECT name, department FROM contractors;

Maintenant, nous obtenons :

Alice    HR
Bob      IT
Charlie  Finance
David    Marketing
Eve      IT
Frank    HR
Alice    HR

Voyez comment nous avons maintenant deux entrées pour Alice dans HR ? UNION ALL conserve toutes les lignes, indépendamment des duplicats.

Applications pratiques

UNION et UNION ALL ne sont pas seulement pour le plaisir - ils ont des applications dans le monde réel ! Voici quelques scénarios où vous pourriez les utiliser :

  1. Combiner des données de plusieurs tables ayant des structures similaires (comme notre exemple d'employés et d'entrepreneurs).
  2. Créer des rapports couvrant différentes périodes ou catégories.
  3. Fusionner des données provenant de différentes bases de données ou sources de données.

Voyons un exemple plus complexe. Imaginez que nous exploitons une librairie et que nous voulons voir toutes les transactions, qu'elles soient des achats ou des retours :

-- Créer et remplir la table 'purchases'
CREATE TABLE purchases (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);

INSERT INTO purchases (book_title, amount, transaction_date) VALUES
('Gatsby le Magnifique', 15.99, '2023-06-01'),
('Ne tirez pas sur l'oiseau moqueur', 12.50, '2023-06-02'),
('1984', 10.99, '2023-06-03');

-- Créer et remplir la table 'returns'
CREATE TABLE returns (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);

INSERT INTO returns (book_title, amount, transaction_date) VALUES
('Gatsby le Magnifique', -15.99, '2023-06-05'),
('Orgueil et Préjugés', -14.99, '2023-06-06');

-- Combiner achats et retours
SELECT book_title, amount, transaction_date, 'Achat' as transaction_type
FROM purchases
UNION ALL
SELECT book_title, amount, transaction_date, 'Retour' as transaction_type
FROM returns
ORDER BY transaction_date;

Cette requête nous donnera :

Gatsby le Magnifique   15.99   2023-06-01  Achat
Ne tirez pas sur l'oiseau moqueur  12.50   2023-06-02  Achat
1984                   10.99   2023-06-03  Achat
Gatsby le Magnifique  -15.99   2023-06-05  Retour
Orgueil et Préjugés   -14.99   2023-06-06  Retour

Ici, nous avons utilisé UNION ALL pour combiner achats et retours, ajouté une colonne pour distinguer les types de transactions, et trié les résultats par date.

Astuces et astuces

  1. Trier les résultats : Vous pouvez ajouter une clause ORDER BY à la fin de votre requête UNION pour trier les résultats combinés.

  2. Filtrer les résultats combinés : Utilisez une clause WHERE dans chaque instruction SELECT pour filtrer les tables individuelles, ou enveloppez votre requête UNION dans une sous-requête et appliquez une clause WHERE pour filtrer les résultats combinés.

  3. Alias des colonnes : Si vos colonnes ont des noms différents dans différentes tables, vous pouvez utiliser des aliases pour les faire correspondre :

SELECT name AS person, department FROM employees
UNION
SELECT contractor_name AS person, dept AS department FROM contractors;
  1. Combiner plus de deux tables : Vous n'êtes pas limité à seulement deux tables - vous pouvez chaîner plusieurs clauses UNION ou UNION ALL pour combiner de nombreuses tables.

Méthodes courantes

Voici un tableau résumant les méthodes courantes liées à UNION dans SQLite :

Méthode Description Exemple
UNION Combine les résultats de deux ou plusieurs instructions SELECT et supprime les duplicats SELECT * FROM table1 UNION SELECT * FROM table2
UNION ALL Combine les résultats de deux ou plusieurs instructions SELECT et conserve toutes les lignes, y compris les duplicats SELECT * FROM table1 UNION ALL SELECT * FROM table2
ORDER BY Utilisé avec UNION pour trier les résultats combinés (SELECT * FROM table1 UNION SELECT * FROM table2) ORDER BY column_name
WHERE Utilisé dans des instructions SELECT individuelles pour filtrer les résultats avant de les combiner SELECT * FROM table1 WHERE condition UNION SELECT * FROM table2 WHERE condition

Et voilà, les amis ! Vous avez maintenant amélioré vos compétences en SQLite en maîtrisant la clause UNION. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces requêtes sur vos propres ensembles de données. Bonne chance avec vos requêtes, et que vos UNIONs soient toujours fructueuses !

Credits: Image by storyset