Vous êtes sur la page 1sur 20

III0903 - Système d’information des systèmes de production

Le langage SQL Diapositives de Cours O. DUBOIS

Le langage SQL

Le langage SQL Diapositives de Cours O. DUBOIS

Diapositives de Cours

O. DUBOIS

Introduction

3
3

SQL = Structured Query Language

La définition des structures de données (composant du schéma) et la manipulation du contenu (les données elles- mêmes) s'effectuent au moyen du langage SQL

= langage de requête proposé par les SGBD

Normalisation

– 1986 : 1ère norme = SQL-86

– ensuite : SQL-89 puis SQL-92 (SQL2)

– dernière norme : SQL:99 (SQL3) modifiée en 2003 (SQL:2003) en 2008 (SQL:2008) et en 2011 (SQL:2011) Les SGBD ne respectent jamais complètement les normes plusieurs variantes suivant les SGBD

et en 2011 (SQL:2011) Les SGBD ne respectent jamais complètement les normes  plusieurs variantes suivant

Introduction

5
5

Le langage SQL est déclaratif (non procédural) Une instruction SQL constitue une requête

= description de l'opération que doit effectuer le SGBD Deux possibilités pour exécuter une requête :

– à partir d'un "terminal" mode interactif : le résultat apparaît à l'écran

– par programme

C, C++, Java, PHP,

variables du programme

: le résultat est placé dans les

à l'écran – par programme C, C++, Java, PHP, variables du programme : le résultat est

Plan

2
2

Introduction Le DDL (Data Description Language)

– Création d'une base

– Modification des caractéristiques d'une base

– Suppression d'une base

– Création d'une table

– Types de colonnes

– Création de types personnalisés de données

– Contraintes

– Modification de la structure d'une table

– Suppression d'une table

Le DML (Data Manipulation Language)

– Manipulation des données

– Interrogation des données

– Création et modification de tables à partir de requêtes

SQL avancé Exemple

SQL avancé Exemple
de tables à partir de requêtes SQL avancé Exemple Introduction 4 Des Grands SGBDR commerciaux –

Introduction

4
4

Des Grands SGBDR commerciaux

– DB2 d'IBM

– ORACLE d'Oracle Corp.

– SQL Server de Microsoft

de moins importants

– SYBASE de PowerSoft (rachetée par SAP)

– INFORMIX d'Informix (rachetée par IBM)

– INGRES de Computer Associates (est désormais libre)

et d'autres plus facile d'accès

– Access de Microsoft

Des SGBDR Open Source

– MySQL de MySQL AB (MySQL AB a été rachetée par SUN qui a été acquis par Oracle)

– MariaDB (branche libre issue de MySQL)

PostegreSQL (développée par le créateur d'INGRES) MySQL AB (MySQL AB a été rachetée par SUN qui a été acquis par Oracle) –

6 Introduction Une instruction est une combinaison de une ou plusieurs clauses introduites par des
6
Introduction
Une instruction est une combinaison de une ou plusieurs
clauses introduites par des mots-clés
Exemple :
SELECT [ALL | DISTINCT] col1, col2,
, colN
FROM table1,
, tableN
[WHERE condition]
[GROUP BY col [ASC | DESC]] [HAVING condition] ]
[ORDER BY col [ASC | DESC] [,col [ASC | DESC]
]
]
– 5 clauses : SELECT, FROM, WHERE, GROUP BY et
ORDER BY
– les mots-clés entre crochet sont facultatifs
– " | " indique les choix possibles
– le souligné signifie "valeur par défaut"

III0903 - Système d’information des systèmes de production

Introduction

7
7

Les instructions SQL ne sont pas sensibles à la casse mais les mots-clés sont généralement écrits en majuscule Les instructions SQL peuvent être écrites sur plusieurs lignes Les instructions SQL se terminent par un point-virgule Conventions de noms des objets de base de données :

– Les conventions varient d'un SGBD à l'autre

– En général :

• de 1 à 30 caractères attention : certains SGBD imposent 8 caractères maximum pour le nom de la base

• les noms doivent commencer par une lettre

• toute combinaison de majuscules, minuscules, chiffres ou trait de soulignement "_"

commencer par une lettre • toute combinaison de majuscules, minuscules, chiffres ou trait de soulignement "_"

Le DDL

9
9

Création d'une base Modification des caractéristiques d'une base Suppression d'une base Création d'une table Types de colonnes Création de types personnalisés de données Contraintes Modification de la structure d'une table Suppression d'une table

personnalisés de données Contraintes Modification de la structure d'une table Suppression d'une table

Modification des caractéristiques d'une base

11
11

Certains paramètres d'une base de données peuvent être modifiés grâce à la requête

ALTER DATABASE nom_de_la_base [ paramètres ]

une base de données peuvent être modifiés grâce à la requête ALTER DATABASE nom_de_la_base [ paramètres

Introduction

8
8

Le langage SQL se compose de plusieurs "sous-langages" :

Le DDL (Data Description Language)

= définition et création des objets de la base CREATE, ALTER, DROP

Le DML (Data Manipulation Language)

= traitement et manipulation des objets de la base SELECT, INSERT, UPDATE, DELETE

Le DCL (Data Control Language)

= gestion des privilèges, ou des différents droits des utilisateurs sur la base de données GRANT, REVOKE, DENY

Le TCL (Transaction Control Language)

= gestion de l'environnement transactionnel (gère les propriétés ACID des transactions : Atomicité, Cohérence, Isolation, Durabilité) SET TRANSACTION, COMMIT, ROLLBACK

SQL intégré : "Embedded SQL"

COMMIT, ROLLBACK SQL intégré : "Embedded SQL" = permet d'utiliser SQL dans un langage (C, Java,

= permet d'utiliser SQL dans un langage (C, Java,

)

Création d'une base

10
10

Une base de données est créée grâce à la requête

CREATE DATABASE nom_de_la_base [ paramètres ]

– le nom de la base doit respecter les règles de nommage du SGBD

– Comme paramètres, il est par exemple possible d'indiquer le jeu de caractères et la collation utilisée

Exemple MySQL :

CREATE DATABASE clicom DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;

la collation utilisée Exemple MySQL : CREATE DATABASE clicom DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;

Suppression d'une base

12
12

Une base de données est supprimée grâce à la requête

DROP DATABASE nom_de_la_base

Suppression d'une base 12 Une base de données est supprimée grâce à la requête DROP DATABASE

III0903 - Système d’information des systèmes de production

Création d'une table

13
13

CREATE TABLE nomtable

(

nomcol1 typedonnee1 [ contrainte ], nomcol2 typedonnee2 [ contrainte ],

nomcoln

typedonneen [ contrainte ]

)

Pour créer une table, il faut indiquer son nom et tous ses attributs

Pour chaque attribut, le nom, le type de données et éventuellement les contraintes sont indiqués

