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

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

Embed Size (px)

Citation preview

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

1

Initiation au langage S.Q.L.*

(*) Structured Query Language

Page 2: 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)

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

3

C_FACT

Présentation du contexte

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

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

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

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€

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

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

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

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

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

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

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

GSI S.Q.L. Cayenne

Modèle logique relationnelle

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

GSI S.Q.L. Cayenne

Création des tables

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

GSI S.Q.L. Cayenne

Création des tables

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

GSI S.Q.L. Cayenne

Les relations

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

GSI S.Q.L. Cayenne

Définition des relations

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

GSI S.Q.L. Cayenne

Une base de donnée ensemble d'informations sur un

sujet exhaustif, non redondant, structuré, persistant.

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

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.).

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

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.

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

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.).

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

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).

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

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

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

20

S. Q. L.

Introduction

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

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).

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

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.

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

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 ;

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

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>]

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

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

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

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

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

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")

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

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;

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

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)

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

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

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

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”);

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

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;

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

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;

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

GSI S.Q.L. Cayenne

Relier les tables

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

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;

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

36

S. Q. L.

E X E R C I C E

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

GSI S.Q.L. Cayenne

Modèle logique relationnelle

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

38

S. Q. L.

Utilisation avancée de l’ordre select

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

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;

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

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;

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

GSI S.Q.L. Cayenne

Group ByJeux d’essai

Select VILCLI, CDPCLI From CLIENTGroup By VILCLI, CDPCLI;

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

GSI S.Q.L. Cayenne

Group By :Exemple

Select VILCLI, CDPCLI From CLIENTGroup By VILCLI, CDPCLI;

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

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”;

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

GSI S.Q.L. Cayenne

HavingJeux d’essai

Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI

Having CDPCLI > “97300”;

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

GSI S.Q.L. Cayenne

Group By :Exemple

Select VILCLI, CDPCLI From CLIENT Group by VILCLI, CDPCLI

Having CDPCLI > “97300”;

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

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

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

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)

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

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.

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

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

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

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;

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

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;

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

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.

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

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

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

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);

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

55

S. Q. L.

E X E R C I C E