S Q L

publicité
Base de Données
M Cieloski
SQL
STRUCTURED QUERY LANGAGE
Définition :
Langage de définition et de manipulation de données.
1er mouture SQL
SQL 1 en 1986
puis
SQL 1 en 1989
puis
SQL 2 en 1992
norme ISO
Une version SQL 3 orientée objet est à l’étude aux USA.
Il s’agit en fait de 3 langages :
-
LDD Langage de Description des Données
LMD Langage de Manipulation des données
LCD Langage de contrôle des données
LE LMD

L’obtention des données se fait dans un ordre unique : SELECT
Select <liste colonne>
From <liste table>
* pour toutes les colonnes
Attention le Select seul n’efface pas les doublons
Exemple : les exercices suivant découle du poly. ALGEBRE RELATIONNEL (produits,
fournisseurs, commandes)
-
lister la table des fournisseurs.
Select *
From fournisseurs ;
-
lister les n° de facture et les fournisseurs.
Select fno,nom
From fournisseurs ;
Pour éviter les doublons on peut utiliser DISTINCT après le SELECT.

-
Instruction de restriction : WHERE
lister les données des produits dont le poids est supérieur à 15 Kg
Select *
From produits
Where poids>15 ;
1
Base de Données
-
M Cieloski
lister les données des produits dont le poids est > 15 Kg et < à 40 Kg.
Select *
From produits
Where poids > 15 and poids < 40;
 Instruction BETWEEN, IN, LIKE
_ remplace n’importe quel caractère
% remplace n’importe quel séquence
Select *
From produits
Where poids IN (15 ,40) ;
Select *
From produits
Where poids NOT BETWEEN 15 and 40;
Select *
From fournisseurs
Where ville=”LYON”;
Select *
From fournisseurs
Where nom NOT LIKE ‘D%’ ;
Le test d’une valeur manquante est également possible, représenté par NULL.
-
Ou
lister les fournisseurs dont l’adresse n’est pas renseignée.
Select *
From fournisseurs
Where adresse IS NULL ; (pas d’adresse)
Where adresse IS NOT NULL ; (il existe une adresse)
RAPPEL SUR LES TABLES DE VERITE
ET
V
F
Null
V
V
F
Null
F
F
F
F
Null
Null
F
Null
OU
V
F
Null
V
V
V
V
F
V
F
Null
Null
V
Null
Null
V
F
Null
NON
F
V
Null
2
Base de Données
M Cieloski
TRI EST PRESENTATION
Le langage SQL permet de trier les tuples obtenus grace à une clause ODER BY;
ASC et DESC permettent de préciser si le tri est croissant ou décroissant, par défaut
il est croissant.
-
afficher les produits rouge ou vert, trier sur le nom croissant et la couleur
décroissante.
Select *
From produits
Where couleur IN (‘rouge’,’vert’)
Order by design ASC, couleur DESC;
-
lister les produits cartésien de la tables produits et fournisseurs
Select *
From fournisseurs, produits ;
-
lister les noms des fournisseurs avec les n° de produits commandés ainsi que
la quantité commandés.
Select nom, pno, qute
From fournisseurs, commandes
Where fournisseur.fno=commandes.fno ;
Autre façon via les synonymes de tables :
Select nom, pno, qute
From fournisseur F, commande C
Where F.fno=C.fno ;
-
lister les couples de réferences fournisseurs situés dans la même ville.
Select F1.fno, F2.fno
From fournisseur.F1, fournisseur.F2,
Where F1.fno<F2.fno
And F1.ville=F2.ville;
LA MANIPULATION DE DONNEES
Lister le prix des produits avec une TVA à 5.5%
Select Distinct design, prix*1.055 AS prix_ttc
From produits ;
3
Base de Données
M Cieloski
Exemple, illustrer le volume financier commandé par des commandes de
moins de 10 articles.
Select Distinct cno, prix*qute AS volume
From produits p, commande c
Where c.pno=p.pno
and qute<10;
D’autres commande:
YEAR (Date)
LOWER (Chaine)
MONTH (Date)
UPPER (Chaine)
DAY (Date)
LENGTH (Chaine)
SUBSTRING (Chaine, position départ, longueur)
LES FONCTIONS STATISTIQUES
AVG
COUNT
MAX
MIN
SUM
moyenne
compter le nombre d’éléments
donne le MAX du nombre d’éléments
donne le MIN du nombre d’éléments
fait la somme d’une liste d’éléments
Select COUNT (fno)
From fournisseurs;
-
calculer la somme des quantités commandées.
Select SUM (qute)
From commandes;
-
donner le nombre de livraison du produit 102.
Select COUNT (*)
From commandes
Where pno=102;
-
compter les noms des fournisseurs différents.
Select COUNT (Distinct nom)
From fournisseurs;
-
donner la quantité maximum commandée
select MAX (qute)
from commandes ;
4
Base de Données
M Cieloski
LES REGROUPEMENTS
Il est souvent intéressant de regrouper des données pour y faire des opérations.
GROUP BY (nom d’une colonne)
HAVING qualificatif
Ex : compter les commandes par fournisseur.
Select fno, COUNT (*) nb
From commandes
Group by fno;
(ou as nb)
HAVING permet d’exprimer une restriction sur les résultats obtenus avec une
fonction de calcul.
Pour éviter toute confusion les tests sur les colonnes simples : Where ; les tests
sur les colonnes de regroupements Having.
Ex : lister uniquement les n° de fournisseurs qui ont plus de trois commandes
d’au moins dix articles, liste triée sur le nom du fournisseur.
Select F.fno, nom
From commande C, fournisseur F,
Where qute>10
and C.fno=F.fno
Group by F.fno
Having Count (*) > 3
Order by nom;
Ex : donner le n° de fournisseur qui fournit plus d’un produit.
Select fno
From fournisseur
Group by fno
Having Count (fno) > 1;
Ex : On ne s’intéresse qu’aux commandes dont le n° et > à 1000 et pour celles ci,
on souhaite lister les noms des fournisseurs avec les quantités maximum
commandées dont la moyenne des quantités commandées et > à 7 articles.
Select nom, MAX (qute)
From commande C, fournisseur F,
Where C.fno=F.fno
and C.cno > 1000
Group by nom
Having AVG (qute) > 7;
5
Base de Données
M Cieloski
LES SOUS-REQUETES
Il est possible d’effectuer des sous-requêtes afin d’obtenir des requêtes complexes
afin d’effectuer des opérations qui dépendent d’autres requêtes.
Select _ _ _
From _ _ _
Where fno=10 ;
Select _ _ _
From _ _ _
Where fno = (Select _ _ _
From _ _ _)
1 seule valeur
Select _ _ _
From _ _ _
Where fno IN (Select _ _ _
From _ _ _ )
Plusieurs données
Select _ _ _
From _ _ _
Where fno > ALL (Select _ _ _
From _ _ _ )
Supérieur à toute les valeurs renvoyées par le sous select.
Select _ _ _
From _ _ _
Where fno > ANY (Select _ _ _
From _ _ _ )
Au moins une valeur renvoyée par le sous select.
Select _ _ _
From _ _ _
Where EXISTS (Select _ _ _
From _ _ _ )
Existe si le sous select renvoie quelque chose.
6
Base de Données
-
lister les fournisseurs qui habitent dans la même ville que le fournisseur 10
Select nom
From fournisseurs
Where ville=(Select ville
From fournisseurs
Where fno=10) ;
-
M Cieloski
 Select nom
