Вы находитесь на странице: 1из 46

SQL Partie I

TABLE DES MATIRES

I - Introduction ...............................................................................................................................................................4
II - Langage de Dclaration des Donnes - LDD -. ............................................................................................6
A - Cration. .....................................................................................................................................................................7
1 - Cration d'une table. .........................................................................................................................................7
2 - Cration d'une vue.............................................................................................................................................9
3 - Cration d'un index. ..........................................................................................................................................9
B - Destruction............................................................................................................................................................. 10
1 - Destruction d'une table. ............................................................................................................................... 10
2 - Destruction d'une vue. .................................................................................................................................. 10
3 - Destruction d'un index. ................................................................................................................................ 10
C - Gestion de la structure....................................................................................................................................... 11
1 - Affichage de la structure. ............................................................................................................................. 11
2 - Modification de la structure. ...................................................................................................................... 11
3 - Renommer une table. .................................................................................................................................... 12
III - Langage de Manipulation des Donnes - LMD -. ................................................................................... 13
A.

Gnralits........................................................................................................................................................... 13
1.

Insertion. ......................................................................................................................................................... 13

2.

Modification. .................................................................................................................................................. 14

3.

Suppression.................................................................................................................................................... 14

4.

La requte de Slection. ............................................................................................................................ 15

B.

complments. ..................................................................................................................................................... 16
1.

Les oprateurs. ............................................................................................................................................. 16


i.

- Les oprateurs arithmtiques. ........................................................................................................ 16

ii.

- Les oprateurs logiques..................................................................................................................... 16

iii. Les oprateurs de comparaison classiques et spcifiques. ................................................... 16


iv.
2.

L'oprateur de concatnation. ........................................................................................................... 17


Les fonctions. ................................................................................................................................................. 18

i.

Les fonctions numriques. .................................................................................................................. 18

ii.

Les fonctions sur les chanes. ............................................................................................................. 19

iii. Les fonctions sur les dates. ................................................................................................................. 19


C.

Gestion des donnes avec sElect ................................................................................................................ 20


1.

Insertion. ......................................................................................................................................................... 20

H.Chappert

Version 3.0

2 / 46

SQL Partie I

2.

Modification. .................................................................................................................................................. 20

3.

Suppression.................................................................................................................................................... 21

D.

Utilisation de parametres dans les requetes ......................................................................................... 22

E.

Approfondissement de la commande SELECT. .................................................................................... 23


1.

Gnralits. ..................................................................................................................................................... 23

2.

Ordonnancement. ........................................................................................................................................ 24

3.

Les jointures. ................................................................................................................................................. 25

4.

Traitements de groupe. ............................................................................................................................. 26

5.

Les requtes ensemblistes. ...................................................................................................................... 28


i.

Union. ........................................................................................................................................................... 28

ii.

Intersect. ..................................................................................................................................................... 28

iii. Minus............................................................................................................................................................ 28
6.

Les requtes imbriques........................................................................................................................... 29


i.

Non Synchronises. ................................................................................................................................ 29

ii.

Synchronises........................................................................................................................................... 31

IV - Langage de Contrle des Donnes - LCD -. .............................................................................................. 32


A.

Gnralits. ..................................................................................................................................................... 32

B.

Gestion des transactions. .......................................................................................................................... 32

C.

Gestion des privilges. ............................................................................................................................... 33


i)

Transmission des privilges. .............................................................................................................. 33

ii)

Suppression des privilges. ................................................................................................................ 34

V - Algbre relationnelle et SQL. .......................................................................................................................... 36


VI - Annexes. ....................................................................................................................................................................1
A.

Tables utilises. ...............................................................................................................................................1

B.

Les commandes SQL. .....................................................................................................................................2

C.

Les mots rservs SQL. .................................................................................................................................3

D.

Les types de donnes. ...................................................................................................................................7

E.

Bibliographie & Webographie. ..................................................................................................................8

H.Chappert

Version 3.0

3 / 46

SQL Partie I

S.Q.L.
I - INTRODUCTION
SLQ : Structured Query Language. {Langage Structur de Requtes}.

Ce langage permet dinterroger et de manipuler des Bases de Donnes Relationnelles. Le


SQL tant standardis, il permet de grer et dinterroger toutes les Bases de Donnes
Relationnelles (BDR). On pourra donc utiliser les mmes commandes sur une base Access,
Sql Server, PostgreSql, MySql, Oracle, etc
Lorsque lon utilise le QBE avec Access, il est traduit en SQL avant dtre excut. Il peut
cependant exister de lgres diffrences entre les diffrentes implmentations de SQL
par les diteurs de SGBDR.
Le SQL est bas sur le langage SEQUEL, et a t dvelopp en 1974 par Chamberlin et Boyce,
chez IBM suivant les spcifications de Codd de 1970.
Cest en 1980, que lon trouve les premires traces de SQL comme langage dinterrogation
de donnes. En 1986, premire normalisation SQL par lAnsi. En 1987, norme SQL-1 de lISO.
Depuis de nombreux changements sont apports SQL et ne figurent pas toujours dans le
standard de lANSI mme si celui-ci prvoit des standards additionnels pour SQL.

Les grandes dates de la normalisation du SQL sont :

1986 Normalisation ANSI

1987 Normalisation ISO de SQL 1

1992 Normalisation ISO de SQL 2

1999 Normalisation ISO de SQL 3.

2003 Normalisation ISO de SQL 2003

2008 Normalisation ISO de SQL 2008

Le SQL est compos de 3 sous-ensembles :


Le Langage de Description des Donnes
H.Chappert

Version 3.0

LDD
4 / 46

SQL Partie I

Le Langage de Manipulation des Donnes

LMD

Le Langage de Contrle des Donnes

LCD

On trouve parfois un dcoupage du langage de manipulation des donnes (LMD) en


Langage dInterrogation des Donnes (LID) qui ne permet aucune modification de la
base de donnes.

