1
Initiation au langage S.Q.L.*
(*) Structured Query Language
GSI S.Q.L. Cayenne
Stuctured Query Language ?
= Langage d'interrogation structuré En fait : langage complet de gestion de bases
de données relationnelles, conçu par IBM dans les 70’s.
Devenu le langage standard des systèmes de gestion des bases de données relationnelles (SGBDR)
3
C_FACT
Présentation du contexte
GSI S.Q.L. Cayenne
Le cas d’une facturation
L’entreprise C_Fact désire informatiser la gestion de sa facturation.
Son dirigeant vous communique un exemplaire d’une facture et précise :
Les clients payent toujours comptant Les produits ont un cycle de vie
court, il sont référencés à chaque livraison
GSI S.Q.L. Cayenne
La facture (simplifiée)
………………………………..…….……………….…………
480,00€1240,00€256 SDRAM 133SDR035
Numéro client : 4110021
Nom du client : SA DurandAdresse……..: 3 Impasse des LysAdresse suite : Route des plagesCP: 97354 Ville : Rémire
FACTUREDate : 30/01/06N° de facture : B12345678
Total facture
MontantQuantitéPrix DésignationRéférence
480,00€
GSI S.Q.L. Cayenne
Le dictionnaire de donnéesPropriété Type (long) Description
NFACT Texte (10) Numéro de facture
DATFACT Date/heure Date d’émission
CPTCLI Texte (7) Numéro de compte client
NOMCLI Texte (32) Nom du client
AD1CLI Texte (50) Adresse ligne 1
AD2CLI Texte (50) Adresse ligne 2
CDPCLI Texte (5) Code postal
VILCLI Texte (32) Ville client
QTP_VENDU Numérique Quantité de produit vendu
REFPRO Texte (6) Référence produit
DESPRO Texte (50) Description du produit
PUVPRO Monétaire Prix unitaire de vente
GSI S.Q.L. Cayenne
Organisation des données
Clients
Produits
Vente
Fichier ouTable
Occurrence ou enregistrement
NFACT : B12345678DATFACT : 15/02/06
CPTCLI : 4110021
FACTURE
Données, valeurs
Propriétés, attributs, champ
GSI S.Q.L. Cayenne
Regroupement des informations
Propriété Type (long) Description
NFACT Texte (10) Numéro de facture
DATFACT Date/heure Date d’émission
CPTCLI Texte (7) Numéro de compte client
NOMCLI Texte (32) Nom du client
AD1CLI Texte (50) Adresse ligne 1
AD2CLI Texte (50) Adresse ligne 2
CDPCLI Texte (5) Code postal
VILCLI Texte (32) Ville client
QTP_VENDU Numérique Quantité de produit vendu
REFPRO Texte (6) Référence produit
DESPRO Texte (50) Description du produit
PUVPRO Monétaire Prix unitaire de vente
Facture
Client
Vente
Produit
GSI S.Q.L. Cayenne
Modèle logique relationnelle
GSI S.Q.L. Cayenne
Création des tables
GSI S.Q.L. Cayenne
Création des tables
GSI S.Q.L. Cayenne
Les relations
GSI S.Q.L. Cayenne
Définition des relations
GSI S.Q.L. Cayenne
Une base de donnée ensemble d'informations sur un
sujet exhaustif, non redondant, structuré, persistant.
GSI S.Q.L. Cayenne
Une base de données c’est…
Un ensemble de tablesqui contiennent des données
décrivant des objets de la réalité
Nb.) Un logiciel qui permet d'interagir avec une base de données s'appelle un système de gestion de base de données (S.G.B.D.).
GSI S.Q.L. Cayenne
Un SGBD Logiciel qui permet de :
décrire, modifier, interroger, administrer,
les données d'une base de données.
GSI S.Q.L. Cayenne
Bases de données relationnelles
Un ensemble de tables inter reliéesqui contiennent des donnéesdécrivant des objets de la réalité
Nb.) Un logiciel qui permet d'interagir avec une base de données relationnelle s'appelle un système de gestion de base de données relationnelle (S.G.B.D.R.).
GSI S.Q.L. Cayenne
Un SGBDR permet d’assurer la gestion d’un ensemble de
relations normalisées, de mettre en œuvre l'intégrité
référentielle (elle permet de contrôler la cohérence des données en vérifiant les contraintes de jointure entre les tables),
d’effectuer des requêtes multi-tables à l’aide d’un langage normalisé (SQL).
GSI S.Q.L. Cayenne
Fonctions d'un SGBDR décrire les données
Créer les tables et les relations manipuler ces données
ajouter, modifier, supprimer des enregistrements obtenir des renseignements
sélectionner, trier, calculer, agréger définir des contraintes sur les données
Type, existence définir des protections
mots de passe, autorisations, résoudre les problèmes d'accès multiples prévoir des procédures de reprise Permettre d'écrire des applications
indépendantes
20
S. Q. L.
Introduction
GSI S.Q.L. Cayenne
SQL, c’est à la fois :
LDD : un langage de définition des données (CREATE, ALTER,DROP),
LMD : langage de manipulation des données (SELECT,UPDATE, INSERT, DELETE)
LCD : un langage de contrôle de l'accès aux données (GRANT,REVOKE).
GSI S.Q.L. Cayenne
Généralité 1/3
Interface : Inclure des requêtes SQL dans un programme Envoyer directement les requêtes SQL au SGBD
Commentaires (faux sous access) : Le texte situés sur la même ligne et après « # » Le texte situé entre « /* » et « */ »
Le langage SQL n'est pas sensible à la casse possibilité d’écrire indistinctement en minuscule
ou en majuscule. Toutefois selon le SGBDR cette distinction existe.
GSI S.Q.L. Cayenne
Généralités 2/3
Notation des ordres SQL (cf. poly) Les parties variables sont comprises entre < et > Les parties optionnelles sont comprises entre [ et ]
Exemple :
SELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Expression des critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
SELECT CPTCLI, NOMCLI FROM CLIENT ;
GSI S.Q.L. Cayenne
Généralités 3/3
ordre SQL SELECT
Clauses de l’ ordre SQL : FROM WHERE GROUP BY ….
SELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Expression des critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
GSI S.Q.L. Cayenne
Exprimer une valeur en SQL Chaîne de caractères
Comprises entre " et ". "Ceci est une chaîne de caractères"
Numérique 123.65 120 3.41415
Date Comprises entre # et #
#31/12/2005# Un champ non renseigné
NULL
GSI S.Q.L. Cayenne
Nommer un champ en sql <Table>.<Champ>
Le champ REFPRO de la table VENDRE s’écrit REFPRO.VENDRE Nommer la table est indispensable
lorsqu’il faut préciser la table de provenance du champ
Le caractère spécial * remplace les noms des champs d’une table et évite ainsi de les nommer
GSI S.Q.L. Cayenne
Expression de conditionUPDATE <Nom de la table> SET
(<Liste des affectations : Colonne=Valeur*>)
[WHERE <Condition de mise à jour>];
=,<>,>,>=,< ,<=
CDPCLI <> "97300"
AND REFPRO="P00002" AND QTP_VENDU > 50
OR REFCLI = "4110001" OR CDPCLI "97354"
NOT NOT (REFPRO = "P00001" OR REFPRO = "P00002")
GSI S.Q.L. Cayenne
SELECT
SELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
SELECT * FROM CLIENT;
SELECT NOMCLI, VILCLI FROM CLIENT;
GSI S.Q.L. Cayenne
SELECT
SELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
SELECT DISTINCT VILCLI FROM CLIENT ; (élimine les doublons)
SELECT NOMCLI AS "Nom" FROM CLIENT ;(AS renomme les colonnes)
GSI S.Q.L. Cayenne
Clause Where 1/2=,<>,>,>=,<,<= CDPCLI <> "97300"
BETWEEN DATFACT BETWEEN #1/1/2006# And #1/31/2006#
IN REFPRO IN ("P00001","P00002")
LIKE* VILCLI LIKE “*OU*”
IS NULL AD2CLI IS NULL
* N’importe quelle séquence de caractères
? N’importe quel caractère
GSI S.Q.L. Cayenne
Clause where
AND (REFPRO=”P00002” AND QTP_VENDU > 50)
OR (REFCLI = “4110001” OR CDPCLI “97354”)
NOT REFPRO NOT IN ("P00001","P00002")
SELECT NOMCLI, VILCLI FROM CLIENT WHERE (REFCLI = “4110001” OR CDPCLI “97354”);
GSI S.Q.L. Cayenne
Quelques exemples SELECT * FROM CLIENT WHERE VILCLI
IN ('CAYENNE','KOUROU'); SELECT * FROM CLIENT WHERE AGECLI
NOT BETWEEN 30 AND 40; SELECT * FROM CLIENT WHERE AD2CLI
IS NULL; SELECT * FROM CLIENT WHERE AD2CLI
IS NOT NULL;
GSI S.Q.L. Cayenne
Clause ORDER BY
SELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
SELECT * FROM CLIENT ORDER BY NOMCLI;
SELECT * FROM CLIENTORDER BY SEXCLI ASC, AGECLI DESC;
GSI S.Q.L. Cayenne
Relier les tables
GSI S.Q.L. Cayenne
Lier les tables avec WHERE SELECT * FROM tab1,tab2
(jointure sans qualification =produit cartésien)
SELECT * FROM FACTURE,VENDRE WHERE FACTURE.NFACT=VENDRE.NFACT;
SELECT * FROM FACTURE,VENDRE, PRODUIT WHERE FACTURE.NFACT=VENDRE.NFACT AND VENDRE.REFPRO=PRODUIT.REFPRO;
36
S. Q. L.
E X E R C I C E
GSI S.Q.L. Cayenne
Modèle logique relationnelle
38
S. Q. L.
Utilisation avancée de l’ordre select
GSI S.Q.L. Cayenne
L’ordre SELECTSELECT <Liste des champs> FROM <Liste des tables concernées> [WHERE <Condition sur les champs à lister>] [GROUP BY <Critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
Select Distinct VILCLI From CLIENT ; (élimine les
doublons)
Select NOMCLI As "Nom" From CLIENT ; (AS nomme les colonnes)
Select * From CLIENT Where VILCLI IN ('CAYENNE','KOUROU');
Select * From CLIENT Where AGECLI NOT BETWEEN 30 AND 40;
Select * From CLIENT Where AD2CLI IS NULL;
Select * From CLIENT Where AD2CLI IS NOT NULL Order By
NOMCLI;
Select * From FACTURE,VENDRE, PRODUIT Where
FACTURE.NFACT=VENDRE.NFACT and
VENDRE.REFPRO=PRODUIT.REFPRO;
GSI S.Q.L. Cayenne
Regrouper des résultatsSELECT <Liste des champs> FROM <Liste des tables> [WHERE <Condition sur les champs à lister>] [GROUP BY <Critères de regroupement>] [HAVING <Condition sur les champs regroupés>] [ORDER BY <Expression des critères de tri>]
Select VILCLI From CLIENT Group by VILCLI;
Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI;
GSI S.Q.L. Cayenne
Group ByJeux d’essai
Select VILCLI, CDPCLI From CLIENTGroup By VILCLI, CDPCLI;
GSI S.Q.L. Cayenne
Group By :Exemple
Select VILCLI, CDPCLI From CLIENTGroup By VILCLI, CDPCLI;
GSI S.Q.L. Cayenne
Filtrer les éléments regroupés
La clause HAVING Va de pair avec la clause GROUP BY restriction sur les regroupements (GROUP
BY)
Select VILCLI From CLIENT Group by VILCLI Having VILCLI Like “*ou*”; Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI
Having CDPCLI > “97300”;
GSI S.Q.L. Cayenne
HavingJeux d’essai
Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI
Having CDPCLI > “97300”;
GSI S.Q.L. Cayenne
Group By :Exemple
Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI
Having CDPCLI > “97300”;
GSI S.Q.L. Cayenne
Effectuer des calculsCalcul Exemple
Ajouter QTP_VENDU + 5
Soustraire QTP_VENDU - 5
Multiplier PUVPRO * 1.196
Diviser QTP_VENDU / 2
Calculer (QTP_VENDU*PUVPRO)/1.05
GSI S.Q.L. Cayenne
Manipuler des chaînesManipulation Exemple
Concaténer CDPCLI & VILCLI
ExtraireSUBSTRING(CDPCLI, 3, 2)
SUBSTRING(champ, début, longueur)
Extraire à gaucheLEFT(CDPCLI, 2)
LEFT(champ, longueur)
Extraire à droiteRIGHT(CDPCLI, 2)
RIGHT(champ, longueur)
En minuscule LCASE(VILCLI)
En majuscule UCASE(VILCLI)
Longueur DATALENGTH(AD2CLI)
GSI S.Q.L. Cayenne
Les fonctions statistiques
Fonctions d’agrégation. Mentionnées dans la clause SELECT Regroupent selon les critères de la
clause GROUP BY. Absence de GROUP BY
regroupent sur la totalité des données.
GSI S.Q.L. Cayenne
Fonctions d’agrégation
Fonction Opération effectuée
AVG moyenne
COUNT nombre d’éléments
MAX maximum
MIN minimum
SUM somme
GSI S.Q.L. Cayenne
Agrégation : exemple 1
Select Count(*) As [NOMBRE DE CLIENTS], From CLIENT;
Select Count(*) As [NOMBRE DE CLIENTS], Lcase(VILCLI) From CLIENTGroup By VILCLI;
GSI S.Q.L. Cayenne
Agrégation : exemple 2
Select NFACT, Avg(QTP_VENDU) As MOYENNE From VENDRE
Group By NFACTHaving MOYENNE >10;
Select NFACT, Avg(QTP_VENDU) As MOYENNE From VENDRE
Group By NFACTHaving Avg(QTP_VENDU)>10;
GSI S.Q.L. Cayenne
Sous requêtes Une requête SQL renvoie une liste Cette liste est utilisable dans un ordre
SQL Afin d’effectuer des comparaisons
comme avec l’opérateur IN : SELECT * FROM CLIENT WHERE VILCLI IN
('CAYENNE','KOUROU'); La liste entre parenthèse sera alors
remplacée par un ordre SELECT.
GSI S.Q.L. Cayenne
Sous requêtes : Opérateurs
ANY Test si une ou plusieurs lignes du résultat d'une sous-requête répondent à la condition spécifiée
ALL Test si toutes les lignes du résultat d'une sous-requête répondent à la condition spécifiée.
IN Test si un élément est présent dans les lignes du résultat d'une sous-requête.
NOTIN
Test si un élément n’est pas présent dans les lignes du résultat d'une sous-requête
GSI S.Q.L. Cayenne
Sous requêtes : exemples
Select * From TAB1 Where PRIX > (select Min(PRIX) From TAB2);
Select * From TAB1Where NOM Not In (Select NOM From TAB2);
Select * From TAB1Where PRIX > All (Select PRIX From TAB2);(SUP. À TTES LES VALEURS)
Select * FROM TAB1Where PRIX > Any (Select PRIX From TAB2);
55
S. Q. L.
E X E R C I C E