et tous ses attributs Pour chaque attribut, le nom, le type de données et éventuellement les
15 Exemple de base de données Contenu de la base CLICOM CLIENT DETAIL NCli Nom
15
Exemple de base de données
Contenu de la base CLICOM
CLIENT
DETAIL
NCli
Nom
(Prenom)
Adresse
CP
Ville
(Cat)
Compte
#NCom
#NPro
QCom
B062
Goffin
Pierre
72
rue de la Gare
69001
Lyon
B2
-3200.00
30178
CS464
25
B112
Hansenne
Henry
23
allé e Dumont
86000
Poitiers
C1
1250.00
30179
CS262
60
B332
Monti
Claudine
112
rue Neuve
06000
Nice
B2
0.00
30179
PA60
20
B512
Gillet
Jean-Claude
14
rue de l'Eté
31000
Toulouse
B1
-8700.00
30182
PA60
30
C003
Avron
Maurice
8
chemin de la Cure
31000
Toulouse
B1
-1700.00
30184
CS464
120
C123
Mercier
rard
25
rue Lemaitre
69003
Lyon
C1
-2300.00
30184
PA45
20
C400
Ferard
Pierre
65
rue du Tertre
86000
Poitiers
B2
350.00
30185
CS464
260
D063
Mercier
lène
201 boulevard du Nord
31000
Toulouse
-2250.00
30185
PA60
15
F010
Toussaint
5
rue Godefroid
86000
Poitiers
C1
0.00
30185
PS222
600
F011
Poncelet
Christian
17
Clos des Erables
31000
Toulouse
B2
0.00
30186
PA45
3
F400
Jacob
78
chemin du Moulin
33000
Bordeaux
C2
0.00
30188
CS464
180
K111
Vanbist
Jean
180 rue Florimont
59000
Lille
B1
720.00
30188
PA45
22
K729
Neuman
Franç oise
40
rue Bransart
31000
Toulouse
0.00
30188
PA60
70
L422
Franck
60
rue de Wepion
69003
Lyon
C1
0.00
30188
PH222
92
S127
Vanderka
Thierry
3
avenue des Roses
69001
Lyon
C1
-4580.00
S712
Guillaume
14a chemin des Roses
75013
Paris
B1
0.00
COMMANDE
PRODUIT
NCom
#NCli
DateCom
NPro
Libelle
Prix
QStock
30178
K111
2015-12-21
CS262
CHEV. SAPIN 200x6x2
75.00
45
30179
C400
2015-12-22
CS264
CHEV. SAPIN 200x6x4
120.00
2690
30182
S127
2015-12-23
CS464
CHEV. SAPIN 400x6x4
220.00
450
30184
C400
2015-12-23
PA45
POINTE ACIER 45 (1K)
105.00
580
30185
F011
2016-01-02
PA60
POINTE ACIER 60 (1K)
95.00
134
30186
C400
2016-01-02
PH222
PL. HETRE 200x20x2
230.00
782
30188
B512
2016-01-03
PS222
PL. SAPIN 200x20x2
185.00
1220

Création d'une table

17
17

Ex : requête de création de la table DETAIL :

CREATE TABLE DETAIL ( NCom char(12), NPro char(15), QCom decimal(8) )

Ex : requête de création de la table DETAIL : CREATE TABLE DETAIL ( NCom char(12),
14 Exemple de base de données Structure de la base CLICOM CLIENT PRODUIT NCli NPro
14
Exemple de base de données
Structure de la base CLICOM
CLIENT
PRODUIT
NCli
NPro
COMMANDE
Nom
Libelle
Ncom
Prenom[0-1]
Prix
#NCli
Adresse
DETAIL
QStock
DateCom
CP
#NCom
Ville
#NPro
Cat[0-1]
QCom
Compte

Création d'une table

16
16

Ex : requête de création de la table CLIENT

CREATE TABLE CLIENT

( NCli char(10), Nom char(32), Prenom char(32),

Adresse char(60), CP char(5),

Ville char(32),

Cat char(2), Compte decimal(8,2) )

char(5), Ville char(32), Cat char(2), Compte decimal(8,2) ) Types de colonnes 18 Le type de données

Types de colonnes

18
18

Le type de données précise le domaine d'un attribut Le langage SQL standard définit des types de données de base Les noms et les comportements de ces types de données varient suivant les SGBD Les principaux types de données sont les suivants :

– Numériques

– Chaîne de caractères

– Chaînes de bits

– Booléen

– Date et heure

sont les suivants : – Numériques – Chaîne de caractères – Chaînes de bits – Booléen

III0903 - Système d’information des systèmes de production

Types de colonnes

Chaîne de caractères

19
19

– longueur fixe CHARACTER(n) ou CHAR(n)

n = nombre de caractères

– longueur variable

CHARACTER VARYING(n) ou VARCHAR(n)

n = nombre maximum de caractères

Rq : les valeurs des chaînes de caractères sont spécifiées entre guillemets simples (apostrophes)

Chaînes de bits

– longueur fixe BIT(n) ou BINARY(n)

n = nombre de bits

– longueur variable VARBINARY(n)

n = nombre maximum de bits

longueur fixe BIT( n ) ou BINARY( n ) n = nombre de bits – longueur

Types de colonnes

Numériques

21
21

– entiers : TINYINT, SMALLINT, INT, BIGINT

– nombres à virgule flottante : FLOAT(p)

p : nombre total de chiffres

– nombre à virgule fixe : DECIMAL(p,s) ou NUMERIC(p,s)

p : nombre minimal de chiffres décimaux

j : nombre de chiffres après la virgule

p,s ) ou NUMERIC( p,s ) • p : nombre minimal de chiffres décimaux • j

Création de types personnalisés de données

23
23

Ex : requête de création de la table CLIENT devient CREATE TABLE CLIENT ( NCli MATRICULE, Nom LIBELLE, Prenom LIBELLE, Adresse char(60), CP char(5), Ville LIBELLE, Cat char(2), Compte MONTANT );

MATRICULE, Nom LIBELLE, Prenom LIBELLE, Adresse char(60), CP char(5), Ville LIBELLE, Cat char(2), Compte MONTANT );

Types de colonnes

20
20

Booléen (TRUE ou FALSE) Date et heure

– DATE : année, mois, jour (date) sous la forme AAAA-MM-JJ ex : DATE '2005-12-10'

– TIME : heure, minute, seconde (instant) sous la forme HH:MM:SS ex : TIME '08:18:40'

– TIMESTAMP ou DATETIME : inclut DATE et TIME ex : TIMESTAMP '2005-12-10 08:18:40.2156483'

– INTERVAL : intervalle entre dates ou instants

– INTERVAL : intervalle entre dates ou instants Création de types personnalisés de données 22 Il

Création de types personnalisés de données

22
22

Il est possible de déclarer un nom de domaine et s'en servir pour spécifier les attributs

CREATE DOMAIN nomdomaine [AS] type [DEFAULT valeur]

Ex : en déclarant les domaines suivants :

CREATE DOMAIN MONTANT decimal(8,2) CREATE DOMAIN MATRICULE char(10) CREATE DOMAIN LIBELLE char(32)

domaines suivants : CREATE DOMAIN MONTANT decimal(8,2) CREATE DOMAIN MATRICULE char(10) CREATE DOMAIN LIBELLE char(32)

Création de types personnalisés de données

24
24

Il est possible de définir des valeurs par défaut qui seront assignées lorsque l'utilisateur ne les spécifie pas

Ex:

CREATE DOMAIN MONTANT decimal(8,2) DEFAULT 0.0

qui seront assignées lorsque l'utilisateur ne les spécifie pas Ex: CREATE DOMAIN MONTANT decimal(8,2) DEFAULT 0.0

III0903 - Système d’information des systèmes de production

Spécification des contraintes

Identifiant primaire La clause PRIMARY KEY (col1,

25
25

, coln) désigne le ou les

attributs qui forment la clé primaire Rq : s'il n'y a qu'un seul attribut, cette clause peut directement suivre l'attribut concerné

Identifiant secondaire La clause UNIQUE (col1,

secondaires Contrainte référentielle : clé étrangère La clause FOREIGN KEY désigne le ou les attributs qui forment la clé étrangère FOREIGN KEY (liste) REFERENCES nomtable [(col1,

, coln) désigne les éventuelles clés

,

coln)]

[( col1 , , coln ) désigne les éventuelles clés , coln )] [ON DELETE {CASCADE

[ON DELETE {CASCADE | NO ACTION}] [ON UPDATE NO ACTION]

Spécification des contraintes

27
27

Ex : requête de création de la table CLIENT CREATE TABLE CLIENT ( NCli char(10) PRIMARY KEY, Nom char(32) NOT NULL, Prenom char(32), Adresse char(60) NOT NULL, CP char(5) NOT NULL, Ville char(32) NOT NULL, Cat char(2) CHECK ( CAT IN ('B1', 'B2','C1','C2') , Compte decimal(8,2) NOT NULL );

Rq : CHECK n'est pas prise en compte sous MySQL

NULL ); Rq : CHECK n'est pas prise en compte sous MySQL Spécification des contraintes 29

Spécification des contraintes

29
29

Le standard SQL impose que chaque contrainte ait un nom Ce nom est attribué

– soit par l'utilisateur = contraintes nommées La clause CONSTRAINT prefixeNom permet de nommer une contrainte Ex :

CONSTRAINT PKCLI PRIMARY KEY (NCLI) Conventions de préfixes (non imposées) PK : identifiant primaire (Primary Key) FK : clé étrangère (Foreign Key) NN : non NULL U : Unique

– soit par le SGBD = contraintes non nommées

Key ) FK : clé étrangère ( Foreign Key ) NN : non NULL U :

Spécification des contraintes

26
26

Colonnes facultatives/obligatoires

Par défaut, toute colonne est facultative Le caractère obligatoire d'une colonne est spécifié par la clause NOT NULL Contrainte sur les limites des valeurs des colonnes La clause CHECK (condition) permet d'indiquer ce genre de contrainte

sur les limit es des valeurs des colonnes La clause CHECK ( condition ) permet d'indiquer

Spécification des contraintes

28
28

Ex : requête de création de la table DETAIL :

CREATE TABLE DETAIL ( NCom char(12) NOT NULL, NPro char(15) NOT NULL, QCom decimal(8) NOT NULL, PRIMARY KEY (NCom, NPro) FOREIGN KEY (NCom) REFERENCES COMMANDE FOREIGN KEY (NPro) REFERENCES PRODUIT );

COMMANDE FOREIGN KEY (NPro) REFERENCES PRODUIT ); Modification de la structure d'une table 30 La

