Archives Wild Code School
Microsoft SQL Server

C 1. Structured Query Language - SELECT

Quête 2 sur 7 · 1 image archivée

Après cette quête, tu sauras récupérer des informations d'une base de données à l'aide de la requête SELECT

Objectifs

  • Effectuer une requête de sélection
  • Sélectionner seulement quelques champs
  • Filtrer les résultats de la sélection avec la clause WHERE

Le grand espionnage

Tu es patron d'une entreprise. Cette entreprise fonctionne bien depuis quelques années, mais tu n'arrives à augmenter ni le rendement, ni ton chiffre d'affaires. La croissance de ton entreprise stagne depuis plusieurs années.

T'étant penché sur le sujet afin de le résoudre, t'est venue comme conclusion qu'il te fallait embaucher plus de gens pour fournir un meilleur rendement. Problème, dans ton secteur d'activité, peu de personnes sont disponibles et compétentes et tu n'as pas le temps de parcourir tous les réseaux sociaux à la recherche de perles.

Au cours d’un dîner d'affaires avec le responsable du service des renseignements, tu as ouï dire qu'il existe une base de données étatique recensant, grâce aux réseaux sociaux, toutes les personnes possibles.

Après quelques verres, tu réussis à lui soutirer l'adresse web de la base et son mot de passe.

Le lendemain, tu décides de commencer l'exploitation de la base afin de cibler des profils recrutables.

Mais attends ... Comment est-ce qu'on récupère des informations dans une base de données ?

Sélectionner des données

Une base de données sert à stocker des informations persistant dans le temps. La première des choses à apprendre est donc de savoir comment récupérer les données stockées.

Le langage SQL met à disposition des requêtes qui permettent de réaliser des opérations différentes. La requête de sélection de données dans un ensemble est la requête SELECT. Un point-virgule marque la fin d'une requête.

La syntaxe de la requête SELECT est la suivante :

sql
SELECT [fields] FROM [table_name];

Deux champs sont à préciser dans la requête ci-dessus : fields et table_name:

  • fields sont des noms de champs séparés, chacun étant séparé par une virgule

  • table_name est le nom de la table dans laquelle la sélection va être faite

Après le mot-clé FROM se situe le nom de la table dans laquelle les enregistrements seront récupérés.

Concrètement, si je veux sélectionner les champs age et size de la table humans, j'exécute cette requête :

sql
SELECT age, size FROM humans;

La requête ci-dessus va récupérer tous les humains et afficher la taille et l'âge de chacun des humains dans la base de données.

Il est aussi possible de récupérer tous les champs avec un wildcard (*):

sql
SELECT * FROM humans;

La requête ci-dessus sélectionne tous les enregistrements dans la table humans et affiche tous leurs champs.

↗
Interactif: Requête SELECT

Fais les exercices proposés à la fin !

Et si je veux appeler le champ size autrement, comment je m'y prends ?

w3schools.com
↗
La requête SELECT
sqlservertutorial.net

Les alias

SQL met à disposition un mécanisme qui permet de renommer les champs que tu sélectionnes. En effet, parfois, lorsque l'on récupère des données d'une table, les noms des champs appartenant aux enregistrements sont parfois inintelligibles ou ne conviennent pas à l'utilisation prévue.

Pour renommer les champs afin que le nom soit plus évocateur pour un utilisateur (ou pour d'autres raisons), un mot-clé existe: AS.

Ce mot-clé se place juste après le nom du champ récupéré et le nom du champ affiché lui succède :

sql
SELECT 
    has_work AS "Is currently working somewhere",
    apple_eaten AS "Quantity of apples eaten"
FROM humans;

La requête ci-dessus affiche le champ has_work comme Is currently working somewhere et le champ apple_quantity comme Quantity of apples eaten dans le tableau de résultats.

Cette fonctionnalité est très utile pour la restitution d'informations aux utilisateurs, et dans d'autres cas lorsque (plus loin sur ton parcours) tu feras des agrégations de données et/ou des traitements sur les champs que tu sélectionnes avant de les restituer, ou alors quand tu feras des jointures complexes entre plusieurs tables. Dans tous les cas, les alias peuvent se montrer très utiles, voire essentiels dans certains cas.

↗
Utilisation des alias

J'aimerais bien pouvoir ne sélectionner que des enregistrements disposant uniquement de caractéristiques semblables. Par exemple, j'aimerais pouvoir choisir uniquement les personnes de sexe féminin ayant un travail. Est-ce que c'est possible ?

youtube.com
↗
Les alias

Fais les exercices proposés à la fin !

w3schools.com

La clause WHERE

Les sélections réalisées jusqu'à présent récupéraient TOUS les enregistrements dans la table, invariablement. Ce n'est pas très pratique, surtout s’il y a plusieurs millions d'enregistrements !

SQL met à disposition une clause qui permet de filtrer les résultats satisfaisant uniquement certains critères. Ce qui suit les clauses WHERE est une expression booléenne. Si cette expression booléenne est vrai pour un enregistrement, alors cet enregistrement est retourné dans le tableau de résultats de la requête.

Exemple:

sql
SELECT * FROM humans 
WHERE 
    has_work OR
    (
        age > 18 AND 
        NOT male
    );

Ci-dessus, la requête de sélection retournera un enregistrement dans le tableau de résultats uniquement si l'enregistrement en question satisfait ce critère : a du travail ou a plus de 18 ans et n'est pas un homme.

Chaque expression booléenne est vérifiée enregistrement par enregistrement, expression par expression. Si un champ satisfait les critères, il est bon pour être envoyé dans le tableau de résultats.

Les expressions booléennes en SQL sont très proches de celles des langages de programmation. Voici un tableau donnant quelques opérateurs de comparaison utilisés dans les expressions booléennes de la clause WHERE :

OpérateurDescription=Equivalent à<>Différent de!=Différent de>Supérieur à>=Supérieur ou équivalent<Inférieur à<=Inférieur ou équivalent àIN ( )Si la valeur est dans la listeNOTInverse un booléenBETWEENEst compris entre (inclusif)IS NULLEst NULLIS NOT NULLN'est pas NULL

↗
La clause WHERE
tutorialspoint.com
↗
Exemples d'utilisation des opérateurs
techonthenet.com

Challenge

Plus besoin de recruteurs !

Tu vas devoir exploiter une base de données téléchargeable ici contenant des informations sur des personnes : leur genre, leur âge, leur employabilité et leur niveau d'études.

A partir de cet ensemble de données, tu vas construire des requêtes retournant des tableaux que tu pourras exploiter pour commencer ta recherche de candidats disponibles à l'embauche.

Pour commencer, il faut que tu construises deux listes de personnes :

  • Candidats disponibles à l'embauche :

    • plus de 25 ans

    • tous sexes

    • toutes tailles

    • ayant un niveau d'études supérieur ou égal à 3 années

    • en disponibilité professionnelle

  • Candidats à exclure :

    • moins de 25 ans

    • ayant un niveau d'études strictement inférieur à 3 années

    • ayant déjà un travail

Pour chaque champ dans le tableau, un alias représentant de manière plus claire le contenu du champ doit être mis.

Critères de validation

  • Les tableaux résultants sous forme de texte ou de capture d'écran
  • Un premier tableau recense toutes les personnes employables
  • Un deuxième tableau recense toutes les personnes non employables
  • Chaque champ du tableau dispose d'un alias qui clarifie sa signification