Comment gérer une base de données SQL

Un aide-mémoire SQL

introduction

Les bases de données SQL sont installées avec toutes les commandes nécessaires pour ajouter, modifier, supprimer et interroger vos données. Ce guide de style aide-mémoire fournit une référence rapide à certaines des commandes SQL les plus utilisées.

Comment utiliser ce guide:

  • Ce guide est au format aide-mémoire avec des extraits de ligne de commande autonomes.

  • Accédez à n'importe quelle section pertinente à la tâche que vous tentez de terminer.

  • Lorsque vous voyezhighlighted text dans les commandes de ce guide, n'oubliez pas que ce texte doit faire référence aux colonnes, tables et données de la base de donnéesyour own.

  • Tout au long de ce guide, les exemples de valeurs de données sont tous enveloppés dans des apostrophes ('). En SQL, il est nécessaire d'encapsuler les valeurs de données constituées de chaînes dans des apostrophes. Cela n’est pas nécessaire pour les données numériques, mais cela ne posera pas non plus de problème si vous incluez des apostrophes.

Veuillez noter que, bien que SQL soit reconnu comme standard, la plupart des programmes de base de données SQL possèdent leurs propres extensions propriétaires. Ce guide utilise MySQL comme exemple de système de gestion de base de données relationnelle (SGBDR), mais les commandes données fonctionneront avec d’autres programmes de base de données relationnelle, notamment PostgreSQL, MariaDB et SQLite. Lorsqu'il existe des différences significatives entre les SGBDR, nous avons inclus les commandes alternatives.

Ouverture de l'invite de base de données (à l'aide de l'authentification Socket / Trust)

Par défaut sur Ubuntu 18.04, l'utilisateur MySQL deroot peut s'authentifier sans mot de passe à l'aide de la commande suivante:

sudo mysql

Pour ouvrir une invite PostgreSQL, utilisez la commande suivante. Cet exemple vous connectera en tant qu'utilisateurpostgres, qui est le rôle de superutilisateur inclus, mais vous pouvez le remplacer par n'importe quel rôle déjà créé:

sudo -u postgres psql

Ouverture de l'invite de base de données (à l'aide de l'authentification par mot de passe)

Si votre utilisateur MySQL deroot est configuré pour s'authentifier avec un mot de passe, vous pouvez le faire avec la commande suivante:

mysql -u root -p

Si vous avez déjà configuré un compte utilisateur non root pour votre base de données, vous pouvez également utiliser cette méthode pour vous connecter en tant qu'utilisateur:

mysql -u user -p

La commande ci-dessus vous demandera votre mot de passe après l'avoir exécuté. Si vous souhaitez fournir votre mot de passe dans le cadre de la commande, suivez immédiatement l'option-p avec votre mot de passe, sans espace entre eux:

mysql -u root -ppassword

Création d'une base de données

La commande suivante crée une base de données avec les paramètres par défaut.

CREATE DATABASE database_name;

Si vous souhaitez que votre base de données utilise un jeu de caractères et un classement différent de ceux par défaut, vous pouvez spécifier ceux-ci à l'aide de cette syntaxe:

CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;

Liste des bases de données

Pour voir quelles bases de données existent dans votre installation MySQL ou MariaDB, exécutez la commande suivante:

SHOW DATABASES;

Dans PostgreSQL, vous pouvez voir quelles bases de données ont été créées avec la commande suivante:

\list

Suppression d'une base de données

Pour supprimer une base de données, y compris les tables et les données qu'elle contient, exécutez une commande qui suit cette structure:

DROP DATABASE IF EXISTS database;

Créer un utilisateur

Pour créer un profil utilisateur pour votre base de données sans spécifier aucun privilège, exécutez la commande suivante:

CREATE USER username IDENTIFIED BY 'password';

PostgreSQL utilise une syntaxe similaire mais légèrement différente:

CREATE USER user WITH PASSWORD 'password';

Si vous souhaitez créer un nouvel utilisateur et lui accorder des privilèges dans une seule commande, vous pouvez le faire en émettant une instructionGRANT. La commande suivante crée un nouvel utilisateur et leur octroie tous les privilèges sur chaque base de données et table du SGBDR:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

Notez le mot-cléPRIVILEGES dans cette instructionGRANT précédente. Dans la plupart des SGBDR, ce mot-clé est optionnel et cette instruction peut être écrite de la manière suivante:

GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

Sachez cependant que le mot-cléPRIVILEGES est requis pour accorder de tels privilèges lorsqueStrict SQL mode est activé.

Supprimer un utilisateur

Utilisez la syntaxe suivante pour supprimer un profil d'utilisateur de base de données:

DROP USER IF EXISTS username;

Notez que cette commande ne supprime pas par défaut les tables créées par l'utilisateur supprimé et toute tentative d'accès à ces tables peut entraîner des erreurs.

Sélection d'une base de données

Avant de pouvoir créer une table, vous devez d’abord indiquer au SGBDR la base de données dans laquelle vous souhaitez le créer. Dans MySQL et MariaDB, utilisez la syntaxe suivante:

USE database;

Dans PostgreSQL, vous devez utiliser la commande suivante pour sélectionner la base de données souhaitée:

\connect database

Créer une table

La structure de commande suivante crée une nouvelle table avec le nomtable et comprend deux colonnes, chacune avec son propre type de données spécifique:

CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );

Supprimer une table

Pour supprimer entièrement une table, y compris toutes ses données, exécutez ce qui suit:

DROP TABLE IF EXISTS table

Insertion de données dans une table

Utilisez la syntaxe suivante pour remplir une table avec une ligne de données:

INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );

Vous pouvez également remplir une table avec plusieurs lignes de données à l'aide d'une seule commande, comme suit:

INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ),  ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );

Supprimer des données d'une table

Pour supprimer une ligne de données d'une table, utilisez la structure de commande suivante. Notez quevalue doit être la valeur contenue dans lescolumn spécifiés dans la ligne que vous souhaitez supprimer:

DELETE FROM table WHERE column='value';

[.Remarque]##

Note: Si vous n'incluez pas de clauseWHERE dans une instructionDELETE, comme dans l'exemple suivant, cela supprimera toutes les données contenues dans une table, mais pas les colonnes ou la table lui-même:

DELETE FROM table;

Changer les données dans une table

Utilisez la syntaxe suivante pour mettre à jour les données contenues dans une ligne donnée. Notez que la clauseWHERE à la fin de la commande indique à SQL la ligne à mettre à jour. value est la valeur contenue danscolumn_A qui s'aligne avec la ligne que vous souhaitez modifier.

[.note] #Note: Si vous ne parvenez pas à inclure une clauseWHERE dans une instructionUPDATE, la commande remplacera les données contenues dans chaque ligne de la table.
#

UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;

Insérer une colonne

La syntaxe de commande suivante ajoutera une nouvelle colonne à une table:

ALTER TABLE table ADD COLUMN column data_type;

Supprimer une colonne

Une commande suivant cette structure supprimera une colonne d'une table:

ALTER TABLE table DROP COLUMN column;

Effectuer des requêtes de base

Pour afficher toutes les données d'une seule colonne dans une table, utilisez la syntaxe suivante:

SELECT column FROM table;

Pour interroger plusieurs colonnes de la même table, séparez les noms de colonnes par une virgule:

SELECT column_1, column_2 FROM table;

Vous pouvez également interroger chaque colonne d'une table en remplaçant les noms des colonnes par un astérisque (*). En SQL, les astérisques servent d’espaces réservés pour représenter «tous»:

SELECT * FROM table;

Utilisation des clauses WHERE

Vous pouvez affiner les résultats d'une requête en ajoutant l'instructionSELECT avec une clauseWHERE, comme ceci:

SELECT column FROM table WHERE conditions_that_apply;

Par exemple, vous pouvez interroger toutes les données d'une seule ligne avec une syntaxe semblable à celle-ci. Notez quevalue doit être une valeur contenue à la fois dans lescolumn spécifiés et dans la ligne que vous souhaitez interroger:

SELECT * FROM table WHERE column = value;

Travailler avec des opérateurs de comparaison

Un opérateur de comparaison dans une clauseWHERE définit comment la colonne spécifiée doit être comparée à la valeur. Voici quelques opérateurs de comparaison SQL courants:

Opérateur Ce qu'il fait

=

tests d'égalité

!=

tests d'inégalité

<

tests pour moins de

>

tests pour supérieur à

<=

tests pour inférieur ou égal à

>=

tests pour supérieur ou égal à

BETWEEN

teste si une valeur se situe dans une plage donnée

IN

teste si la valeur d'une ligne est contenue dans un ensemble de valeurs spécifiées

EXISTS

teste si des lignes existent, étant donné les conditions spécifiées

LIKE

teste si une valeur correspond à une chaîne spécifiée

IS NULL

teste les valeursNULL

IS NOT NULL

teste toutes les valeurs autres queNULL

Travailler avec des wildcards

SQL permet l'utilisation de caractères génériques. Celles-ci sont utiles si vous essayez de trouver une entrée spécifique dans une table, mais ne savez pas exactement quelle est cette entrée.

Les astérisques (*) sont des espaces réservés qui représentent «tout», cela interrogera chaque colonne d'une table:

SELECT * FROM table;

Les signes de pourcentage (%) représentent zéro ou plusieurs caractères inconnus.

SELECT * FROM table WHERE column LIKE val%;

Les traits de soulignement (_) sont utilisés pour représenter un seul caractère inconnu:

SELECT * FROM table WHERE column LIKE v_lue;

Compter les entrées dans une colonne

La fonctionCOUNT est utilisée pour trouver le nombre d'entrées dans une colonne donnée. La syntaxe suivante retournera le nombre total de valeurs contenues danscolumn:

SELECT COUNT(column) FROM table;

Vous pouvez affiner les résultats d'une fonctionCOUNT en ajoutant une clauseWHERE, comme ceci:

SELECT COUNT(column) FROM table WHERE column=value;

Recherche de la valeur moyenne dans une colonne