Les requtes SQL peuvent tre intgres dans des langages de programmation ou de
description (Php, Cobol, C, Pascal, Fortran, PL/I, ). En principe le langage hte possde un
pr-compilateur qui "traduit" les requtes SQL en commandes du langage. Le programmeur
doit donc prvoir des variables qui recevront les rsultats des requtes SQL.

Les rsultats des requtes sont des tables.

En interactif ou en langage intgr, il faut un caractre de fin d'instruction : c'est


gnralement le point-virgule (;) mais la norme ANSI ne l'impose pas pour tous les langages
et cela dpend aussi de la base de donnes utilises.

H.Chappert

Version 3.0

5 / 46

SQL Partie II

S.Q.L.

II - LANGAGE DE DECLARATION DES DONNEES - LDD -.

Data Definition Language - DDL Dans cette sous-partie du langage SQL, on va trouver les ordres permettant de grer la base de
donnes (Maintenance des tables notamment).
On va trouver des commandes pour :
Crer des tables, des index ou des vues
Dtruire des tables, des index ou des vues
Afficher ou modifier la structure dune table
Renommer une table

La notation dans le cours est la suivante :


Les ordres SQL sont en majuscules.
Les options sont encadres avec [ ].
Les variables sont encadres avec < >.

H.Chappert

Version 3.0

6 / 46

SQL Partie II

A - CREATION.
1 - CREATION D'UNE TABLE.

Chaque table doit possder un nom unique dans la base.


Chaque champ (colonne) doit possder un nom unique dans la table.
Lors de la cration d'une table, on peut spcifier des contraintes qui seront valables pendant
toute la vie de la table.

CREATE TABLE <Nom de la table > (<champ 1> <format 1> [<contraintes 1>] , <champ 2>
<format 2> [<contraintes 2>] ,);
Ou
CREATE TABLE <Nom de la table > [<champ 1>, <champ 2>, ] AS SELECT ;

<Nom de la table >

Nom de la table (Relation) dans la base

<champ i>

Nom du champ (Attribut) dans la base

<format i>

Type et longueur du champs :


CHARACTER (longueur)
NUMERIC (prcision, chelle)*
DECIMAL (prcision, chelle)
INTEGER
SMALLINT
FLOAT (prcision)
REAL
DOUBLE PRECISION
DATE
RAW (Binaire)
LONG (Champ mmo avec longueur inconnue).

[<contrainte i>]

Contraintes sur le champ.


[NOT] NULL

H.Chappert

Version 3.0

7 / 46

SQL Partie II

Le champ peut ou non prendre une valeur nulle.


UNIQUE
Toutes les valeurs doivent tre diffrentes.
PRIMARY KEY
Le champ est une cl primaire (Unique et Not Null)
REFERENCES <Table> (<Champ>)
Le champ est une cl trangre et renvoie une cl primaire.
CHECK (<Condition>)
Les valeurs dans le champ doivent vrifier la condition spcifie.
DEFAULT <Valeur>
Tout champ vide reoit une valeur par dfaut.
Exemples :

CREATE TABLE client (nocli CHAR(4) PRIMARY KEY, nomcli CHAR(25) NOT NULL, ville
CHAR(20)) ;

CREATE TABLE facture (numfact NUMBER(5) PRIMARY KEY, datefact DATE DEFAULT
sysdate, nocli CHAR(4) REFERENCES client, montant NUMBER(8,2) CHECK(montant>0)) ;

CREATE TABLE factc001 AS SELECT * FROM facture WHERE nocli= "C001";

H.Chappert

Version 3.0

8 / 46

SQL Partie II

2 - CREATION D'UNE VUE.

Dans les grandes bases de donnes, on prfre manipuler des sous-ensembles des tables, autant
pour des raisons de performances que de scurit.
Pour cela, on cre des vues :
Une vue la mme forme et les mme caractristiques qu'une table.
Une vue peut tre cre partir d'une ou plusieurs table.
On peut avoir des privilges sur une vue et pas sur la ou les tables qui la composent.
CREATE VIEW <Nom de la vue > [<champ 1>, <champ 2>, ] As (Select <Champs> FROM
<Tables> [Where <Conditions>]) [<options de tests>];

3 - CREATION D'UN INDEX.

Lorsqu'on manipule de grandes bases de donnes, on peut optimiser les accs par la cration
d'index placs sur les champs utiliss lors des requtes de slection.
Un index n'est pas forcement unique.
CREATE [UNIQUE] INDEX <nom de l'index> ON <nom de la relation / vue> (<champ 1> [<Ordre
1>], <champ 2> [<Ordre 2>], );

Exemple :
CREATE INDEX ind_cli ON client (nomcli, pnomcli);

H.Chappert

Version 3.0

9 / 46

SQL Partie II

B - DESTRUCTION

1 - DESTRUCTION D'UNE TABLE.


Dtruit totalement la table ainsi que les liens ventuels.
DROP TABLE <nom de la table>;
Exemple :
DROP TABLE client ; (Et hop, plus de table client !!!).

2 - DESTRUCTION D'UNE VUE.


Ne dtruit que les informations contenues dans la vue, n'altre pas les informations de la
table.
DROP VIEW <nom de la vue>;

3 - DESTRUCTION D'UN INDEX.


Dtruit totalement l'index.
DROP INDEX <nom de l'index>;

Exemple :

DROP INDEX ind_cli

H.Chappert

Version 3.0

10 / 46

SQL Partie II

C - GESTION DE LA STRUCTURE.

1 - AFFICHAGE DE LA STRUCTURE.

On peut faire afficher la structure d'une table avec l'instruction DESC.

DESC <nom de la table>;

Affiche :

nom des champs


Type et longueur des champs
Contraintes des champs.

2 - MODIFICATION DE LA STRUCTURE.

On peut faire modifier la structure d'une table avec l'instruction ALTER.

