coincoins

SQL.LID (Langage d'Interrogation des Données)


Premiers pas : restriction, projection : la base du langage

Comment ça marche ?
Notions de base, les trois clauses importantes : SELECT, FROM et WHERE.

1. Introduction

idnomCliadrClicpClivilleClipaysCli
1Air FrancePar ci, par là75000ParisFRA
15SAISur la Terre67000StrasbourgFRA
123Faurecia15, rue de l'industrie67390MarckolsheimFRA
357TimkenQuelque part67000StrasbourgFRA
456Brain AGHAID7390Freiburg in BriesgauGER

Si on observe la table Client et son contenu ci-dessus, comment faire pour retrouver le n° du client "SAI" (=15) ?

  • --> On extrait le numéro du client de la table client pour lequel le nom du client est "SAI"

Ou

  • --> On sélectionne la colonne id de la table Client le champ nomCli="SAI"

Ce qui nous donne la valeur : 15

En SQL, ça donne : SELECT id FROM Client WHERE nomCli = "SAI" ;

Il y a trois mots clés (ou clauses) du SQL dans cette requête, que l'on peut traduire par :

SELECT = sélectionner/afficher des colonnes, FROM = de ou des tables, WHERE = où les lignes correspondent à la condition indiquée.

Effectivement, on sélectionne la colonne numéro du client (id) de la table client (client) le nom du client (nomCli) est "SAI".

Important !

Dans SELECT on met les colonnes qu'on veut afficher dans le résultat.

Dans FROM on met les tables où on cherche les données.

Dans WHERE on met les conditions pour ne garder que cetaines lignes de la base.

2. Conclusion

Le SQL est une phrase en anlgais qui s'exprime avec les mots clés : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, ...

Top

Restriction avec WHERE
Sélectionner quelques lignes dans la table.

1. Principe de la restriction avec WHERE

Une restriction est une liste de lignes limitée à certains critères de sélection
On n'affiche pas toute la table, la liste est restreinte à certaines lignes.

L'ensemble des critères de sélection forment une condition de restriction de la liste.

Remarque

Comme on veut afficher tous les champs (colonnes) de la table, on met une * derrière 'SELECT', à la place des noms de champs.

Observer la requête suivante et surtout, la condition de restriction qui est acrite dans WHERE :

SELECT * FROM Client WHERE nomCli="SAI" ;

On obtient alors la table contenant une ligne (enregistrement) avec tous les champs :

idnomCliadrClicpClivilleClipaysCli
15SAISur la Terre67000StrasbourgFRA

Ceci est une restriction : la liste est restreinte à quelques lignes (ici une seule) de la table d'origine.

NB : La restriction est souvent appelée abusivement sélection, ce qui peut semer la confusion avec la clause 'SELECT' !

2. Construire la condition de restriction

Une condition est une suite de comparaisons.

Ces comparaisons sont faites avec des champs et des valeurs et des signes de comparaison : < inférieur à, > supérieur à, etc. ...

Ces comparaisons sont assemblées, pour faire une condition, avec des opérateurs logiques : AND (et) et OR (ou bien).

On verra plus loin d'autres opérateurs de comparaison et opérateurs logiques.

Exemples : comparaisons

conditionopérandesopérateur
x>yx, y>
idCli=15x, 15=
client.id = idClientAcheter.refArt et Article.refArt=
date BETWEEN 01/01/2015 AND 31/12/2015date, 01/01/2015 et 31/12/2015BETWEEN AND (entre ... et ...)

La condition de sélection est composée de comparaisons séparées par des connecteurs logiques (ET, OU => AND, OR)

Exemples : conditions

conditionopérateur
x>y AND y>zAND (et)
idCli=15 AND Acheter.refArt=Article.refArtAND
idCli<15 OR idCli>100OR (ou)
idCli=15 OR cpClient = 67000OR (ou)
nom LIKE "toto%"LIKE (comme)

et signifie que les deux conditions doivent être réunies pour que la ligne soit valide,

ou signifie que l'une des deux conditions suffit pour que la ligne soit valide.

Pour comparer un champ avec plusieurs valeurs, on va mettre autant de comparaisons que de valeurs :
/ex. CP=68000 OR CP=67000.

Il est STRICTEMENT INTERDIT d'écrire : CP=68000 OR 67000 !!! ça ne fonctionne pas !

Top

Projection avec SELECT
N'afficher que quelques colonnes de la liste des colonnes possibles de la table (ou des tables), avec SELECT.

Pour afficher tous les champs (colonnes) de la table ou les tables, on met une * derrière 'SELECT', à la place des noms de champs.

Mais, comme au théatre des ombres chinoises, on peut limiter le nombre de champs affichés en mettant des noms de champs à la place de l'étoile (comme dans le premier exemple).

On obtient alors une projection de la table selon les champs sélectionnés.

Exemple : pour avoir les noms des clients, faire : SELECT nomCli FROM Client ;

Le résultat est la liste suivante :

nomCli
Air France
SAI
Faurecia
Timken
Brain AG

C'est la projection de la table client, selon nomCli

Top

Associer Projection et Restriction
Restreindre une projection c'est jouer avec SELECT et WHERE ensembles.

Rien de plus simple, voir l'exemple du début, c'est la force du SQL.

Exemple : pour avoir les noms des clients français :

SELECT nomCli FROM Client WHERE paysCli="FRA";

Le résultat est la liste ci-contre :

Il manque Brain AG.

nomCli
Air France
SAI
Faurecia
Timken

Top

Applications
Exemples ou exercices pour comprendre.

Dans la table Article ci contre, observer les requêtes et résultats ci-après :

refArtdescArtprixHTArtpoidsArttypeArt
A1Ancre4515F
A2Manille2.50.03F
A3Sextant12500.45F
A4Bouée1431.3F

Comment obtenir la référence (projection) de l'article "manille" (restriction) ?

En français : Sélection de refArt de Article où descArt="manille"

En SQL :

SELECT refArt FROM Article WHERE descArt = "manille" ;

Résultat
refArt
A2

Comment obtenir la liste des références et poids des articles dont le poids est supérieur à 1Kg ?

En français : Sélection de refArt et poids de Article où poidsArt>1

En SQL :

SELECT refArt, poidsArt FROM Article WHERE poidsArt > 1 ;

Résultat
refArtpoidsArt
A115,000
A41,300

Comment obtenir la liste des références articles dont le poids est entre 500g et 2Kg ?

En français : Sélection de refArt et poids de Article où poidsArt>=0,5 et poidsArt<2

En SQL :

SELECT refArt, poidsArt FROM Article WHERE poidsArt >= 0.5 AND poidsArt < 2 ;

Certaines fonctions de SQL permettent aussi de faire :

SELECT refArt FROM Article WHERE poidsArt BETWEEN 0.5 AND 1 ;

Résultat
refArtdescArtpoidsArt
A3Sextant0,450
A4Bouée1,300

Note : les constantes alphanumériques sont écrites entre guillemets ("a") ou entre apostrophes ('a'). Les virgules décimales sont remplacées par des points (comme aux US et en GB), la virgule servant à séparer des noms de champs, de table, d'éléments dans une liste.

Top

Conclusion
Structure générale et résultat d'une requête. Définitions et synthèse

1. Structure globale d'une requête

Une requête est structurée en clauses qui sont les mot clés :

 
	SELECT <liste de champs (1)>
	FROM <liste de tables (2)>
	WHERE <condition de sélection (3)>
 

(1) liste de champs ou *

On donne ici les champs, séparés par des ",", que l'on veut afficher.
Seuls les champs qui sont parmi ceux des tables de la liste des tables sont possibles.

Si on veut voir tous les champs dans le résultat, on remplace la liste des champs par *.

(2) liste de tables

Liste de tables séparés par des ",".

Une table ne peut être utilisée qu'une seule fois (sinon, il faut la renommer).

Attention aux confusions de champs

Des tables différentes peuvent avoir des champs de même nom (typiquement le champ id ou une clé étrangère qui référence une clé primaire du même nom).

Dans ce cas, il faut ajouter le nom de la table DEVANT le nom du champ.

/ex : 'Acheter.refArt' signifie : 'le champ refArt de la table Acheter', ce n'est pas le même champ que Article.refArt.

(3) Conditions et comparaisons

UNE seule condition de sélection/restriction.
Elle est composée d'une ou plusieurs comparaisons, reliées par des opérateurs logiques.

Une comparaison est souvent composée de deux opérandes (champ ou constantes) séparées par un opérateur de comparaison.

2. Mais quel est le résultat d'une requête ? (on s'demande b'en, hein?)

Eh bien, une requête produit soit :

  • Une valeur lorsque le résultat est unique (intersection d'une colonne et d'une ligne, d'un champ et d'un enregistrement)
  • Une liste si le résultat est composée d'une seule colonne =1 seul champ.
  • Une table dont les colonnes sont indiquées derrière la clause SELECT et les lignes celles qui ont été sélectionnée par les conditions de sélection (jointure comprise, cf. chap. suivant) de la clause WHERE.

3. Définitions

Une projection est la sélection de champs parmi ceux disponibles dans les tables du FROM.

Une restriction est une sélection d'enregistrements (lignes, clause WHERE) dans la table résultat, afin de choisir des enregistrements parmi l'ensemble de ceux présents dans les tables du FROM.

Cependant, l'usage courant est de parler de sélection pour tout type de requête commençant par la clause SELECT.

4. Synthèse des mots clés des clauses du SQL - sélection simple

L'ordre d'utilisation des mots clés des clauses du SQL est à respecter faute de quoi une erreur sera produite.

SELECT sélection de champs ou fonction d'agrégation (=qui regroupe plusieurs lignes : SUM, COUNT, ...) ou * pour tous les champs
FROM nom de la ou des tables nécessaires à la requête ; seuls les champs de ces tables sont dispo pour la requête
WHEREcondition, assemblage d'une ou plusieurs comparaisons entre les valeurs des champs ou des constantes
GROUP BYagrégation, groupes de lignes ; un groupement est demandé si une fonction d'agrégation est utilisée dans SELECT
ORDER BY Tri, suivi d'une liste de champs avec, pour chacun, le sens du tri : rien ou ASC =croissant/ascendant, DESC = décroissant = (descendant)
HAVINGConditions sur les groupes

Top