1 Initiation au langage S.Q.L.* (*) Structured Query Language

Preview:

Citation preview

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

Recommended