Slides SQL
Slides SQL
Slides SQL
Le Langage SQL
UFR SAT/UGB
2009-2010
Z 1979 premier SGBD basé sur SQL par Relational Software Inc.
(rebaptisé Oracle)
Z 1986 SQL1 1ière norme ISO
Remarques
Remarques(suite)
Booléen BIT
Nombre entier SHORT (entier), SMALLINT (entier), LONG (entier long),
INTEGER (entier long), BYTE (octet)
Nombre réel SINGLE (réel simple), DOUBLE (réel double), NUMERIC (réel double)
Monétaire CURRENCY, MONEY
Date/Heure DATE, TIME, DATETIME , TIMESTAMP
Texte VARCHAR (255 caractères), CHAR(longueur) ou TEXT(longueur)
(longueur caractères), LONGTEXT (mémo, 32K max.)
Fichier binaire LONGBINARY (Objet OLE)
Compteur COUNTER (NuméroAuto).
ZExemple
Remarque :
Les constantes chaînes de caractères sont entourées par des
apostrophes ('). Si la chaîne contient une apostrophe celle-ci doit
être doublée.
Exemple : 'aujourdhui'
<contrainte-table>:=
[[CONSTRAINT nom-contrainte]{UNIQUE|PRIMARY KEY}({nom-colonn
[[CONSTRAINT nom-contrainte] FOREIGN KEY ({nom-colonne})
REFERENCES <nom-table>[(nom-colonne)][ON DELETE CASCADE]]
[[CONSTRAINT nom-contrainte] CHECK (<condition>)]
<contrainte-colonne>:=
[[CONSTRAINT nom-contrainte][NOT] NULL]]
ZExemple
<contrainte-colonne>:=
[ [CONSTRAINT nom-contrainte] CHECK (<condition>) ]
ZExemple
On restreint les valeurs possibles de l'attribut commandeReglee
dans la table Commandes.
CREATE TABLE Commandes(
numCommande COUNTER,
dateCommande CHAR(20)
commandeReglee CHAR(5) CHECK (commandeReglee IN ('oui', 'non')
);
ZExemple
CREATE TABLE Clients(
codeClient COUNTER PRIMARY KEY,
nomClient CHAR(20) NOT NULL,
prenomClient CHAR(20)
ville CHAR(20));
Syntaxe
ZExemple
ALTER TABLE Clients ADD date_naiss DATE ;
Ou
ALTER TABLE Clients ADD COLUMN date_naiss DATE ;
ZExemple
ALTER TABLE Clients DROP dateNaiss ;
Ou
ALTER TABLE Clients DROP COLUMN dateNaiss ;
En SQL standard ALTER TABLE peut aussi être utilisée pour
modier les propriétés d'une colonne existante.
ALTER TABLE nom-table MODIFY ( { <définition-colonne> } )
ZExemple
ALTER TABLE Clients MODIFY nomClient CHAR(25);
Mais la clause MODIFY n'est pas reconnue par Access,.
David Célestin FAYE Bases de données
Modication d'une table 32
ZExemple
ALTER TABLE Commandes DROP CONSTRAINT relation_commander;
ZExemple
INSERT INTO lignesCommande(numCommande,codeProduit,quantite)
VALUES (1,'p1',40)
UPDATE nom-table
SET { nom-colonne = {<expression> | <requête-pleine>} }
[WHERE <condition>]
ou
UPDATE nom-table
SET <nom colonne 1> = <nouvelle valeur 1>
...... ........
<nom colonne n> = <nouvelle valeur n>
[ WHERE <condition>] ;
UPDATE Clients
SET adresse='dakar'
WHERE nom='Modou' ;
UPDATE lignedeCommande
SET quantite=quantite+10
WHERE codPrdouit='P01' ;
Remarque :
Z Analyse syntaxique
Z Vérication de l'existence des tables, puis des colonnes et du
droit de les interroger
Z Mise au point du chemin d'accès aux données
Z Exécution de la requête et présentation des données à
l'utilisateur
Z Créer une requête qui extraie les noms, prénoms des clients
SELECT nomClient, prenomClient INTO nouvelle_table
FROM Clients;
Fonctions d'agrégat
Ensemble de fonctions qui permettent d'eectuer des statistiques
sur le résultat d'une requête (minimum, maximum, somme, etc. . . )
Regroupements
Possibilité de regrouper plusieurs lignes d'une même requêtes
(souvent associés aux fonctions d'agrégat)
Fonctions d'agrégat
Ensemble de fonctions qui permettent d'eectuer des statistiques
sur le résultat d'une requête (minimum, maximum, somme, etc. . . )
Regroupements
Possibilité de regrouper plusieurs lignes d'une même requêtes
(souvent associés aux fonctions d'agrégat)
SELECT ville
FROM Client
GROUP BY ville;
SELECT *
FROM <liste_de_relations>
WHERE <prédicat_de_jointure>
types de jointure : jointure naturelle, la θ-jointure et
l'auto-jointure.
SELECT *
FROM R RA, R RB
WHERE RA.Aiθ RB.Bj
Ai ∈ R , Bj ∈ R
David Célestin FAYE Bases de données
Jointure naturelle 64
S'il n'y a pas d'ambiguïté sur les noms des attributs, on peut
ne pas préxer le nom de l'attribut par le nom de la table le
contenant.
jointures non-équi : remplacer '=' par (<, <=, >, >=).
jointure interne : clause INNER JOIN. . Ne sont incluses dans
le résultat nal que les lignes qui se correspondent dans les
deux tables.
ZQuelssont les noms, prénoms et villes des clients ayant
commandé ?
SELECT Clients.nomClient,Clients.prenomClient,Clients.ville
FROM Clients
INNER JOIN Commandes ON Clients.codeClient=Commandes.codeCli
Z La condition
x θ ANY (SELECT Ri.y FROM R1 ,..., Rn WHERE p)
est équivalente à
EXISTS ( SELECT * FROM R1 ,..., Rn WHERE p AND x
θ Ri.y)
Z La condition
x θ ALL ( SELECT Ri .y FROM R1 ,..., Rn WHERE p)
est équivalente à
NOT EXISTS( SELECT * FROM R1 ,..., Rn WHERE p AND
NOT ( x θ Ri .y))
Employe(numEmpnomEmp,prenomEmp,poste,sal,nomDept)
Departement(nomDept,nomChef,localisation)
Z Départements sans employés
SELECT nomDept
FROM Departement
EXCEPT
SELECT nomDept
FROM Employe
Z La diérence élimine les dupliqués. Pour garder les dupliqués,
on utilise l'opération EXCEPT ALL : le résultat contient chaque
n-uplet a-b fois où a et b et le nombre d'occurrences du
n-uplet dans la première et la deuxième relation.
COS(n) cosinus de n
COSH(n) cosinus hyperbolique de n.
EXP(n) Renvoie e puissance n.
FLOOR(nb) plus grand entier inférieur ou égal à nb.
LN(n) logarithme népérien de n.
LOG(m,n) logarithme en base m de n. m > 1, et n > 0
SIN(n) sinus de n
. SINH(n) sinus hyperbolique de n.
TAN(n) tangente de n
TANH(n) tangente hyperbolique de n.
CASE expression
WHEN valeur1 THEN expression1
[WHEN valeur2 THEN expression2 ]
. . .
[ELSE expression_défaut]
END
SELECT nome,
CASE
WHEN (poste = 'Président') THEN 1
WHEN (poste = 'Directeur') THEN 2
ELSE 3
END Niveau
FROM emp;
Z pour connaître les clients qui ont fait le plus grand nombre de
commandes
CREATE VIEW nbCommandesParClients
AS SELECT codeClient, count(*) AS nbCommandes
FROM Commandes C
GROUP BY codeClient;
Transaction
séquence d'opérations manipulant des données
Z suppression de privilèges
REVOKE liste-systeme-privileges
FROM liste-roles-utilisateurs
Z suppression de privilèges sur des objets
REVOKE liste-privileges
ON nom-composant
FROM liste-roles-utilisateurs
Z Un utilisateur ayant accordé un privilège peut le reprendre avec
l'ordre
REVOKE privilege ON table/vue FROM utilisateur