Modification de la structure d'une table

30
30

La modification de la structure d'une table est réalisée par l'instruction

ALTER TABLE action

Différentes modifications peuvent être envisagées

– Ajout de colonnes

– Suppression de colonnes

– Modification de colonnes existantes

– Ajout de contraintes

• clé primaire PRIMARY KEY

• clés étrangères FOREIGN KEY

• unicité UNIQUE

• valeurs par défaut DEFAULT

• contraintes de vérification CHECK

–

Suppression de contraintes

III0903 - Système d’information des systèmes de production

Ajouter une colonne

L'instruction

ALTER TABLE table ADD col type [contrainte]

31
31

permet d'ajouter des colonnes dans une table existante La valeur initiale de chaque ligne de la nouvelle colonne est NULL

Ex :

ALTER TABLE CLIENT ADD Prenom VARCHAR(20);

La valeur initiale de chaque ligne de la nouvelle colonne est NULL Ex : ALTER TABLE

Supprimer une colonne

L'instruction

ALTER TABLE table DROP col

33
33

permet de supprimer des colonnes dans une table existante

Ex :

ALTER TABLE CLIENT DROP Prenom ;

TABLE table DROP col 33 permet de supprimer des colonnes dans une table existante Ex :

Ajouter une contrainte

Ajout de clés étrangères – L'instruction

35
35

ALTER TABLE table ADD [CONSTRAINT nomcontrainte] FOREIGN KEY (col-table) REFERENCES tablereference (col-tableref)

permet d'ajouter une clé étrangère dans une table existante

) REFERENCES tablereference ( col-tableref ) permet d'ajouter une clé étrangère dans une table existante

Modifier des caractéristiques d'une colonne

L'instruction

ALTER TABLE table ALTER COLUMN col modification

32
32

permet de modifier certaines caractéristiques des colonnes d'une table

– type et dimension des données

– valeur par défaut

– NOT NULL

Ces modifications ne sont possibles que si elles respectent le format des valeurs déjà présentes dans les lignes de la table

ne sont possibles que si elles respectent le format des valeurs déjà présentes dans les lignes

Ajouter une contrainte

Ajout de clés primaires

– L'instruction

ALTER TABLE table ADD [CONSTRAINT nomcontrainte] PRIMARY KEY (col1[, col2 [, col3]

])

34
34

permet d'ajouter une clé primaire dans une table existante

– Pour une clé multicomposant, il est possible de spécifier plusieurs colonnes

clé primaire dans une table existante – Pour une clé multicomposant, il est possible de spécifier

Supprimer une contrainte

L'instruction

36
36

ALTER TABLE table DROP PRIMARY KEY permet de supprimer une clé primaire

L'instruction

ALTER TABLE table DROP CONSTRAINT nomcontrainte

permet de supprimer une contrainte nommée

primaire L'instruction ALTER TABLE table DROP CONSTRAINT nomcontrainte permet de supprimer une contrainte nommée

III0903 - Système d’information des systèmes de production

Suppression d'une table

 
37
37

Le DML

38
38

L'instruction

Manipulation des données

– Insertion de lignes

DROP TABLE nomtable

 

– Modification de données

 

– Suppression de lignes

permet de supprimer la table nomtable Si la table contient des lignes, la suppression est soumise aux contraintes référentielles qui concernent la table

Interrogation des données

 

– Projection

– Restriction

 

– Fonctions

Ex : la suppression de la table COMMANDE pourrait entraîner la suppression de toutes les lignes de DETAIL

– Fonctions agrégatives et regroupements

 

– Opérateurs ensemblistes

 

– Jointures

– Sous-requêtes

Création et modification de tables à partir de requêtes

 
et modification de tables à partir de requêtes   Insertion de lignes 39 Modification de données
et modification de tables à partir de requêtes   Insertion de lignes 39 Modification de données

Insertion de lignes

39
39

Modification de données

40
40

L'instruction

L'instruction

INSERT INTO nomtable (col1, col2,

,

colN)

UPDATE nomtable SET col1 = val1 [ , [WHERE condition]

 

VALUES (val1, val2,

,

valN)

, colN = valN ]

permet d'ajouter des lignes dans une table

 

Il n'est pas obligatoire de spécifier les colonnes à remplir

permet de modifier les valeurs des lignes d'une table La clause WHERE permet de sélectionner les lignes à modifier

Ex :

Ex :

INSERT INTO CLIENT VALUES ('B112','HANSENNE', 'Henry','23 allée Dumont' , '86000', 'Poitiers' ,'C1',1250);

UPDATE PRODUIT SET LIBELLE = 'PL. SAPIN 200x40x2' WHERE NPRO = 'PS223';

 
,'C1',1250); UPDATE PRODUIT SET LIBELLE = 'PL. SAPIN 200x40x2' WHERE NPRO = 'PS223';  
,'C1',1250); UPDATE PRODUIT SET LIBELLE = 'PL. SAPIN 200x40x2' WHERE NPRO = 'PS223';  

Suppression de lignes

L'instruction

DELETE FROM nomtable WHERE condition

41
41

permet de supprimer les lignes qui répondent aux conditions indiquées par WHERE Ex :

DELETE FROM PRODUIT WHERE NPRO = 'PS223';

La suppression de lignes dans une table doit respecter les contraintes d'intégrité

WHERE NPRO = 'PS223'; La suppression de lignes dans une table doit respecter les contraintes d'intégrité

Suppression de lignes

L'instruction

TRUNCATE TABLE nomtable

42
42

permet de supprimer toutes les lignes de la table

Suppression de lignes L'instruction TRUNCATE TABLE nomtable 42 permet de supprimer toutes les lignes de la

III0903 - Système d’information des systèmes de production

Le DML

Manipulation des données

– Insertion de lignes

– Modification de données

– Suppression de lignes

Interrogation des données

– Projection

– Restriction

– Fonctions

– Fonctions agrégatives et regroupements

– Opérateurs ensemblistes

– Jointures

– Sous-requêtes

43
43

Création et modification de tables à partir de requêtes SFW

ensemblistes – Jointures – Sous-requêtes 43 Création et modification de tables à partir de requêtes SFW

Interrogation des données :

45
45

Algèbre relationnelle

La sélection est une opération unaire qui consiste à sélectionner un ensemble de lignes d'une table, selon un critère de sélection pouvant porter sur un ou plusieurs attributs Cette opération génère une autre table de même schéma que la table de départ la sélection modifie (en réduction) le nombre de lignes mais le nombre de colonnes reste identique La projection consiste à :

– ne retenir que certains attributs de la table

= supprimer certaines colonnes

– éliminer les lignes identiques

= supprimer les lignes ayant le même ensemble de valeurs (doublons)

taines colonnes – éliminer les lignes identiques = supprimer les lignes ayant l e même ensemble
47 Interrogation des données : SELECT FROM WHERE L'extraction de données est réalisée par l'instruction
47
Interrogation des données :
SELECT
FROM
WHERE
L'extraction de données est réalisée par l'instruction SELECT
Le résultat de l'exécution d'une requête SELECT est une table
L'instruction
SELECT [ALL | DISTINCT] col1, col2,
, colN
FROM table1,
, tableN
[WHERE condition]
[GROUP BY col [ASC | DESC]] [HAVING condition] ]
[ORDER BY col [ASC | DESC] [,col [ASC | DESC]
]
]
permet d'interroger une base de données,
c.-à-d. de récupérer des données
= requête

