tp2 - sql bfsh1 - 1015 lausanne - switzerland - tel. +41 21 692.3420 - [email protected] - ...

32
TP2 - SQL TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - [email protected] - http://www.hec.unil.ch/cparent Université de Lausanne Ecole des Hautes Etudes Commerciales (HEC) Cours de Bases de Données Avancées

Upload: claire-jeanne

Post on 04-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

TP2 - SQLTP2 - SQL

BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - [email protected] - http://www.hec.unil.ch/cparent

Université de LausanneEcole des Hautes Etudes Commerciales (HEC)Cours de Bases de Données Avancées

Page 2: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

2Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

Agenda

Introduction Types de données Opérateurs et fonctions Langage SQL

– Definition de Données– Manipulation de Données– Requêtes

Exercice

Page 3: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

3Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

Introduction

SQL– Structured Query Language– Un langage normalisé

SQL99: ANSI X3.135-1999, ISO/IEC 9075:1999 "Database Language SQL"

– Standard d'accès aux bases de données relationnelles Supporté par les principaux systèmes de bases de données relationnelles Portabilité (en principe, peut nécessiter quelques petites modifications)

Page 4: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

4Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – Types de Données

Types de données principaux (Oracle)

– Chaînes de caractères: CHAR (taille) VARCHAR (taille)

– Nombres: NUMBER (chiffres,decimales) INT FLOAT DOUBLE

– Date DATE TIMESTAMP INTERVAL

– Données brutes: RAW BLOB (Large Object Datatype) BFILE

– Types personnalisées (objets)– Types XML– Types spatiales– Types Média

Page 5: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

5Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – Opérateurs et fonctions

Quelques opérateurs et fonctions utiles– Sur nombres

+, -, *, /, POWER, SQRT ABS, MOD, EXP, LOG SIN, COS, TAN ROUND, TRUNC…

– Sur chaînes de caractères CONCAT, REPLACE SUBSTR, LENGHT TRIM, LTRIM, RTRIM, UPPER, LOWER ...

– Sur ensembles UNION, INTERSECT, MINUS

– Conversion TO_CHAR, TO_DATE, TO_NUMBER …

– Comparison >, <, =, != ANY, SOME, ALL IS NULL, LIKE, IN, EXISTS NOT, AND, OR

– Date CURRENT_DATE … CURRENT_TIMESTAMP …

– Fonction d’aggrégation COUNT, SUM, MAX, MIN… AVG, STDEV, VARIANCE

– Et beaucoup d’autres

Page 6: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

6Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – 1. Langage de définition de données

Langage de définition de données (LDD / DDL) – Commandes pour créer, modifier et supprimer les éléments du schéma

relationnel tel que relations, vues, indexes, contraintes, database …– CREATE | ALTER | DROP DATABASE– CREATE | ALTER | DROP TABLE– CREATE | ALTER | DROP VIEW– CREATE | ALTER | DROP TRIGGER– CREATE | ALTER | DROP INDEX– CREATE | ALTER | DROP CONSTRAINT– CREATE | ALTER | DROP ...

Page 7: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

7Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE DATABASE

CREATE DATABASE – Syntaxe: CREATE DATABASE <nom>– Effets: Crée une base de donnée vide et prête à l’emploi

Efface les éventuelles données présentes

ALTER DATABASE – Syntaxe: ALTER DATABASE <nom>– Effets: Permet d’effectuer des opérations de maintenance

DROP DATABASE <nom>– Syntaxe: DROP DATABASE <nom>– Effets: Efface la base de données entière

Example:– CREATE DATABASE cd

Page 8: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

8Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE

CREATE TABLE nom_table (nom-col type-col [ [CONSTRAINT] contrainte-col]* [CONSTRAINT contrainte-table]*

) ;

– Effets: Crée une table vide en spécifiant son nom, ses attributs et ses contraintes

– Légénde: […] = optionnel, CAPITALE = mot clé, * = répétition possible (typiquement separés par des virgule)

CREATE TABLE AS requête-SQL

– Effets: Permet de créer et peupler une table à partir d’une requête SQL

Page 9: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

9Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE - Exercices

Créer une table Artiste contenant un Nom (identifiant), un genre et une nationalité. Insérer un jeu de données et afficher la table.

