100% ont trouvé ce document utile (1 vote)
438 vues14 pages

Les Requêtes SQL

Ce document décrit les différents types de requêtes SQL et explique comment utiliser les mots-clés SELECT, FROM et WHERE pour interroger une base de données. Il présente également des exemples d'utilisation de fonctions et d'opérateurs pour sélectionner, filtrer et modifier des données.

Transféré par

Imane hf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
438 vues14 pages

Les Requêtes SQL

Ce document décrit les différents types de requêtes SQL et explique comment utiliser les mots-clés SELECT, FROM et WHERE pour interroger une base de données. Il présente également des exemples d'utilisation de fonctions et d'opérateurs pour sélectionner, filtrer et modifier des données.

Transféré par

Imane hf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Page 1 Sur 14

Pour les requêtes SQL que vous allez voir, vous devez absolument maîtriser ces
notions, sinon vos requêtes n'auront ni queue ni tête. Il existe différents types de
requêtes SQL :

 certaines pour créer des tables ;


 d'autres pour aller chercher des données dans la base ;
 d'autres pour modifier des données existantes ;
 d'autres pour gérer les droits d'accès des utilisateurs/utilisatrices.

Celles sur lesquelles on va travailler, ce sont les requêtes pour aller chercher des
données dans la base. Pour les reconnaître, rien de plus simple, elles ont toute une
structure commune, contenant les mots clés SELECT et FROM :

SELECT [...] FROM [...]

Souvent, d'autres mots clés seront ajoutés, comme par exemple WHERE, qui est très
fréquent.

Ce qu'il faut savoir, c'est que chaque requête commençant par SELECT renverra une
réponse qui sera toujours formée d'un unique tableau.

Si vous devez rechercher une information dans la base, vous avez d'abord besoin de
savoir dans quelle table elle se situe, puis sur quelle ligne, et enfin dans quelle colonne.
Ce sont les 3 infos essentielles. À chacune de ces 3 infos correspond l'un des mots clés
que l'on vient de voir :

 FROM : pour spécifier la/les table(s) ;


 SELECT : pour sélectionner la/les colonne(s) demandée(s) ;
 WHERE : pour filtrer les lignes de cette table et trouver la/les ligne(s)
souhaitée(s).

Exécutez une requête SELECT

Commençons par SELECT à travers cette démonstration :

Le SELECT sert à sélectionner une ou plusieurs colonnes d'une table.

Ici, je vous propose de retrouver dans la base de données ouvrages

Ce sera le point de départ de notre enquête ! Toutes les départements de la base de


données se trouvent dans la table departements . Familiarisons-nous avec cette table,
grâce à la requête la plus basique qui soit : celle qui renvoie une table sans la modifier :

SELECT * FROM entity ;

Voici la réponse renvoyée :

Résultat de la requête
Page 2 Sur 14

SELECT * FROM `regions`

Avec cette requête, on a toutes les lignes et les colonnes de regions (attention, sur
cette illustration, on ne voit pas toutes les lignes.)

Pour le moment, nous avons mis le caractère * derrière le SELECT. Cette étoile
signifie que nous souhaitons obtenir toutes les colonnes disponibles.

Nous pouvons cependant remplacer ce caractère par les colonnes que nous souhaitons
sélectionner ; par exemple :

 code_dep_regionsc'est l'identifiant de deparetements dans notre BDD ;


 nom_dep_regions: c'est le nom de departement ;
 population_dep_regionsstatus: c'est la population du departement:
 nom_region_regions : le nom de la région du département

SELECT code_dep_regions, nom_dep_regions,


nom_region_regions FROM regions;
Résultat de la requête
Page 3 Sur 14

Quand vous sélectionnez certaines colonnes, il est possible que vous vous retrouviez
avec des lignes 100 % identiques : c'est ce que l'on appelle des doublons. En fonction de
ce que vous voulez faire, il sera souvent utile de supprimer les doublons en ne gardant
qu'un exemplaire de chaque ligne. Pour ceci, il faut insérer DISTINCT juste après le
SELECT :

SELECT `nom_region_regions` FROM `regions`;


Page 4 Sur 14

Résultat de la requête SELECT DISTINCT

Réalisez des calculs sur vos données grâce aux fonctions et opérateurs

Quand on manipule des données, on est souvent amené à faire des calculs ou des
modifications sur celles-ci. Par exemple, si vous devez convertir un poids exprimé en kg
vers des grammes, il faudra multiplier par 1 000 votre valeur. Pour cela, il est possible
d'appliquer des fonctions et des opérateurs sur les colonnes.

