13 commandes et requêtes SQL de base que les programmeurs devraient connaître
Chaque site Web volumineux ou dynamique utilise une base de données d'une manière ou d'une autre, et lorsqu'elle est combinée avec le langage de requête structuré (SQL), les possibilités de manipulation des données sont vraiment infinies.
Les bases de données constituent l’épine dorsale du Web moderne. Chaque site Web important ou dynamique utilise une base de données d'une manière ou d'une autre, et lorsqu'elle est combinée avec des commandes SQL (Structured Query Language), les possibilités de manipulation des données sont vraiment infinies.
Il existe de nombreux noms pour les données renvoyées par une table de base de données. Les données sont communément appelées Lignes, enregistrements ou Tuples. Chacun de ces termes est utilisé de manière interchangeable tout au long de cet article.
Préface
Tous les exemples sont basés sur quatre tableaux fictifs. La table clients contient le nom et l'âge des clients :
Name
-
Âge
Joe
99
James
78
Ryan
101
Le tableau des taille contient le nom et la taille de toute personne :
Name
Hauteur
-
Joe
101
James
102
Ryan
103
La table personnel contient le nom et l'âge des membres du personnel, exactement les mêmes que la table clients :
Name
Âge
Joe
-
17
James
24
Ryan
18
La table finale people contient le nom et l'âge des personnes, tout comme les tables customer et staff :
Name
Âge
Joe
98
James
99
Ryan
100
1. Sélectionnez
La commande select dans SQL est la requête SQL la plus simple, mais aussi l'une des plus importantes de la suite de commandes SQL.
Il est considéré comme une bonne pratique d'écrire votre syntaxe SQL réservée en majuscules, car cela rend la commande select facile à lire et à comprendre.
Comme son nom l'indique, select est utilisé pour sélectionner des données dans une base de données. Voici l'utilisation la plus simple :
SELECT * FROM table;
Il y a deux parties dans cette ligne de commande. La première partie (SELECT *) précise les colonnes que vous souhaitez sélectionner.
L'astérisque indique que vous souhaitez sélectionner toutes les colonnes du tableau défini. La deuxième partie (table FROM) indique à votre moteur de base de données d'où vous souhaitez récupérer ces données.
Remplacez table par le nom de votre table de base de données.
Cette instruction select est connue sous le nom de select star. L’astérisque est un bon moyen de déterminer quelles données se trouvent dans un tableau, mais il n’est pas toujours recommandé pour les codes de production.
La plupart du temps, vous travaillerez avec des tonnes de lignes de code, ce qui signifie que votre instruction select * mettrait votre système dans les limbes. En effet, il essaie de récupérer toutes les lignes de données de la table définie.
Lorsque vous utilisez une étoile de sélection, c'est au moteur de base de données de vous présenter les données souhaitées. Vous n'avez aucun contrôle sur l'ordre dans lequel les données sont renvoyées, donc si quelqu'un ajoute une nouvelle colonne au tableau, vous constaterez peut-être que vos variables dans votre langage de programmation ne représentent plus les données correctes. Heureusement, il existe une solution.
Vous pouvez indiquer explicitement les colonnes que vous souhaitez récupérer, comme ceci :
SELECT age, name FROM people;
Cette requête récupère les colonnes age et name de la table people. Être aussi explicite peut être légèrement fastidieux si vous disposez de beaucoup de données, mais cela réduira les problèmes à l'avenir et rendra votre requête SQL plus facile à comprendre.
Si vous souhaitez sélectionner une donnée supplémentaire, mais qu'elle n'est stockée dans aucune de vos tables, vous pouvez le faire comme ceci :
SELECT age, '1234' FROM people;
Toute chaîne entre guillemets simples sera renvoyée au lieu de correspondre à un nom de colonne.
2. Où
La commande select est excellente pour récupérer des données, mais que se passe-t-il si vous souhaitez filtrer les résultats en fonction de certains critères ?
Et si on récupérait uniquement les personnes qui ont les yeux bleus ? Qu’en est-il des personnes nées en janvier qui travaillent comme mécaniciens ?
C'est là qu'intervient la commande where. L'utilisation de cette commande SQL vous permet d'appliquer des conditions avec l'instruction select, et vous l'ajoutez simplement à la fin de l'instruction :
SELECT age, name FROM people WHERE age < 100
Cette requête est désormais réservée aux personnes de moins de 100 ans.
Vous pouvez combiner plusieurs conditions à l'aide de l'opérateur AND :
SELECT * FROM customer WHERE age > 80 AND age < 100;
La commande AND fonctionne exactement comme en anglais : elle applique une autre condition à l'instruction.
Une autre commande qui peut être utilisée conjointement est OR. Voici un exemple :
SELECT * FROM customer WHERE age > 10 OR name = 'Joe';
Cette requête renvoie les enregistrements dont l'âge est supérieur à 90 ou dont le nom est égal à Joe.
3. Commande
La commande order permet de trier les résultats par ordre croissant/décroissant. Ajoutez-le simplement à la fin de votre instruction, après l'instruction Where, si vous en utilisez une :
SELECT * FROM customer ORDER BY age DESC;
Vous devez spécifier la colonne et l'ordre, qui peut être ASC pour l'ordre croissant ou DESC pour l'ordre décroissant. Si ASC ou DESC n'est pas défini, l'ordre de tri sera croissant par défaut.
Vous pouvez trier par plusieurs colonnes comme ceci :
sélectionnez * dans l'ordre du personnel par âge, nom ;
ORDER BY est l'une des commandes les plus utiles lorsqu'elle est combinée avec d'autres commandes. Toutes les requêtes ne renverront pas les données de manière logique ou ordonnée ; cette commande vous permet de changer cela.
4. Rejoignez
La commande join dans SQL est utilisée pour joindre les données associées stockées dans une ou plusieurs tables. Vous pouvez joindre une table à une autre pour récupérer des résultats combinés.
Voici un exemple de base :
SELECT age, name, height FROM people
LEFT JOIN heights
USING (name);
Vous devez commencer par la syntaxe LEFT JOIN, qui précise que vous souhaitez joindre une table à l'aide d'une jointure de type left.
Ensuite, précisez la table que vous souhaitez rejoindre (hauteurs). La syntaxe USING (name) indique que la colonne name peut être trouvée dans les deux tables et qu'elle doit être utilisée comme clé primaire pour joindre les tables entre elles.
Ne vous inquiétez pas si vos colonnes portent des noms différents dans chaque table. Vous pouvez utiliser ON au lieu de USING :
SELECT a.age, a.name,b.Height FROM people a LEFT JOIN heights as b ON a.name = b.name;
L'instruction on indique explicitement sur quelles colonnes saisir. Il existe de nombreux types de jointures ; voici un bref résumé de leurs utilisations :
- (INNER) JOIN renvoie les lignes avec une correspondance dans les deux tables.
- LEFT (OUTER) JOIN renvoie toutes les lignes du tableau de gauche, avec toutes les correspondances du tableau de droite. S'il n'y a aucune correspondance, les enregistrements de la table de gauche sont quand même renvoyés.
- RIGHT (OUTER) JOIN est l'opposé d'une jointure gauche : toutes les lignes de la table de droite sont renvoyées, ainsi que toutes les correspondances dans la table de gauche.
- FULL (OUTER) JOIN renvoie tous les enregistrements avec une correspondance dans l'une ou l'autre des tables.
- UNEQUAL JOIN : Les enregistrements non correspondants des deux tables sont des résultats.
5. Alias
La commande Alias permet de renommer temporairement une table. Il s'agit d'un surnom qui existe dans la transaction individuelle que vous exécutez.
Voici comment l'utiliser :
SELECT A.age FROM people as A;
Vous pouvez utiliser n’importe quel nom valide, mais il est toujours préférable d’utiliser des lettres de l’alphabet. Avant chaque nom de colonne, l'alias est préfixé.
Cet alias est attribué à la table immédiatement après sa déclaration. C'est la même chose que de faire ceci :
SELECT people.age FROM people;
Plutôt que de taper un long nom de table, vous pouvez taper une lettre simple et facile à retenir.
Si vous effectuez une sélection parmi plusieurs tables, il est facile de ne pas savoir quelles colonnes appartiennent à quelle table. Si les deux tables ont des colonnes portant le même nom, votre requête de base de données ne pourra pas s'exécuter sans référencer explicitement le(s) nom(s) ou l'alias de la table.
Voici un exemple avec deux tables :
SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;
Voici la même requête avec des alias :
SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;
La table du personnel reçoit l'alias de A et la table des clients reçoit l'alias de B. L'utilisation d'alias de tables facilite la compréhension de votre code et réduit la quantité de saisie que vous devez effectuer.
Vous pouvez également renommer une colonne avec un alias à l'aide de la commande AS :
SELECT age AS person_age FROM people;
Lorsque cette requête est exécutée, la colonne s'appellera désormais person_age au lieu de age.
6. Syndicat
Union est une excellente commande, car elle vous permet d'ajouter des lignes les unes aux autres. Contrairement aux jointures qui ajoutent des colonnes correspondantes, l'union peut ajouter des lignes non liées à condition qu'elles aient le même nombre et le même nom de colonnes.
SELECT age, name FROM customer
UNION
SELECT age, name FROM staff;
Vous pouvez considérer l’union comme un moyen de combiner les résultats de deux requêtes. Une union ne renverra des résultats que lorsqu'il existe une ligne unique entre les deux requêtes.
Vous pouvez utiliser la syntaxe UNION ALL pour renvoyer toutes les données, quels que soient les doublons :
SELECT age, name FROM customer
UNION ALL
SELECT age, name FROM staff;
Remarquez comment l'ordre des lignes change ? Union fonctionne de la manière la plus efficace, de sorte que les données renvoyées peuvent varier dans l'ordre.
Un cas d'utilisation possible de l'union est un sous-total : vous pouvez réunir une requête de la somme totale sur une requête des totaux individuels pour un scénario particulier.
7. Insérer
Parfois, vous souhaitez ajouter de nouvelles données dans une base de données/table existante. C'est là qu'intervient la commande insert dans SQL.
La syntaxe VALUES est utilisée pour fournir les valeurs à insérer.
INSERT INTO people(name, age)
VALUES('Joe', 102);
Vous devez préciser le nom de la table (personnes) et les colonnes que vous souhaitez utiliser (nom et âge). La syntaxe VALUES est utilisée pour fournir les valeurs à insérer. Celles-ci doivent être dans le même ordre que les colonnes spécifiées précédemment.
Vous ne pouvez pas spécifier de clause Where pour les insertions et vous devez vous assurer de respecter toutes les contraintes de table nécessaires présentes.
8. Mise à jour
Après avoir inséré certaines données, il est tout à fait naturel de devoir modifier des lignes spécifiques. Voici la syntaxe de la commande update :
UPDATE people SET name = 'Joe', age = 101;
Vous devez spécifier la table que vous souhaitez modifier, puis utiliser la syntaxe SET pour spécifier les colonnes et leurs nouvelles valeurs.
Pour être plus précis, vous pouvez utiliser les clauses WHERE comme lorsque vous effectuez une instruction select :
UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';
Vous pouvez même spécifier plusieurs conditions à l'aide de AND/OR :
UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';
Remarquez comment les crochets sont utilisés pour contraindre les conditions.
9. Insérer
Upsert est un mot à consonance étrange, mais c'est une commande incroyablement utile. Supposons que vous ayez une contrainte sur votre table et que vous ayez spécifié que vous ne souhaitez que des enregistrements portant des noms uniques ; vous ne voulez pas stocker deux lignes avec le même nom, par exemple.
Si vous essayiez d'insérer plusieurs valeurs de Joe, votre moteur de base de données générerait une erreur et refuserait de le faire (à juste titre).
Un UPSERT vous permet de mettre à jour un enregistrement s'il existe déjà. C'est incroyablement utile ! Sans cette commande, vous devrez écrire de nombreuses instructions logiques pour d'abord vérifier si un enregistrement existe, l'insérer s'il n'existe pas, sinon récupérer la bonne clé primaire puis mettre à jour.
Malheureusement, les upserts sont implémentés différemment selon les moteurs de base de données. PostgreSQL n'a acquis cette capacité que récemment, alors que MySQL l'a depuis un certain temps. Voici la syntaxe MySQL pour référence :
INSERT INTO people(name, age)
VALUES('Joe', 101)
ON DUPLICATE KEY UPDATE age = 101;
Remarquez qu'il s'agit essentiellement d'une instruction update et insert, qui peut être résumée par update if insert failed.
10. Supprimer
Supprimer est utilisé pour supprimer entièrement les enregistrements ; cela peut être très dommageable s’il est utilisé de la mauvaise manière.
La syntaxe de base est très simple à utiliser :
DELETE FROM people;
Comme la plupart des autres commandes, cela supprimera tout. Vous devez utiliser un Where pour le limiter à un nombre de lignes légèrement plus raisonnable, idéalement une :
DELETE FROM people WHERE name = 'Joe';
Si vous développez un système, il est souvent judicieux de mettre en œuvre une suppression logicielle. Vous n’exécutez jamais réellement la commande delete ; vous créez plutôt une colonne supprimée, puis vérifiez cette colonne dans vos sélections. Cela peut éviter bien des embarras potentiels, si vous pouvez récupérer rapidement et facilement des enregistrements soi-disant supprimés. Cependant, cela ne remplace pas des sauvegardes appropriées.
11. Créer un tableau
La commande create table permet de créer des tables. Il s'agit d'un autre processus de requête simple et basique :
CREATE TABLE people (
name TEXT,
age, INTEGER,
PRIMARY KEY(name)
);
Remarquez comment les noms de colonnes et les contraintes sont entre parenthèses et les colonnes reçoivent un type de données approprié.
Une clé primaire est spécifiée, comme cela est requis dans toute bonne conception de base de données.
12. Modifier le tableau
La commande alter en SQL permet de modifier la structure d'une table. Ceci est légèrement limité, car votre base de données ne vous permettra pas de modifier une table si les données existantes provoquent un conflit (changer une chaîne en entier, par exemple). Dans ces cas, corrigez d’abord les données, puis modifiez le tableau. Voici un exemple :
ALTER TABLE people ADD height integer;
Cet exemple ajoute une colonne appelée hauteur de type entier à la table des personnes. Il n'y a pas vraiment de limite à ce que vous pouvez modifier.
13. Supprimer la table
La commande finale est drop table. Considérez cela comme une suppression, mais plutôt que de supprimer un seul enregistrement, cela supprime chaque enregistrement ainsi que la table. Voici comment vous pouvez l'utiliser :
DROP TABLE people;
C'est une commande assez drastique, et il n'y a aucune raison pour qu'elle doive être programmée dans votre système. Elle ne doit être réalisée que manuellement dans la grande majorité des cas, car elle peut être assez destructrice.
Commandes SQL pour tous les programmeurs
SQL est un outil très courant, mais puissant, qui peut aider à extraire, transformer et charger des données depuis/dans des bases de données. L’essence même de l’interrogation de données repose sur SQL. Pour maîtriser le langage, vous devez savoir comment utiliser certaines commandes pour obtenir les meilleurs cas d'utilisation.