La fonctionAVG est utilisée pour trouver la moyenne (dans ce cas, la moyenne) parmi les valeurs contenues dans une colonne spécifique. Notez que la fonctionAVG ne fonctionnera qu'avec des colonnes contenant des valeurs numériques; lorsqu'il est utilisé sur une colonne contenant des valeurs de chaîne, il peut renvoyer une erreur ou0:

SELECT AVG(column) FROM table;

Recherche de la somme des valeurs dans une colonne

La fonctionSUM est utilisée pour trouver la somme totale de toutes les valeurs numériques contenues dans une colonne:

SELECT SUM(column) FROM table;

Comme avec la fonctionAVG, si vous exécutez la fonctionSUM sur une colonne contenant des valeurs de chaîne, elle peut renvoyer une erreur ou simplement0, selon votre SGBDR.

Recherche de la plus grande valeur dans une colonne

Pour rechercher la plus grande valeur numérique dans une colonne ou la dernière valeur par ordre alphabétique, utilisez la fonctionMAX:

SELECT MAX(column) FROM table;

Recherche de la plus petite valeur dans une colonne

Pour trouver la plus petite valeur numérique dans une colonne ou la première valeur par ordre alphabétique, utilisez la fonctionMIN:

SELECT MIN(column) FROM table;

Tri des résultats avec les clauses ORDER BY

Une clauseORDER BY est utilisée pour trier les résultats de la requête. La syntaxe de requête suivante renvoie les valeurs decolumn_1 etcolumn_2 et trie les résultats en fonction des valeurs contenues danscolumn_1 par ordre croissant ou, pour les valeurs de chaîne, par ordre alphabétique:

SELECT column_1, column_2 FROM table ORDER BY column_1;

Pour effectuer la même action, mais classer les résultats par ordre alphabétique décroissant ou inversé, ajoutez à la requêteDESC:

SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;

Tri des résultats avec les clauses GROUP BY

La clauseGROUP BY est similaire à la clauseORDER BY, mais elle est utilisée pour trier les résultats d'une requête qui inclut une fonction d'agrégation telle queCOUNT,MAX,MIN ouSUM. A elles seules, les fonctions d'agrégation décrites dans la section précédente ne renverront qu'une seule valeur. Cependant, vous pouvez afficher les résultats d'une fonction d'agrégation exécutée sur chaque valeur correspondante dans une colonne en incluant une clauseGROUP BY.

La syntaxe suivante comptera le nombre de valeurs correspondantes encolumn_2 et les regroupera par ordre croissant ou alphabétique:

SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;

Pour effectuer la même action, mais regrouper les résultats par ordre alphabétique décroissant ou inversé, ajoutez à la requêteDESC:

SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;

Interrogation de plusieurs tables avec des clauses JOIN

Les clausesJOIN sont utilisées pour créer des ensembles de résultats qui combinent des lignes de deux tables ou plus:

SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;

Ceci est un exemple de clauseINNER JOIN. UnINNER JOIN renverra tous les enregistrements qui ont des valeurs correspondantes dans les deux tables, mais n'affichera aucun enregistrement qui n'a pas de valeurs correspondantes.

Il est possible de renvoyer tous les enregistrements de l’une des deux tables, y compris les valeurs qui n’ont pas de correspondance correspondante dans l’autre table, en utilisant une clauseouterJOIN. Les clausesJOIN externes sont écrites sous la formeLEFT JOIN ouRIGHT JOIN.

Une clauseLEFT JOIN renvoie tous les enregistrements de la table «gauche» et uniquement les enregistrements correspondants de la table «droite». Dans le contexte des clauses externesJOIN, la table de gauche est celle référencée dans la clauseFROM et la table de droite est toute autre table référencée après l'instructionJOIN. Ce qui suit affichera tous les enregistrements detable_1 et uniquement les valeurs correspondantes detable_2. Toutes les valeurs qui n'ont pas de correspondance danstable_2 apparaîtront sous la formeNULL dans le jeu de résultats:

SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;

Une clauseRIGHT JOIN fonctionne de la même manière qu'unLEFT JOIN, mais elle imprime tous les résultats de la table de droite, et uniquement les valeurs correspondantes de la gauche:

SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;

Combinaison de plusieurs instructions SELECT avec des clauses UNION

Un opérateurUNION est utile pour combiner les résultats de deux (ou plus) instructionsSELECT en un seul jeu de résultats:

SELECT column_1 FROM table UNION SELECT column_2 FROM table;

De plus, la clauseUNION peut combiner deux (ou plus) instructionsSELECT interrogeant différentes tables dans le même jeu de résultats:

SELECT column FROM table_1 UNION SELECT column FROM table_2;

Conclusion

Ce guide couvre certaines des commandes SQL les plus courantes utilisées pour gérer les bases de données, les utilisateurs et les tables, ainsi que pour interroger le contenu de ces tables. Cependant, il existe de nombreuses combinaisons de clauses et d'opérateurs qui produisent tous des ensembles de résultats uniques. Si vous recherchez un guide plus complet sur l'utilisation de SQL, nous vous encourageons à consulterOracle’s Database SQL Reference.

De plus, s’il existe des commandes SQL courantes que vous voudriez voir dans ce guide, veuillez demander ou faire des suggestions dans les commentaires ci-dessous.