Une fonction, c'est une opération que l'on applique sur une ou plusieurs données. Il y a
donc des données en entrée de la fonction, et une donnée en sortie de la fonction.

En SQL, pour utiliser une fonction, il faut écrire le nom de cette fonction, puis la faire
suivre de parenthèses. À l'intérieur de ces parenthèses, on indique les données en
entrée. Les données d'entrée de la fonction, c'est un peu ce que l'on “donne à manger” à
la fonction, afin qu'elle modifie ces données (ou qu'elle effectue un calcul mathématique
avec), puis qu'elle renvoie une donnée en sortie. Certaines fonctions ne prennent pas de
données en entrée, certaines en prennent une ou plusieurs. Quand il y en a plusieurs, on
les sépare par une virgule.

Voici quelques exemples :

SELECT upper('Bonjour')

Ici on a utilisé la fonction upper, qui modifie un texte en le mettant en majuscules. On a


le nom de la fonction suivi de parenthèses. Entre les parenthèses, on a donné en entrée
Page 5 Sur 14
le texte Bonjour . Si vous exécutez cette requête dans votre SGBRD, vous verrez que le
résultat est BONJOUR .

SELECT round(3.1416, 2)

Ici on a utilisé la fonction round, qui calcule l'arrondi d'un nombre décimal. Il y a ici deux
données en entrée. La première donnée, c'est le nombre décimal à arrondir (ici 3.1416).
La seconde, c'est le nombre de décimales à garder : ici on souhaite garder 2 décimales.
Cette fonction renverra donc 3.14 , car c'est l'arrondi de 3.1416 avec 2 décimales.

SELECT random()

La fonction random ne prend aucune donnée en entrée, et elle renvoie en sortie un


nombre choisi au hasard.

Et un opérateur, c'est quoi ?

Un opérateur, c'est une fonction. Mais… c'est une fonction un peu particulière, car elle ne
s'écrit pas avec la même syntaxe que ce nous avons vu jusqu'à présent. Elle s'écrit
souvent avec des caractères spéciaux.

Par exemple, la fonction qui permet d'additionner deux nombres (disons 3 et 5, par
exemple) ne s'écrit pas additionner(3, 5) mais elle s'écrit avec l'opérateur + . En effet,
c'est bien plus lisible comme ça, regardez :

SELECT 3+5

Cette requête renvoie 8, car 3+5 = 8.

Voyons quelques exemples de fonctions et opérateurs dans cette vidéo :

Utilisez des fonctions pour des calculs mathématiques

Par exemple, nous pouvons utiliser la fonction multiplication, en multipliant l'identifiant de


toutes les entités par 2 (et pourquoi pas ?).

SELECT `code_dep_regions`,`code_dep_regions` *2 , `nom_dep_regions`


FROM `regions`;

Ici, pour écrire la multiplication on a utilisé l'opérateur * .

Il est même possible de combiner des fonctions. Par exemple, calculons la valeur
absolue (fonction ABS() ) de l'opposé (que l'on écrit avec l'opérateur - ) de l'identifiant
multiplié par 2 :

SELECT ABS( (- code_dep_regions) *2 ) AS calcul_bizarre, name, status FROM regions


;

Ici, j'ai utilisé le mot clé AS. Il permet de renommer une colonne. Sans ce mot clé, la
colonne Résultat du calcul mathématique aurait comme nom "ABS((-id)*2)", ce qui n'est
pas très compréhensible ! Je l'ai donc renommée en "calcul_bizarre".
Page 6 Sur 14
SELECT `code_dep_regions`,`code_dep_regions` *2 AS calcul_bizarre
,`nom_dep_regions` FROM `regions`;

Utilisez des fonctions de manipulation de texte

