Initiation au langage S.Q.L.* (*) Structured Query Language
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) GSI S.Q.L.
Présentation du contexte C_FACT Présentation du contexte
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.
La facture (simplifiée) N° de facture : B12345678 Date : 30/01/06 FACTURE Numéro client : 4110021 Nom du client : SA Durand Adresse……..: 3 Impasse des Lys Adresse suite : Route des plages CP: 97354 Ville : Rémire Référence Désignation Prix Quantité Montant SDR035 256 SDRAM 133 40,00€ 12 480,00€ ………… ………………. ………..……. ………… …………… Total facture GSI S.Q.L. 480,00€
Le dictionnaire de données 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 Adresse ligne 2 CDPCLI Texte (5) Code postal VILCLI Ville client QTP_VENDU Numérique Quantité de produit vendu REFPRO Texte (6) Référence produit DESPRO Description du produit PUVPRO Monétaire Prix unitaire de vente GSI S.Q.L.
Organisation des données Occurrence ou enregistrement FACTURE NFACT : B12345678 Vente DATFACT : 15/02/06 CPTCLI : 4110021 Fichier ou Table Produits Données, valeurs Propriétés, attributs, champ Clients GSI S.Q.L.
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 Adresse ligne 2 CDPCLI Texte (5) Code postal VILCLI Ville client QTP_VENDU Numérique Quantité de produit vendu REFPRO Texte (6) Référence produit DESPRO Description du produit PUVPRO Monétaire Prix unitaire de vente Facture Client Vente Produit GSI S.Q.L.
Modèle logique relationnelle GSI S.Q.L.
Création des tables GSI S.Q.L.
Création des tables GSI S.Q.L.
Les relations GSI S.Q.L.
Définition des relations GSI S.Q.L.
Une base de donnée ensemble d'informations sur un sujet exhaustif, non redondant, structuré, persistant. GSI S.Q.L.
Une base de données c’est… Un ensemble de tables qui 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.
Un SGBD Logiciel qui permet de : les données d'une base de données. décrire, modifier, interroger, administrer, les données d'une base de données. GSI S.Q.L.
Bases de données relationnelles Un ensemble de tables inter reliées qui 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 relationnelle s'appelle un système de gestion de base de données relationnelle (S.G.B.D.R.). GSI S.Q.L.
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.
Fonctions d'un SGBDR décrire les données manipuler ces 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 GSI S.Q.L.
S. Q. L. Introduction
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.
Généralité 1/3 Interface : Commentaires (faux sous access) : 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.
Généralités 2/3 Notation des ordres SQL (cf. poly) Exemple : 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.
Généralités 3/3 ordre SQL Clauses de l’ ordre SQL : SELECT 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.
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.
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.
Expression de condition UPDATE <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.
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.
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.
Clause Where 1/2 * N’importe quelle séquence de caractères ? =,<>,>,>=,<,<= 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.
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.
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.
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 CLIENT ORDER BY SEXCLI ASC, AGECLI DESC; GSI S.Q.L.
Relier les tables GSI S.Q.L.
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; GSI S.Q.L.
S. Q. L. E X E R C I C E
Modèle logique relationnelle GSI S.Q.L.
Utilisation avancée de l’ordre select S. Q. L. Utilisation avancée de l’ordre select
L’ordre 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 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.
Regrouper des résultats SELECT <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.
Group By : Jeux d’essai Select VILCLI, CDPCLI From CLIENT Group By VILCLI, CDPCLI; GSI S.Q.L.
Group By : Exemple Select VILCLI, CDPCLI From CLIENT Group By VILCLI, CDPCLI; GSI S.Q.L.
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.
Having : Jeux d’essai Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI Having CDPCLI > “97300”; GSI S.Q.L.
Select VILCLI, CDPCLI From CLIENT Group By : Exemple Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI Having CDPCLI > “97300”; GSI S.Q.L.
Effectuer des calculs Calcul Exemple Ajouter QTP_VENDU + 5 Soustraire Multiplier PUVPRO * 1.196 Diviser QTP_VENDU / 2 Calculer (QTP_VENDU*PUVPRO)/1.05 GSI S.Q.L.
Manipuler des chaînes Concaténer Extraire Extraire à gauche Manipulation Exemple Concaténer CDPCLI & VILCLI Extraire SUBSTRING(CDPCLI, 3, 2) SUBSTRING(champ, début, longueur) Extraire à gauche LEFT(CDPCLI, 2) LEFT(champ, longueur) Extraire à droite RIGHT(CDPCLI, 2) RIGHT(champ, longueur) En minuscule LCASE(VILCLI) En majuscule UCASE(VILCLI) Longueur DATALENGTH(AD2CLI) GSI S.Q.L.
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.
Fonctions d’agrégation Opération effectuée AVG moyenne COUNT nombre d’éléments MAX maximum MIN minimum SUM somme GSI S.Q.L.
Agrégation : exemple 1 Select Count(*) As [NOMBRE DE CLIENTS], From CLIENT; Select Count(*) As [NOMBRE DE CLIENTS], Lcase(VILCLI) From CLIENT Group By VILCLI; GSI S.Q.L.
Agrégation : exemple 2 Select NFACT, Avg(QTP_VENDU) As MOYENNE From VENDRE Group By NFACT Having MOYENNE >10; Select NFACT, Avg(QTP_VENDU) As MOYENNE From VENDRE Group By NFACT Having Avg(QTP_VENDU)>10; GSI S.Q.L.
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.
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. NOT 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.
Sous requêtes : exemples Select * From TAB1 Where PRIX > (select Min(PRIX) From TAB2); Where NOM Not In (Select NOM From TAB2); Where PRIX > All (Select PRIX From TAB2); (SUP. À TTES LES VALEURS) Select * FROM TAB1 Where PRIX > Any (Select PRIX From TAB2); GSI S.Q.L.
S. Q. L. E X E R C I C E