Solution: CREATE TABLE Artiste ( Nom varchar(64) , Genre varchar(16) , Nationalite varchar(16) , CONSTRAINT ID_Artiste PRIMARY KEY (Nom));

Insérer un jeux de données et afficher la table

– Solution: INSERT INTO Artiste VALUES ('Joe Satriani','Rock','USA');

INSERT INTO Artiste VALUES ('Gordon Haskell','Jazz','GB');

SELECT * FROM Artiste;

Page 10: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

10Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE – Contraintes NOT NULL

– Oblige l’attribut à avoir des valeur non nulle

– Contrainte sur colonne: spécifier NOT NULL après la definition de l’attribut

DEFAULT– Attribue une valeur par défaut à l’attribut à la place d’une valeur nulle.

– Contrainte sur colonne: spécifier DEFAULT valeur après la definition de l’attribut

CHECK (condition)– Spécifie une condition que chaque ligne de la table doit vérifier. La condition peut

porter sur plusieurs attributs et contenir des connecteurs logiques, mais ne peut pas contenir de requêtes SQL, porter sur d’autres lignes de la table ou d’autres tables

– Contrainte sur colonne: spécifier CHECK (condition) après la definition de l’attribut (1 seul attribut)

– Contrainte sur table: spécifier en fin de requête CONSTRAINT nom CHECK (condition)

Page 11: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

11Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE – Contraintes

PRIMARY KEY– Définit la clé primaire d’une table: deux lignes ne peuvent pas avoir le même

ensemble de valeurs pour les attributs définis par la clé primaire.

– Ne permet pas de valeur nulles.

– Contrainte sur colonne: spécifier PRIMARY KEY après la definition de l’attribut (limité à 1 seul attribut)

– Contrainte sur table: spécifier en fin de requête CONSTRAINT nom PRIMARY KEY (attr1, attr2,...,attrN)

UNIQUE– Définit une clé secondaire d’une table: deux lignes ne peuvent pas avoir la même

ensemble de valeurs pour les attributs définis par la contrainte.

– Permet les valeurs nulles, mais NOT NULL peut aussi être spécifié.

– Contrainte sur colonne: spécifier UNIQUE après la definition de l’attribut (limité à 1 seul attribut)

– Contrainte sur table: spécifier en fin de requêten CONSTRAINT nom UNIQUE (attr1, attr2,...,attrN)

Page 12: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

12Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE – Contraintes

FOREIGN KEY – Permet de garantir l’intégrité référentielle, c’est à dire que les valeurs des attributs

spécifiés comme clé étrangère référencent des tuples d’une autre table qui existent. – Permet les valeurs nulles, mais NOT NULL peut aussi être spécifié.– Contrainte sur colonne:

spécifier REFERENCES nom-table après la definition de l’attribut (limité à 1 seul attribut)

– Contrainte sur table: Spécifier en fin de requête CONSTRAINT nom FOREIGN KEY (attr1, attr2,...,attrN)

REFERENCES table [(attr1, attr2,...,attrN)] [action]

– Note: référence par défaut la clé primaire de la table cible, ou une clé secondaire à préciser à travers REFERENCES table (attr1, attr2,...,attrN)

– Note: action permet de spécifier une action à exécuter Condition: ON DELETE : permet de spécifier l'action à réaliser en cas

d'effacementON UPDATE : permet de spécifier l'action à réaliser en cas de

modification Action: SET NULL : remplace les valeurs par NULL

SET DEFAULT : remplace par la valeur par défaut si défini, sinon NULLCASCADE : la mise à jour / déstruction est répercutée RESTRICT : indique une erreur (ne permet pas l’action)

Page 13: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

13Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE – Contraintes – Exercices

Créer une table Album avec un Titre (identifiant), une Année (obligatoire, par défaut 2004, comprise entre 1900 et 2100) et un Artiste (clé étrangère sur table Artiste).

– Solution: CREATE TABLE Album ( Titre varchar(64) PRIMARY KEY, Annee numeric(4) DEFAULT 2004 NOT NULL, Artiste varchar(64), CONSTRAINT CKAnnee CHECK (Annee BETWEEN 1900 AND

2100), CONSTRAINT REF_Album_Artiste FOREIGN KEY (Artiste) REFERENCES Artiste(Nom) );

