Académique Documents
Professionnel Documents
Culture Documents
Le langage SQL
PostgreSQL : historique
! Systme de gestion de bases de donnes relationnelles ! Projet dbut en 1977 par lUniversit de Berkeley (projet Ingres, dvelopp ensuite et commercialis par Relational Technologies/Ingres Corporation) ! 1986 : une nouvelle quipe de lUniversit de Berkeley continue le dveloppement du projet Ingres, nomm alors Postgres ! 1996 : devient PostgreSQL (aprs ajout de nouvelles fonctionnalits par la communaut du logiciel libre)
1
SQL et PostreSQL
Yannick Estve
PostgreSQL : Prsentation
! Projet de SGBDR non commercial le plus avanc ! Projet Open Source toujours en dveloppement ! Existence de distributions commerciales (support technique) ! Version stable actuelle : 7.4.5 (en version bta : 8.0, en TP : 7.3.4)
SQL et PostreSQL
SQL et PostreSQL
SQL et PostreSQL
SQL et PostreSQL
SQL : Normes
! Fin des annes 80, plusieurs normes :
" ANSI en 1986 (X3.135) " ISO en 1987 " ANSI/ISO en 1989 : SQL89 ou SQL1
PostgreSQL et SQL
! PostgreSQL 7.3.4 est conforme au niveau minimal de SQL92, ainsi qu une trs grande partie des niveaux intermdiaire et total ! PostgreSQL 7.3.4 est trs proche de SQL99 (PostgreSQL tant un pionnier pour beaucoup des spcificits ajoutes SQL99)
SQL89, ajout de spcification, 3 niveaux de de conformit (minimale, intermdiaire, totale) parties plus avances (objet, interface de programmation, gestion de lintgrit). Deux niveaux de conformit : Core SQL99 (SQL99 minimal) et Enhanced SQL99 (SQL99 amlior)
SQL et PostreSQL
SQL et PostreSQL
10
Notion de table
! Une table est forme de colonnes et de lignes, dont lintersection forme des champs ! Les colonnes dcrivent le nom et le type des donnes qui se trouveront dans les lignes ! Les lignes reprsentent des enregistrements, dcrits par le nom et le type des colonnes correspondantes
id_sujet 9 15 15
SQL et PostreSQL
11
SQL et PostreSQL
12
13
SQL et PostreSQL
14
Description Ajoute un ou des enregistrements Modifie un ou des enregistrements Supprime un ou des enregistrements Supprime une BD Supprime un index dune table Supprime une squence Supprime une table
SQL et PostreSQL
16
17
SQL et PostreSQL
18
Mots-cls et identificateurs
! Les mots-cls sont tous les termes rservs de SQL (commandes, oprateurs, ) ! Identificateurs : objets dfinis en interne (nom de table, de fonction, etc.) ! Mots-cls et identificateurs :
" Longueur maxi 31 caractres (au-del, tronqus) " Les identificateurs commencent par une lettre ou par un blanc soulign. Les mots-cls ne commencent que par une lettre. Dans les 2 cas, les caractres suivants peuvent tre des lettres, des chiffres ou des blancs souligns
SQL et PostreSQL
19
SQL et PostreSQL
20
Boolens et binaires
Types caractres
Description Valeur unique : true ou false Chane de bits de longueur n chane de bits de longueur n variable (n=taille max)
Description
Norme
Chane de caractres de SQL89 longueur n Chane de caractres de SQL92 longueur n variable Chane de caractres de Spcificit longueur variable et PostgreSQL illimite
SQL et PostreSQL
SQL et PostreSQL
21
22
Description Entier sur 2 octets Entier sur 4 octets Entier sur 8 octets (jusqu 18 chiffres)
Description Flottant sur 4 octets Flottant sur 8 octets Type numrique exact avec prcision p quelconque et facteur dchelle s
SQL et PostreSQL
23
SQL et PostreSQL
24
Date et heure
Description Date du calendrier (jour, mois, anne) Heure Heure avec les informations sur la zone horaire Dlai quelconque Norme SQL92 SQL92 SQL92 SQL92
Description
Norme
Valeur montaire de type US, obsolte Spcif. P_SQL Entier sur 4 octets avec incrmentation automatique Spcif. P_SQL
SQL et PostreSQL
25
SQL et PostreSQL
26
Autres types
! Dautres types existent spcifiques PostgreSQL :
" Types gomtriques : box, line, lseq, circle, path, point, polygon " Types pour le rseau : cidr (Adresse/masque IP), inet (Adresse IP), macadr (Adresse MAC, ex. adresse Ethernet) " Types pour systme : oid, xid
Oprateurs
SQL et PostreSQL
27
SQL et PostreSQL
28
Oprateurs
! Oprateurs sur les chanes de caractres ! Oprateurs sur les nombres ! Oprateurs logiques
SQL et PostreSQL
29
30
Concatnation de chanes
! Oprateur ||
! Exemple :
SELECT Le Titre : || titre || , par || ! !! prenom || || nom AS info_livre FROM livres NATURAL JOIN auteurs;
SQL et PostreSQL
31
SQL et PostreSQL
32
Oprateurs mathmatiques
Oprateur + * / ^ Description addition soustraction multiplication division exposant (a ^b)
SQL et PostreSQL
33
SQL et PostreSQL
34
Oprateurs logiques
35
SQL et PostreSQL
36
Fonctions agrgats
! Fonctions portant sur plusieurs lignes SELECT avg(sal) FROM employe; SELECT grade, avg(sal) FROM employe GROUP BY grade ORDER BY avg DESC;
Fonction
37
SQL et PostreSQL
38
to_timestamp(s, Convertit la chane de caractres s en une valeur de type timestamp selon le format f f) Convertit d, de type date, en valeur de type timestamp(d)
timestamp
timestamp(d, t)
Renvoie une valeur de type timestamp construite partir de d et t, respectivement de type date et time
SQL et PostreSQL
39
SQL et PostreSQL
40
Exemple de conversion
SELECT to_char(123456789, 999G999G999D99) AS format, to_char(123456789, 999999999) AS chi"res_seuls, to_char(123456789, 00999999999) AS avec_zeros; format | chiffres_seuls | avec_zeros ---------------------+---------------------+-----------------------------------123.456.789,00 | 123456789 | 00123456789
SQL et PostreSQL
41
SQL et PostreSQL
42
Select
! La commande SELECT est au cur de toutes les requtes SQL ! Les donnes renvoyes forment un ensemble rsultat form de lignes et de colonnes ! Lensemble rsultat nest pas stock sur disque : rsultat temporaire ! Commande SELECT : commande certainement la plus complexe
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
SQL et PostreSQL
43
SQL et PostreSQL
44
45
SQL et PostreSQL
46
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
SQL et PostreSQL
47
SQL et PostreSQL
48
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
SQL et PostreSQL
50
" FROM source1 CROSS JOIN source2 $ Produit cartsien de source1 et source2 $ Equivalent : FROM source1, source2
SQL et PostreSQL
51
SQL et PostreSQL
52
SQL et PostreSQL
53
SQL et PostreSQL
54
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
55
SQL et PostreSQL
56
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
SQL et PostreSQL
57
SQL et PostreSQL
58
Syntaxe de SELECT
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | cible [ AS nom ] [, ...] [ FROM source [, ...] ] [ [ NATURAL ] type_jointure [ ON condition ] | USING ( liste_colonnes ) ] ] [, ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sous-requete ] [ ORDER BY expression [ ASC | DESC | USING operateur ] [, ...] ] [ LIMIT { nombre | ALL } ] [ OFFSET debut ] [ FOR UPDATE [ OF nom_table [, ...] ] ]
" LIMIT { nombre | ALL } : limite le nombre de lignes renvoyes nombre " OFFSET debut : indique partir de quel numro de ligne commence laffichage du rsultat
SQL et PostreSQL
59
SQL et PostreSQL
60
SQL et PostreSQL
61
62
Exemple de modification
63
SQL et PostreSQL
64
SQL et PostreSQL
65
SQL et PostreSQL
66
Notion de vue
! Une vue fonctionne comme une table virtuelle ! On peut considrer quune vue est une requte stocke, dont le contenu est dynamique ! Les vues ajoutent de la souplesse en allgeant des requtes trop lourdes
SQL et PostreSQL
67
SQL et PostreSQL
68
SQL et PostreSQL
69
SQL et PostreSQL
70
TP1. Question 9
A combien slverait le bnfice virtuel si tout le stock de livres tait vendu!? Bien entendu, ce montant doit tre trouv en une seule requte (on nutilise pas les rsultats des deux questions prcdentes).
SQL et PostreSQL
71
SQL et PostreSQL
72
Rponse
SELECT sum( (prix_vente-prix_achat)*stock ) AS benefice FROM stock; benefice ---------2721.40 (1 row)
SQL et PostreSQL
73
74
TP1. Question 10
Quel est le nom de lauteur qui a crit le plus de livres qui se trouvent en stock!?
SQL et PostreSQL
76
77
SQL et PostreSQL
78
Solution 1
SELECT nom FROM auteurs, livres, editions NATURAL JOIN stock WHERE auteurs.id=livres.id_auteur AND livres.id=editions.id_livre GROUP BY auteurs.id, nom ORDER BY sum(stock) DESC, nom ASC LIMIT 1;
Solution 2
SELECT nom FROM auteurs, livres, editions NATURAL JOIN stock WHERE auteurs.id=livres.id_auteur AND livres.id=editions.id_livre GROUP BY auteurs.id, nom HAVING sum(stock) >= ALL ( SELECT sum(stock) FROM auteurs, livres, editions NATURAL JOIN stock WHERE auteurs.id=livres.id_auteur AND livres.id=editions.id_livre GROUP BY auteurs.id, nom );
SQL et PostreSQL
79
SQL et PostreSQL
80
TP1. Question 11
Donnez le nombre de titres diffrents dits par chaque diteur, class par ordre dcroissant du nombre de titres diffrents par diteur.
SQL et PostreSQL
81
SQL et PostreSQL
82
Solution
! 1re tape : cration dune vue CREATE VIEW titre_par_editeur AS SELECT id_editeur, id_livre FROM editions GROUP BY id_editeur, id_livre;
Contenu de la vue
id_editeur | id_livre ------------+---------59 | 1590 59 | 1608 62 | 2038 65 | 1501 75 | 7808 91 | 190 99 | 4513 101 | 4267 102 | 1234 113 | 41473 150 | 25908 163 | 156 171 | 156 (13 rows)
83
SQL et PostreSQL
SQL et PostreSQL
84
Cration de tables
SQL et PostreSQL
85
SQL et PostgreSQL
86
SQL et PostgreSQL
87
SQL et PostgreSQL
88
[ CONSTRAINT constraint_name ] { NOT NULL | NULL | UNIQUE | PRIMARY KEY | CHECK (expression) | REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE action ] [ ON UPDATE action ] }
SQL et PostgreSQL
89
SQL et PostgreSQL
90
SQL et PostgreSQL
91
SQL et PostgreSQL
92
ALTER TABLE [ ONLY ] table [ * ] ALTER [ COLUMN ] column { SET | DROP } NOT NULL
SQL et PostgreSQL
93
SQL et PostgreSQL
94
SQL et PostgreSQL
95
SQL et PostgreSQL
96
Suppression de table
DROP TABLE name [, ...] [ CASCADE | RESTRICT ]
Cration de fonctions
! PostgreSQL offre la possibilit dtendre ses capacits en permettant la cration de nouvelles fonctions ! Ces fonctions peuvent simplifier llaboration des requtes SQL ! Chaque fonction devient lie une base dtermine (comme tous les autres objets dune base de donnes : tables, vues, )
SQL et PostgreSQL
97
SQL et PostgreSQL
98
SQL et PostgreSQL
100
101
SQL et PostgreSQL
102
Exemple de fonction
CREATE FUNCTION isbn_titre (text) RETURNS text AS SELECT titre FROM livres JOIN edition AS e (isbn, id) USING (id) WHERE isbn=$1 LANGUAGE SQL; ! Remarque : une fonction SQL utilise des paramtres positionnels pour identifier les paramtres passs lappel de la fonction.
SQL et PostgreSQL
SQL et PostgreSQL
103
104
Crations de fonctions C
! Il est possible de charger dynamiquement du code C compil ! Seuls les administrateurs peuvent utiliss la commande CREATE FUNCTION pour tablir un lien vers une fonction C : ceci pour des raisons de scurit ! Avec gcc, il faut utiliser loption -shared lors de la compilation du code C
SQL et PostgreSQL
105
SQL et PostgreSQL
106
SQL et PostgreSQL
107
SQL et PostgreSQL
108
valeur en degr de r en radians e exposant x arrondi infrieur log nprien log de x en base b log 10 x modulo y pi x puissance y
SQL et PostgreSQL
110
111
112
Triggers
! Une action donne doit souvent tre prcde ou suivie dvnements SQL connus lavance :
" vrification de la cohrence des donnes insrer " formatage des donnes " mise jour de tables aprs la modification ou la suppression de lignes dune table particulire
position (b IN s) renvoient la position de la sous-chane b dans s (en substr(s, n [,l]) Renvoie une sous-chane de s commenant au n-ime
caractre de s et de longueur maximale l
SQL et PostgreSQL
113
SQL et PostgreSQL
114
Triggers (suite)
! Pour faciliter la gestion dvnements SQL devant intervenir lors de la mise en uvre dactions bien dfinies, PostgreSQL offre lutilisation de triggers (dclencheurs) ! Les triggers affectent les vnements SQL suivant :
" INSERT " UPDATE " DELETE
SQL et PostgreSQL
Triggers (suite 2)
! Pour crer un trigger, il faut dabord cr la fonction quil utilisera ! Attention ! Les triggers sont une extension de SQL offerte par PostgreSQL : pas de portabilit (Oracle propose galement des triggers mais ils sont grs diffremment)
115
SQL et PostgreSQL
116
Transactions
! La gestion de transactions permet dassurer lintgrit des donnes ! Une transaction peut tre considre comme un groupe doprations qui forment une unit indivisible ! Les oprations dune transaction sont donc toutes effectues, ou aucune nest effectue
SQL et PostgreSQL
117
SQL et PostgreSQL
118
Transactions (suite)
! PostgreSQL offre un systme de gestion des transactions efficace : le MVCC (Multi-Version Concurrency Control) ! Par dfaut chaque opration est valide et est ellemme une transaction ! Pour spcifier quun groupe doprations doit tre considr comme une transaction, il faut dclarer explicitement lentre dans un bloc transactionnel
SQL et PostgreSQL
Bloc transactionnel
! Un bloc transactionnel est un ensemble doprations indivisibles : ce type de bloc dtermine le contenu dune transaction ! Tant que la fin dun bloc transactionnel nest pas atteinte, les ventuelles modifications de la base de donnes ne sont pas valides au niveau des donnes partages par tous les utilisateurs
SQL et PostgreSQL
119
120
ROLLBACK et COMMIT
! A la fin dun bloc transactionnel, les oprations sont valides, ou annules. ! Validation :
COMMIT [WORK | TRANSACTION]
! Annulation :
ROLLBACK [WORK | TRANSACTION]
SQL et PostgreSQL
121
SQL et PostgreSQL
122
SQL et PostgreSQL
123
SQL et PostgreSQL
124
125
SQL et PostgreSQL
126