Il existe beaucoup d'autres types de fonctions ! Par exemple, des fonctions sur des
chaînes de caractères (c'est-à-dire du texte).

Si on souhaite mettre en majuscule le nom des regions

SELECT `code_dep_regions` ,upper(`nom_dep_regions`) AS maj_region FROM


`regions`;
Page 7 Sur 14

Si on souhaite obtenir le nom d'une region , et ajouter à cette chaîne son statut entre
parenthèses, on peut utiliser l'opérateur || . Assembler plusieurs textes les uns à la suite
des autres, ça s'appelle une concaténation :

SELECT concat(nom_dep_regions, '(', upper(nom_region_regions), ')' ) AS


Dep_Region FROM regions;
Page 8 Sur 14
Il est possible de transformer du texte en minuscules, ou en majuscules, grâce aux
fonctions lower() et upper() . Par exemple,

Familiarisez-vous avec le filtrage

Avec le SELECT, on avait sélectionné les colonnes qui nous intéressaient. Le WHERE
fait la même chose, mais pour les lignes.

WHERE permet de filtrer les lignes d'une table selon un certain critère.

Cependant, dans une base de données, nous connaissons d'avance les noms des
colonnes, car la liste des colonnes n'a pas vocation à changer régulièrement.

La liste des colonnes (on appelle cela le schéma) est d'ailleurs définie durant la phase
de modélisation, avant même que la BDD ne reçoive ses premières données.

Par contre, en ce qui concerne les lignes, on ne les connaît pas à l'avance, et elles
varient beaucoup au cours du temps. Certaines bases de données reçoivent même des
milliers de lignes chaque seconde : c'est le cas pour les grands réseaux sociaux, qui
doivent stocker dans leur BDD les posts de plusieurs milliers d'utilisateurs à travers le
monde ! C'est la vocation d'une base de données : stocker des données dynamiques,
que l'on ajoute, que l'on supprime, ou que l'on modifie au fil de l'utilisation !

Comme les lignes à garder (ou enlever) sont dynamiques, il nous faut donc établir une
condition qui nous permette de filtrer les lignes voulues.

Exécutez une requête avec WHERE

Nous allons rechercher la présence de HAUTS-DE-FRANCE, dans regions

SELECT * FROM regions WHERE `nom_region_regions`=


'HAUTS-DE-FRANCE';

Résultat de la requête

Cette requête renvoie une table de 5 lignes, qui correspond à la région que nous
recherchons.
Page 9 Sur 14
Que s'est-il passé ?

En fait, il y a 2 étapes :

1. La première, c'est de calculer pour chaque ligne si la condition est


vérifiée. Pour cette condition, nous avons utilisé le signe = , qui teste
pour chaque ligne si nom_region_regions et la chaîne de
caractères 'HAUTS-DE-FRANCE' ont la même valeur. Sur chaque
ligne, la partie `nom_region_regions`= 'HAUTS-DE-
FRANCE' renvoie TRUE (ou 1) si c'est le cas, et FALSE (ou 0)
sinon.
2. La 2e étape, c'est le WHERE qui l'effectue : il ne va garder que les
lignes pour lesquelles la condition a renvoyé TRUE .

Pour vous en convaincre, vous pouvez exécuter

SELECT nom_region_regions= 'HAUTS-DE-FRANCE' from regions;

Cette requête renverra des TRUE et des FALSE (ou des 1 et des 0).

Outre l'opérateur = , d'autres opérateurs de comparaison sont possibles en SQL :

Opérateur Renvoie TRUE si


A=B A égal à B
A <> B A différent de B
A > B et A < B A supérieur à B / A inférieur à B
A >= B et A <= B A supérieur ou égal à B / A inférieur ou égal à B
A BETWEEN B AND C A est compris entre B et C
Page 10 Sur 14
A IN (B1, B2, B3) A est présent dans la liste (B1, B2, B3)
A NOT IN (B1, B2, B3) A n'est pas présent dans la liste (B1, B2, B3)
A IS NULL A n'a pas de valeur
A IS NOT NULL A n'est pas nul (c'est-à-dire qu'il a une valeur connue)

Il existe aussi l'opérateur LIKE . Il est un peu particulier, et il fera l'objet d'un chapitre à
part entière.

Étoffez vos requêtes avec AND et OR

Il est possible de combiner plusieurs conditions grâce aux opérateurs logiques :

 OR
 AND
 NOT

Ils signifient respectivement OU, ET, NON.

opérateur renvoie TRUE si


C1 AND C2 la condition C1 est TRUE et si C2 est aussi TRUE
C1 OR C2 C1 est TRUE ou bien si C2 est TRUE
NOT C1 C1 est FALSE

Grâce à ces opérateurs, on peut complexifier un peu notre condition :

Consignes
Dans la BDD ouvrages, recherchez dans la table regions les lignes dont le
nom de region est est soit ‘hauts de France’ soit ‘ile de France’.
Écrivez 2 versions de la requête, une avec OR , une avec IN .
Vérifiez votre travail

Il faut utiliser ici l'opérateur = deux fois, et combiner les deux avec

un OR :
SELECT * FROM ….. WHERE ….. = '….' OR …. = '…..'
L'option alternative est d'utiliser IN :
SELECT * FROM ….. WHERE ……. In ( '….. , '….')

En résumé

 WHERE permet de filtrer les lignes d'une table selon une certaine
condition.
 Cette condition fait souvent appel à des opérateurs de comparaison.
 Cette condition renvoie pour chaque ligne TRUE ou FALSE .
Page 11 Sur 14
 Une fois les TRUE ou FALSE calculés, WHERE se charge de ne
garder que les lignes qui sont à TRUE .
 Il est possible de combiner des conditions avec les opérateurs de
comparaison OR , AND et NOT .

Vous savez maintenant sélectionner des colonnes et filtrer des lignes. Dans
le prochain chapitre, nous allons voir comment récupérer des informations
qui proviennent de plusieurs tables !

Récupérez des données issues de plusieurs tables avec


FROM

Vous vous souvenez, à chaque fois que vous écrivez une requête qui commence par
SELECT, le résultat ne sera toujours qu'un seul tableau. Une requête SELECT = un
tableau en sortie, pas plus, pas moins.

Mais dans ce cas, comment combiner, au sein d'une même requête, des données

de plusieurs tables ?

Eh bien c'est possible, en indiquant plusieurs tables dans le FROM, séparées par

une virgule.

Par exemple :

SELECT * FROM regions, depots ;

Eh bien, le SGBDR va prendre chaque ligne de la 1e table, qu'il va

associer à chaque ligne de la 2e table.


Page 12 Sur 14
Avec cette méthode, vous vous imaginez bien que le nombre d'associations peut vite
exploser ! En effet, si dans le FROM vous indiquez 2 tables, l'une de 1 000 lignes, et
l'autre de 2 000 lignes, eh bien le tableau que vous obtiendrez en réponse aura 2 millions
de lignes, c'est énorme ! Et si vous rajoutez une 3e table de 10 lignes dans le FROM,
vous multipliez encore par 10 le nombre de lignes : 20 millions !

Cette opération s'appelle le produit cartésien entre les 2 tables.

Le FROM effectue le produit cartésien entre toutes les tables qui lui sont données.

Nous avons vu ce que ça donne avec 2 tables.

S'il n'y a qu'une table, le produit cartésien est égal… à cette même table, sans
modification.

S'il y a plus 3 tables, le produit cartésien des 3 tables, c'est le produit cartésien de la
3e table avec (le produit cartésien des 2 premières tables).

Ne vous en faites pas. En pratique, à chaque fois que vous utiliserez plus d'une table
dans un FROM, vous utiliserez un WHERE pour ensuite effectuer un filtrage, afin de ne
garder que les lignes qui vous intéressent. On voit ça au chapitre suivant !

Appliquez les alias de table

SELECT
adresse_depot_depots AS Adresse_depot,
cp_depot_depots AS cp_depot,
nom_region_regions AS Region
FROM
depots,regions
WHERE
depots.code_dep_regions = regions.code_dep_regions;
Page 13 Sur 14
Une jointure, c'est donc la succession d'un produit cartésien
puis d'un filtrage. La condition utilisée pour le filtrage est
appelée condition de jointure.
La plupart du temps, la condition de jointure fait intervenir la
clé étrangère de la 1e table avec la clé primaire de la 2e table.
C'est le cas ici.

Découvrez l'autre syntaxe de la jointure interne

Pour réaliser une jointure, il y a une 2e syntaxe possible, avec


les mots clés JOIN et ON :
SELECT *
FROM regions
JOIN depots ON depots.code_dep_regions =
regions.code_dep_regions;

On peut d'ailleurs inverser entity et address , le résultat sera


identique :

SELECT *
FROM depots
JOIN dregions ON depots.code_dep_regions = regions.code_dep_regions;

En fait, cette syntaxe fait exactement la même chose que la


syntaxe précédente (FROM + WHERE) : le JOIN effectue un
produit cartésien, puis le ON effectue un filtrage. Il est
cependant préférable d'utiliser cette syntaxe car c'est plus
explicite : avec JOIN + ON, on voit directement que vous avez
fait une jointure entre 2 tables !
Page 14 Sur 14

Définissez une jointure externe

Lorsque vous écrivez une jointure interne entre 2 tables, certaines lignes de la première
ou de la seconde table peuvent être absentes du résultat de votre jointure. Voyons dans
cette vidéo quelle en est la cause, et comment y remédier :

Vous aimerez peut-être aussi