Interrogation des données :

44
44

Algèbre relationnelle

L'algèbre relationnelle propose un ensemble d'opérations s'appliquant à une ou plusieurs relations (tables) pour donner une nouvelle relation (table) Ces opérations permettent d’exprimer des manipulations ensemblistes sur les données :

Sélection (ou restriction), Projection, Union, Intersection, Différence, Produit cartésien, Jointure, Division

Le langage SQL implémente ces opérations de l’algèbre

relationnelle afin par exemple de pouvoir extraire des données

répondant à des critères précis (SELECT

Opérations les plus courants : Sélection, Projection et Jointure

FROM

WHERE)

à des critères précis (SELECT Opérations les plus courants : Sélection, Projection et Jointure FROM WHERE)

Interrogation des données :

46
46

Algèbre relationnelle

La jointure permet d’obtenir une nouvelle table par la composition de deux tables Elle consiste à :

– faire le produit cartésien des deux tables

– effectuer une opération de sélection

– effectuer ou non une opération de projection pour réduire le schéma de la table résultante Différents types de jointure :

Équi-jointure

Jointure naturelle

Theta-jointure

 

types de jointure : – Équi-jointure – Jointure naturelle – Theta-jointure –   …

Interrogation des données :

SELECT

FROM

WHERE

48
48

L'instruction SELECT comprend 5 parties principales :

La clause SELECT précise les valeurs (liste les colonnes, valeurs dérivées) qui constituent chaque ligne du résultat Les attributs de cette clause sont donc les colonnes de la relation résultante

L'option DISTINCT permet de supprimer les lignes doublons La clause FROM désigne les tables qui contiennent les colonnes à récupérer La clause WHERE spécifie les conditions à satisfaire par les lignes des tables indiquées par FROM

à récupérer La clause WHERE spécifie les conditions à satisfaire par les lignes des tables indiquées

III0903 - Système d’information des systèmes de production

Interrogation des données :

SELECT

FROM

WHERE

49
49

La clause ORDER BY indique les critères choisis pour trier les lignes Cette clause ne concerne que l'affichage des données récupérées et non l'ordre interne des lignes dans la table ASC = croissant , DESC=décroissant La clause GROUP BY permet de faire des regroupement de lignes suivant la valeur de colonnes et en respectant éventuellement certaines condition précisées par HAVING Cette clause permet d'appliquer des fonctions agrégatives sur les colonnes du résultat

précisées par HAVING Cette clause permet d'appliquer des fonctions agrégatives sur les colonnes du résultat

Interrogation des données Clause SELECT

51
51

Suppression des doublons (lignes en double) = implémentation l'opérateur Projection Utilisation de l'option DISTINCT du SELECT

Ex : pour obtenir la liste des villes où résident les clients de la table CLIENT SELECT DISTINCT Ville FROM CLIENT;

Ex : pour obtenir la liste des villes où résident les clients d e la table
53 Interrogation des données Clause SELECT Expressions Il est possible d'évaluer et d'afficher des
53
Interrogation des données
Clause SELECT
Expressions
Il est possible d'évaluer et d'afficher des expressions dans la
clause SELECT
Ex :
SELECT 'TVA de ' , NPro , ' = ' , 0.21*Prix*QStock
FROM PRODUIT ;
TVA de
NPro
=
0.21*Prix*QStock
TVA de
CS262
= 708.7500
Résultat ⇒
TVA de
CS264
= 67788.0000
TVA de
CS464
= 20790.0000
TVA de
PA45
= 12789.0000
TVA de
PA60
= 2673.3000
TVA de
PH222
= 37770.6000
TVA de
PS222
= 47397.0000

Interrogation des données Clause SELECT

Afficher toutes les colonnes

50
50

= opérateur Sélection sans condition particulière

Ex : pour extraire toutes les colonnes de CLIENT SELECT * FROM CLIENT;

Extraction de certaines colonnes

Ex : extraire les colonnes Ncli, Nom, Ville de CLIENT SELECT Ncli, Nom, Ville FROM CLIENT;

de certaines colonnes Ex : extraire les colonnes Ncli, Nom, Ville de CLIENT SELECT Ncli, Nom,
52 Interrogation des données Clause SELECT Alias Les alias permettent de renommer des colonnes à
52
Interrogation des données
Clause SELECT
Alias
Les alias permettent de renommer des colonnes à l'affichage
ou des tables dans la requête
= mot-clé AS
Ex : extraire les colonnes Ncli, Nom, Ville de CLIENT
SELECT Ncli AS 'Numéro de client',
Nom AS 'Nom du client',
Ville AS 'Ville du client'
FROM CLIENT ;
Numéro de client
Nom du client
Ville du client
Résultat ⇒
.
.
.
.
.
.
.
.
.

Interrogation des données Clause ORDER BY

54
54

Ordonnancement L'ordre des lignes du résultat d'une requête est arbitraire La clause ORDER BY permet de trier le résultat d'une requête suivant les valeurs de colonnes

Ex : affiche la table CLIENT triée par nom de Ville, par catégorie et par nom de client

SELECT * FROM CLIENT ORDER BY Ville, Cat, Nom;

= tri croissant (par défaut)

Ex : affiche la table PRODUIT triée par ordre décroissant des

valeurs de quantité en stock

SELECT * FROM PRODUIT

ORDER BY QStock DESC;

tri décroissanttable PRODUIT triée par ordre décroissant des valeurs de quantité en stock SELECT * FROM PRODUIT

III0903 - Système d’information des systèmes de production

Interrogation des données Clause WHERE

55
55

Restriction La clause WHERE permet de limiter le résultat aux lignes qui respectent une condition

WHERE nomcol opérateur-comp valeur

Ex : pour extraire les informations Ncli et Nom des lignes de CLIENT qui concernent des clients habitant Toulouse SELECT Ncli, Nom FROM CLIENT WHERE Ville = 'Toulouse';

de CLIENT qui concernent des clients habitant Toulouse SELECT Ncli, Nom FROM CLIENT WHERE Ville =
57 Interrogation des données Clause WHERE La condition de la clause WHERE peut être composée
57
Interrogation des données
Clause WHERE
La condition de la clause WHERE peut être composée de
prédicats incluant des colonnes ou expressions entre des
opérateurs de comparaison, logiques ou intégrés
Opérateurs de comparaison
Opérateur
Description
=
égalà
<>
différent de
<
inférieurà
<=
inférieur ou égalà
>
supérieurà
>=
supérieur ou égalà

Interrogation des données Clause WHERE

Opérateurs intégrés

59
59

– Appartenance ou non à un intervalle

BETWEEN val1 AND val2 ou NOT BETWEEN val1 AND val2 Ex :

SELECT Nom FROM CLIENT WHERE Compte BETWEEN 1000 AND 4000 ;

– Appartenance ou non à une liste

IN (liste) ou NOT IN (liste) Ex :