Ajout de champs
ALTER TABLE <Nom de la table > ADD (<champ 1> <format 1> [<contraintes 1>] , <champ 2>
<format 2> [<contraintes 2>] ,);
Modification de champs
ALTER TABLE <Nom de la table > MODIFY (<champ 1> <format 1> [<contraintes 1>] , <champ 2>
<format 2> [<contraintes 2>] ,);
On ne peut pas diminuer la longueur d'un champ qui contient des valeurs.

H.Chappert

Version 3.0

11 / 46

SQL Partie II

3 - RENOMMER UNE TABLE.

On peut faire renommer une table avec l'instruction RENAME.

RENAME <nom de la table> TO <Nouveau nom de la table>;

Exemple :

Pour enlever un champ une table.

CREATE TABLE travail AS SELECT nocli, nomcli FROM client;

SELECT * FROM travail;

DROP TABLE client;

RENAME travail TO client;

H.Chappert

Version 3.0

12 / 46

SQL Partie III

S.Q.L.

III - LANGAGE DE MANIPULATION DES DONNEES - LMD -.


Data Manipulation Language - DML -

A. GENERALITES.
Dans cette sous-partie du langage SQL nous allons manipuler les donnes du SGBDR. Nous allons
pouvoir : insrer, mettre jour ou effacer des donnes dans les tables et faire des requtes pour
obtenir des informations.
La base de donnes utilise pour les exemples est prsente en Annexe.

1. INSERTION.
Permet d'ajouter un ou plusieurs enregistrements la relation/vue concerne.
Par saisie :
INSERT INTO <nom relation/vue> [(<champ 1>, <champ 2>, )] VALUES (<valeur 1>, <valeur 2>,
);
Les valeurs donnes doivent respecter les diffrentes contraintes spcifies lors de la cration
ainsi que le type et la longueur des attributs.
Les chanes de caractres sont entre ' '
Exemple :
INSERT INTO client VALUES ('M123','Bidochon','Robert');

H.Chappert

Version 3.0

13 / 46

SQL Partie III

2. MODIFICATION.
On peut modifier les valeurs des enregistrements. Les nouvelles valeurs doivent tre
compatibles avec les types et contraintes dfinis.
Modification directe
UPDATE <Nom de la table> SET <champ i> = <expression ou valeur>, [<champ j> = <expression ou
valeur>, ] [WHERE <condition>];
Exemples :
UPDATE produit SET pxpdt = pxpdt * 1.1;
Augmentation de 10% pour tous les produits.
UPDATE produit SET pxpdt = 35 WHERE refpdt = 'AB9876';
Le prix du produit Ab9876 passe 35
UPDATE produit SET pxpdt = pxpdt + 0.5 WHERE pxpdt < 10;
Augmentation de 50 cts pour tous les produits ayant un prix initial infrieur 10

3. SUPPRESSION.
Supprimer des enregistrements d'une Table/Vue.
Delete ne supprime donc que les donnes, la structure de la Table ou de la vue existe toujours
(mais elle est vide)

DELETE FROM <nom de la table> [WHERE <condition>];

Exemples :
DELETE FROM produit WHERE pxpdt < 10;
DELETE FROM client; (Et hop, plus de clients, mais la table existe toujours !!! Diffrence
avec DROP).

H.Chappert

Version 3.0

14 / 46

SQL Partie III

4. LA REQUETE DE SELECTION.
Cette requte est une des plus puissantes du SQL.

SELECT <champ i>, <champ j>,


FROM <nom de la Table/Vue>
[WHERE (<condition>)];
Le SELECT est obligatoire et doit tre suivi des rsultats attendus (calculs ou colonnes)
Le FROM est obligatoire et doit tre suivi des tables ncessaires pour obtenir linformation
demande dans le SELECT.
Dans le SELECT lutilisation de * signifie que lon veut afficher toutes les colonnes de
lensemble des tables spcifies dans le FROM.
SELECT *
FROM <nom de la Table/Vue>
[WHERE (<condition>)];
Le WHERE est optionnel et permet dindiquer la (ou les conditions) daffichage.

Exemples :
SELECT * FROM client;
Affiche toutes les colonnes de la table client.
SELECT nomcli FROM client;
Affiche tous les noms des clients de la table client.
SELECT * FROM client WHERE nocli='M123';
Affiche toutes les colonnes (donc toutes les informations possdes) du client dont le
numro est M123
SELECT nofact, montant FROM facture WHERE nocli='M123';
Affiche tous les numros de factures et leurs montants ( partir de la table Facture) du
client dont le numro est M123

H.Chappert

Version 3.0

15 / 46

SQL Partie III

B. COMPLEMENTS.

Pour pouvoir faire des requtes plus complexes, nous avons besoin doprateurs (arithmtiques,
logiques, de comparaison et de concatnation) ainsi que de fonctions (numriques, textuelles,
etc)

1. LES OPERATEURS.
Ils sont tous de la forme :
<Oprande> <Oprateur> <Oprande>

I. - LES OPERATEURS ARITHMETIQUES.


On peut utiliser les oprateurs arithmtiques suivants :
+
*
/
II. - LES OPERATEURS LOGIQUES.
On peut utiliser les oprateurs logiques de base :
OR
AND
NOT.
III. LES OPERATEURS DE COMPARAISON CLASSIQUES ET
SPECIFIQUES.
On peut utiliser les oprateurs de comparaison classiques suivants :
=
<> ou != ou ^=
>
>=
<
<=

H.Chappert

Version 3.0

16 / 46

SQL Partie III

On peut utiliser les oprateurs de comparaison spcifiques suivants :


