Introduction au SQL et types de données
Introduction au SQL et types de données
fr
SQL
• SQL : Structured Query Language (Langage d’interrogation
structuré)
• Langage de gestion de bases de données relationnelles pour :
– Interroger une base de données
– Mettre à jour les informations contenues dans les tables de la base
de données (LMD : Langage de Manipulation des Données)
– Définition et Modification du schéma de la base de données (DDL :
Langage de Définition des Données)
– Gestion des droits d’accès (DCL : Langage de Contrôle de l’accès)
– Gestion de la concurrence des opérations (TCL : Langage de
contrôle des transactions)
2
Subdivisions du SQL
3
SQL
TCL
SET TRANSACTION, COMMIT, ROLLBACK
DML DCL
DDL
SELECT, CONNECT,
CREATE,
INSERT, GRANT,
ALTER, UPDATE, REVOKE
DROP DELETE
Programmation SQL
DECLARE, FETCH, PREPARE,
DESCRIBE, EXECUTE
4
SQL
5
Type de données
Type SQL
DATE TIME
REELS ENTIERS BIT
ASCII TIMESTAMP
BIT VARYING
EXACT INTEGER
UNICODE
CHAR SMALLINT
DECIMAL
VARCHAR NCHAR APPROCHES
NCHAR VARYING
REAL FLOAT
DOUBLE PRECISION 6
Type alphanumérique
• ASCII :
– CHARACTER(N) : CHAR(N)
– CHARACTER VARYING(N): VARCHAR(N)
• UNICODE :
– NATIONAL CHARACTER(N) : NCHAR(N)
– NATIONAL CHARACTER VARYING(N) : NCHAR
VARYING(N)
• Exemples :
nom char(32)
observation varchar(3200)
Attention : Les types CHAR(N) et NCHAR(N) complètent les
données par des blancs si la taille réelle est inférieure à N
7
Type numérique
1. ENTIER :
• INTEGER : INT
Entier long, souvent compris entre -2147483648 et +2147483647
• SMALLINT :
Entier court, souvent compris entre -32768 et 32767
Exemples :
age smallint
quantite int
8
Type numérique
2. Réels :
• DECIMAL(N, M) : DEC, NUMERIC
Valeurs décimales exactes
• FLOAT(N, M) :
Réel représenté sous forme binaire.
• REAL(N, M) :
Réel plus petit que float en nombre de bits (précision ↓)
• DOUBLE PRECISION(N, M) :
Réel plut grand que float en nombre de bits
Exemples :
solde NUMERIC (15, 2)
15 chiffres significatifs dont 2 après la virgule
somme FLOAT (10, 5)
9
Type temporels
11
Type chaîne de bits
12
Type BLOB
• BLOB : Binary Large OBjects
• Famille de type :
– Image
– Son
– Vidéo
– …
• D’autres types courants :
– TEXT : MEMO, LONGTEXT, …
– BINARY : données hexadécimales
– GRAPHIC : image dans un format particulier.
13
SQL3
• BOOLEAN ou LOGICAL :
– Logique à trois états : true, false and NULL
• MONEY :
– Un type numeric avec une échelle maximale et une précision
spécifique (en général 4 chiffres après la virgule)
• AUTOINC : ROWID, SERIAL
– Entier à incrémentation automatique dont la valeur est
incrémentée à chaque ajout d’une nouvelle ligne dans la table.
14
Création de table
CREATE [ OR REPLACE] TABLE nom_table
( colonne | contrainte_de_table [ { , colonne | contrainte_de_table }... ] )
colonne ::= nom_colonne { type | domaine } [ DEFAULT valeur_default ]
[ contrainte_de_colonne... ]
contrainte_de_colonne ::= [CONSTRAINT nom_contrainte]
[NOT] NULL
| UNIQUE | PRIMARY KEY
| CHECK ( prédicat_de_colonne )
| FOREIGN KEY [colonne] REFERENCES table (colonne)
[ON [DELETE | INSERT| UPDATE] [CASCADE | NO ACTION | SET
[DEFAULT|NULL] ] ]
contrainte_de_table ::= CONSTRAINT nom_contrainte
{ UNIQUE | PRIMARY KEY ( liste_colonne )
| CHECK ( prédicat_de_table )
| FOREIGN KEY liste colonne REFERENCES nom_table (liste_colonne) }
[ON [DELETE | INSERT| UPDATE] [CASCADE | NO ACTION | SET [DEFAULT
| NULL] ] ] 15
Exemple
16
Contraintes d’intégrité
17
Types de contraintes d’intégrité
• 2 types de contraintes :
– contrainte de colonne (concerne une seule colonne)
– contrainte de table
18
Définition des contraintes
19
Clé primaire
• Si la clé primaire n’est formée que d’une seule colonne, le plus
simple est d’ajouter une contrainte de colonne :
CREATE TABLE Client (
nclt INTEGER CONSTRAINT PK_Client PRIMARY KEY,
…
20
Contrainte UNIQUE
Remarque :
• Aucune des colonnes de la clé primaire ne peut avoir la
valeur NULL
21
Clé étrangère
• Si une seule colonne forme la clé étrangère, le plus simple
est d’utiliser une contrainte de colonne :
CREATE TABLE Cmd (
nclt INTEGER CONSTRAINT FK_Cmd_Client REFERENCES Client(nclt),
nprod INTEGER CONSTRAINT FK_Cmd_Prod REFERENCES Prod(nprod),
…,
CONSTRAINT PK_Cmd PRIMARY KEY (nclt, nprod) )
22
Contraintes sur les Clés étrangères
23
Contraintes sur les Clés étrangères
25
Modification des contraintes
26
Vérification des contraintes
27
Contraintes « différables »
28
Différer une contrainte
29
Invalider des contraintes (Oracle)
30
SQL
TCL
SET TRANSACTION, COMMIT, ROLLBACK
DML DCL
DDL
SELECT, CONNECT,
CREATE,
INSERT, GRANT,
ALTER, UPDATE, REVOKE
DROP DELETE
Programmation SQL
DECLARE, FETCH, PREPARE,
DESCRIBE, EXECUTE
31
Ordre SELECT
• Syntaxe :
SELECT [DISTINCT | ALL] { * | liste de colonnes}
[ FROM table ]
[ WHERE prédicat ]
[ GROUP BY liste des colonnes du groupage ]
[ HAVING prédicat ]
[ ORDER BY liste de colonnes de tri ]
;
32
Résultat du SELECT
• Un résultat vide
• Un résultat NULL
• Une seule donnée
• Une table d’une seule ligne
• Une table de plusieurs lignes.
33
Exemples
34
Exemples
35
Exemples
36
Exemples
37
Exemples
38
L’opérateur AS
39
Surnom de la table
40
Clause where
• Opérateurs de comparaisons :
=, <>, <, <=, >, >=.
• Connecteurs logiques :
OR, AND
• Opérateur de négation :
NOT
• Priorité :
1. Opérateurs de comparaison
2. NOT
3. AND
4. OR
41
Opérateurs de comparaisons
• Syntaxe :
WHERE [NOT] valeur1 {= | < | > | <= | >= | <>} valeur2
[ { OR | AND } …]
42
Les mots réservés
43
ORDER BY
• Syntaxe:
ORDER BY colonne1 {[ASC] | DESC} , colonne2 {[ASC] |
DESC}, …
44
Traitement des chaînes de
caractères
• Opérateur de concaténation || (+sql server et sybase,
concat mysql,…)
• Recherche partielle LIKE :
– LIKE ‘{chaine} { % | _ } {chaine}’ [ESCAPE ‘car’]
• LOWER
• UPPER
• SUBSTRING(s, i, j)
• TRIM( {LEADING | TRAILING | BOTH } [chaine de
caractère] FROM nom de colonne
45
Traitement des chaînes de
caractères
• POSITION( chaine IN chaine)
• CHARACTER_LENGTH : LENGTH pour mysql,
sql server
• SOUNDEX
• REVERSE
46
Fonctions mathématiques
• +, -, *, /
• abs(n), log(), sqrt(n), sign(n), round(n, m), power(n),
mod(n, m), floor(n), pi()…
47
Données temporelles
48
Conversion de Type de Données
1. Conversion Implicite
Pour les affectations, les conversions suivantes sont
automatiques :
– VARCHAR ou CHAR è NUMBER
– VARCHAR ou CHAR è DATE
– NUMBER è VARCHAR
– DATE è VARCHAR
Pour les évaluation d’expression, les conversions suivantes sont
automatiques :
– VARCHAR ou CHAR è NUMBER
– VARCHAR ou CHAR è DATE
49
Conversion de Type de Données
2. Conversion Explicite
– TO_DATE
– TO_CHAR
– TO_NUMBER
50
Fonctions d’agrégations
Exemples :
51
Group by
• Regroupement.
• Group by et fonction d’agrégations.
52
Opérateur IN et BETWEEN
• Exemples
53
Valeurs booléennes
54
Le CASE
55
Requête multi-tabulaires
• Syntaxe :
SELECT [DISTINCT | ALL] { * | liste de colonnes}
[ FROM liste de tables ]
[ WHERE prédicat ]
[ GROUP BY liste des colonnes du groupage ]
[ HAVING prédicat ]
[ ORDER BY liste de colonnes de tri ]
;
56
Réda DEHAK [email protected]
Plan
• Requêtes multi-tabulaires
• Jointure ( Interne et externe)
• Opérateurs ensemblistes (UNION, INTERSECT, EXCEPT)
• Requêtes imbriquées :
– Opérateur EXISTS
– Opérateur IN
– Opérateur ANY
– Opérateur ALL
• Valeurs Booléennes
• GROUP BY
• Modification de BDD
• Applications
58
Requêtes multi-tabulaires
59
Syntaxe
60
Exemple
SELECT nprod
FROM Client, Cmd
WHERE nom = ‘Dehak’ AND
Client.nclt = Cmd.nclt
61
Sémantique
62
Exemple
SELECT nprod
Client.nprod = Cmd.nprod
FROM Client, Cmd AND
nom = ‘dehak’
WHERE nom = ‘Dehak’ AND
Client.nclt = Cmd.nclt
Client Cmd
63
Sémantique opérationnel
64
Exemple
Client Nclt NOM adresse CMD NCLT NPROD QTE
…………………. ……….
VT1 123 Dehak Paris VT2 123 145 20
…………… …………….
Égalité Résultat
65
Variables Tuples
66
Exemple
Problème :
Réponse (42, 42) (42, 57) (57,42) …
67
Exemple
68
Les Jointures
1. Jointure :
69
Les Jointures
Pays Nom Capitale Population surface
JO Année Lieu Pays
Irlande Dublin 3 70
1896 Athène Grèce
Autriche Vienne 8 83
1900 Paris France
Royaume Londre 36 244
1904 St Louis USA Uni
1908 Londre Royaume Suisse Berne 7 41
Uni
USA Washington 189 441
70
Les Jointures
Pays Nom Capitale Population surface
JO Année Lieu Pays
Irlande Dublin 3 70
1896 Athène Grèce
Autriche Vienne 8 83
1900 Paris France
Royaume Londre 36 244
1904 St Louis USA Uni
1908 Londre Royaume Suisse Berne 7 41
Uni
USA Washington 189 441
71
Les Jointures
Pays Nom Capitale Population surface
JO Année Lieu Pays
Irlande Dublin 3 70
1896 Athène Grèce
Autriche Vienne 8 83
1900 Paris France
Royaume Londre 36 244
1904 St Louis USA Uni
1908 Londre Royaume Suisse Berne 7 41
Uni
USA Washington 189 441
72
Les Jointures
Pays Nom Capitale Population surface
JO Année Lieu Pays
Irlande Dublin 3 70
1896 Athène Grèce
Autriche Vienne 8 83
1900 Paris France
Royaume Londre 36 244
1904 St Louis USA Uni
1908 Londre Royaume Suisse Berne 7 41
Uni
USA Washington 189 441
1904
1896 St
Athène
Louis Grèce
USA Washington
NULL
1908
1900 Londre
Paris Royaume
FranceUni Londre
NULL
SELECT année,1900
lieu, pays, Paris
capitale France NULL
1. Jointure classique.
2. Jointure externe.
76
Les Jointures
2. Jointure Naturelle:
77
exemples
78
Les Jointures
3. Produit cartésien:
79
Opérateurs ensemblistes
Syntaxe :
SELECT ….
{ UNION | INTERSECT | EXCEPT } [ALL]
SELECT …
[ORDER BY …]
80
Exemples
• Union
• Intersection
• Différence
81
Sous rêquetes
SELECT nom
FROM Client
WHERE adresse = ( SELECT adresse
FROM Client
WHERE nom = ‘Dehak’ )
83
Une seule valeur
SELECT nom
FROM Client
WHERE age > ( SELECT age
FROM Client
WHERE nom = ‘Dehak’ )
84
Une seule valeur
SELECT nom
FROM Client
WHERE age = ( SELECT max(age)
FROM Client )
85
Une seule valeur
86
Plusieurs tuples : Opérateur EXISTS
SELECT nom
FROM Client l1
WHERE EXISTS ( SELECT *
FROM Client l2
WHERE l2.nom = l1.nom AND
l2.nclt <> l2.nclt )
87
Plusieurs tuples
Opérateur IN
• <tuple> IN <relation> : est vrai si et seulement
si le <tuple> est un membre de la table
<relation>.
• <tuple> NOT IN <relation> représente la
négation.
• La <relation> représente souvent une sous
requête
88
Exemple
SELECT nprod
FROM Cmd
WHERE nclt IN ( SELECT nclt
FROM Client
WHERE nom LIKE ‘D%’)
89
L’opérateur ANY
90
L’opérateur ALL
91
Exemple
SELECT nprod
FROM Cmd
WHERE qte >= ALL ( SELECT qte
FROM Cmd)
92
Valeurs booléennes
AND T F N OR T F N
T T F N T T T T
F F F F F T F N
N N F N N T N N
93
Group By
TABLE TABLE
WHERE
Création de groupe
suivant les attributs
du GROUP BY
TABLE
TABLE
Groupe
filtré Groupe
HAVING
SELECT
Résultat
94
Exemple
95
Exemple
96
Exemple
97
Exemple
98
Exemple
99
Exemple
100
Modification d’une BDD
101
Insertion
• Insertion d’un tuple :
INSERT INTO <relation> [( liste_attr )]
VALUES (liste_valeur)
• Exemple :
INSERT INTO Client
VALUES (42, ‘Dehak’, ‘Reda’, 29, ‘Paris’)
102
Spécifier la liste des attributs
103
Insertion de plusieurs tuples
• Exemple :
INSERT INTO N_Client_Parisien
( SELECT nclt, nom
FROM Client
WHERE adresse = ‘Paris’ )
104
Suppression
Exemples :
DELETE FROM Client
WHERE nom = ‘Dehak’
105
Absence du WHERE
106
Suppression de plusieurs tuples
• Élimination des tuples en doubles :
Exemple :
Résultat : ?
107
UPDATE
• Modification de la valeur des attributs d’un ou plusieurs tuples
UPDATE <relation>
SET <list_attr_affectation>
[ WHERE <Cond> ]
108
Exemple
UPDATE Client
SET age = age + 2
WHERE adresse = ‘Paris’
109
Réda DEHAK [email protected]
Requête multi-tabulaires
• Syntaxe :
SELECT [DISTINCT | ALL] { * | liste de colonnes}
[ FROM liste de tables ]
[ WHERE prédicat ]
[ GROUP BY liste des colonnes du groupage ]
[ HAVING prédicat ]
[ ORDER BY liste de colonnes de tri ]
;
111
Exemples
• Soit les trois tables suivantes :
– CLIENT(nclt, nom, age, adresse)
– PROD(nprod, design, couleur, volume)
– CMD(nclt, nprod, qte, date).
1. La liste des noms de clients qui ont un age > 20.
2. La liste des noms de clients ayant commandés le produit numéro 13.
3. La liste des noms de clients ayant commandés un produit de couleur rouge.
4. La couleur des produits commandés par monsieur Dupont.
5. La liste des noms de clients ayant commandés au moins un produit.
6. La liste des noms de clients ayant commandés un produit vert ou rouge.
7. La liste des noms de clients ayant commandés un produit vert ou bien rouge.
8. La liste des noms de clients ayant commandés au moins deux produits.
9. La liste des clients qui ont un age > 50 et qui n’ont pas commandé un
produit vert.
10. La liste des noms de clients qui ont commandé tous nos produits.
11. La liste des noms de clients qui ont commandé tous nos types de pince.
12. Le Nombre de clients habitant à paris.
13. Le nclt et le nom du ou des clients les plus jeunes de la table client.
112
Réda DEHAK [email protected]
Plan
• Vues
• Gestion des droits
• Triggers
114
Les vues
Syntaxe :
115
Les vues
Objectifs :
– Masquer la complexité d’un schéma
relationnel.
– Simplifier les requêtes SELECT complexes
– Préserver la confidentialité des données.
– Contribuer à la non redondance des données.
116
Exemples
117
Exemples
118
Exemples
119
Utilisation d’une vue
Exemples
120
Utilisation de la vue
121
Question
122
Vues modifiables
Les vues crées à partir de requête SELECT contenant :
125
Supprimer une vue
126
Contrôle d’accès
Attribution des privilèges :
Privilèges :
– SELECT : lecture de toutes les colonnes d’une table ou d’une vue.
– INSERT[liste_colonne] : insertion dans une table ou dans une vue,
éventuellement limitée à certaines colonnes.
– UPDATE[liste_colonne] : mise à jour dans une table ou dans une vue,
éventuellement limitée à certaines colonnes.
– DELETE : suppression dans une table ou dans une vue.
– REFERENCES[liste_colonne] : Faire référence aux colonnes d’une
table ou d’une vue lors de la pose d’une contrainte référentielle,
éventuellement limitée à certaines colonnes.
127
Exemples
128
Contrôle d’accès
• Exemple :
REVOKE UPDATE ON cmd FROM User_Service_Cmd
129
TRIGGER
Syntaxe :
CREATE TRIGGER <nom trigger>
{BEFORE | AFTER | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF liste_colonnes]}
ON <relation>
[ ORDER <liste colonne> ]
[ REFERENCING OLD [AS] anc_val
| NEW [AS] nouv_val
| OLD_TABLE [AS] anc_tab
| NEW_TABLE [AS] nouv_tab ]
[FOR EACH {ROW | STATEMENT}]
Code_trigger
130
SQL DDL
131
FOREIGN KEY
132
Transaction
BEGIN
COMMIT
ROLLBACK
133