SELECT Nom FROM CLIENT WHERE Cat NOT IN ( ' C 1 ' , ' C 2 FROM CLIENT WHERE Cat NOT IN ('C1', 'C2', 'C3');

Interrogation des données Clause WHERE

Restriction

56
56

Ex : pour extraire les informations NPro et QCom du détail de la commande n° 30184 SELECT NPro AS 'Produit', QCom AS 'Quantité' FROM DETAIL WHERE NCom = '30184';

n° 30184 SELECT NPro AS 'Produit', QCom AS 'Quantité' FROM DETAIL WHERE NCom = '30184';

Interrogation des données Clause WHERE

58
58

Opérateurs logiques La condition introduite par WHERE peut être constituée d'une expression booléenne de conditions élémentaires = opérateurs AND, OR, NOT et (parenthèses)

Ex : pour afficher la liste de clients de Toulouse dont le compte est débiteur SELECT Nom, Adresse, Compte FROM CLIENT WHERE Ville = 'Toulouse' AND Compte < 0;

le compte est débiteur SELECT Nom, Adresse, Compte FROM CLIENT WHERE Ville = 'Toulouse' AND Compte

Interrogation des données Clause WHERE

60
60

Opérateurs intégrés – Présence ou non de certains caractères

LIKE 'masque' ou NOT LIKE 'masque' 'masque' décrit la structure générale des valeurs désignées Certains caractères jouent un rôle particulier

• "_" (souligné) désigne un caractère quelconque

• "%" (pourcent) désigne toute chaîne de caractères, éventuellement vide • pour rechercher explicitement "_" ou "%", il faudra les préfixer par un caractère spécial défini par une clause ESCAPE

"_" ou "%", il faudra les préfixer par un caractère spécial défini par une clause ESCAPE

III0903 - Système d’information des systèmes de production

Interrogation des données Clause WHERE

Opérateurs intégrés

61
61

– Présence ou non de certains caractères Ex :

SELECT Nom FROM CLIENT WHERE CAT LIKE '_1';

SELECT Nom FROM CLIENT WHERE Adresse LIKE '%Neuve%';

Nom FROM CLIENT WHERE Adresse LIKE '%Neuve%'; SELECT Nom FROM CLIENT WHERE Adresse LIKE

SELECT Nom FROM CLIENT WHERE Adresse LIKE '%$_CHENE%' ESCAPE '$';

Fonctions

63
63

Il est possible d'appliquer des fonctions sur les valeurs extraites d'une table Fonctions numériques

– opérateurs arithmétiques classiques :

+ - * / et changement de signe -

Ex :

SELECT 'TVA de ', NPro, ' = ' , 0.21*Prix*QStock FROM PRODUIT WHERE QStock > 500;

– fonctions mathématiques :

COS(x), LN(x), EXP(x), FLOOR(x), ROUND(x), RAND(x),

WHERE QStock > 500; – fonctions mathématiques : COS( x ), LN( x ), EXP( x

Fonctions

65
65

Fonctions de chaînes de caractères

– RIGHT(n) : extrait les n derniers caractères en partant de la droite

– LEFT(n) : extrait les n premiers caractères en partant de la gauche

– SUBSTRING(str,pos,len) : retourne une chaîne de len caractères de long de la chaîne str, à partir de la position pos Fonctions sur les bits

| : OU bits à bits

& : ET bits à bits

^ : OU exclusif bits à bits

~ : inversion bits à bits

| : OU bits à bits – & : ET bits à bits – ^ :

Interrogation des données Clause WHERE

62
62

Opérateurs intégrés

Présence ou non de la valeur NULL IS NULL ou IS NOT NULL Ex :

SELECT Nom FROM CLIENT WHERE Cat IS NULL;

NULL Ex : – SELECT Nom FROM CLIENT WHERE Cat IS NULL; Fonctions 64 Fonctions de

Fonctions

64
64

Fonctions de chaînes de caractères

– ASCII(ch) : valeur du code ASCII

– CHAR(n) : caractère codé avec la valeur n

– CHAR_LENGTH(ch) ou LEN(ch) : nombre de caractères

– CONCAT(ch1,ch2) ou ch1 || ch2 : concaténation de chaînes de caractères

– LOCATE(ch1,ch2) ou CHARINDEX(ch1,ch2) : position de ch1 dans ch2

– LOWER(ch) : mettre en minuscules

– UPPER(ch) : mettre en majuscules

ch1 , ch2 ) : position de ch1 dans ch2 – LOWER( ch ) : mettre

Fonctions

Fonctions de conversion

66
66

– CAST(expr AS type) : convertit expr dans le type type

– CONVERT(type,expr,style) : convertit expr dans le type type selon un style donné Fonctions sur la date

– EXTRACT(u FROM d_t) : donne sous forme numérique, le composant u de la valeur temporelle d_t (les valeurs de u sont year, month, day, hour, minute, second)

– CURRENT_DATE() : retourne la date courante au format 'YYYY-MM-DD' ou 'YYYYMMDD

day, hour, minute, second) – CURRENT_DATE() : retourne la date courante au format 'YYYY-MM-DD' ou 'YYYYMMDD

III0903 - Système d’information des systèmes de production

Fonctions

67
67

Fonctions diverses

Fonctions de sélection CASE WHEN c1 THEN v1 WHEN c2 THEN v2

 

ELSE vn

END

renvoie v1 si c1 est vraie, sinon, renvoie v2 si c2 est vraie, renvoie vn

,

sinon

CASE expr WHEN c1 THEN v1 WHEN c2 THEN v12

ELSE vn

END

c omme précédemment avec des conditions expr = ci

comme précédemment avec des conditions expr = ci

 

Fonctions

69
69

Fonctions diverses

CURRENT_USER() : nom d'utilisateur et le nom d'hôte de la session courante

ISNULL(expr) : renvoie 1 si expr est NULL

 

eur et le nom d'hôte de la session courante – ISNULL( expr ) : renvoie 1

Fonctions agrégatives et regroupements

71
71

Fonctions agrégatives (ou statistiques) Rq :

– seules les valeurs non-NULL sont considérées

– pour ne pas prendre en compte les valeurs dupliquées, certaines fonctions acceptent le modifieur DISTINCT

Ex :

Nombre de commandes passées :

SELECT COUNT(NCli) FROM COMMANDE;

Nombre de clients ayant passé au moins une commande :

SELECT COUNT(DISTINCT NCli) FROM COMMANDE;

FROM COMMANDE; Nombre de clients ayant passé au moins une commande : SELECT COUNT(DISTINCT NCli) FROM

Fonctions

68
68

Fonctions diverses

Fonctions de sélection Ex :

SELECT Ncli, Nom, CASE SUBSTRING(Cat FROM 1 FOR 1) WHEN 'A' THEN 'bon'

WHEN 'B' THEN 'moyen' WHEN 'C' THEN 'occasionnel' ELSE 'inconnu' END AS 'Type de client', Ville FROM CLIENT

END AS 'Type de client', Ville FROM CLIENT Fonctions agrégatives et regroupements 70 Fonctions

Fonctions agrégatives et regroupements

70
70

Fonctions agrégatives (ou statistiques)

– COUNT(*) : nombre de lignes trouvées

– COUNT(col) : nombre de valeurs de la colonne

– AVG(col) : moyenne des valeurs de la colonne

– STDEV(col) ou STD(col) : écart type des valeurs de la colonne

– VAR(col) ou VARIANCE(col) : variance des valeurs de la colonne

– SUM(col) : somme des valeurs de la colonne

 

– MIN(col) : minimum des valeurs de la colonne

– MAX(col) : maximum des valeurs de la colonne

la colonne   – MIN( col ) : minimum des valeurs de la colonne – MAX(

Fonctions agrégatives et regroupements

72
72

Il est possible de regrouper des lignes grâce à GROUP BY et HAVING

SELECT colonnes FROM table WHERE condition GROUP BY colonnes [HAVING conditions]

GROUP BY permet d'indiquer le regroupement à réaliser HAVING permet de spécifier d'éventuelles conditions que le regroupement doit satisfaire

à réaliser HAVING permet de spécifier d'éventuelles conditions que le regroupement doit satisfaire

III0903 - Système d’information des systèmes de production

Fonctions agrégatives et regroupements

73
73

Ex : Afficher pour chaque ville, son nom, le nombre de clients et le montant moyen des comptes des clients

SELECT Ville, COUNT(*) AS 'Nombre de clients', AVG(Compte) AS 'Moyenne des comptes' FROM CLIENT GROUP BY Ville;

COUNT(*) AS 'Nombre de clients', AVG(Compte) AS 'Moyenne des comptes' FROM CLIENT GROUP BY Ville;

Fonctions agrégatives et regroupements

75
75

Ex : Afficher pour chaque client ayant commandé au moins 2 fois le produit PA45, son numéro et le nombre de commandes

SELECT NCli, COUNT(*) FROM COMMANDE WHERE NCom IN ( SELECT NCOM FROM DETAIL WHERE NPro = 'PA45' ) GROUP BY NCli HAVING COUNT(*) >=2;

= groupement de données et sous-requête

DETAIL WHERE NPro = 'PA45' ) GROUP BY NCli HAVING COUNT(*) >=2; = groupement de données

Opérateurs ensemblistes

77
77

Ex : Afficher la table des commandes complétée par le nom et la localité de tous les clients, même de ceux qui n'ont pas passé de commande ("--" apparaîtra pour NCom et DateCom dans ce dernier cas)

