Chap 4
Chap 4
Chap 4
Environnement SQ L
C atalogue c1
Schém a c1.s1
T able T able Schém a c1.s2
c1.s1.t1 c1.s1.t2
T able
View c1.s2.t1
c1.s1.v1
C atalogue c2
Schém a c2.s1
BD
R éseau
A gent (client) S Q L
fait S erveur S Q L
CONNECT
Session
Client SQ L Serveur
CONNECT spécifie
– identification/authentification de l ’utilisateur (authorizationId/mot de passe)
– identification du serveur SQL
– SCHEMA, TIME ZONE, CHARACTER SET
– valeurs de défaut
Forme simple
CREATE TABLE Client
(noClient INTEGER,
nomClient VARCHAR(15),
noTéléphone VARCHAR(15)
)
Transmise à l ’interprète du LDD
– vérification
– création de la table
schéma stocké dans dictionnaire de données
allocation des structures physiques
– clause non standardisée pour organisation primaire
Syntaxe de spécificationDeColonne
nomColonne [type|domaine] [DEFAULT valeurDeDéfaut]
[NULL | NOT NULL] [UNIQUE | PRIMARY KEY]
[REFERENCES nomTable[listeColonnes]]
[[CONSTRAINT nomContrainte] CHECK (conditionSQL)]
Syntaxe de spécificationDeContrainte
[CONSTRAINT nomContrainte]
{PRIMARY KEY listeColonnes|
FOREIGN KEY listeColonnes REFERENCES nomTable[listeColonnes]
[MATCH {PARTIAL|FULL}]
[ON DELETE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}]
[ON UPDATE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}]|
CHECK (conditionSQL)
}
[[NOT] DEFERRABLE INITIALLY {DEFERRED|IMMEDIATE}]
Conversions implicites
8.1).
– distingue index primaire (ORGANIZATION INDEX)
Type SQL2 Type Oracle
Conversions implicites
CHARACTER (n), CHAR (n) CHAR (n)
NUMERIC (p,s), DECIMAL (p,s), DEC (p,s) NUMBER (p,s)
INTEGER, INT, SMALLINT NUMBER (38)
FLOAT (p) FLOAT (p)
REAL FLOAT (63)
DOUBLE PRECISION FLOAT (126)
VARCHAR(n), CHARACTER VARYING(n) VARCHAR2 (n)
16/07/24 © Robert Godin. Tous droits réservés. 24
Dialecte Oracle (suite)
DATE
– ~TIMESTAMP SQL2
Mécanisme d ’internationalisation
– Paramètre de configuration NLS_LANG
CHARACTER SET
DATE_FORMAT
...
ALTER SESSION
– pour modifier
LOBALTER SESSION
: taille max 4G SET NLS_DATE_FORMAT = 'DD/MM/YYYY'
BFILE : fichier externe
RESTRICT
– rejet si élément dépendant existe
ex: FOREIGN KEY
CASCADE
– supprime élément dépendant
Syntaxe
ALTER TABLE nomTable
{ADD COLUMN spécificationColonne|
DROP COLUMN nomColonne [RESTRICT|CASCADE]|
ADD spécificationContrainte|
DROP nomContrainte [RESTRICT|CASCADE]|
ALTER nomColonne SET DEFAULT valeurDéfaut|
ALTER nomColonne DROP DEFAULT}
Normalisé en SQL2
BD relationnelle
– contient les méta-données d ’un CATALOG
DEFINITION_SCHEMA
– tables
INFORMATION_SCHEMA
– VIEWS sur les tables du
DEFINITION_SCHEMA
Table créée.
TABLE_NAME
------------------------------
CLIENT
COLUMN_NAME DATA_TYPE
------------------------------ ------------------
------------
NOCLIENT NUMBER
NOMCLIENT VARCHAR2
NOTÉLÉPHONE VARCHAR2
Recherche d ’une table du dictionnaire de données
SQL> SELECT Table_Name
2 FROM DICTIONARY
3 WHERE Table_Name like '%TABLE%'
4 /
TABLE_NAME
------------------------------
ALL_ALL_TABLES
ALL_NESTED_TABLES
ALL_OBJECT_TABLES
ALL_PART_TABLES
ALL_TABLES
ALL_UPDATABLE_COLUMNS
USER_ALL_TABLES
USER_NESTED_TABLES
USER_OBJECT_TABLES
USER_PART_TABLES
USER_QUEUE_TABLES
USER_TABLES
USER_TABLESPACES
USER_UPDATABLE_COLUMNS
TABLE_PRIVILEGES
15 ligne(s) sélectionnée(s).
Requêtes SQL (SELECT)
Syntaxe de requêteSQL
selectSQL |
(requêteSQL) {UNION|INTERSECT|EXCEPT} (requêteSQL)
Syntaxe du selectSQL
SELECT {[ALL|DISTINCT] expression [AS nomColonne]
[,expression [AS nomColonne]]…}|*
FROM table [AS nomTable [(nomColonne[,nomColonne])]]]
[,table [AS nomTable [(nomColonne[,nomColonne])]]]]…
[WHERE conditionSQL]
[GROUP BY nomColonne [,nomColonne]…
[HAVING conditionSQL]
[ORDER BY nomColonne [ASC|DESC] [,nomColonne[ASC|DESC]]…]
...
noClient dateCommande
10 01/ 06/ 2000
20 02/ 06/ 2000
10 02/ 06/ 2000
10 05/ 07/ 2000
30 09/ 07/ 2000
20 09/ 07/ 2000
40 15/ 07/ 2000
noClient, dateCommande
16/07/24
(Commande)© Robert Godin. Tous droits réservés. 34
Sélection sur une table
(WHERE)
Sélectionner les Articles dont le prix est inférieur à
$20.00 et le numéro est supérieur à 30
SELECT *
FROM Article
WHERE prixUnitaire < 20 AND noArticle > 30
Syntaxe (incomplète) de la
conditionSimple :
{expression {=|<|>|<=|>=|<>} expression|
expression BETWEEN expression AND expression|
expression {IS NULL |IS NOT NULL}|
expression {IN |NOT IN} listeConstantes|
expression {LIKE |NOT LIKE} patron}
SELECT *
FROM Commande
WHERE dateCommande >= '01/06/2000' AND
dateCommande <='30/06/2000'
SELECT *
FROM Commande
WHERE noClient = 10 OR noClient = 40 OR noClient = 80
noClient dateCommande
30 09/ 07/ 2000 Laboratoire
20 09/ 07/ 2000 Créer le schéma de la BD
40 15/ 07/ 2000 PleinDeFoin :
SchemaVentesPleinDeFoin.sql
40 15/ 07/ 2000
Exercices 1 a), b) , c) , n), o)
SELECT *
FROM Client, Commande
Client
Commande
Client Commande
SELECT *
FROM Client JOIN Commande ON
Client.noClient = Commande.numéroCLient {SQL2}
~Algèbre relationnelle
SELECT nomClient
FROM Client, Commande, LigneCommande, Article
WHERE description = 'Herbe à puce' AND
Client.noClient = Commande.noClient AND
Commande.noCommande = LigneCommande.noCommande AND
LigneCommande.noArticle = Article.noArticle
Ordre quelconque des tables du FROM
– la plupart du temps…
AND commutatif…
Processus d ’évaluation de requête
Laboratoire
Exercices 1 d) e) f) h)
Oracle
– «+ » après colonne
SELECT * pour inclure la valeur NULL
FROM Client,Commande
WHERE Client.noClient = Commande.noClient(+)
+, - (unaire)
*, /
+, -, ||
=, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN , SIMILAR
NOT
AND
OR
SYSDATE
--------
02-02-05
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';
Session altered.
SYSDATE
-------------------
05-02-2002 09:08:26
TO_DATE('05/02/2000
-------------------
05-02-2000 00:00:00
TO_CHAR(SY
----------
22/01/2002
SYSDATE+INTERVAL'1'
-------------------
23-01-2002 16:02:18
SYSDATE-INTERVAL'1'
-------------------
21-01-2002 16:02:18
SYSDATE+1
-------------------
23-01-2002 16:02:18
SYSDATE+1/24
-------------------
22-01-2002 17:02:18
SYSDATE+INTERVAL'30
-------------------
22-01-2002 16:02:48
nombreArticles prixMoyen
10 19.49
nombrePrix
6
Table DétailLivraison
noLivraison noCommande noArticle quantitéLivrée
noCommande noArticle totalLivré nombreLivraisons
100 1 10 7
1 10 10 2
101 1 10 3
1 70 5 1
100 1 70 5
102 2 40 2 1 90 1 1
102 2 95 1 2 40 2 1
100 3 20 1 2 95 1 1
103 1 90 1 3 20 1 1
104 4 40 1 4 40 1 1
105 5 70 2 5 70 2 1
Table Commande
noCommande dateCommande noClient
1 01/ 06/ 2000 10
3 02/ 06/ 2000 10 noClient nombreCommandes
4 05/ 07/ 2000 10 10 1
2 02/ 06/ 2000 20
20 1
6 09/ 07/ 2000 20
5 09/ 07/ 2000 30 30 1
7 15/ 07/ 2000 40 40 2
8 15/ 07/ 2000 40
SELECT
CASE
WHEN SUM(quantitéLivrée) IS NULL THEN 0
ELSE SUM(quantitéLivrée)
END AS quantitéTotaleLivrée
FROM DétailLivraison
WHERE noArticle = 50 AND noCommande = 4
quantitéTotaleLivrée
0
16/07/24 © Robert Godin. Tous droits réservés. 68
Tri du résultat (ORDER BY)
SELECT *
FROM Client
ORDER BY nomClient DESC, noTéléphone ASC
Laboratoire
Exercices 1 q) s) t) v)
Client
Commande
SELECT DISTINCT Client.noClient, nomClient, noTéléphone
FROM Client, Commande
WHERE Client.noClient = Commande.noClient
SELECT *
FROM Client
WHERE EXISTS
(SELECT *
FROM Commande
WHERE noClient = Client.noClient)
Laboratoire
Exercices 2 a) b)
4 5
6
SQL> SELECT y
2 FROM Arc
3 START WITH x=1 CONNECT BY PRIOR y = x
4 /
Y
----------
3
4
5
6
Insert
Delete
Update
Changer l ’ordre
INSERT INTO de défautnoClient,
Client(nomClient, noTéléphone)
VALUES ('G. Lemoyne-Allaire', 100, '911')
Augmenter
UPDATEtous les prixUnitaires des Articles de 10%
Article
SET prixUnitaire = prixUnitaire * 1.1
Modification
UPDATE de plusieurs colonnes à la fois
Article
SET prixUnitaire = 12.99, quantitéEnStock = 5
WHERE noArticle = 10
Laboratoire
Exercices 1 x) y) z)
16/07/24 © Robert Godin. Tous droits réservés. 90
Gestion des
transactions en SQL
COMMIT WORK
– confirme la transaction en cours
ROLLBACK WORK
– annule la transaction en cours
Début de transaction implicite
– début de session
– fin de la précédente
Commande LDD provoque un COMMIT
16/07/24 © Robert Godin. Tous droits réservés. 91
Session et transaction
O uv erture d'une Ferm eture de la
connexion SQ L connexion SQ L
Session
SQ L
privilège :
SELECT |
DELETE |
INSERT [listeColonnes]|
UPDATE [listeColonnes]|
REFERENCES listeColonnes|
USAGE
objet :
[TABLE] nomTable |
DOMAIN nomDomaine |
CHARACTER SET nomCharacterSet
COLLATION nomCollation
TRANSLATION nomTranslation
SELECT *
FROM ArticlePrixModique
SELECT *
FROM (
SELECT noArticle, description, prixUnitaire
FROM Article
WHERE prixUnitaire < 15)
SQL:1999
– spécification très complexe
Table Article
noArticle description prixUnitaire quantitéEnStock
10 Cèdre en boule 10.99 10
20 Sapin 12.99 10
40 Epinette bleue 25.99 10
50 Chêne 22.99 10
60 Erable argenté 15.99 10
70 Herbe à puce 10.99 10
80 Poirier 26.99 10
81 Catalpa 25.99 10
90 Pommier 25.99 10
95 Génévrier 15.99 10
Sémantique incohérente...
UPDATE ArticlePrixModique
SET prixUnitaire = 20.99
WHERE noArticle = 10 {Modification rejetée}