Cours SQL
Base du langage SQL et des
bases de données
SQL SELECT
L’utilisation la plus courante de SQL consiste
à lire des données issues de la base de
données. Cela s’effectue grâce à la
commande SELECT, qui retourne des
enregistrements dans un tableau de résultat.
Cette commande peut sélectionner une ou
plusieurs colonnes d’une table.
Commande basique
L’utilisation basique de cette commande
s’effectue de la manière suivante :
SELECT
nom_du_champ FROM
Cettenom_du_tableau
requête va sélectionner (SELECT) le
champ
«nom_du_champ » provenant (FROM) du
tableau appelé « nom_du_tableau ».
Exemple
Imaginons une base de données appelée «
client » qui contient des informations sur les
clients d’une entreprise.
Table « client » :
identifian prenom nom ville
t
1 Pierre Dupond Paris
2 Sabrina Durand Nantes
3 Julien Martin Lyon
4 David Bernard Marseille
5 Marie Leroy Grenoble
Si on veut avoir la liste de toutes les villes des
clients, il suffit d’effectuer la requête suivante :
SELECT
ville FROM
client
Résultat :
ville
Paris
Nantes
Lyon
Marseille
Grenoble
EX : Affichez les noms des clients
6
SELECT nom
FROM client
7
Obtenir plusieurs colonnes
Avec la même table client il est possible
de lire plusieurs colonnes à la fois. Il suffit
tout simplement de séparer les noms des
champs souhaités par une virgule. Pour
obtenir les prénoms et les noms des clients
il faut alors faire
SELECT la requête
prenom, nom suivante :
FROM client
Résultat :
prenom nom
Pierre Dupond
Sabrina Durand
Julien Martin
David Bernard
Marie Leroy
EX : Affichez les noms et villes des clients
10
SELECT ville, nom
FROM client
11
Obtenir toutes les colonnes d’un tableau
Il est possible de retourner automatiquement
toutes les colonnes d’un tableau sans avoir
à connaître le nom de toutes les
colonnes.
12
Au lieu de lister toutes les colonnes,
il faut simplement utiliser le caractère « * »
(étoile). C’est un joker qui permet de
sélectionner toutes les colonnes. Il s’utilise de
la manière
SELECT suivante :
* FROM client
Cette requête retourne
exactement les mêmes
colonnes qu’il y a dans la base de données.
Dans notre cas, le résultat sera donc :
Identifian prenom nom ville
t
1 Pierre Dupond Paris
2 Sabrina Durand Nantes
3 Julien Martin Lyon
4 David Bernard Marseille
5 Marie Leroy Grenoble
Il y a des avantages et des inconvénients à
l’utiliser.
Pour en savoir plus sur le sujet il est
recommandé de faire une recherche sur les
avantages et inconvénients du sélecteur
étoile.
Cours avancé : ordre des commandes du SELECT
Cette commande SQL est relativement
commune car il est très fréquent de devoir
lire les données issues d’une base de
données. Il existe plusieurs commandes
qui permettent de mieux gérer les
données que l’on souhaite lire. Voici un petit
aperçu des fonctionnalités possibles :
•
Joindre un autre tableau aux résultats
•
Filtrer pour ne sélectionner que
certains enregistrements
•
Classer les résultats
•
Grouper les résultats fair
pour uniquement des e
statistiques
moyenne, prix le plus élevé … ) (not
Une requête « SELECT » peut devenir e
assez
longue. Juste à titre informatif, voici
une requête « SELECT » qui possède
presque toutes les commandes
SELECT *
FROM table
WHERE condition
GROUP BY
expression
{ UNION | INTERSECT | EXCEPT }
HAVING
condition
ORDER BY expression
LIMIT count
OFFSET
start
A noter : cette requête sert d’aide-mémoire
pour savoir dans quel ordre sont utilisé
chacun des commandes au sein d’une requête
SELECT.
SQL DISTINCT
L’utilisation de la commande SELECT en SQL
permet de lire les données d’une ou
plusieurs colonnes. Cette commande peut
potentiellement afficher des lignes en
doubles. Pour éviter des redondances
dans les résultats il faut simplement ajouter
DISTINCT après le mot SELECT.
Commande basique
L’utilisation basique de cette
commande consiste alors à effectuer la
requête suivante
SELECT :
DISTINCT
ma_colonne FROM
nom_du_tableau
Cette requête sélectionne le champ «
ma_colonne »
de la table « nom_du_tableau » en
évitant de retourner des doublons.
Requête pour Oracle
Pour le Système de Gestion de Bases de
Données (SGBD) Oracle, cette requête est
remplacée par la commande « UNIQUE » :
SELECT UNIQUE
ma_colonne FROM
nom_du_tableau
Exemple
Prenons le cas d’une table « client » qui
contient des noms et prénoms :
identifiant prenom nom
1 Pierre Dupond
2 Sabrina Bernard
3 David Durand
4 Pierre Leroy
5 Marie Leroy
En utilisant seulement SELECT tout les
noms sont retournés, or la table contient
plusieurs fois le même prénom (cf.
Pierre). Pourlessélectionner
uniquement prénoms uniques il faut
utiliser la requête suivante :
SELECT DISTINCT
prenom FROM
client
Résultat :
prenom
Pierre
Sabrina
David
Marie
Ce résultat affiche volontairement qu’une
seule fois le prénom « Pierre » grâce à
l’utilisation de
commande la
DISTINCT qui n’affiche que les
résultats distincts.
Intérêt
L’utilisation de la commande DISTINCT
est très pratique pour éviter les résultats
en doubles. Cependant, pour optimiser les
performances il est préférable d’utiliser la
commande SQL GROUP BY lorsque c’est
possible.
SQL AS (alias)
Dans le langage SQL il est possible
d’utiliser des alias pour renommer
temporairement une colonne ou une table
dans une requête. Cette astuce est
particulièrement utile pour faciliter la
lecture des requêtes.
Intérêts et utilités - Alias sur une colonne
Permet de renommer le nom d’une colonne
dans les résultats d’une requête SQL. C’est
pratique pour avoir un nom facilement
identifiable dans une application qui doit
ensuite exploiter les résultats d’une
Cas concrets
d’utilisations
• Une :
colonne qui s’appelle
normalement c_iso_3166 peut être
renommée « code_pays » (cf. le code ISO
3166 correspond au code des pays), ce
qui est plus simple à comprendre dans le
reste du code par un développeur.
• Une requête qui utilise la commande
UNION sur des champs aux noms différents
peut être ambigu pour un développeur. En
renommant les champs avec un même nom
il est plus simple de traiter les résultats.
• Lorsqu’une fonction est utilisée, le nom
d’une colonne peut-être un peu
complexe. Il est ainsi possible de
renommer la colonne sur laquelle il y a
une fonction SQL. Exemple : SELECT
COUNT(*) AS nombre_de_resultats
FROM
`table`.
•
Lorsque plusieurs colonnes sont combinées
il est
plus simple de renommer la nouvelle
colonne qui est une concaténation de
plusieurs champs.
Alias sur une table
Permet d’attribuer un autre nom à une
table dans une requête SQL. Cela peut aider
à avoir des noms plus courts, plus
simple et plus facilement
compréhensible. particulièrement
Ceci est vrai
lorsqu’il y a des
jointures.
Syntaxe
La syntaxe pour une colonne de
renommer
Alias colonne1
sur une colonne à c1
est la suivante :
29
SELECT colonne1 AS c1,
colonne2 FROM `table`
Cette syntaxe peut également s’afficher de
la façon suivante :
SELECT colonne1 c1,
colonne2 FROM `table`
A noter : à choisir il est préférable
d’utiliser la commande « AS » pour que ce
soit plus explicite (plus simple à lire qu’un
simple espace), d’autant plus que c’est
recommandé dans le standard ISO pour
concevoir une requête SQL. 30
Alias sur une table
La syntaxe pour renommer une
table dans une requête est la suivante :
SELECT *
FROM `nom_table` AS t1
Cette requête peut également s’écrire de la
façon suivante :
SELECT *
FROM `table`t1
31
Exemple
Renommer une colonne
Imaginons un site d’e-commerce qui
possède une table de produits. Ces
produits sont disponibles dans une même
table dans plusieurs langues, dont le
français. Le nom du produit peut ainsi
être disponible dans la colonne «
nom_fr_fr », «nom_en_gb » ou
«nom_en_us ». Pour utiliser l’un ou l’autre
des titres dans le reste de l’application sans
avoir à se soucier du nom de la colonne, il est
possible de renommer la colonne de son choix 32
pourra ressemble à ceci :
SELECT p_id,
p_nom_fr_frAS nom,
p_description_fr AS
description,
p_prix_euroAS prix
FROM `produit`
Résultat : 33
id nom description prix
1 Ecran Ecran de 399.99
grandes tailles.
2 Clavier Clavier sans fil. 27
3 Souris Souris sans fil. 24
4 Ordinateur Grande 700
portable autonomie et
et sacoche
offerte.
Comme nous pouvons le constater les
colonnes ont été renommées.
Renommer une ou plusieurs tables
34
Imaginons que les produits du site e-
commerce soit répartis dans des catégories.
Pour récupérer la liste des produits en même
temps que la catégorie auquel il appartient il
est possible d’utiliser une requête SQL avec
une jointure. Cette requête peut utiliser des
alias pour éviter d’utiliser à chaque fois le nom
des tables.
La requête ci-dessous renomme la table «
produit » en « p » et la table «
produit_categorie » en « pc» (plus court et
donc plus rapide à écrire) : 35
SELECT p_id, p_nom_fr_fr,
pc_id, pc_nom_fr_fr FROM
`produit` AS p
LEFT JOIN`produit_categorie` AS pc
ON pc.pc_id =
p.p_fk_category_id
36
Cette astuce est encore plus pratique lorsqu’il y
a des noms de tables encore plus compliqués et
lorsqu’il y a beaucoup de jointures.
37
SQL WHERE
La commande WHERE dans une requête SQL
permet d’extraire les lignes d’une base de
données qui respectent une condition.
Cela permet d’obtenir uniquement les
informations désirées.
Syntaxe
La commande WHERE s’utilise en complément
à une requête utilisant SELECT. La façon la
plus simple de l’utiliser est la suivante :
38
SELECT nom_colonnes
FROM nom_table
WHERE condition
Exemple
Imaginons une base de données appelée «
client » qui contient le nom des clients, le
nombre de commandes qu’ils ont effectués et
leur ville :
39
id nom nbr_command ville
e
1 Paul 3 paris
2 Maurice 0 rennes
3 Joséphin 1 toulouse
e
4 Gérard 7 paris
Q : Pour obtenir seulement la liste des clients
qui habitent à Paris, il faut effectuer la requête
suivante :
40
SELECT *
FROM client
WHERE ville = 'paris'
41
Résultat :
id nom nbr_command Ville
e
1 Paul 3 paris
4 Gérard 7 paris
Attention : dans notre cas tout est en
minuscule donc il n’y a pas eu de problème.
Cependant, si une table est sensible à la casse,
il faut faire attention aux majuscules et
minuscules.
42
EX :
43
Opérateurs de comparaisons
Il existe plusieurs opérateurs de
comparaisons. La liste ci-jointe présente
quelques uns des opérateurs les plus
couramment utilisés.
44
Opérate Description
ur
= Égale
<> Pas égale
!= Pas égale
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à
IN Liste de plusieurs valeurs possibles
BETWEEN Valeur comprise dans un
intervalle donnée (utile pour les
nombres ou dates)
LIKE Recherche en spécifiant le 45
IS NULL Valeur est nulle
IS Valeur n'est pas nulle
NOT NULL
Attention : il y a quelques opérateurs qui
n’existe
pas dans des vieilles versions de
système de gestion de bases de données
(SGBD). De plus, il y a de nouveaux
opérateurs non indiqués ici qui sont
disponibles avec certains SGBD. N’hésitez
pas à consulter la documentation de MySQL,
PostgreSQL ou autre pour voir ce qu’il vous est
46
possible de faire.
SQL AND & OR
Une requête SQL peut être restreinte à
l’aide de la condition WHERE. Les opérateurs
logiques AND et OR peuvent être utilisées
au sein de la commande WHERE pour
combiner des conditions.
Syntaxe d’utilisation des opérateurs AND et OR
Les opérateurs sont à ajoutés dans la
condition WHERE. Ils peuvent être combinés
à l’infini pour filtrer les données comme
souhaités.
condition1 ET la condition2 sont
vrai :
L’opérateur AND permet de s’assurer 47
SELECT
nom_colonnes FROM
nom_table
WHERE condition1
L’opérateur
AND OR vérifie quant à lui que la
condition2
condition1 OU la condition2 est vrai :
SELECT nom_colonnes
FROM nom_table WHERE condition1OR
condition2
Ces opérateurs peuvent être combinés à
l’infini et
mélangés.
48
L’exemple ci-dessous filtre les résultats de
la table
«nom_table » si condition1 ET
condition2
SELECT OU condition3 est
nom_colonnes FROMvrai :
nom_table
WHERE condition1 AND (condition2
OR condition3)
Attention : il faut penser à utiliser des
parenthèses lorsque c’est nécessaire. Cela
permet d’éviter les
erreurs et ça améliore la lecture d’une
requête par un humain.
49