SELECT M.NCom, C.NCli, M.DateCom, C.Nom, C.Ville FROM COMMANDE M, CLIENT C WHERE M.NCli = C.NCli UNION SELECT '--', NCli, '--', Nom, Ville FROM CLIENT WHERE NOT EXISTS( SELECT * FROM COMMANDE WHERE NCli = CLIENT.NCli)

NCli, '--', Nom, Ville FROM CLIENT WHERE NOT EXISTS( SELECT * FROM COMMANDE WHERE NCli =

Fonctions agrégatives et regroupements

74
74

Ex : Afficher pour chaque ville ayant au moins 3 clients, son nom, le nombre de clients et le montant moyen des comptes des clients

SELECT Ville, COUNT(*) AS 'Nombre de clients', AVG(Compte) AS 'Moyenne des comptes' FROM CLIENT GROUP BY Ville HAVING COUNT(*) >= 3;

de clients', AVG(Compte) AS 'Moyenne des comptes' FROM CLIENT GROUP BY Ville HAVING COUNT(*) >= 3;

Opérateurs ensemblistes

76
76

Les opérateurs ensemblistes UNION, INTERSECT et MINUS permettent de combiner les résultats de différentes instruction SFW

– Union : l'opérateur UNION permet d'ajouter à une requête le résultat d'autres requêtes

– Intersection : L'opérateur INTERSECT permet d'identifier les lignes communes à deux requêtes

– Différence : L'opérateur MINUS (ou EXCEPT ) permet de déterminer les lignes présentes dans la première requête mais pas dans la deuxième

Rq : ces opérateurs éliminent les lignes en double Pour empêcher ceci, il faut ajouter la clause ALL

la deuxième Rq : ces opérateurs éliminent les lignes en double Pour empêcher ceci, il f

Jointures

78
78

La jointure permet de regrouper dans une même table des données provenant de plusieurs autres Les tables sont reliées par leurs attributs communs selon la condition spécifiée par la clause WHERE Souvent, ces attributs communs se trouvent dans une liaison de clé externe Les jointures sont classées selon

– le type de condition impliquée

– le nombre de tables en jeu

– le type des lignes récupérées

classées selon – le type de condition impliquée – le nombre de tables en jeu –

III0903 - Système d’information des systèmes de production

Jointures

Différents types de jointure :

– Jointures internes (inner join) :

79
79

• Equijointure : jointure entre deux tables connectées par des valeurs communes égales

• Jointure naturelle : jointure entre deux tables connectées par des colonnes de même nom

• Auto-jointure : jointure entre une table et elle-même

– Jointure externe (outer join) : jointure entre deux tables qui inclue les lignes d'une table qui n'ont pas de correspondance dans l'autre table

entre deux tables qui inclue les lignes d'une table qui n'ont pas de correspondance dans l'autre

Jointures

81
81

Différents types d'écriture des jointures :

Sous-requête (ou jointure procédurale) = une requête externe et des requêtes dans lesquelles se programment les jointures SELECT FROM t1 WHERE

=

 

( SELECT

FROM t2 WHERE

)

AND

;

les quelles se programment les jointures SELECT FROM t1 WHERE =   ( SELECT FROM t2

Equijointure

83
83

Les noms d'attribut identiques dans chaque table doivent être qualifiés (c.-à-d. précédé du nom de leur table) Cette jointure peut être généralisée à plus de deux tables Ex : Afficher la table des commandes complétée par le nom et la ville du client ayant passé la commande

SELECT COMMANDE.NCom, COMMANDE.NCli, COMMANDE.DateCom, CLIENT.Nom, CLIENT.Ville FROM COMMANDE, CLIENT WHERE CLIENT.NCli = COMMANDE.NCli;

ou

SELECT COMMANDE.NCom, COMMANDE.NCli, COMMANDE.DateCom, CLIENT.Nom, CLIENT.Ville FROM COMMANDE INNER JOIN CLIENT ON CLIENT.NCli = COMMANDE.NCli;

COMMANDE.DateCom, CLIENT.Nom, CLIENT.Ville FROM COMMANDE INNER JOIN CLIENT ON CLIENT.NCli = COMMANDE.NCli;

Jointures

80
80

Différents types d'écriture des jointures :

Une jointure peut s'écrire dans la clause FROM ou dans la clause WHERE plusieurs écritures possibles

– Directives dans la clause FROM

INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN

SELECT

FROM t1

INNER JOIN t2 ON

=

WHERE

;

– Clauses de jointure dans la clause WHERE

SELECT

FROM

t1 , t2

WHERE

=

INNER JOIN t2 ON = WHERE ; – Clauses de jointure dans la clause WHERE SELECT

;

Equijointure

82
82

Une équijointure utilise l'opérateur d'égalité dans la clause de jointure et compare généralement une clé étrangère avec une clé primaire (ou candidate) d'une table de référence

SELECT table1.col1,

, table1.colN,

table2.col1,

, table2.colM

FROM table1, table2 WHERE table1.col-commune = table2.col-commune;

ou

SELECT table1.col1,

, table1.colN,

table2.col1,

, table2.colM

FROM table1 INNER JOIN table2 ON table1.col-commune = table2.col-commune;

Rq : la directive INNER est optionnelle (appliquée p a r défaut ) appliquée par défaut)

Equijointure

84
84

Ex : Afficher pour chaque client ayant commandé au moins 2 fois le produit PA45, son numéro, le nombre de commandes et la quantité de produit PA45 commandée

SELECT NCli, COUNT(*), SUM(QCom) FROM COMMANDE, DETAIL WHERE NPro = 'PA45' AND COMMANDE.NCom = DETAIL.NCom GROUP BY NCli HAVING COUNT(*) >=2

= jointure et regroupement de données

AND COMMANDE.NCom = DETAIL.NCom GROUP BY NCli HAVING COUNT(*) >=2 = jointure et regroupement de données

III0903 - Système d’information des systèmes de production

Alias de table

85
85

Pour simplifier les requêtes, il est possible d'utiliser des alias pour les noms de tables Ex :

SELECT COMMANDE.NCom, COMMANDE.NCli, COMMANDE.DateCom, CLIENT.Nom, CLIENT.Ville FROM COMMANDE, CLIENT WHERE CLIENT.NCli = COMMANDE.NCli; Peut s'écrire :

SELECT A.NCom, A.NCli, A.DateCom, B.Nom, B.Ville FROM COMMANDE AS A, CLIENT AS B WHERE B.NCli = A.NCli; Ces alias ne sont valables que dans l'instruction SELECT concernée Rq : AS est facultative

B .NCli = A .NCli; Ces alias ne sont valables que dans l'instruction SELECT concernée Rq

Thêta-jointure

87
87

A l'inverse des équijointures, la clause d'une thêta-jointure n'est pas forcément basée sur l'égalité (le plus souvent de clés), mais inclut tout autre type d'opérateur de comparaison (!=, <>, >, <, >=, <=, BETWEEN, LIKE, IN)

inclut tout autre type d'opérateur de comparaison (!=, <>, >, <, >=, <=, BETWEEN, LIKE, IN)

Jointures externes

Jointure externe droite :

SELECT table1.col1,

table2.col1,

, table1.colN,

, table2.colM

89
89

FROM table1 RIGHT OUTER JOIN table2 ON condition_de_jointure

ajoute au résultat de la jointure classique (INNER JOIN) toutes les lignes de table2 qui n'ont pas de correspondance dans

table1

de la jointure classique (INNER JOIN) toutes les lignes de table2 qui n'ont pas de correspondance
86 Autojointure Une auto-jointure est la jointure d'une table avec elle-même Dans ce cas, pour
86
Autojointure
Une auto-jointure est la jointure d'une table avec elle-même
Dans ce cas, pour SELECT, il est alors plus facile de donner
deux alias différents pour une même table
Ex : soit la table PERSONNE qui présente la liste du personnel
avec pour chacun, le numéro de son responsable
Afficher pour chaque personne ayant un responsable, le
numéro et le nom de celui-ci
SELECT S.NPers, R.NPers, R.Nom
FROM PERSONNE S, PERSONNE R
WHERE S.NResp = R.NPers;
PERSONNE
NPers
Nom
ou
# NResp[0-1]
SELECT S.NPers, R.NPers, R.Nom
FROM PERSONNE S INNER JOIN PERSONNE R
ON S.NResp = R.NPers;

Jointures externes

88
88

Une jointure externe permet d'ajouter au résultat d'une jointure classique (interne) les lignes d'une des tables qui n'ont pas de correspondance dans l'autre table (lignes célibataires) Jointure externe gauche :

SELECT table1.col1,

table2.col1,

, table1.colN,

, table2.colM

FROM table1 LEFT OUTER JOIN table2 ON condition_de_jointure

ajoute au résultat de la jointure classique (INNER JOIN) toutes les lignes de table1 qui n'ont pas de correspondance dans

table2

de la jointure classique (INNER JOIN) toutes les lignes de table1 qui n'ont pas de correspondance

Jointures externes

Ex :

90
90

SELECT M.NCom, C.NCli, M.DateCom, C.Nom, C.Ville FROM COMMANDE M RIGHT OUTER JOIN CLIENT C ON M.NCli = C.Ncli ORDER BY M.NCom;

Affiche la table des commandes complétée par le nom et la localité de tous les clients, même de ceux qui n'ont pas passé de commande (NULL apparaîtra pour NCom et DateCom dans ce dernier cas)

clients, même de ceux qui n'ont pas passé de commande (NULL apparaîtra pour NCom et DateCom

III0903 - Système d’information des systèmes de production

Jointures externes

Jointure externe complète :

91
91

SELECT table1.col1,

, table1.colN,

table2.col1,

, table2.colM

FROM table1 FULL OUTER JOIN table2 ON condition_de_jointure

extrait les lignes qui ne répondent pas aux conditions de jointure des deux cotés de la clause de jointure

extrait les lignes qui ne répondent pas aux conditions de jointure des deux cotés de la
93 Sous-requêtes Syntaxe générale d'une sous-requête : SELECT Requête externe FROM Cette requête
93
Sous-requêtes
Syntaxe générale d'une sous-requête :
SELECT
Requête externe
FROM
Cette requête s'exécute
en dernier
WHERE
( SELECT
Sous-Requête
FROM
WHERE
)
Cette requête interne
s'exécute en premier
95 Sous-requête à lignes multiples Les sous-requêtes à lignes multiples retournent une ou plusieurs valeurs
95
Sous-requête à lignes multiples
Les sous-requêtes à lignes multiples retournent une ou
plusieurs valeurs
Ces sous-requêtes peuvent être incorporées à la clause
WHERE au moyen des opérateurs multilignes de comparaison
suivants :
Opérateur
Signification
IN
égalà une valeur récupérée dans une sous-requête
NOT IN
différent de ou non égalà une valeur récupérée dans une
sous-requête
ANY
compareà chaque valeur retournée par une sous-requête
au moins un élément de l'ensemble doit satisfaire la
comparaison
ALL
compareà chaque valeur retournée par une sous-requête
tous les éléments de l'ensemble doivent satisfaire la
comparaison

Sous-requêtes

92
92

Extraction de données d'une seule table en fonction des liaisons des lignes vers d'autres tables Ex :

– les commandes des clients de Lyon

– les clients qui commandent le produit PA60

Les sous-requêtes (ou requêtes imbriquées) permettent d'obtenir les valeurs d'une table dont les lignes satisfont à une condition WHERE qui dépend des valeurs renvoyées par une autre instruction SELECT

table dont les lignes satisfont à une condition WHERE qui dépend des valeurs renvoyées par une

Sous-requête à une seule ligne

94
94

Les sous-requêtes qui retournent une seule valeur s'appellent des sous-requêtes à une seule ligne Avec ces sous-requêtes, il est possible d'utiliser des opérateurs de comparaison classiques =, <>, >, >=, <, et <= EX : Afficher les clients dont le compte est supérieur au compte du client C400 SELECT * FROM CLIENT WHERE Compte > ( SELECT Compte FROM CLIENT WHERE NCli = 'C400' );

du client C400 SELECT * FROM CLIENT WHERE Compte > ( SELECT Compte FROM CLIENT WHERE

Sous-requête à lignes multiples

96
96

Ex : Afficher les commandes des clients de Lyon

1. sans sous-requête :

- affichage des numéros des clients de Lyon SELECT Ncli FROM CLIENT WHERE Ville = 'Lyon';

- affichage des numéros de commandes

SELECT NCom, DateCom FROM COMMANDE WHERE NCli IN ('C132','S127','B062', 'L422');

commandes SELECT NCom, DateCom FROM COMMANDE WHERE NCli IN ('C132','S127','B062', 'L422');

III0903 - Système d’information des systèmes de production

Sous-requête à lignes multiples

97
97

Ex : Afficher les commandes des clients de Lyon

2.

avec une sous-requête :

SELECT NCom, DateCom FROM COMMANDE WHERE NCli IN ( SELECT Ncli FROM CLIENT WHERE Ville = 'Lyon');

 
Ncli FROM CLIENT WHERE Ville = 'Lyon');   Sous-requête à lignes multiples 99 Ex : Afficher

Sous-requête à lignes multiples

99
99

Ex : Afficher les détails de commande de PA60 dont la quantité commandée n'est pas minimale

 

SELECT * FROM DETAIL WHERE QCom > ANY ( SELECT QCom FROM DETAIL WHERE NPro = 'PA60' ) AND NPro = 'PA60';

 

<=> la valeur de QCom est supérieure à au moins un élément

de (SELECT QCom

)

= 'PA60';   <=> la valeur de QCom est supérieure à au moins un élément de
101 Sous-requête corrélée Ex : Afficher les clients dont le compte est supérieur à la
101
Sous-requête corrélée
Ex : Afficher les clients dont le compte est supérieur à la
moyenne des comptes des clients de la même ville
SELECT NCli, Nom, Ville, Compte
FROM CLIENT AS S
WHERE Compte > (
SELECT AVG(Compte)
FROM CLIENT
WHERE Ville = S.Ville )
dans cet exemple, la table externe est identique à la table
interne => utilisation d'un alias de table

Sous-requête à lignes multiples

98
98

Ex : Afficher les détails de commande spécifiant la quantité minimale de du produit PA60

SELECT * FROM DETAIL WHERE QCom <= ALL ( SELECT QCom FROM DETAIL WHERE NPro = 'PA60' ) AND NPro = 'PA60';

<=> la valeur de QCom doit être inférieure à chacun des

éléments de (SELECT QCom

AND NPro = 'PA60'; <=> la valeur de QCom doit être inférieure à chacun des éléments

)

100 Sous-requête corrélée Une sous-requête corrélée, est une requête imbriquée pour laquelle la requête
100
Sous-requête corrélée
Une sous-requête corrélée, est une requête imbriquée pour
laquelle la requête interne se réfère toujours à la table
mentionnée dans la clause FROM de la requête externe
SELECT col1, col2,
, coln
FROM table-externe
WHERE valeur-col-externe IN
( SELECT nom-col-interne
FROM table-interne
WHERE col-interne = col-externe )
variable de corrélation

Sous-requête corrélée

102
102

La condition peut également porter sur l'existence (EXISTS) ou l'inexistence (NOT EXISTS) d'au moins une ligne dans le résultat d'une sous-requête Ex : Afficher la liste des produits qui n'ont pas été commandés

SELECT NPro, Libelle FROM PRODUIT AS P WHERE NOT EXISTS ( SELECT * FROM DETAIL WHERE NPro = P.NPro );

été commandés SELECT NPro, Libelle FROM PRODUIT AS P WHERE NOT EXISTS ( SELECT * FROM

III0903 - Système d’information des systèmes de production

Le DML

Manipulation des données

– Insertion de lignes

– Modification de données

– Suppression de lignes

Interrogation des données

– Projection

– Restriction

– Fonctions

– Fonctions agrégatives et regroupements

– Opérateurs ensemblistes

– Jointures

– Sous-requêtes

103
103

Création et modification de tables à partir de requêtes SFW

ensemblistes – Jointures – Sous-requêtes 103 Création et modification de tables à partir de requêtes SFW

Création d'une table

à partir de données extraites d'autres tables

105
105

Il est possible de créer une table grâce à une expression SFW attachée à l'instruction CREATE TABLE

CREATE TABLE nouvelletable AS

SELECT col1, col2, col3,

FROM table WHERE nomcol = (SELECT nomcol FROM table WHERE condition )

, coln

AS SELECT col1 , col2 , col3 , FROM table WHERE nomcol = (SELECT nomcol FROM

Création d'une table

à partir de données extraites d'autres tables

107
107

Rq : Pour copier la structure d'une table dans une nouvelle table sans la charger, il suffit de spécifier une condition toujours fausse Ex : Créer une table vide CLIENT_NEW ayant la même structure que la table CLIENT

CREATE TABLE CLIENT_NEW SELECT * FROM CLIENT WHERE 1 <> 1

ayant la même structure que la table CLIENT CREATE TABLE CLIENT_NEW SELECT * FROM CLIENT WHERE

Création et modification de tables

à partir de requêtes SELECT

FROM

104
104

WHERE

Il est possible de créer ou de modifier des tables grâce à des sous-requêtes combinant une expression SFW aux instruction de création ou de modification de tables (CREATE TABLE, UPDATE, INSERT INTO,DELETE)

une expression SFW aux instruction de création ou de modification de tables (CREATE TABLE, UPDATE, INSERT

Création d'une table

à partir de données extraites d'autres tables

106
106

Ex : Créer une table CLIENT_TOULOUSE qui ne présente que les clients habitant Toulouse

CREATE TABLE CLIENT_TOULOUSE SELECT NCli, Nom, Adresse, Cat, Compte FROM CLIENT WHERE Ville = 'Toulouse'

CREATE TABLE CLIENT_TOULOUSE SELECT NCli, Nom, Adresse, Cat, Compte FROM CLIENT WHERE Ville = 'Toulouse'

Modification de lignes

à partir de données extraites de tables

108
108

Il est possible de modifier les données d'une table avec des valeurs extraites d'autres tables grâce à SFW attachée à l'instruction UPDATE

UPDATE table SET colonne = (SELECT nomcol FROM table WHERE condition ) WHERE nomcol = (SELECT nomcol FROM table WHERE condition )

= (SELECT nomcol FROM table WHERE condition ) WHERE nomcol = (SELECT nomcol FROM table WHERE

III0903 - Système d’information des systèmes de production

Modification de lignes

109
109

à

partir de données extraites de tables

Ex : Déduire du stock de chaque produit la quantité en commande

 

UPDATE PRODUIT P SET QStock = QStock - ( SELECT SUM(QCom) FROM DETAIL WHERE NPro = P.NPro ) WHERE EXISTS (SELECT * FROM DETAIL P WHERE NPro = P.NPro);

WHERE EXISTS (SELECT * FROM DETAIL P WHERE NPro = P.NPro); Ajout de lignes 111 à

Ajout de lignes

111
111

à

partir de données extraites de tables

Ex : Ajouter à la table CLIENT_TOULOUSE, une ligne extraite de la table CLIENT

 

INSERT INTO CLIENT_TOULOUSE SELECT NCli, Nom, Adresse, Cat, Compte FROM CLIENT WHERE Ville = 'Toulouse';

  INSERT INTO CLIENT_TOULOUSE SELECT NCli, Nom, Adresse, Cat, Compte FROM CLIENT WHERE Ville = 'Toulouse';

Suppression de lignes

à partir de données extraites de tables

113
113

Ex : Supprimer de la table DETAIL les lignes qui spécifient un produit en rupture de stock

DELETE FROM DETAIL WHERE NPro IN ( SELECT Npro FROM PRODUIT WHERE Qstock <= 0 );

un produit en rupture de stock DELETE FROM DETAIL WHERE NPro IN ( SELECT Npro FROM

Ajout de lignes

à partir de données extraites de tables

110
110

Il est possible d'insérer dans une table des données extraites d'autres tables grâce à une expression SFW attachée à l'instruction INSERT

INSERT INTO table (col1, col2,

SELECT col1, col2,

FROM table WHERE nomcol = (SELECT nomcol FROM table WHERE condition )

, coln)

, coln

, SELECT col1 , col2, FROM table WHERE nomcol = (SELECT nomcol FROM table WHERE condition

Suppression de lignes

à partir de données extraites de tables

112
112

Il est possible de supprimer dans une table des données extraites d'autres tables grâce à une expression SFW attachée à l'instruction DELETE

DELETE FROM table WHERE nomcol = (SELECT nomcol FROM table WHERE condition )

à l'instruction DELETE DELETE FROM table WHERE nomcol = (SELECT nomcol FROM table WHERE condition )

SQL avancé

114
114

Mécanismes de niveau externe non traités dans ce cours :

Le contrôle d'accès

Fonctions de réglementation des droits d'accès aux données sous la forme de "privilèges"

Les fonctions définies par l'utilisateur (User-Defined Functions)

Mécanisme de programmation permettantà l'utilisateur de créer ses propres fonctions

Les vues SQL

Une vue correspondà une table virtuelle dont seule la définition sous forme d'une requête SFW est stockée

Les procédures stockées (Stored Procedures)

Une procédure stockée est une séquence d'instructions précompilées stockée dans la base de données (moins restrictive qu'une UDF)

Les déclencheurs (triggers)

Mécanismes constitués d'une section de code accompagnée des conditions qui entraînent son exécution

(triggers) Mécanismes constitués d'une section de code accompagnée des con ditions qui entraînent s on exécution

III0903 - Système d’information des systèmes de production

115 Exemple : Assurance 1. Modèle entité-association CLIENT NumClient 0-N 0-N appartient appartient Nom signe
115
Exemple : Assurance
1. Modèle entité-association
CLIENT
NumClient
0-N
0-N
appartient appartient
Nom
signe signe
Adresse
1-1
(1-1)
VEHICULE
CONTRAT
NumVéh
NumCtr
Marque
1-1
couvre couvre
0-1
Type
Modè le
DateSign
Année
Cylindrée
ACCIDENT
0-N
NumAcc
implique implique
0-N
DateAcc
Montant
116 Exemple : Assurance 2. Tables CLIENT NumClient Nom VEHICULE CONTRAT Adresse NumVeh #Signataire Marque
116
Exemple : Assurance
2. Tables
CLIENT
NumClient
Nom
VEHICULE
CONTRAT
Adresse
NumVeh
#Signataire
Marque
NumCtr
Modele
Type
Annee
DateSign
Cylindree
#Signataire
NumCtr
#NumClient
IMPLICATION
ACCIDENT
#NumAcc
NumAcc
#NumVeh
DateAcc
Montant[0-1]

Exemple : Assurance

117
117

Exemple : Assurance 3. Requêtes SQL de création des tables

118
118

3.

Requêtes SQL de création des tables

create table CLIENT ( NumClient char(12) not null, Nom char(38) not null, Adresse char(60) not null, primary key (NumClient) );

create table VEHICULE ( NumVeh char(16) not null, Marque char(30) not null, Modele char(30) not null, Annee decimal(4) not null, Cylindree decimal(6) not null, Signataire char(12) not null, NumCtr decimal(8) not null, NumClient char(12) not null, primary key (NumVeh), unique (Signataire,NumCtr), foreign key (NumClient) references CLIENT, foreign key (Signataire,NumCtr) references CONTRAT );

create table CONTRAT ( Signataire char(12) not null, NumCtr char(8) not null, Type char(12) not null, DateSign date not null, primary key (Signataire,NumCtr), foreign key (Signataire) references CLIENT );

foreign key (Signataire) references CLIENT ); Exemple : Assurance 119 3. Requêtes SQL de création
foreign key (Signataire) references CLIENT ); Exemple : Assurance 119 3. Requêtes SQL de création

Exemple : Assurance

119
119

3.

Requêtes SQL de création des tables

create table ACCIDENT ( NumAcc char(10) not null, DateAcc date not null, Montant decimal(6), primary key (NumAcc) );

create table IMPLICATION ( NumVeh char(16) not null, NumAcc char(10) not null, primary key (NumVeh,NumAcc), foreign key (NumVeh) references VEHICULE, foreign key (NumAcc) references ACCIDENT )

null, primary key (NumVeh,NumAcc), foreign key (NumVeh) references VEHICULE, foreign key (NumAcc) references ACCIDENT )