Le Langage SQL
Le Langage SQL
Le Langage SQL
Le Langage SQL
1. Introduction
Les SGBD relationnels proposent un langage de requête appelé SQL (Stuctured Query Language,
en français : Langage de requêtes structuré). Il peut être considéré comme le langage d’accès
normalisé aux bases de données. Il est aujourd’hui supporté par la plupart des produits
commerciaux que ce soit par les systèmes de gestion de bases de données micro tel que Access ou
par les produits plus professionnels tels que Oracle ou Sybase.
Le succès du langage SQL est dû essentiellement à sa simplicité et au fait qu’il s’appuie sur le
conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la stratégie d’exécution.
Le modèle relationnel a été inventé par E.F. Codd (Directeur de recherche du centre IBM de San
José) en 1970, suite à quoi de nombreux langages ont fait leur apparition :
IBM Sequel (Structured English Query Language) en 1977
IBM Sequel/2
IBM System/R IBM DB2
Ce sont ces langages qui ont donné naissance au standard SQL, normalisé en 1986 par l'ANSI pour
donner SQL/86. Puis en 1989 la version SQL/89 a été approuvée. La norme SQL/92 a désormais
pour nom SQL 2.
Le langage SQL comporte :
Une partie sur la définition des données : Le langage de définition des données (LDD) permet
de définir des relations (créer des tables), des vues externes et des contraintes d’intégrité ;
Une partie manipulation des données : Le langage de manipulation de données (LMD) permet
d’interroger une base de données, d’insérer, de modifier ou de supprimer des données dans une
table d'une base de données relationnelle, sans se préoccuper de l’organisation physique des
données.
Une partie sur le contrôle des données : Le langage de contrôle de données (LCD) permet de
contrôler la sécurité et les accès aux données.
Dans la suite du chapitre, les exemples donnés font référence aux relations ci-dessous:
CLIENT (Num-cli, Nom-cli, Adr-cli)
PRODUIT (Num-prod, Des-prod, Prix-un)
COMMANDE (Num-com, Num-cli*, Date)
DETAIL (Num-com*, Num-prod*, Qte-com)
c) ALL: Compare chacune des valeurs de l’ensemble à une valeur particulière et retourne
"VRAI" si la comparaison est vérifiée pour chacun des éléments. Les opérateurs de
comparaison sont: <, ≤, >, ≥, =, ≠
Exemple1: Donner le numéro des produits de prix maximal.
SELECT Num_prod
FROM PRODUIT
WHERE Prix-un >= ALL SELECT Prix-un
FROM PRODUIT
d) ANY: Compare chacune des valeurs de l’ensemble à une valeur particulière et retourne
‘VRAI’ si la comparaison est vérifiée pour au moins un des éléments de l'ensemble.
Exemple1: Donner les numéros des produits dont le prix n’est pas minimal.
SELECT Num-prod
FROM PRODUIT
WHERE Prix-un > ANY SELECT Prix-un
FROM PRODUIT
Exemple2 : Donner les numéros des clients qui ont commandé des produits en quantité >
60
SELECT Num_cli
FROM COMMANDE
WHERE Num_com = ANY SELECT Num_com
FROM DETAIL
WHERE Qte-com > 60
e) EXISTS : Retourne ‘VRAI’si la sous-interrogation (requête imbriquée) donne un
ensemble non vide.
Exemple: Donner les numéros des clients qui ont commandé au moins un produit en
quantité supérieure à 100.
SELECT Num_cli
FROM COMMANDE
WHERE EXISTS (SELECT *
FROM DETAIL
WHERE Num_com = COMMANDE.Num_com
And Qte-com > 100)
f) NOT EXISTS: Donne VRAI si l'ensemble résultat est vide.
Exemple: Donner les numéros des produits qui ne sont pas commandés.
SELECT Num-prod
FROM PRODUIT
WHERE NOT EXISTS (SELECT *
FROM DETAIL
WHERE Num-prod = PRODUIT.Num-prod)
En introduisant les connecteurs AND et OR entre sous-requêtes. On peut réaliser des formules
très complexes.
Exemple : Donnez les noms des clients qui ont commandé de la "Tomate" en quantité > 100
Select Nom-cli
From CLIENT
MIN, MAX, AVG. Ces fonctions usuelles ne peuvent être utilisées que dans une clause
SELECT ou dans une clause HAVING.
a) COUNT(expr) : Compte le nombre de tuples (lignes) sélectionnés.
Exemple
SELECT COUNT(Num-prod)
FROM PRODUIT
b) SUM(expr): additionne les valeurs de type numérique.
c) MIN (expr) : retourne la valeur minimale d’une colonne de type caractère ou numérique.
d) MAX(expr): retourne la valeur maximale d’une colonne de type caractère ou numérique.
e) AVG (expr) : calcule la moyenne d’une colonne de numérique.
Autres prédicats
compris entre between …where numéro Les bornes de l'intervalle sont
…et… …and… between 12 and 20 généralement incluses.
est conforme Like …where nom like "D%" like permet de vérifier qu'une
à… chaîne de caractères est
conforme à un modèle contenant
_ et/ou %.
n'est pas not like …where nom not like not like est l'inverse de like.
conforme à... "l%e"
est vide is null …where salaire is null is null teste l'absence de valeur
qui peut être assimilée à une
valeur inconnue.
n'est pas vide is not null …where nom is not null is not null est l'inverse de is null.