From fournisseurs
Where ville=’LILLE’ ;
lister les fournisseurs dont au moins 1 des produits est fournis par un
fournisseur de produits rouges.
Select fno
From commande
Where pno IN (Select Distinct pno
From commandes
Where fno IN (Select Distinct fno
From commandes
Where pno IN (Select pno
From produits
Where couleur=’rouge’)));
-
lister les noms des fournisseurs livrant tout les produits.
Select nom
From fournisseurs F
Where NOT EXISTS (Select *
From produits P
Where NOT EXISTS (Select *
From commandes C
Where C.pno=P.pno
And F.fno=P.fno));
-
lister les références des fournisseurs livrant au moins 1 produit en quantité
supérieur à chacun des produits livrés par le fournisseur 19.
Select fno
From commandes
Where qute> ALL (Select qute
From commandes
Where fno=19);
Ou
Select fno
From commandes C1
Where Not Exists (Select *
From commandes C2
Where C2.fno=19
And C1.qute <= C2.qute);
7
Base de Données
M Cieloski
LES OPERATIONS ENSEMBLISTES
UNION
INTERSECT
EXCEPT
fournit la réunion des tuples de deux Select
fournit l’intersection des tuples de deux Select
fournit les tuples du 1er Select qui ne sont pas dans le second
Condition : elles ne sont valables qu’a condition que les colonnes de chacun des
Selects aient exactement la même description (la même longueur)
L’opération UNION supprime par défaut les doublons, si l’on veut
obtenir les doublons, il faut utiliser UNION ALL .
LES OPERATIONS DE LA MISE A JOUR
Insérer des données
INSERT
permet d’ajouter des lignes dans une table si l’ordre INSERT contient
une clause VALUES alors 1 seule ligne est insérée dans la table, par
contre si l’ordre INSERT contient une clause Select alors plusieurs
lignes peuvent être simultanément insérées dans la table.
Ex : Ajouter un nouveau produit
INSERT INTO produits (pno, design, prix, poids, couleur)
VALUES (8, ‘ecrou’, 10, 0.5, ‘vert’) ;
Ajouter dans la table petites_cmd les n° et quantité des produits commandés en
moins de 5 articles. (on supposera que la table petites_cmd existe)
INSERT petites_cmd (pno, qute)
Select pno, qute
From commandes
Where qute < 5 ;
Remarque :
si une valeur est insérer dans toutes les colonnes de la table,
l’énumération des colonnes est facultative.
INSERT INTO produits
VALUES (8, ‘ecrou’, 10, 0.5, ‘vert’) ;
Modification des données
UPDATE
permet de modifier des lignes dans une tables, l’expression contenant
les modifications à effectuer peut être une constante, une expression
arithmétique ou le résultat d’un Select imbriqué.
8
Base de Données
-
M Cieloski
Augmenter le prix de tout les produits de 5% s’ils sont de couleur rouge.
UPDATE produits
SET prix = prix * 1.05
Where couleur = ‘rouge’ ;
-
Effectuer une promotion de 10% sur tout les produits de prix maximum.
UPDATE produits
SET prix = prix * 0.90
Where prix = (Select MAX (prix)
From produits) :
Suppression
DELETE
-
permet de supprimer des lignes dans 1 tableau suivant une
qualification.
Supprimer tout les produits dont le prix est > à 1000F.
DELETE from produits
Where prix > 1000 ;
9
Téléchargement