Insérer un jeux de données et afficher la table

– Solution: INSERT INTO Album VALUES('Surfing WTA',1987,'Joe Satriani');INSERT INTO Album VALUES('Harry''s Bar',2002,'Gordon

Haskell');SELECT * FROM Album;

Page 14: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

14Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE TABLE – Contraintes – Exercices

Créer une table Chanson avec un Titre (identifiant) un Album (clé étrangère référençant la table Album), un Numero (facultatif) et une durée. Le couple Album et Numero doit être unique dans toute la table.

– Solution: CREATE TABLE Chanson ( Titre varchar(64),

Album varchar(64),Numero numeric(2) ,Duree numeric(4,2) ,CONSTRAINT PK_Chanson PRIMARY KEY (Titre),CONSTRAINT SID_Chanson UNIQUE (Album, Numero)

);

Insérer un jeux de données et afficher la table

– Solution: INSERT INTO Chanson VALUES('How wonderful','Harry''s Bar',1,3.07);

INSERT INTO Chanson VALUES('Always with me','Surfing WTA',4,6.4);

SELECT * FROM Chanson;

Page 15: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

15Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CONTRAINTES - CREATE TRIGGER

CREATE [OR REPLACE] TRIGGER nom-trigger BEFORE|AFTER|INSTEAD OF INSERT [OR] UPDATE [OF column] [OR] DELETE ON nom-table [FOR EACH ROW] [WHEN (condition)] instructions pl/sql– Permet de spécifier un traitement complexe pour garantir une contrainte d’intégrité

– Traité au TP suivant

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;

Page 16: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

16Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE VIEW

CREATE [OR REPLACE] VIEW nom_vue AS requête SQL – Permet de créer une vue, soit une table virtuelle produite par une requête

SQL. La vue ne contient pas de données propres. Elle est construite au moment de la requête avec les données des tables sous-jacentes.

– Après sa création, une vue peut être utilisée de la même façon qu'une table. Des requêtes de sélection ou de manipulation peuvent y être appliquées.

– OR REPLACE: écrase l’ancienne vue de même nom si elle existait

Page 17: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

17Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – CREATE VIEW - Exercices

Exercice: Créer une table ChansonsUSA qui contient toutes les noms et durées des chansons dont les artistes sont de nationalité USA.

– Solution: CREATE TABLE ChansonsUSA AS SELECT artiste.nom, chanson.titre, duree FROM chanson, album, artiste WHERE chanson.album = album.titre AND album.artiste = artiste.nom

AND artiste.nationalite = 'USA';

Exercice: Créer une vue à partir de la même requête.

– Solution: CREATE VIEW VueChansonsUSA AS SELECT artiste.nom, chanson.titre, duree FROM chanson, album, artiste WHERE chanson.album = album.titre AND album.artiste = artiste.nom

AND artiste.nationalite = 'USA';

Exercice: Modifiez les données dans la table originale. Affichez table et vue et notez les différences entre eux.

Page 18: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

18Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – ALTER TABLE

ALTER TABLE nom-table action– action: permet de spécifier la modification de la table à apporter

RENAME TO nouveau-nom-table– Permet de changer le nom de la table

RENAME COLUMN old-name TO new-name– Permet de changer le nom d’une colonne

ADD ( nom-col type-col [DEFAULT valeur] [contrainte-col])– Permet d’ajouter une ou plusieurs colonnes ou contraintes

MODIFY ( nom-col type-col [DEFAULT valeur] [contrainte-col])– Permet de modifier une ou plusieurs colonnes ou contraintes

DROP COLUMN nom-col [CASCADE CONSTRAINTS] – Permet de modifier une ou plusieurs colonnes ou contraintes

RENAME: renommer une colonne ou une contrainte

Page 19: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

19Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – ALTER TABLE - Exercices

Modifier la table Chanson afin qu’elle contienne une colonne ‘Artiste’

– Solution:ALTER TABLE Chanson ADD ( Artiste varchar(64) )

Modifier la table Chanson afin que numero soit obligatoire

– Solution:ALTER TABLE Chanson MODIFY ( Numero NOT NULL)

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')));

Page 20: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

20Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – DROP TABLE, DROP VIEW

DROP TABLE nom_table [CASCADE CONSTRAINTS]– Permet de supprimer une table et tout son contenu

– CASCADE CONSTRAINTS supprime toutes les contraintes de clé externe référençant cette table. Si on cherche à détruire une table dont certains attributs sont référencés sans spécifier CASCADE CONSTRAINT: refus

DROP VIEW nom_vue [CASCADE CONSTRAINTS]– Permet de supprimer une vue

– CASCADE CONSTRAINTS supprime toutes les contraintes de clé externe référençant cette vue: si on cherche à détruire une vue dont des attributs sont référencés sans spécifier cette option une erreur est générée

Exercice: Détruisez la table ChansonsUSA et la vue VueChansonsUSA.

– Solution:DROP TABLE ChansonsUSA;DROP VIEW VueChansonsUSA;

Page 21: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

21Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – Langage de manipulation de données

INSERT– Insertion de tuples dans une table

UPDATE– Mise à jour de tuples dans une table

DELETE– Effacer des tuples dans une table

Page 22: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

22Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – INSERT

INSERT [INTO] nom-table [(nom-colonne*)] {VALUES (valeur*) | requête | DEFAULT VALUES }

– Permet d’insérer des valeurs dans une table– nom-colonnes: spécifie les colonnes visées par l’insertion. Peut être omis si

les valeurs concernent toutes les colonnes de la table dans le bon ordre.

– VALUES (valeurs): spécifie les valeurs à insérer: INSERT nom-table VALUES (valeurs*)

– requête: les valeurs à insérer sont donnés par une requête qui doit renvoyer les mêmes nombre, ordre et types de colonnes spécifiés par nom-colonnes

INSERT INTO nom-table requête

– DEFAULT VALUES: insère une ligne avec toutes les valeurs par défaut

Page 23: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

23Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – INSERT - Exercices

Insérez des nouveaux artistes, albums et chansons

– Solution: INSERT INTO Artiste VALUES ('Gotthard', 'Rock', 'CH' );INSERT INTO Album VALUES('Gotthard',1992,'Gotthard');INSERT INTO Chanson

VALUES('Angel','Gotthard',8,7.25,null);INSERT INTO Chanson

VALUES('Hush','Gotthard',4,2.13,null);

Créez une table Genres avec un attribut Genre (identifiant). Insérez ensuite les genres des artistes utilisés dans la base.

– Solution: CREATE TABLE Genres (Genre varchar(16) PRIMARY KEY);

INSERT INTO Genres SELECT DISTINCT Genre FROM Artiste;

Page 24: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

24Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – UPDATE

UPDATE nom-table SET nom-colonne = expression * [WHERE condition]

– Permet de mettre à jour les colonnes spécifiés d’une table selon une ou plusieurs expressions qui peuvent être une constante, une expression contenant des opérateurs ou une sous-requête SQL

– WHERE condition permet de spécifier de mettre à jour seulement les tuples qui satisfassent cette condition. Par défault ce sont tous les tuples de toute la table qui sont mis à jour

Page 25: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

25Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – UPDATE - Exercices

Mettre à jour la table Chanson en mettant le nom de l’artiste qui est relié à la chanson

– Solution: UPDATE Chanson SET Artiste = ( SELECT Artiste.Nom FROM ALBUM, ARTISTE WHERE Chanson.Album=Album.Titre AND

Album.Artiste=Artiste.Nom);

Mettre à jour la table Chanson en mettant la durée en secondes (il faut d’abord 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);

Page 26: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

26Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – DELETE

DELETE FROM nom-table [WHERE condition]– Efface tous les tuples qui répondent à la condition spécifiée– Si aucune condition est spécifiée tous les tuples sont effacés

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';

Page 27: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

27Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – langage de requête

SELECT [DISTINCT] nom-cols [AS nom-cols]FROM nom-tables[ WHERE conditions][ GROUP BY nom-cols][ HAVING conditions ][ ORDER BY nom-cols [ASC|DESC] ]

– Permet de récuperer l’information contenue dans la base de donnée qui satisfait les conditions de la requête

– DISTINCT spécifie d‘enlever les doublons dans les résultats– nom-cols spécifie quelles colonnes retenir (projection). Le caractère * récupère

toutes les colonnes des tables précisées dans la clause FROM.– AS permet de donner un nom aux colonnes créées par la requête– WHERE spécifie les conditions de sélection des tuples (sélection), qui peuvent être

n’importe quel prédicat qui doit pouvoir être évalué à vrai ou faux selon les valeurs: Comparison à une valeur (<, <=, =, >=, >, <>), év. quantifiés (ALL, SOME, ANY) Comparison à une fourchette ([NOT] BETWEEN), comparison partielle ([NOT] LIKE) Opérateurs logiques: AND, OR, NOT Conditions d’existence: nom-col IS [NOT] NULL, [NOT] EXISTS (sous-requête) Conditions d’ensemble: nom-col [NOT] IN (liste-de-valeur ou sous-requête)

Page 28: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

28Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – langage de requête

SELECT [DISTINCT] nom-cols [AS nom-cols]FROM nom-tables[ WHERE conditions][ GROUP BY nom-cols][ HAVING conditions ][ ORDER BY nom-cols [ASC|DESC] ]

– GROUP BY permet de regrouper les données dans la table selon les colonnes sélectionnées. Peut s’utiliser avec des fonctions d’aggrégation: count, sum, avg, max, min,... dans la clause SELECT

– HAVING spécifie les conditions de retention des regroupements de lignes– ORDER BY permet de trier les données dans la table selon les colonnes

sélectionnées en ordre ascendant (ASC) ou descendant (DESC)– Note: les différents opérateurs et fonctions peuvent être utilisées dans la

selection ou ou dans les conditions...

Page 29: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

29Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – opérations sur requetes

requête-sql UNION requête-sql requête-sql INTERSECT requête-sql requête-sql MINUS requête-sql

Page 30: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

30Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – langage de requête – Exercices Préparation: insérez un jeu de données dans la base (utiliser le script “TP2 –

SQL.txt”)

Requête de base avec selection et projection: obtenir les noms et la nationalite des artistes qui font du Rock ou du Hard Rock

SELECT Nom, Nationalite FROM Artiste WHERE Genre = 'Rock' OR Genre ='Hard Rock'

Requête sans doublons: obtenir la liste des albums dont on a répertorié des chansons dans la base

SELECT DISTINCT Album FROM Chanson

Requête avec variable et ordonnancement: obtenir le contenu d’un certain album (chanson, numero, durée) par ordre de numero

SELECT Titre, Numero, Duree FROM Chanson WHERE Album = :AlbumORDER BY Numero ASC

Page 31: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

31Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – langage de requête – Exercices Requête sur plusieurs tables avec jointure: obtenir une table avec les artistes,

les albums et leurs années, en ordre d’artiste et annee

– SELECT Artiste.Nom AS Artiste, Annee, Album.Titre AS AlbumFROM Album, ArtisteWHERE Album.Artiste=Artiste.NomORDER BY Artiste, Annee

– SELECT Artiste.Nom AS Artiste, Annee, Album.Titre AS AlbumFROM Album JOIN Artiste ON Album.Artiste=Artiste.Nom

Outer Joins: obtenir la liste des Artistes avec leur album, en incluant même les artistes pour lesquels on n’a pas d’album repertoriés

– SELECT Nom, Annee, Album.Titre FROM artiste LEFT JOIN album ON Album.Artiste=Artiste.Nom;

Requête avec sous-requête: obtenir la liste d’artistes dont on n’a pas d’album

– SELECT nom from artiste where nom not in (SELECT artiste from album)

Page 32: TP2 - SQL BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - Giovanni.Camponovo@unil.ch -  Université de Lausanne

32Bases de Données Avancées – TP2

Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP2

SQL – langage de requête – Exercices

Requête avec fonctions d’aggregation: obtenir la liste des albums avec le numero de chansons qu’ils contiennent et leur durée totale

– SELECT Album.Titre, count(Duree) AS Nombre_Chansons, sum(Duree) AS Duree_Totale FROM album JOIN chanson ON chanson.album=Album.titreGROUP by Album.Titre

Requête avec fonctions d’aggregation et selection: obtenir la liste des artistes avec le nombre d’album pour ceux dont on a plus d’un seul album

– SELECT Nom, count(titre)FROM artiste join album on artiste=nomGROUP BY NomHAVING count(titre)>1