Académique Documents
Professionnel Documents
Culture Documents
TP2 - SQL
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Agenda
Introduction Types de donnes Oprateurs et fonctions Langage SQL
Definition de Donnes Manipulation de Donnes Requtes
Exercice
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Introduction
SQL
Structured Query Language Un langage normalis
SQL99: ANSI X3.135-1999, ISO/IEC 9075:1999 "Database Language SQL"
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Donnes brutes:
RAW BLOB (Large Object Datatype) BFILE
Nombres:
NUMBER (chiffres,decimales) INT FLOAT DOUBLE
Date
DATE TIMESTAMP INTERVAL
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Comparison
>, <, =, != ANY, SOME, ALL IS NULL, LIKE, IN, EXISTS NOT, AND, OR
Date
CURRENT_DATE CURRENT_TIMESTAMP
Fonction daggrgation
COUNT, SUM, MAX, MIN AVG, STDEV, VARIANCE
Sur ensembles
UNION, INTERSECT, MINUS
Et beaucoup dautres
Conversion
TO_CHAR, TO_DATE, TO_NUMBER
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
ALTER DATABASE
Syntaxe: ALTER DATABASE <nom> Effets: Permet deffectuer des oprations de maintenance
Example:
CREATE DATABASE cd
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
DEFAULT
Attribue une valeur par dfaut lattribut la place dune valeur nulle. Contrainte sur colonne:
spcifier DEFAULT valeur aprs la definition de lattribut
CHECK (condition)
Spcifie une condition que chaque ligne de la table doit vrifier. La condition peut porter sur plusieurs attributs et contenir des connecteurs logiques, mais ne peut pas contenir de requtes SQL, porter sur dautres lignes de la table ou dautres tables Contrainte sur colonne:
spcifier CHECK (condition) aprs la definition de lattribut (1 seul attribut)
10
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
UNIQUE
Dfinit une cl secondaire dune table: deux lignes ne peuvent pas avoir la mme ensemble de valeurs pour les attributs dfinis par la contrainte. Permet les valeurs nulles, mais NOT NULL peut aussi tre spcifi. Contrainte sur colonne:
spcifier UNIQUE aprs la definition de lattribut (limit 1 seul attribut)
11
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Note: rfrence par dfaut la cl primaire de la table cible, ou une cl secondaire prciser travers REFERENCES table (attr1, attr2,...,attrN) Note: action permet de spcifier une action excuter
Condition: ON DELETE : permet de spcifier l'action raliser en cas d'effacement ON UPDATE : permet de spcifier l'action raliser en cas de modification Action: SET NULL : remplace les valeurs par NULL SET DEFAULT : remplace par la valeur par dfaut si dfini, sinon NULL CASCADE : la mise jour / dstruction est rpercute RESTRICT : indique une erreur (ne permet pas laction)
12
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
13
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
14
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Example:
CREATE TRIGGER TR_InsertAlbum AFTER INSERT ON album FOR EACH ROW DECLARE nb_artiste int; BEGIN select count(*) into nb_artiste from artiste where nom= :new.artiste; if (nb_artiste < 1) then INSERT into artiste values(:new.artiste, :new.genre, null); end if; end;
15
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
16
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Exercice: Modifiez les donnes dans la table originale. Affichez table et vue et notez les diffrences entre eux.
Bases de Donnes Avances TP2
17
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
18
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Modifier la table Artiste afin que le genre soit limit Rock, Hard Rock ou Jazz
Solution: ALTER TABLE Artiste ADD ( CONSTRAINT CKGenre CHECK (Genre in ('Rock', 'Hard Rock', 'Jazz')) );
Bases de Donnes Avances TP2
19
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
20
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
UPDATE
Mise jour de tuples dans une table
DELETE
Effacer des tuples dans une table
21
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
SQL INSERT
INSERT [INTO] nom-table [(nom-colonne*)] {VALUES (valeur*) | requte | DEFAULT VALUES }
Permet dinsrer des valeurs dans une table nom-colonnes: spcifie les colonnes vises par linsertion. Peut tre omis si les valeurs concernent toutes les colonnes de la table dans le bon ordre. VALUES (valeurs): spcifie les valeurs insrer:
INSERT nom-table VALUES (valeurs*)
requte: les valeurs insrer sont donns par une requte qui doit renvoyer les mmes nombre, ordre et types de colonnes spcifis par nom-colonnes
INSERT INTO nom-table requte
DEFAULT VALUES: insre une ligne avec toutes les valeurs par dfaut
22
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Crez une table Genres avec un attribut Genre (identifiant). Insrez ensuite les genres des artistes utiliss dans la base.
Solution: CREATE TABLE Genres (Genre varchar(16) PRIMARY KEY); INSERT INTO Genres SELECT DISTINCT Genre FROM Artiste;
23
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
SQL UPDATE
UPDATE nom-table SET nom-colonne = expression * [WHERE condition]
Permet de mettre jour les colonnes spcifis dune table selon une ou plusieurs expressions qui peuvent tre une constante, une expression contenant des oprateurs ou une sous-requte SQL WHERE condition permet de spcifier de mettre jour seulement les tuples qui satisfassent cette condition. Par dfault ce sont tous les tuples de toute la table qui sont mis jour
24
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Mettre jour la table Chanson en mettant la dure en secondes (il faut dabord modifier le type pour tenir compte de a)
Solution: ALTER Table Chanson modify Duree number(6,2); UPDATE Chanson set Duree = trunc(Duree) * 60 + ((Duree-trunc(Duree))*100); 25
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
SQL DELETE
DELETE FROM nom-table [WHERE condition]
Efface tous les tuples qui rpondent la condition spcifie Si aucune condition est spcifie tous les tuples sont effacs
Exercice: effacer tous les artistes suisses de la base y compris leur chansons et albums
Solution: DELETE FROM Chanson WHERE Album in ( SELECT Titre FROM Album WHERE Artiste in ( SELECT Nom FROM Artiste WHERE Nationalite='CH' ) ); DELETE FROM Album WHERE Artiste in ( SELECT Nom FROM Artiste WHERE Nationalite='CH' ); DELETE FROM Artiste WHERE Nationalite = 'CH'; 26
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
27
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
28
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
29
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Requte sans doublons: obtenir la liste des albums dont on a rpertori des chansons dans la base
SELECT DISTINCT Album FROM Chanson
Requte avec variable et ordonnancement: obtenir le contenu dun certain album (chanson, numero, dure) par ordre de numero
SELECT Titre, Numero, Duree FROM Chanson WHERE Album = :Album ORDER BY Numero ASC
30
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Outer Joins: obtenir la liste des Artistes avec leur album, en incluant mme les artistes pour lesquels on na pas dalbum repertoris
SELECT Nom, Annee, Album.Titre FROM artiste LEFT JOIN album ON Album.Artiste=Artiste.Nom;
31
Universit de Lausanne > Ecole des HEC > Cours de Bases de Donnes Avances > TP2
Requte avec fonctions daggregation et selection: obtenir la liste des artistes avec le nombre dalbum pour ceux dont on a plus dun seul album
SELECT Nom, count(titre) FROM artiste join album on artiste=nom GROUP BY Nom HAVING count(titre)>1
Bases de Donnes Avances TP2
32