cours
Exemples de requêtes SQL et didacticiel
Qu'est-ce qu'une requête SQL ?
SQL est l'abréviation de Structured Query Language (langage de requête structuré). Les gens le prononcent souvent comme "S-Q-L" ou "sequel". SQL est utilisé en programmation et est conçu pour gérer les données stockées dans une base de données à l'aide de requêtes SQL.
Le type le plus courant de système de gestion de base de données(SGBD) est le système de gestion de base de données relationnelle(SGBDR), dans lequel nous stockons des données structurées, c'est-à-dire des données incorporant des relations entre des entités et des variables. Ces entités et variables sont organisées sous la forme d'un ensemble de tableaux avec des colonnes et des lignes. Parmi les SGBDR les plus populaires, citons MYSQL, Oracle, IBM DB2 et Microsoft SQL Server.
Dans un SGBDR, les données sont stockées dans un objet de base de données appelé tableau. Une base de données contient souvent plusieurs tableaux. Chaque tableau est identifié par un nom unique et contient une collection d'entrées de données connexes structurées en lignes et en colonnes.
Une colonne est une entité verticale ; elle est appelée champ et contient toutes les informations associées à un champ spécifique dans un tableau. Chaque ligne d'un tableau est appelée enregistrement; il s'agit de l'entité horizontale du tableau.
La structure d'une base de données peut ressembler à celle d'Excel. Toutefois, les bases de données sont généralement plus puissantes que les feuilles de calcul Excel. Voici trois raisons pour lesquelles vous pouvez l'affirmer :
- Les bases de données peuvent interagir avec de nombreux autres langages de programmation, ce qui permet au programmeur de gérer et d'extraire des informations à partir des données.
- Les bases de données peuvent traiter plus de données que les feuilles de calcul d'Excel. Excel peut traiter jusqu'à 1 million de lignes de données, alors qu'une base de données peut traiter plus d'un milliard de lignes.
- Les bases de données peuvent être plus facilement connectées à l'internet, ce qui permet à des centaines d'utilisateurs et d'applications d'y accéder simultanément.
Vous êtes impatient de commencer à utiliser SQL ? DataCamp dispose d'un matériel extraordinaire pour vous aider à démarrer ; learn SQL met en évidence les pistes que vous pouvez suivre pour perfectionner vos compétences en SQL !
Plongeons maintenant plus profondément dans les requêtes SQL...
Une requête SQL est une instruction construite en combinant plusieurs commandes SQL. Ces commandes SQL exécutent ensemble une tâche spécifique pour accéder, gérer, modifier, mettre à jour, contrôler et organiser vos données stockées dans une base de données et gérées par un SGBD.
Pourquoi utiliser SQL ?
Le langage SQL est incroyablement polyvalent et est utilisé par tous, des scientifiques des données aux ingénieurs, en passant par les spécialistes du marketing et les équipes de ressources humaines - en fait, par tous ceux qui souhaitent simplement maîtriser les données !
Elle n'est pas seulement utilisée dans les industries technologiques ou limitée aux grandes entreprises. De nombreuses industries de toutes tailles l'utilisent directement ou indirectement. Par exemple, les professionnels travaillant dans les secteurs de la finance et de la santé utilisent souvent SQL, étant donné la grande quantité de données qu'ils produisent.
Les données sont la nouvelle marchandise, et SQL est un outil très puissant lorsqu'il s'agit de manipuler et de travailler avec des données volumineuses. Vous vous demandez comment tirer le meilleur parti de SQL ? Consultez le tutoriel What can you do with SQL de DataCamp pour vous aider à répondre à cette question.
Comment écrire des requêtes SQL
Avant d'aborder la formulation de la requête elle-même, examinons la question : "Où dois-je écrire et exécuter ma requête SQL ?
Le hub Learn SQL de DataCamp peut être un bon point de départ pour permettre de travailler avec SQL sur une machine Mac ou Windows et de démarrer.
Mais si vous souhaitez simplement commencer à apprendre le langage natif des bases de données - SQL, vous pouvez commencer par le cours Introduction à SQL de DataCamp. Ce cours enseigne la syntaxe SQL partagée par de nombreux types de bases de données, telles que PostgreSQL, MySQL, SQL Server et Oracle. Vous travaillerez avec l'interface SQL intégrée de DataCamp et n'aurez pas à gérer les problèmes de configuration initiale d'un SGBDR.
DataCamp dispose également d'un outil de carnet de notes génial qui vous permet de créer vos propres carnets de notes : DataLab. DataLab est un bloc-notes collaboratif basé sur le cloud qui vous permet d'analyser des données, de collaborer avec votre équipe et de partager des idées. DataLab est conçu pour vous permettre de passer de l'apprentissage de la science des données à la pratique de la science des données. Grâce aux ensembles de données intégrés, vous pouvez commencer à analyser des données en quelques minutes.
Jetons maintenant un coup d'œil à l'ensemble de données avec lequel nous allons travailler dans ce tutoriel.
Nous commencerons par "films", un tableau SQL contenant les données de 10 films. Ces données ne sont qu'un petit sous-ensemble des données de l'ensemble de données IMDb Film utilisé dans le cours d'introduction à SQL de DataCamp que nous avons mentionné plus haut.
title |
release_year |
budget |
brut |
imdb_score |
|
1 |
Le Parrain |
1972 |
6000000 |
134821952 |
9.2 |
2 |
Le chevalier noir |
2008 |
185000000 |
533316061 |
9 |
3 |
Le Parrain : Partie II |
1974 |
13000000 |
57300000 |
9 |
4 |
La liste de Schindler |
1993 |
22000000 |
96067179 |
8.9 |
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
6 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
94000000 |
377019252 |
8.9 |
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
1980 |
18000000 |
290158751 |
8.8 |
10 |
La rédemption de Shawshank |
1994 |
25000000 |
28341469 |
9.3 |
Le tableau "films" contient dix enregistrements - les noms des films sont stockés sur dix rangées. Les champs sont les cinq colonnes du tableau qui contiennent les informations relatives au film.
- titre" est le nom du film
- release_year" est l'année de sortie du film.
- Le "budget" est le coût de production du film en dollars américains.
- Le "brut" est le montant que le film a rapporté en dollars américains.
- imdb_score" indique les notes obtenues à partir des votes soumis par les utilisateurs d'IMDb, et non par les critiques de cinéma.
Commençons l'exercice avec quelques commandes SQL de base, en les utilisant pour explorer le tableau "films" ci-dessus. Nous n'attendons pas de vous que vous exécutiez immédiatement les requêtes de la solution... mais plutôt que vous l'utilisiez comme base pour apprendre certains concepts clés. Ne vous inquiétez donc pas si vous n'avez pas encore choisi la plateforme à partir de laquelle vous souhaitez exécuter les requêtes.
Requêtes SQL de base
Gardez à l'esprit que les mots-clés ou les commandes SQL ne sont pas sensibles à la casse ; écrire "select" revient à écrire "SELECT".
Nous utiliserons un point-virgule à la fin de chaque instruction SQL que nous écrivons. C'est la norme dans certains systèmes de base de données, et cela permet de séparer chaque instruction SQL afin qu'elles puissent être exécutées lors du même appel au serveur.
Commençons par une question. Q1 : Quels sont les films stockés dans le tableau ?
SELECT - FROM
L'instruction SELECT est utilisée pour choisir les champs que vous souhaitez voir apparaître dans le tableau de la base de données. Pour Q1, vous voulez le champ "titre".
La commande/mot-clé FROM spécifie le tableau spécifique de la base de données à partir duquel vous souhaitez extraire les données. N'oubliez pas qu'une base de données peut être constituée de plusieurs tableaux.
Syntaxe : SELECT column1, column2, ... FROM table_name ;
Requête SQL : SELECT title FROM films ;
Résultat :
title |
|
1 |
Le Parrain |
2 |
Le chevalier noir |
3 |
Le Parrain : Partie II |
4 |
La liste de Schindler |
5 |
Pulp Fiction |
6 |
Le Seigneur des Anneaux : Le retour du roi |
7 |
Fight Club |
8 |
Inception |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
10 |
La rédemption de Shawshank |
Vous vous demandez peut-être ce qui se passe si vous n'avez jamais vu le tableau ci-dessus et que vous ne connaissez donc pas le nom des colonnes à spécifier dans l'instruction SELECT. C'est un bon point ! Nous reviendrons sur la magie du "*" (astérisque) un peu plus loin dans ce tutoriel.
OÙ
Q2 : Quels sont les films qui sortiront en 2010 ?
Pour cette question, vous souhaitez "filtrer" les films afin d'obtenir des noms de films qui remplissent la condition suivante : "release_year" est 2010.
Vous pouvez utiliser la clause "WHERE" pour extraire uniquement les enregistrements qui remplissent une condition donnée.
Syntaxe : SELECT column1, column2, ... FROM nom_table WHERE condition ;
Requête SQL: SELECT titre, année de sortie FROM films WHERE année de sortie = 2010 ;
Résultat:
title |
release_year |
|
1 |
Inception |
2010 |
Opérateurs dans la clause WHERE
Les opérateurs suivants peuvent être utilisés dans la clause WHERE :
Opérateur |
Description |
= |
Egale à |
> |
Supérieur à |
< |
Moins de |
>= |
Supérieur ou égal |
<= |
Inférieur ou égal |
<> ou != |
Pas d'égalité. |
ENTRE |
Entre une certaine fourchette |
LIKE |
Recherche d'un motif correspondant au motif donné |
IN |
Spécifie plusieurs valeurs possibles |
L'arithmétique dans SQL
Vous pouvez effectuer des opérations arithmétiques simples en SQL en utilisant les symboles mathématiques : +, -, *, /. Cependant, vous ne pouvez effectuer des opérations sur les colonnes qu'à l'aide de ces symboles arithmétiques. Vous pouvez également utiliser des parenthèses pour gérer l'ordre des opérations.
Mais n'ayez crainte, pour les opérations plus complexes, SQL dispose de fonctions d'agrégation qui vous permettent d'effectuer des opérations au sein d'une même ligne. Nous aborderons ce sujet plus loin dans le tutoriel.
Q3 : Calculez le bénéfice réalisé par chaque film dans le tableau "films".
Indice : Effectuez le calcul Brut - Budget et enregistrez le résultat dans une colonne appelée 'movie_profit' en utilisant AS
Requête SQL: SELECT titre, (brut - budget) AS movie_profit FROM films
Résultat:
title |
movie_profit |
|
1 |
Le Parrain |
128821952 |
2 |
Le chevalier noir |
348316061 |
3 |
Le Parrain : Partie II |
44300000 |
4 |
La liste de Schindler |
74067179 |
5 |
Pulp Fiction |
99930000 |
6 |
Le Seigneur des Anneaux : Le retour du roi |
283019252 |
7 |
Fight Club |
-25976605 |
8 |
Inception |
132568851 |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
272158751 |
10 |
La rédemption de Shawshank |
3341469 |
Avis de non-responsabilité: Les cinéphiles seront peut-être dérangés par les bénéfices négatifs de Fight Club. La formule utilisée ((brut - budget) AS movie_profit) est très simple et, compte tenu de la formule et des données, le résultat est correct.
Mais l'exemple ci-dessus a pour but de vous rappeler de faire attention au processus de collecte des données ! Même une simple exploration des données peut révéler des erreurs de données qui peuvent être dues à une erreur dans le processus de collecte ou de stockage des données (changement de type de données, etc.) - comme cela a pu être le cas lors de la création de l'ensemble de données utilisé.
Faites toujours attention aux données avec lesquelles vous travaillez !
ET, OU, NON
La clause WHERE peut être combinée avec d'autres clauses conditionnelles à l'aide des opérateurs AND, OR et NOT. Les opérateurs AND et OR sont utilisés pour filtrer les enregistrements sur la base de plusieurs conditions, et l'opérateur NOT est utilisé pour annuler une condition.
Voyons leur utilisation à l'aide d'exemples :
Q4 : Quels sont les films qui sortiront en 2010 et dont la note est supérieure à 9 ?
Syntaxe : SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 AND condition4..... ;
Requête SQL: SELECT titre, année de sortie, imdb_score FROM films WHERE année de sortie = 2010 AND imdb_score >= 9 ;
L'opérateur AND affiche un enregistrement si toutes les conditions séparées par AND sont vraies.
Dans le tableau 'films', nous avons le film 'Inception'. C'est la seule valeur qui est vraie pour release_year = 2010, mais elle est fausse pour imdb_score >= 9 et ne remplit donc pas la condition ET. La requête renvoie donc un ensemble de résultats vide.
Q5 : Quels sont les films qui sortiront en 2010 ou qui ont une note supérieure à 9 ?
Syntaxe : SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 OR condition4..... ;
Requête SQL: SELECT titre, année de sortie, imdb_score FROM films WHERE année de sortie = 2010 OR imdb_score >= 9 ;
Résultat:
title |
release_year |
imdb_score |
|
1 |
Le Parrain |
1972 |
9.2 |
2 |
Le chevalier noir |
2008 |
9 |
3 |
Le Parrain : Partie II |
1974 |
9 |
4 |
Inception |
2010 |
8.8 |
5 |
La rédemption de Shawshank |
1994 |
9.3 |
L'opérateur OR affiche un enregistrement si l'une des conditions séparées par OR est VRAIE.
Les films : Le Parrain, Le Chevalier Noir, Le Parrain : Part II, The Shawshank Redemption sont vrais pour imdb_score >= 9, tandis que Inception est vrai pour release_year = 2010, et ils sont donc retenus pour la condition OR.
Q6 : Quels sont les films dont l'année de sortie est différente de 2010 ?
Syntaxe : SELECT column1, column2, ... FROM nom_table WHERE NOT condition1 ;
Requête SQL: SELECT title, release_year FROM films WHERE NOT release_year = 2010 ;
Résultat:
title |
release_year |
|
1 |
Le Parrain |
1972 |
2 |
Le chevalier noir |
2008 |
3 |
Le Parrain : Partie II |
1974 |
4 |
La liste de Schindler |
1993 |
5 |
Pulp Fiction |
1994 |
6 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
7 |
Fight Club |
1999 |
8 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
1980 |
9 |
La rédemption de Shawshank |
1994 |
Vous pouvez également écrire : SELECT title, release_year FROM films WHERE release_year != 2010 ;
Vous obtiendrez le même résultat que ci-dessus.Il peut y avoir plusieurs façons d'obtenir le même résultat en SQL. Cependant, certaines requêtes peuvent être plus performantes que d'autres. Les performances peuvent dépendre de plusieurs facteurs : la quantité de données, les commandes utilisées dans la requête, la structure de la base de données, le type de données, etc. Il s'agit d'un sujet un peu plus compliqué et avancé que nous n'aborderons pas dans ce tutoriel sur les requêtes SQL.
Mais si vous êtes intéressé, le cours de DataCamp sur la conception de bases de données approfondit ces sujets.
ORDER BY
Le mot-clé ORDER BY est utilisé pour trier le résultat par ordre croissant (à l'aide du mot-clé ASC) ou décroissant (à l'aide du mot-clé DESC). Le tri est effectué par défaut dans l'ordre croissant.
Q7 : Quels sont les films stockés dans le tableau ? Classez-les par ordre décroissant de l'année de publication.
Syntaxe : SELECT column1, column2, ... FROM nom_table ORDER BY column1, column2, ... ASC|DESC;
Requête SQL: SELECT title, release_year FROM films ORDER BY release_year DESC ;
Résultat:
title |
release_year |
|
1 |
Inception |
2010 |
2 |
Le chevalier noir |
2008 |
3 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
4 |
Fight Club |
1999 |
5 |
Pulp Fiction |
1994 |
6 |
La rédemption de Shawshank |
1994 |
7 |
La liste de Schindler |
1993 |
8 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
1980 |
9 |
Le Parrain : Partie II |
1974 |
10 |
Le Parrain |
1972 |
LIMITE
Il peut arriver que la base de données prenne beaucoup de temps pour exécuter votre requête, en particulier si la quantité de données stockées dans la base de données est très importante.
La fonction LIMIT est un moyen simple et rapide de tester une requête ou d'échantillonner le type de résultat que vous obtenez. LIMIT vous permet de limiter le nombre de résultats obtenus.
Q8 : Quels sont les 5 derniers films les plus récents figurant dans le tableau ?
Indice : Triez l'ensemble des résultats par ordre décroissant en fonction de l'année de publication, puis utilisez la fonction LIMIT.
Syntaxe : SELECT column1, column2, ... FROM table_name LIMIT x ;
Requête SQL: SELECT title, release_year FROM films ORDER BY release_year DESC LIMIT 5 ;
Résultat:
title |
release_year |
|
1 |
Inception |
2010 |
2 |
Le chevalier noir |
2008 |
3 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
4 |
Fight Club |
1999 |
5 |
Pulp Fiction |
1994 |
INSERT INTO
INSERT INTO est utilisé pour ajouter de nouveaux enregistrements dans un tableau de base de données. Vous pouvez écrire une instruction INSERT INTO de deux manières :
- Indiquez les noms des deux colonnes ainsi que les valeurs correspondantes.
Syntaxe : INSERT INTO nom_table (colonne1, colonne2, colonne3, ...) VALUES (value1, value2, value3, ...) ;
- Si vous ajoutez des valeurs pour TOUTES les colonnes du tableau, il n'est pas nécessaire de spécifier les noms des colonnes dans la requête. Soyez prudent lorsque vous utilisez cette méthode, et assurez-vous que l'ordre des valeurs est le même que celui des colonnes du tableau.
Syntaxe : INSERT INTO table_name VALUES (value1, value2, value3, ...) ;
Q9 : Ajouter une entrée pour "Le Parrain : Part III" dans le tableau avec les détails : ("Le Parrain : Partie III", 1990, 54000000, 136900000, 7.6)
Syntaxe : SELECT column1, column2, ... FROM nom_table ORDER BY column1, column2,... ASC|DESC;
Requête SQL: INSERT INTO films (title, release_year, budget, gross, imdb_score)
VALEURS ("Le Parrain : Part III", 1970, 54000000, 136900000, 7.6) ;
Tableau résultant:
title |
release_year |
budget |
brut |
imdb_score |
|
1 |
Le Parrain |
1972 |
6000000 |
134821952 |
9.2 |
2 |
Le chevalier noir |
2008 |
185000000 |
533316061 |
9 |
3 |
Le Parrain : Partie II |
1974 |
13000000 |
57300000 |
9 |
4 |
La liste de Schindler |
1993 |
22000000 |
96067179 |
8.9 |
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
6 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
94000000 |
377019252 |
8.9 |
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
1980 |
18000000 |
290158751 |
8.8 |
10 |
La rédemption de Shawshank |
1994 |
25000000 |
28341469 |
9.3 |
11 |
Le Parrain : Partie III |
1970 |
54000000 |
136900000 |
7.6 |
MISE À JOUR
L'instruction UPDATE permet de modifier les tableaux existants.
Q10 : Corrigez l'année de sortie de "Le Parrain" : Partie III" : 1990 au lieu de 1970
Syntaxe : UPDATE nom_table SET colonne1 = valeur1, colonne2 = valeur2, ...WHERE condition ;
Requête SQL: UPDATE films SET release_year = 1990 WHERE title = 'Le Parrain' : Partie III" ;
Tableau résultant:
title |
release_year |
budget |
brut |
imdb_score |
|
1 |
Le Parrain |
1972 |
6000000 |
134821952 |
9.2 |
2 |
Le chevalier noir |
2008 |
185000000 |
533316061 |
9 |
3 |
Le Parrain : Partie II |
1974 |
13000000 |
57300000 |
9 |
4 |
La liste de Schindler |
1993 |
22000000 |
96067179 |
8.9 |
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
6 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
94000000 |
377019252 |
8.9 |
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
1980 |
18000000 |
290158751 |
8.8 |
10 |
La rédemption de Shawshank |
1994 |
25000000 |
28341469 |
9.3 |
11 |
Le Parrain : Partie III |
1990 |
54000000 |
136900000 |
7.6 |
DELETE
L'instruction DELETE est utilisée pour supprimer un enregistrement existant dans un tableau.
Q11 : Supprimer l'entrée "Le Parrain" : Part III" dans le tableau "films".
Syntaxe : DELETE FROM nom_table WHERE condition ;
Requête SQL: DELETE FROM films WHERE title = 'Le Parrain' : Partie III" ;
Tableau résultant: Même chose que pour le tableau original que nous avons commencé avec un total de 10 enregistrements.
Requêtes SQL avancées
Rappelez-vous que nous avons placé le "*" magique pour une discussion ultérieure à la fin de Q1 ? Le * est un astérisque. Il s'agit d'un caractère global que l'on pourrait interpréter comme "tout".
Le retour de Q1 : Quels sont les films stockés dans le tableau ?
Nous avons utilisé SELECT - FROM avec la syntaxe : SELECT column1, column2, ... FROM table_name ;
Nous avons utilisé la requête : SELECT title FROM films ;
Mais que se passerait-il si vous ne saviez pas que "titre" est un champ du tableau "films" ? Ou le nom d'un champ quelconque du tableau ? Ou bien vous voulez simplement connaître tous les champs du tableau pour vous faire une idée des données ? C'est là que * s'avère utile.
Nous pourrions réécrire la requête comme suit : SELECT * FROM films ;
Nous obtiendrons ainsi tous les tableaux disponibles dans le tableau.
Caractères de remplacement SQL
LIKE
L'opérateur LIKE est utilisé dans une clause WHERE pour rechercher un motif spécifique dans une colonne.
Q12 : Récupérer tous les noms de films commençant par "The".
Syntaxe : SELECT column1, column2, ... FROM table_name WHERE column1 LIKE patternToMatch ;
Requête SQL: Select * FROM films WHERE title LIKE 'The%' ;
Tableau résultant:
title |
release_year |
budget |
brut |
imdb_score |
|
1 |
Le Parrain |
1972 |
6000000 |
134821952 |
9.2 |
2 |
Le chevalier noir |
2008 |
185000000 |
533316061 |
9 |
3 |
Le Parrain : Partie II |
1974 |
13000000 |
57300000 |
9 |
4 |
Le Seigneur des Anneaux : Le retour du roi |
2003 |
94000000 |
377019252 |
8.9 |
5 |
La rédemption de Shawshank |
1994 |
25000000 |
28341469 |
9.3 |
Caractère de remplacement |
Description |
Utilisation : Exemple |
(Pourcentage) |
Représente zéro ou plusieurs caractères |
Le% : Le, Le Parrain, Theodore |
(Moins de points) |
Représente un seul caractère |
T_e : La, cravate |
[ ] (Crochets) |
Représente n'importe quel caractère à l'intérieur des crochets |
C[ao]t : Chat, Cot mais pas Coat |
^ (Cale) |
Représente tout caractère qui n'est pas entre crochets |
Ca[^r] : Cat, Cab, Can mais pas Car |
- (Dash) |
Représente tout caractère unique dans la plage spécifiée |
C[a-o] : Can, Cab mais pas Car, Cat |
Ce qui est formidable, c'est que nous pouvons utiliser des caractères génériques dans des combinaisons ! Vous pouvez donc créer des instructions de correspondance assez complexes en utilisant des caractères génériques et LIKE.
Fonctions agrégées
SQL est excellent pour agréger des données comme vous le feriez dans un tableau croisé dynamique dans Excel. Les fonctions d'agrégation peuvent effectuer des calculs non pas entre deux colonnes, mais à l'intérieur d'une colonne, ce qui permet de travailler avec toutes les lignes ou certaines lignes d'une même colonne.
Il s'agit des fonctions d'agrégation de SQL :
Fonction |
Description |
PAYS |
Compte le nombre d'enregistrements dans une colonne particulière |
SUM |
Additionne toutes les valeurs d'une colonne particulière |
MIN |
Renvoie la valeur la plus basse d'une colonne particulière |
MAX |
Renvoie les valeurs les plus élevées d'une colonne particulière |
AVG |
Renvoie la valeur moyenne pour un groupe sélectionné |
Q13 : Quel est le dernier film stocké dans le tableau ?
Requête SQL: SELECT title AS latest_movie, MAX(release_year) AS released_in FROM films ;
Résultat:
latest_movie |
libéré_in |
|
1 |
Inception |
2010 |
GROUPE PAR
Les fonctions d'agrégation SQL agrègent une colonne entière. Mais que se passe-t-il si vous ne souhaitez agréger qu'une partie d'une colonne ? Par exemple, vous pourriez vouloir compter le nombre de films sortis en une année.
C'est ici que vous aurez besoin d'une clause GROUP BY. GROUP BY vous permet de séparer les données en groupes, qui peuvent ensuite être agrégés indépendamment les uns des autres.
Q13 : Comptez le nombre de films sortis en une année.
Requête SQL: SELECT release_year, COUNT(*) AS number_of_movies FROM films GROUP BY release_year ;
Résultat:
release_year |
number_of_movies |
|
1 |
1972 |
1 |
2 |
2008 |
1 |
3 |
1974 |
1 |
4 |
1993 |
1 |
5 |
1994 |
2 |
6 |
2003 |
1 |
7 |
1999 |
1 |
8 |
2010 |
1 |
9 |
1980 |
1 |
Exemples de requêtes SQL à partir de plusieurs tableaux
Jusqu'à présent, nous avons travaillé avec un seul tableau à la fois. Mais la véritable puissance des bases de données et du langage SQL réside dans la possibilité de travailler avec des données provenant de plusieurs tableaux.
Le terme "base de données relationnelle" dans les SGBDR vient du fait que les tableaux de la base de données sont liés les uns aux autres. Ils possèdent des identifiants communs qui permettent de combiner facilement des données provenant de plusieurs tableaux. C'est ici que nous utilisons les JOINTS de tableaux SQL.
Prenons un exemple simple pour nous familiariser avec la syntaxe des JOIN et en apprendre un peu plus sur les différents types de JOIN possibles.
Considérons un autre tableau appelé "movieDirectors" qui contient le nom du réalisateur de certains des films figurant dans le tableau "films".
title |
directeur |
|
1 |
Le Parrain |
Francis Ford Coppola |
2 |
Le Parrain : Partie II |
Francis Ford Coppola |
3 |
Le Parrain : Partie III |
Francis Ford Coppola |
4 |
La liste de Schindler |
Steven Spielberg |
5 |
The Dark Knight Rises (Le Chevalier Noir) |
Christopher Nolan |
Nous pourrions combiner les données de ces deux tableaux en utilisant un identifiant commun : "titre".
Q14 : Ajoutez une colonne au tableau "Films", en y insérant le nom du réalisateur figurant dans le tableau "Réalisateurs de films".
Syntaxe : SELECT leftTable.column1, rightTable.column1, leftTable.column2.... FROM leftTable INNER JOIN rightTable ON leftTable.commonIdentifier = rightTable.commonIdentifier ;
Requête SQL: Select films.title, films.release_year, movieDirectors.director FROM films INNER JOIN movieDirectors ON films.title = movieDirectors.title
Résultat:
title |
release_year |
directeur |
|
1 |
Le Parrain |
1972 |
Francis Ford Coppola |
2 |
Le Parrain : Partie II |
1974 |
Francis Ford Coppola |
3 |
La liste de Schindler |
1993 |
Steven Spielberg |
Différents types de jointures SQL
JOIN |
Description |
Schéma |
Jointure interne |
Renvoie uniquement les enregistrements dont les valeurs correspondent dans les deux tableaux. |
|
Jointure gauche (externe) |
Renvoie tous les tableaux du tableau de gauche et les enregistrements correspondants du tableau de droite. |
|
Jointure droite (externe) |
Renvoie tous les enregistrements du tableau de droite et les enregistrements correspondants du tableau de gauche. |
|
Jointure complète (externe) |
Renvoie tous les tableaux lorsqu'il y a une correspondance dans le tableau de gauche ou de droite. |
Dans l'exemple de requête ci-dessus, "films" est le tableau de gauche et "movieDirectors" est le tableau de droite. Par conséquent, avec le INNER JOIN que nous avons effectué, nous n'avons récupéré que les films qui existaient dans les deux tableaux. L'ensemble des résultats est une intersection des deux tableaux.
SQL UNION
Les JOINTS SQL vous permettent de combiner deux ensembles de données côte à côte. Mais avec SQL UNION, vous pouvez empiler un ensemble de données sur un autre. L'opérateur UNION est utilisé pour combiner l'ensemble des résultats de deux ou plusieurs instructions SELECT lorsque les "règles" suivantes sont respectées :
- Chaque instruction SELECT doit comporter le même nombre de colonnes.
- Les colonnes doivent également avoir des types de données similaires.
- Les colonnes utilisées dans les instructions SELECT doivent être dans le même ordre.
Syntaxe : SELECT nom_de_colonne(s) FROM table1 UNION ALL SELECT nom_de_colonne(s) FROM table2 ;
Prenons le tableau "films_2000s" :
title |
release_year |
budget |
brut |
imdb_score |
|
1 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
2 |
Le procès des 7 de Chicago |
2020 |
35000000 |
7.7 |
Si nous combinons les deux tableaux...
Requête SQL: SELECT title FROM films UNION SELECT title FROM movies_2000s ;
Résultat:
title |
|
1 |
Le Parrain |
2 |
Le chevalier noir |
3 |
Le Parrain : Partie II |
4 |
La liste de Schindler |
5 |
Pulp Fiction |
6 |
Le Seigneur des Anneaux : Le retour du roi |
7 |
Fight Club |
8 |
Inception |
9 |
La guerre des étoiles : Épisode V - L'Empire contre-attaque |
10 |
La rédemption de Shawshank |
12 |
Le procès des 7 de Chicago |
Vous avez peut-être remarqué que "Inception" n'apparaît qu'une seule fois dans l'ensemble des résultats. En effet, UNION ne sélectionne que des valeurs distinctes ; si vous voulez toutes les valeurs, vous pouvez utiliser UNION ALL.
Requêtes SQL imbriquées
SQL est capable de faire des merveilles avec les données. Les requêtes imbriquées sont un autre outil de SQL qui en fait un langage qu'il vaut la peine de connaître. Une requête imbriquée n'est rien d'autre qu'une requête à l'intérieur d'une autre requête (un peu comme les rêves dans Inception !).
Avec les requêtes imbriquées, vous pouvez effectuer des opérations très compliquées, mais en plusieurs étapes, tout en préservant la lisibilité et la compréhensibilité du code.
Q15 : Déterminez la rentabilité moyenne des films figurant dans le tableau "films".
Indice : Vous avez calculé la rentabilité plus tôt, avec Q3. Vous devez maintenant prendre le résultat de cette requête et lui appliquer la fonction AVG.
Requête imbriquée SQL:
SELECT AVG(*) AS average_profit FROM
(SELECT title, (gross - budget) AS movie_profit FROM films where gross > budget) ;
Nous avons supprimé la valeur négative de "Fight Club" dans le calcul de la requête SQL interne en ajoutant brut > budget.
Dans la requête imbriquée ci-dessus, la requête interne est d'abord exécutée, puis l'ensemble des résultats est utilisé comme tableau temporaire à partir duquel la requête externe peut interroger et obtenir des données.
Nous ne nous attarderons pas trop sur le sujet des requêtes SQL imbriquées. Mais nous vous recommandons vivement de suivre le cours SQL intermédiaire de DataCamp pour maîtriser les requêtes SQL. Vous jouerez avec la base de données du football européen tout en apprenant davantage sur les requêtes imbriquées. Vous découvrirez également les instructions CASE et les fonctions de fenêtre - des sujets que nous n'avons pas pu aborder dans ce tutoriel sur les requêtes SQL.
Dernières réflexions
Vous avez beaucoup appris sur les requêtes SQL et vous êtes bien placé pour commencer à résoudre des problèmes concrets à l'aide de SQL. Dans ce tutoriel sur les requêtes SQL, vous avez appris ce qu'est une requête SQL et comment écrire des requêtes SQL.
Vous avez vu la syntaxe de la requête et répondu à quelques questions en cours de route. Nous avons commencé par des exemples de requêtes SQL simples utilisant les instructions SELECT - FROM - WHERE et nous sommes passés à des requêtes SQL légèrement plus complexes utilisant les jointures, l'union et les requêtes imbriquées.
Nous avons couvert beaucoup de choses dans le tutoriel, mais il ne s'agit PAS d'une liste exhaustive de toutes les requêtes SQL simples et avancées possibles - il y en a d'autres. Et nous vous recommandons vivement de suivre le cursus SQL Fundamentals de DataCamp pour acquérir une compréhension plus approfondie et plus complète de SQL.
Rappelez-vous que la pratique est la clé de la maîtrise de toute compétence et que le langage SQL ne fait pas exception à la règle ! Practise vous permettra d'acquérir des compétences SQL de niveau débutant à avancé.
Alors, lancez-vous et bonne recherche !
Devenez ingénieur en données
Cours pour SQL
cours
Analyser des données commerciales avec SQL
cours