IN / NOT IN
Le premier oprande doit (ne doit pas) appartenir une liste de valeurs donne en
deuxime oprande.
ANY ou SOME (identique)
La condition est vraie si elle satisfait une ou plusieurs valeurs de la liste donne en
deuxime oprande.
ALL
La condition est vraie si elle satisfait toutes les valeurs de la liste donne en
deuxime oprande.
[NOT] BETWEEN <> AND <>
La condition est vraie si l'oprande est compris (n'est pas compris) entre les deux
valeurs.
[NOT] EXISTS <sous requte>
La condition est vraie si l'oprande existe (ou pas) dans le rsultat de la sous
requte.
[NOT] LIKE <>
Permet de comparer des chanes de caractres. On peut utiliser "_" pour remplacer
un caractre (? En MS-DOS) ou "%" pour remplacer une suite de caractres (* En MSDOS).
IS [NOT] NULL
Teste l'absence (ou la non absence donc l'existence !) de valeur pour une champ.
IV. L'OPERATEUR DE CONCATENATION.
On peut utiliser l'oprateur de concatnation de chanes de caractres :
<chane 1> || <chane 2>

H.Chappert

Version 3.0

17 / 46

SQL Partie III

2. LES FONCTIONS.
Elles peuvent tre affiches ou dans les oprandes.

I. LES FONCTIONS NUMERIQUES.


FONCTIONS TRIGONOMETRIQUES ET LOGARITHMIQUES.
cos(<x>)

Cosinus (radians)

cosh(<x>)

Cosinus hyperbolique

exp(<x>)

e lev la puissance x

ln(<x>)

Logarithme nprien

log(<y>,<x>)

Logarithme en base y de x

sin(<x>

Sinus

sinh(<x>)

Sinus hyperbolique

tan(<x>)

Tangente

tanh(<x>)

Tangente hyperbolique
FONCTIONS SUR DES VALEURS ISSUES DE REQUETES.

avg(<x>)

Moyenne des valeurs de x (valeurs nulles non comptes)

count(<x> / *)

Nombres de tuples dans les champs slectionnes ou dans la table.

max(<x>)

Valeur maximum de x.

min(<x>)

Valeur minimum0 de x.

stddev(<x>)

Ecart type de x. (valeurs nulles non comptes)

variance(<x>)

Variance de x (valeurs nulles non comptes).


On peut combiner ces requtes avec le paramtre DISTINCT

L'ensemble des valeurs de x provient d'une requte ou d'une sous-requte.

H.Chappert

Version 3.0

18 / 46

SQL Partie III

II. LES FONCTIONS SUR LES CHAINES.


FONCTIONS SUR CHAINES DE CARACTERES.
initcap(<x>)

La premire lettre de chaque mot est mise en majuscule

lower(<x>)

Conversion en minuscule.

upper(<x>)

Conversion en majuscule.

ltrim(<x>)

Suppression des espaces gauche de la chane.

rtrim(<x>)

Suppression des espaces droite de la chane.

replace(<x>,<x1>,<x2>)

Remplacement dans "x" de "x1" par "x2".

soundex(<x>)

Donne le son des mots (recherches phontiques)

substr(<x>,<r>,<l>

Extrait une sous-chane de "x" commenant au rang "r" et de


longueur "l".

lenght(<x>)

Renvoie la longueur de la chane (numrique).

III. LES FONCTIONS SUR LES DATES.


FONCTIONS SUR LES DATES.
add_month(<d>,<x>)

Ajoute x mois la date d.

last_day(<x>)

Dernier jour du mois d.

months_between(<d1>,<d2>)

Nombre de mois entre les dates d1 et d2.

new_time()

Date et heure dans un autre mridien.

sysdate

Date et heure systme.

to_char()

Convertit une date en chane de caractres.

to_date()

Convertit une chane de caractres en date.

H.Chappert

Version 3.0

19 / 46

SQL Partie III

C. GESTION DES DONNEES AVEC SELECT


Les ordres SQL que nous venons de voir :

Insert

Update

Delete

Peuvent tre utiliss avec la commande SELECT pour permettre plus de prcisions dans la
gestion de la Base de Donnes.

1. INSERTION.
Permet d'ajouter un ou plusieurs enregistrements la relation/vue concerne.
Par saisie :
INSERT INTO <nom relation/vue> [(<champ 1>, <champ 2>, )] VALUES (<valeur 1>, <valeur 2>,
);
A partir d'une autre Table/Vue
INSERT INTO <nom relation/vue> [(<champ 1>, <champ 2>, )] SELECT ();
Exemples :
INSERT INTO client VALUES ('M123','Bidochon','Robert');
INSERT INTO produit SELECT * FROM nouvprod WHERE npxpdt > 100;
Insre dans la table "produits" tous les enregistrements d'une table "nouvprod" dont le
prix (npxpdt) est suprieur 100.

2. MODIFICATION.
Modification directe
UPDATE <Nom de la table> SET <champ i> = <expression ou valeur>, [<champ j> = <expression ou
valeur>, ] [WHERE <condition>];
Modification par une autre table
UPDATE <Nom de la table> SET (<champ i,<champ j>, ) = (<requte 2>) [WHERE <condition>];
Requte 2 doit donner autant de valeurs que de champs mettre jour et bien sr dans le
mme ordre.

Exemples :
H.Chappert

Version 3.0

20 / 46

SQL Partie III

UPDATE produit SET pxpdt = pxpdt * 1.1;


Augmentation de 10% pour tous les produits.
UPDATE produit SET pxpdt = 35 WHERE refpdt = 'AB9876';
Le prix du produit Ab9876 passe 35F.
UPDATE produit SET pxpdt = pxpdt + 0.5 WHERE pxpdt < 10;
Augmentation de 50 cts pour tous les produits ayant un prix initial infrieur 10
UPDATE produit SET pxpdt = (SELECT pxpdt FROM produit
WHERE refpdt = 'AB9876')
WHERE refpdt = 'QS6543' ;
Le prix du produit QS6543 devient le mme que celui du produit AB9876.

3. SUPPRESSION.

DELETE FROM <nom de la table> [WHERE <condition>];

DELETE FROM <Nom de la table> WHERE <condition> = (<requte 2>) ;

Exemples :
DELETE FROM produit WHERE pxpdt < 10;
DELETE FROM produit WHERE pxpdt = (SELECT max(pxpdt) FROM produit);
On efface lenregistrement dont le prix est le plus cher.

H.Chappert

Version 3.0

21 / 46

SQL Partie III

D. UTILISATION DE PARAMETRES DANS LES REQUETES


On peut aussi, comme dans le QBE dAccess, utiliser des valeurs paramtres en SQL. C'est--dire
que lutilisateur va devoir entrer une valeur au moment de lexcution de la requte SQL.
En SQL, ces variables paramtres sont aussi appeles variables interactives. Ces variables
commencent par le caractre &.
L'entre de la valeur du paramtre s'effectue :
Soit par la commande RUN (le systme rpond par "Enter value for nom de la variable").
Soit par l'utilisation de la commande START suivie des valeurs des paramtres (Le
systme ne s'interrompt pas).

Exemples
Soit la requte (REQ1) : SELECT * from &VnomTab;
1. SQL> RUN
SQL> Enter value for VnomTab : (On tape au clavier) FACTURE (La requte s'excute).
2. SQL> START req1 FACTURE (La requte est excute directement avec FACTURE pour
valeur de VnomTab)

On peut donc faire des requtes de maintenance des donnes avec des variables interactives.
Exemples :
UPDATE produit SET pxpdt = 35 WHERE refpdt = &VrefPdt;
Le prix du produit dont on saisit le n au moment de lexcution passe 35 .

INSERT INTO client VALUES (&vcocli, &vnomcli, &vpnomcli);


Pour donner une valeur aux paramtres on lancera une commande de saisie directe,
avec gnralement l'instruction RUN :

Enter value for vcocli

Enter value for vnomcli

'Bidochon'

Enter value for vvillecli

'Robert'

'M123'

INSERT INTO client VALUES ('&vcocli','&vnomcli', '&vpnomcli');

H.Chappert

Enter value for vcocli

M123

Version 3.0

22 / 46

SQL Partie III

Enter value for vnomcli

Bidochon

Enter value for vvillecli

Robert

{La diffrence est dans l'emploi des ' ')

E. APPROFONDISSEMENT DE LA COMMANDE SELECT.


1. GENERALITES.
La syntaxe complte est la suivante :

SELECT [<Distinct / All>] <Liste des champs / * / expression>


FROM <Liste des Tables/Vues [Alias]
[WHERE <condition>]
[GROUP BY <champ / expression>]
[HAVING <condition sur le group by>]
[ORDER BY <champs / expression> [<Asc / Desc>], ];
Expression reprsente une expression mathmatique ou le rsultat d'un calcul ou de
fonctions.
Le rsultat de la requte est prsent sous forme d'un tableau avec des noms de champs.
On peut changer les noms de champs (pour qu'ils soient plus explicites par exemple) avec
loprateur AS
Exemple :
SELECT refpdt AS rfrence_produit, pxpdt AS prix_unitaire
FROM produit;
Les en-ttes de champs seront rfrence_produit et prix_unitaire.
Il ne faut pas mettre de virgule autour du AS

H.Chappert

Version 3.0

23 / 46

SQL Partie III

2. ORDONNANCEMENT.
On ne peut pas effectuer de tris physiques, mais on peut ordonner l'affichage.
La clause utilise est ORDER BY [ASC / DESC]
Par dfaut le tri est croissant (ASC). Il peut se faire sur 16 champs maxi. On peut mlanger
ascendant et descendant.

Exemple :

SELECT nocli, nomcli, pnomcli


FROM facture
ORDER BY pnomcli, nomcli DESC;

NB : On peut remplacer dans la clause ORDER le nom des champs par leur numro d'ordre :

SELECT nocli, nomcli, pnomcli


FROM facture
ORDER BY 3 DESC, 2 DESC;

H.Chappert

Version 3.0

24 / 46

SQL Partie III

3. LES JOINTURES.
Lorsque les informations se trouvent dans plusieurs tables, il faut faire une jointure sur ces
tables.

Il existe des clauses spcifiques pour faire les jointures INNER JOIN, OUTER JOIN, etc qui
seront traites dans un autre cours. Dans cette initiation au SQL nous traiterons les jointures
comme une condition particulire que nous placerons dans le WHERE.

SELECT <>
FROM <nom table 1>, <nom table 2>
WHERE < nom table 1>.<nom champ> = < nom table 2>.<nom champ> ;

Exemples :
Nom du client de la facture n 97010003 :
SELECT nomcli
FROM client, facture
WHERE

nofact = 97010003

AND client.nocli = facture.nocli;


Nom des clients par ordre alphabtique avec N et date des factures :
SELECT nomcli, nofact, datefact
FROM client, facture
WHERE client.nocli = facture.nocli
ORDER BY nomcli, nofact ;
On peut affecter des "ALIAS" aux tables pour ne pas taper plusieurs fois le nom entier ou pour
enlever toute ambigut lors de requtes multi-tables.
SELECT nomcli, nofact, datefact
FROM client c, facture f
WHERE c.nocli = f.nocli
ORDER BY nomcli, nofact ;

Code et libell des produits facturs le 15 dcembre 2011 :


H.Chappert

Version 3.0

25 / 46

SQL Partie III

SELECT p.refpdt, libpdt, pxpdt


FROM produit p, lig_fac l, facture f
WHERE datefact = '15/12/2011'
AND p.refpdt = l.refpdt
AND l.nofact = f.nofact ;

4. TRAITEMENTS DE GROUPE.
La clause GROUP BY permet de crer des sous ensembles d'une Table/Vue ayant au moins
une caractristique commune.
La clause HAVING permet de ne prendre en compte que les sous-ensembles vrifiant une
condition spcifie.

SOUS-ENSEMBLE 1
Rsultat 1
SOUS-ENSEMBLE 2
Rsultat 2
SOUS-ENSEMBLE 3
Rsultat 3
.
.
SOUS-ENSEMBLE n
Rsultat n
Exemples :
SELECT nocli FROM facture
GROUP BY nocli
HAVING count(*) = 1;
Affiche les clients qui n'ont qu'une facture.

SELECT nocli, SUM(montant)


FROM facture
GROUP BY nocli
H.Chappert

Version 3.0

26 / 46

SQL Partie III

HAVING Sum(montant) > = 100000;


Affiche les clients qui ont un CA >= 100 000 .

SELECT nocli, SUM(montant)


FROM facture
WHERE datefact >= '01/04/2012'
GROUP BY nocli
HAVING Sum(montant) > = 100000;
Affiche les clients qui ont un CA >= 100 000 depuis le 1 avril 2012

H.Chappert

Version 3.0

27 / 46

SQL Partie III

5. LES REQUETES ENSEMBLISTES.


Elles correspondent aux requtes de l'algbre relationnelle (Union, Intersection, Diffrence).
Les contraintes sur la compatibilit des tables sont maintenues.
I. UNION.
<sous-requte 1> UNION <sous-requte 2>
II. INTERSECT.
<sous-requte 1> INTERSECT <sous-requte 2>
III. MINUS.
<sous-requte 1> MINUS <sous-requte 2>

H.Chappert

Version 3.0

28 / 46

SQL Partie III

6. LES REQUETES IMBRIQUEES.


Utilisation de sous-requtes dans les clauses WHERE ou HAVING.

On distingue deux cas :


i. Les requtes non-synchronises :
Les sous requtes sont excutes en premier, de la plus interne la plus externe.
ii. Les requtes synchronises :
Les sous requtes sont excutes pour chaque valeur de la requte principale
(boucles imbriques).
I. NON SYNCHRONISEES.

Nom du client de la facture n 97010003 :


Cette requte est excute en deuxime
uniquement sur les rsultats renvoys par
la premire requte.

SELECT nomcli FROM client

Requte excute en
premier

WHERE nocli = (SELECT nocli FROM facture


WHERE nofact = '97010003);

Nom des clients sans facture :

SELECT nomcli FROM client


WHERE nocli NOT IN
(SELECT distinct nocli FROM facture) ;
NB :

L'utilisation de "=" ou de "IN" dpend du nombre de valeurs tester renvoyes


par la requte.
1 valeur
"="
N valeurs

"IN"

Code et libell des produits d'une facture dont on saisit le n :


H.Chappert

Version 3.0

29 / 46

SQL Partie III

SELECT refpdt, libpdt FROM produit


WHERE refpdt IN

(SELECT distinct refpdt


FROM lig_fac
WHERE nofact = &vnumfact) ;

NB :

On peut utiliser plus de deux tables.

Code et libell des produits facturs le 15 dcembre 2011 :

SELECT * FROM produit


WHERE refpdt IN
(SELECT DISTINCT refpdt FROM lig_fac
WHERE nofact IN
(SELECT nofact FROM facture
WHERE datefact = '15/12/2011'));

NB :

On peut utiliser aussi deux fois la mme table.

Libell du produit le plus cher :

SELECT libpdt FROM produit


WHERE pxpdt = (SELECT Max(pxpdt) FROM produit);

H.Chappert

Version 3.0

30 / 46

SQL Partie III

II. SYNCHRONISEES.

Utilisation de [NOT] EXISTS.

Nom du client de la facture n 97010003 :

Pour chaque enregistrement de la table on


teste les valeurs de la deuxime requte.

SELECT nomcli FROM client

WHERE EXISTS

(SELECT * FROM facture


WHERE nocli = client.nocli
AND nofact = '97010003');

Libell du produit le plus cher :

SELECT libpdt FROM produit


WHERE pxpdt >= ALL
(SELECT pxpdt FROM produit);

H.Chappert

Version 3.0

31 / 46

SQL Partie IV

S.Q.L.
IV - LANGAGE DE CONTROLE DES DONNEES - LCD -.
Data Control Language - DCL -

A. GENERALITES.
Il permet d'assurer les contraintes d'intgrit de la base c'est dire les rgles qui assurent la
fiabilit et la cohrence des donnes.
Ces contraintes sont dfinies priori et vrifies lors des mises jour de la base. (Cf. les
contraintes lors de la cration d'une table).
Ces contraintes interviennent donc la cration d'une table ou d'une vue mais aussi par des
procdures de contrle (Triggers).
Le LCD permet aussi de "dcider" de la mise jour des donnes de la base : c'est la gestion des
transactions. Mais aussi d'attribuer des droits particuliers certains utisateurs de la base : c'est
la gestion des privilges.

B. GESTION DES TRANSACTIONS.


L'utilisateur dcide du moment o ses modifications seront physiquement intgres dans la base
de donnes. C'est l'ordre COMMIT [WORK].
On peut annuler toutes ses transactions depuis le dernier COMMIT c'est la commande
ROLLBACK.
ATTENTION : La dconnexion (QUIT ou EXIT) engendre toujours un COMMIT
Avec SET AUTOCOMMIT ON, on impose un COMMIT automatique aprs chaque mise jour.
Les mises jour effectues par une personne ne seront donc visibles par les autres utilisateurs
de la base de donnes, qu'aprs un COMMIT (mise jour physique de la base).

H.Chappert

Version 3.0

32 / 46

SQL Partie IV

C. GESTION DES PRIVILEGES.


Les relations et les vues ont pour propritaires leur crateur. Un propritaire peut slectionner,
insrer, modifier ou dtruire les enregistrements des relations/vues. Il dcide aussi de la
transmission de ses droits sur les tables ou les vues.
I) TRANSMISSION DES PRIVILEGES.
Les droits transmissibles sont les suivants :
Select

Droit de slection

Insert

Droit d'insrer

Update

Droit de mise jour

Delete

Droit de suppression

Alter

Droit de modification de structure.

Index

Droit de cration d'index

References

Droit de lier une cl trangre avec une cl primaire.

All

Regroupe tous les droits

Pour transmettre un ensemble de droits tous les utilisateurs de la base de donnes, on utilise le
mot <PUBLIC>.
La formule <WITH GRANT OPTION> permet de dterminer si l'on peut nouveau transmettre les
droits acquis.
GRANT <Liste des privilges> ON <Table / Vue>
TO <Liste des utilisateurs> / PUBLIC
[WITH GRANT OPTION] ;
Exemples :
GRANT INSERT ON client TO PUBLIC.
Tous les utilisateurs ont le droit d'ajouter des clients dans la table CLIENT.
GRANT SELECT, INSERT, UPDATE ON facture TO Roger, Robert WITH GRANT
OPTION
Roger et Robert ont le droit de slectionner, insrer et modifier les tuples de la
table FACTURE et ont le droit de retransmettre ces droits.

H.Chappert

Version 3.0

33 / 46

SQL Partie IV

II) SUPPRESSION DES PRIVILEGES.


Pour supprimer les privilges, on utilise la commande REVOKE.
Les privilges transmis sont supprims (Dans la majorit des SGBDR).

REVOKE <Liste des privilges> ON <Table / Vue>


FROM <Liste des utilisateurs> / PUBLIC ;

H.Chappert

Version 3.0

34 / 46

SQL Partie IV

H.Chappert

Version 3.0

35 / 46

SQL Partie V

S.Q.L.

V - ALGEBRE RELATIONNELLE ET SQL.

Les oprateurs ensemblistes


Algbre Relationnelle

SQL

Union

<Requte 1> UNION <Requte 2> ;

Intersection

<Requte 1> INTERSECT <Requte 2> ;

Diffrence

<Requte 1> MINUS <Requte 2> ;

Produit

SELECT * FROM <table 1>, <table 2> ;

Les oprateurs spcifiques


Algbre Relationnelle

SQL

Slection

SELECT <> FROM <table 1> WHERE <condition>;

Projection

SELECT [DISTINCT] <champ i> FROM <table 1> ;

Jointure

SELECT * FROM <table 1> WHERE <condition>;

Division

Elle n'existe pas directement, elle doit tre ralise avec des
requtes imbriques.

Exemple de division :
Quelles sont les factures avec tous les produits ?

SELECT nofact FROM facture


WHERE NOT EXISTS
(SELECT * FROM lig_fac
WHERE facture.nofact=lig_fac.nofact
AND NOT EXISTS (SELECT * FROM produit
WHERE produit.refpdt = lig_fac.refpdt));

H.Chappert

Version 3.0

36 / 46

SQL Partie V

Ou

SELECT nofact FROM facture


WHERE NOT EXISTS
(SELECT * FROM produit, lig_fac
WHERE

facture.nofact=lig_fac.nofact

AND

produit.refpdt = lig_fac.refpdt(+)

AND

lig_fac.refpdt IS NULL);

H.Chappert

Version 3.0

37 / 46

SQL Partie V

H.Chappert

Version 3.0

38 / 46

SQL

S.Q.L.

VI - ANNEXES.

A. TABLES UTILISEES.

TABLES

CLIENT

PRODUIT

FACTURE

LIG_FAC

H.Chappert

STRUCTURES DES CHAMPS


Champ

Type

Longueur

Cls

NoCli

Primaire

NomCli

20

PnomCli

20

RefPdt

LibPdt

20

PxPdt

6,2

NoFact

DateFact

10

Montant

8,2

NoCli

Etrangre

NoFact

Primaire

RefPdt

Primaire

QteCde

Version 3.0

Primaire

Primaire

1 / 46

SQL

B. LES COMMANDES SQL.

Commandes

Description

/* */

Permet dinsrer un commentaire sur une commande.

ALTER TABLE

Ajoute une champ ou change sa dfinition (Pas en Ansi 86).

COMMENT

Permet dinsrer un commentaire sur une table ou une champ.

COMMIT

Rend permanent dans la base les changements effectus.

CREATE INDEX

Cre un index pour une table.

CREATE TABLE

Cre une table et dfinit les proprits des attributs.

CREATE VIEW

Dfinit une vue sur une ou plusieurs tables ou vues.

DELETE

Supprime des lignes (tuples) dune table.

DROP

Supprime une table ou un index de la base.

GRANT

Cre des utilisateurs et permet de grer leurs droits sur la base.

INSERT

Ajoute de nouvelles lignes sur une table / vue.

REVOKE

Supprime des privilges daccs la base ou aux tables.

ROLLBACK

Elimine tous les changements intervenus depuis le dernier COMMIT.

SELECT

Slectionne un ou plusieurs attributs.

UPDATE

Change les valeurs dun champ.

H.Chappert

Version 3.0

2 / 46

SQL

C. LES MOTS RESERVES SQL.

Les mots suivants sont explicitement rservs en MySQL. La plupart sont interdits par ANSI
SQL92 en tant que nom de colonnes ou de tables (par exemple, GROUP). Quelques-uns sont
rservs parce que MySQL en a besoin et utilise (actuellement) un analyseur yacc :

ADD

ALL

ALTER

ANALYZE

AND

AS

ASC

ASENSITIVE

BEFORE

BETWEEN

BIGINT

BINARY

BLOB

BOTH

BY

CALL

CASCADE

CASE

CHANGE

CHAR

CHARACTER

CHECK

COLLATE

COLUMN

CONDITION

CONSTRAINT

CONTINUE

CONVERT

CREATE

CROSS

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_USER

CURSOR

DATABASE

DATABASES

DAY_HOUR

DAY_MICROSECOND

DAY_MINUTE

DAY_SECOND

DEC

DECIMAL

DECLARE

DEFAULT

DELAYED

DELETE

DESC

DESCRIBE

DETERMINISTIC

DISTINCT

DISTINCTROW

DIV

DOUBLE

DROP

DUAL

EACH

ELSE

ELSEIF

ENCLOSED

ESCAPED

EXISTS

EXIT

EXPLAIN

FALSE

FETCH

FLOAT

FLOAT4

FLOAT8

H.Chappert

Version 3.0

3 / 46

SQL

FOR

FORCE

FOREIGN

FROM

FULLTEXT

GRANT

GROUP

HAVING

HIGH_PRIORITY

HOUR_MICROSECOND HOUR_MINUTE

HOUR_SECOND

IF

IGNORE

IN

INDEX

INFILE

INNER

INOUT

INSENSITIVE

INSERT

INT

INT1

INT2

INT3

INT4

INT8

INTEGER

INTERVAL

INTO

IS

ITERATE

JOIN

KEY

KEYS

KILL

LEADING

LEAVE

LEFT

LIKE

LIMIT

LINES

LOAD

LOCALTIME

LOCALTIMESTAMP

LOCK

LONG

LONGBLOB

LONGTEXT

LOOP

LOW_PRIORITY

MATCH

MEDIUMBLOB

MEDIUMINT

MEDIUMTEXT

MIDDLEINT

MINUTE_MICROSECOND

MINUTE_SECOND

MOD

MODIFIES

NATURAL

NOT

NO_WRITE_TO_BINLOG

NULL

NUMERIC

ON

OPTIMIZE

OPTION

OPTIONALLY

OR

ORDER

OUT

OUTER

OUTFILE

PRECISION

PRIMARY

PROCEDURE

PURGE

READ

READS

REAL

REFERENCES

REGEXP

RELEASE

RENAME

REPEAT

REPLACE

H.Chappert

Version 3.0

4 / 46

SQL

REQUIRE

RESTRICT

RETURN

REVOKE

RIGHT

RLIKE

SCHEMA

SCHEMAS

SECOND_MICROSECOND

SELECT

SENSITIVE

SEPARATOR

SET

SHOW

SMALLINT

SONAME

SPATIAL

SPECIFIC

SQL

SQLEXCEPTION

SQLSTATE

SQLWARNING

SQL_BIG_RESULT SQL_CALC_FOUND_ROWS

SQL_SMALL_RESULT SSL

STARTING

STRAIGHT_JOIN

TABLE

TERMINATED

THEN

TINYBLOB

TINYINT

TINYTEXT

TO

TRAILING

TRIGGER

TRUE

UNDO

UNION

UNIQUE

UNLOCK

UNSIGNED

UPDATE

USAGE

USE

USING

UTC_DATE

UTC_TIME

UTC_TIMESTAMP

VALUES

VARBINARY

VARCHAR

VARCHARACTER

VARYING

WHEN

WHERE

WHILE

WITH

WRITE

XOR

YEAR_MONTH

ZEROFILL

H.Chappert

Version 3.0

5 / 46

SQL

Voici de nouveaux mots rservs en MySQL : 5.0:

ASENSITIVE

CALL

CONDITION

CONTINUE

CURSOR

DECLARE

DETERMINISTIC EACH

ELSEIF

EXIT

FETCH

INOUT

INSENSITIVE

ITERATE

LEAVE

LOOP

MODIFIES OUT

READS

RELEASE

REPEAT

RETURN

SCHEMA

SCHEMAS

SENSITIVE

SPECIFIC SQL

SQLEXCEPTION

SQLSTATE SQLWARNING

TRIGGER

UNDO

WHILE

All

Continue

Exists

Into

Precision

And

Count

Fetch

Is

Privileges Sum

Any

Create

Float

Like

Procedure Table

AS

Current

For

Max

Public

To

Asc

Cursor

Found

Min

Real

Union

Authorization

Dec

From

Module

Rollback

Update

Avg

Decimal

Go

Not

Schema

User

Begin

Declare

Goto

Null

Section

Values

Between

Delete

Grant

Numeric

Select

View

By

Desc

Group

Of

Set

Whenever

Char

Distinc

Having

On

Smallint

Where

Character

Double

In

Open

Some

With

Check

End

Insert

Option

SQL

Work

Close

Escape

Int

Or

Sqlcode

Commit

Exec

Integer

Order

Unique

H.Chappert

Version 3.0

Sqlerror

6 / 46

SQL

D. LES TYPES DE DONNEES.


Type de donnes

Synonymes

Description

TEXTES
CHARACTER (longueur)

CHAR (longueur)

Chanes de caractres, la longueur est


optionnelle (valeur par dfaut : 1).

NUMERIQUES
NUMERIC (prcision, chelle)*

Type numrique exact.

DECIMAL (prcision, chelle)

DEC (prcision, chelle)

La prcision est suprieure ou gale la


valeur spcifie.

INTEGER

INT

Echelle = 0

SMALLINT

Equivalent au Int mais avec une prcision


infrieure (dpend des machines).

FLOAT (prcision)

Type numrique approch.

REAL

Equivalent au Float mais permet de spcifier


la prcision.

DOUBLE PRECISION

Equivalent au Real avec une prcision


suprieure.

* : Prcision et chelles sont optionnelles. Lchelle a pour valeur par dfaut 0. La valeur par
dfaut de la prcision dpend de la machine.
** : Certains SQL utilisent le type DATE.

H.Chappert

Version 3.0

7 / 46

SQL

E. BIBLIOGRAPHIE & WEBOGRAPHIE.

http://dev.mysql.com/doc/

http://sgbd.developpez.com/cours/

SQL

Support de Cours

Patrick Pons

Presses Pocket

Uriel Chouchena

PSI

Jean-Paul Anton

IUT

1989

1994

"SQL & Oracle

H.Chappert

Version 3.0

8 / 46

Вам также может понравиться