Langages de manipulation relationnels: SQL



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le Langage SQL version Oracle

SQL Historique

1 Introduction et installation

Le langage SQL Rappels

Les bases de données

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Bases de données relationnelles

Introduction au Système de Gestion de Base de Données et aux Base de Données

INTRODUCTION : Données structurées et accès simplifié

16H Cours / 18H TD / 20H TP

Langage SQL : créer et interroger une base

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Bases de Données relationnelles et leurs systèmes de Gestion

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

CREATION WEB DYNAMIQUE

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

TP Bases de données réparties

Gestion des utilisateurs et de leurs droits

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Introduction aux Bases de Données 2004/2005

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Systèmes de Gestion de Bases de Données

Devoir Data WareHouse

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Cours Base de données relationnelles. M. Boughanem, IUP STRI

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

PHP 5. La base de données MySql. A. Belaïd 1

Le Langage De Description De Données(LDD)

Vincent Augusto

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

INTRODUCTION AU DATA MINING

CATALOGUE FORMATIONS DOMAINE Bases de données

MySQL / SQL EXEMPLES

Quelques aspects du Relationnel-Objet du SGBD Oracle

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Bases de Données. Plan

MODE OPERATOIRE OPENOFFICE BASE

Modélisation de bases de données : Le modèle relationnel

Architecture de la plateforme SBC

Cours SQL. Base du langage SQL et des bases de données

Bases de données et sites WEB Licence d informatique LI345

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Interpréteur d algèbre relationnelle

Auguria_PCM Product & Combination Manager

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

Compétences Business Objects

Cours: Les Jointures 1

Dossier I Découverte de Base d Open Office

Cours 4 : Agrégats et GROUP BY

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Année Universitaire 2009/2010 Session 2 de Printemps

TD n 10 : Ma première Base de Données

FileMaker 13. Guide de référence SQL

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

SOMMAIRE. Travailler avec les requêtes... 3

Bases de données élémentaires Maude Manouvrier

Raja Bases de données distribuées A Lire - Tutoriel

Patrice BOURSIER. Professeur, Univ. de La Rochelle. Bases de Données. Notes de cours

Chapitre 10. Architectures des systèmes de gestion de bases de données

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

A QUOI SERVENT LES BASES DE DONNÉES?

AGRÉGATION «ÉCONOMIE ET GESTION»

Bases de données avancées Introduction

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Introduction à JDBC. Accès aux bases de données en Java

Mysql. Les requêtes préparées Prepared statements

BTS/CGO P10 SYSTEME INFORMATION Année

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données. PTSI Lycée Eiffel. 28 février 2014

LE LANGAGE SQL2 1. INTRODUCTION

Bases de données et sites WEB

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Plan 1/9/2013. Génération et exploitation de données. CEP et applications. Flux de données et notifications. Traitement des flux Implémentation

ÉTUDE DE CAS. Durée : 5 heures Coefficient : 5 CAS FEFORT ÉLÉMENTS DE CORRECTION

Bases de Données Relationnelles. Le Modèle Relationnel

OpenPaaS Le réseau social d'entreprise

1. Base de données SQLite

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Information utiles. webpage : Google+ : digiusto/

Transcription:

C HAPITRE 8 Langages de manipulation relationnels: SQL SQL (Structured Query Language) est le langage de manipulation des données relationnelles le plus utilisé aujourd hui. Il est devenu un standard de fait pour les relationnels. Il possède des caractéristiques proches de l algèbre relationnelle (jointure par emboîtement) et d autres proches du calcul des tuples (variables sur les relations). Les exemples dans ce chapitre s appuient sur la base de données relative aux fournisseurs (F), produits (P), usines (U) et livraisons (PUF), décrite par le schéma suivant: F (NF, nomf, statut, ville) P (NP, nomp, poids, couleur) U (NU, nomu, ville) PUF (NP, NU, NF, qt) 1. Format de base d'une requête SELECT Liste des noms d'attributs du résultat FROM Nom d'une relation (ou de plusieurs relations) [ WHERE Condition logique qui définit les tuples du résultat ] Exemple: nom et poids des produits rouges. SELECT nomp, poids FROM P WHERE couleur = "rouge" Exemple : tous les renseignements sur tous les fournisseurs. SELECT NF, nomf, statut, ville ou SELECT * /* l'étoile signifie: tous les attributs*/ Un résultat sans doubles Les SGBD commercialisés (dont les SQL ) ne suppriment pas automatiquement les doubles. La clause DISTINCT permet à l'utilisateur d'avoir un résultat sans double. 107

Exemple : liste des couleurs qui existent. SELECT DISTINCT couleur FROM P Un résultat trié La clause ORDER BY permet de définir un ordre de tri pour les tuples du résultat. Exemple : liste des fournisseurs de Lausanne par ordre alphabétique. SELECT nomf, NF, statut WHERE ville = "Lausanne" ORDER BY nomf ASC, NF ASC Si plusieurs fournisseurs ont le même nom, ils seront classés selon leurs numéros. 2. Recherche avec blocs emboîtés Exemple : numéros des fournisseurs de produits rouges? ensemble des numéros des produits rouges : SELECT NP FROM P WHERE couleur = "rouge" ensemble des numéros des fournisseurs de produits rouges : SELECT NF FROM PUF WHERE NP IN ( SELECT NP FROM P WHERE couleur = "rouge" ) Le mot clef IN signifie "appartient", l'opérateur mathématique de la théorie des ensembles ( ). La phrase NP IN (SELECT NP FROM P WHERE couleur = "rouge") est une condition logique, signifiant "la valeur de NP est dans l'ensemble des numéros de produits rouges", ce qui est vrai ou faux. Pour répondre à cette requête, le SGBD : 1. exécute la requête interne (calcul de l'ensemble des numéros des produits rouges), 2. exécute la requête externe SELECT NF FROM PUF WHERE NP IN (...) en balayant PUF et en testant pour chaque tuple si ce NP appartient à l'ensemble des numéros de produits rouges. Dans le WHERE, la condition logique peut avoir plusieurs formes : - elle peut être composée de conditions élémentaires connectées par AND, OR, NOT, et par des parenthèses; - les conditions élémentaires sont du type : <valeur attribut> <opérateur de comparaison> <valeur attribut> <valeur attribut> <opérateur d'appartenance> <ensemble> avec : <valeur attribut> ::= nom d'attribut constante <opérateur de comparaison> ::= > < = <opérateur d'appartenance> ::= IN NOT IN <ensemble> est soit un ensemble constant, par exemple (1,2,3), soit un ensemble défini par une requête SELECT, soit une union, différence ou intersection d'ensembles : 108

<ensemble> ::= "(" <constantes> ")" <requête SELECT> <ensemble> <opérateur ensembliste> <ensemble> <constantes> ::= constante constante","<constantes> <opérateur ensembliste> ::= UNION MINUS INTERSECT Exemple : noms des fournisseurs n 1, 2, 3. ou SELECT nomf WHERE NF = 1 OR NF =2 OR NF = 3 SELECT nomf WHERE NF IN (1, 2, 3) 3. Qualification des noms d'attributs Notations : NP : attribut P.NP, PUF.NP : attributs qualifiés par le nom d'une relation Règle 1 : Un nom d'attribut non qualifié, référence la relation la plus interne qui a un attribut de ce nomlà. Règle 2 : On peut renommer localement une relation dans la clause FROM. Exemple:... FROM PUF PUF1... la relation PUF s'appelle alors PUF1 pour le SELECT correspondant à ce FROM uniquement. Exemple : noms des fournisseurs ne livrant pas le produit numéro 2. SELECT FROM WHERE nomf F 2 NOT IN (SELECT NP /* ensemble des NP FROM PUF livrés par ce WHERE PUF.NF = F.NF) fournisseur */ Dans le WHERE du SELECT interne, on aurait pu tout aussi bien écrire : WHERE NF = F.NF (cf. règle 1). Exemple : numéros des fournisseurs livrant le même produit que le fournisseur 1 en une quantité plus grande. Sur le schéma, la requête peut être décrite comme suit : =1 PUF ( NP, NU, NF, qt ) = > PUF ( NP, NU, NF, qt ) Ce qui s'écrit en SQL: SELECT NF FROM PUF PUFX /* PUF est renommé*/ 109

WHERE NP IN (SELECT NP /* ensemble FROM PUF des produits du WHERE NF = 1 AND qt < PUFX.qt) fournisseur 1 */ 4. Recherche sur plusieurs relations simultanément Format général: SELECT Ai FROM R1, R2, Rn WHERE < condition de jointure entre les Ri > AND < condition(s) de la requête > Exemple : pour chaque produit livré, le nom du produit et les villes de leurs fournisseurs. SELECT FROM WHERE nomp, ville P, F, PUF PUF.NP = P.NP AND PUF.NF = F.NF 5. Recherche avec quantificateurs : SOME, ANY, ALL SQL permet d'écrire des conditions où apparaissent des quantificateurs proches de ceux de la logique ("il existe" ( ), "quelque soit" ( ) ), grâce aux mots clefs SOME, ANY et ALL. Les mots clefs SOME et ANY ont exactement la même signification; ce sont des synonymes. Le format général d'une condition élémentaire avec quantificateur est le suivant: <valeur attribut> <opérateur de comparaison> <quantificateur> <ensemble> avec <quantificateur> ::= SOME ANY ALL ce qui signifie: - pour SOME et ANY : " existe-t-il dans l'ensemble au moins un élément e qui satisfait la condition: e <opérateur de comparaison> <ensemble>? " - pour ALL : " tous les éléments de l'ensemble satisfont-ils la condition? " Le mot clef IN est équivalent à un quantificateur existentiel (SOME ou ANY) avec l'opérateur de comparaison d'égalité. SOME et ANY sont donc plus puissants. De même, les requêtes avec un quantificateur universel (ALL) et un comparateur d'égalité peuvent s'écrire avec une condition ensembliste (voir le paragraphe suivant). Cependant le mot clef ALL ne permet pas d'exprimer toutes les requêtes contenant un quantificateur du type "quelque soit". On peut alors écrire la requête inverse avec un "NOT EXISTS" (voir paragraphe plus loin). Par exemple la requête "chercher les X qui pour tout Y satisfont telle condition" peut aussi s'exprimer: "chercher les X tels qu'il n'existe aucun Y qui ne satisfait pas telle condition". Exemples: Ensemble des numéros des fournisseurs de produits rouges : SELECT FROM WHERE NF PUF NP = ANY ( SELECT NP FROM P WHERE couleur = "rouge" ) Ensemble des numéros des fournisseurs qui ne fournissent que des produits rouges : 110

SELECT FROM WHERE NF F "rouge" = ALL ( SELECT couleur FROM P WHERE NP = ANY ( SELECT NP FROM PUF WHERE PUF.NF = F.NF) ) 6. Recherche avec des conditions sur des ensembles Dans les paragraphes précédents, les conditions élémentaires portant sur une valeur d'attribut ont été définies. D'autres types de conditions élémentaires permettent de comparer des ensembles entre eux. Ce sont: 6.1. Test d égalité d ensembles: <ensemble 1> = <ensemble 2> <ensemble 1> <ensemble 2> 6.2. Test d inclusion d ensembles: <ensemble 1> CONTAINS <ensemble 2> Cette condition signifie que l'ensemble 1 contient (ou est égal à) à l'ensemble 2, ce qui en théorie des ensembles s'écrirait : <ensemble 1> <ensemble 2>. La condition: <ensemble 1> NOT CONTAINS <ensemble 2> est la négation de la précédente; elle est vraie si un élément de l'ensemble 2 n'appartient pas à l'ensemble 1. Exemple : noms des fournisseurs qui fournissent tous les produits rouges. SELECT nomf WHERE (SELECT NP FROM PUF /* ensemble des produits du WHERE NF = F. NF) fournisseur F*/ CONTAINS (SELECT NP FROM P /* ensemble des produits rouges*/ WHERE couleur ="rouge") 6.3. EXISTS < ensemble> Cette condition teste si l'ensemble n'est pas vide (ensemble Ø). Exemple : noms des fournisseurs qui fournissent au moins un produit rouge. SELECT nom F WHERE EXISTS (SELECT * FROM PUF, P WHERE NF = F.NF AND couleur ="rouge" AND PUF.NP=P.NP) Il existe aussi la condition inverse : NOT EXISTS <ensemble> qui teste si l'ensemble est vide. 111

7. Fonctions d'agrégation SQL offre les fonctions d'agrégation usuelles: cardinal : COUNT moyenne : AVG minimum et maximum : MIN, MAX total : SUM qui opèrent sur un ensemble de valeurs prises par un attribut, ou pour COUNT uniquement, sur un ensemble de tuples. Exemple : quel est le nombre de livraisons faites par le fournisseur 1? SELECT COUNT (*) /* on compte les tuples de PUF tels FROM PUF que NF = 1 */ WHERE NF=1 Exemple : combien de produits différents a livré le fournisseur 1? Attention : il faut ôter les doubles, car COUNT compte toutes les valeurs, y compris les valeurs doubles. SELECT COUNT (DISTINCT NP) FROM PUF WHERE NF=1 8. Recherche avec partition des tuples d'une relation 8.1. Clause Group by Exemple: combien de produits différents ont été livrés par chacun des fournisseurs? Il faut partitionner l'ensemble des tuples de PUF en un sous-ensemble (ou groupe) par numéro de fournisseur. C'est ce que permet la clause GROUP BY. SELECT FROM GROUP BY NF, COUNT (DISTINCT NP) PUF NF Cette instruction génère dans le SGBD les actions suivantes : 1. Classer les tuples de PUF, groupe par groupe (un groupe = ensemble des tuples ayant même NF), 2. Pour chaque groupe : - évaluer le résultat du SELECT (compter le nombre de NP différents dans ce groupe). 8.2. Clause Having <condition> Exemple: combien de produits différents ont été livrés par chacun des fournisseurs, tels que la quantité totale de produits livrés par ce fournisseur soit supérieure à l000? SELECT NF, COUNT (DISTINCT NP) FROM PUF GROUP BY NF HAVING SUM (qt) > 1000 La clause "HAVING <condition>" permet de sélectionner les groupes qui satisfont une condition. Attention, contrairement à la clause "WHERE <condition>", la condition ne porte pas sur un tuple mais sur l'ensemble des tuples d'un groupe. Le format général du SELECT avec GROUP BY est le suivant : Soit une relation R (A1, A2,..., An) SELECT [Ai1] [,Ai2]... [,Aiu] [,f1 (Aj1)] [,f2 (Aj2)] [,fv (Ajv)] FROM R [ WHERE <condition1 portant sur chaque tuple de R> ] 112

GROUP BY Ak1 [,Ak2] [,Akw] [ HAVING <condition2 portant sur chaque groupe de tuples de R> ] avec fi = fonction d'agrégation (COUNT, SUM, MIN, MAX, AVG), et {Ak1, Ak2,, Akw} {Ai1, Ai2,, Aiu}, et {Ak1, Ak2,, Akw} {Aj1, Aj2,, Ajv} = Ø. La condition du HAVING peut être de deux types : 1) Condition comparant le résultat d'une fonction d'agrégation portant sur un attribut qui ne fait pas partie de la clause GROUP BY : f (Ajx) <opérateur de comparaison> valeur Cette fonction porte alors sur l'ensemble des valeurs prises par l'attribut pour le groupe de tuples; 2) Condition comparant l'ensemble des valeurs prises par un attribut (qui ne fait pas partie de la clause GROUP BY) pour les tuples du groupe; cette comparaison se fait en général par rapport à un autre ensemble, à l'aide des comparateurs logiques d'ensembles: =,, CONTAINS, NOT CONTAINS. Dans ce dernier cas, afin d'exprimer le fait qu'il s'agit de l'ensemble des valeurs prises par l'attribut pour tous les tuples du groupe, le nom de l'attribut est précédé du mot clé SET. La condition du HAVING peut donc s'écrire : SET nom-attribut <opérateur de comparaison ensembliste> <ensemble> avec <opérateur de comparaison ensembliste> ::= = CONTAINS NOT CONTAINS L'instruction ci-dessus génère dans le SGBD les actions suivantes : 1. Créer une relation de travail, R', qui est une copie de R; éliminer de R' les tuples qui ne satisfont pas la condition du WHERE. 2. Classer les tuples de R', groupe par groupe (un groupe = ensemble des tuples ayant même Ak1 [,Ak2] [,Akw]). 3. Pour chaque groupe de tuples de R' faire: - tester la condition du HAVING - si elle est vérifiée, alors évaluer le résultat du SELECT. Exemple: numéros des fournisseurs qui fournissent au moins tous les produits fournis par le fournisseur numéro 100. SELECT NF FROM PUF GROUP BY NF HAVING SET NP /* ensemble des produits du fournisseur NF*/ CONTAINS (SELECT NP FROM PUF WHERE NF=100) 113

9. Mise à jour de la base de données 9.1. Insérer des tuples - Insérer un tuple : INSERT INTO nomrelation : < tuple constant> - Insérer un ensemble de tuples : INSERT INTO nomrelation : <requête SELECT dont le résultat a même schéma que la relation nomrelation> Exemple : autre catalogue de produits à rajouter à P : Catalogue (NP, nomp, couleur, poids, prix). INSERT INTO P : SELECT NP, nomp, couleur, poids FROM Catalogue. 9.2. Supprimer des tuples DELETE nomrelation [WHERE condition] Si la clause "WHERE condition" est présente, seuls les tuples satisfaisant la condition sont supprimés. Si la clause "WHERE condition" est absente, alors tous les tuples sont supprimés; la relation continue d'exister, mais sa population est vide. 9.3. Mettre à jour un (des) attribut(s) UPDATE nom relation SET nomattr1 = <expression1 qui définit une valeur pour l'attribut1>,... nomattrn = <expression n qui définit une valeur pour l'attribut n> [WHERE condition] Exemple : pour les produits verts, changer leur couleur, elle devient "vert d'eau". UPDATE P SET couleur = "vert d'eau" WHERE couleur = "vert" 10. Plusieurs types d'utilisation de SQL Le langage SQL a essentiellement été utilisé pour offrir une interface de manipulation d'une base de données à des utilisateurs finaux (non informaticiens), dans un contexte d'interrogation/mise à jour ponctuelle interactive. Par ailleurs, dans plusieurs systèmes on a développé des passerelles entre SQL et un langage de programmation (C, Cobol, Ada, ) de façon à permettre l'écriture de programmes qui peuvent ainsi, entre autres, manipuler les données d'une base de données par des instructions SQL. Enfin, il existe des environnements de programmation, dits de 4ème génération, où un langage de type SQL permet de spécifier les traitements souhaités sur les données, ces spécifications étant ensuite traduites en langage exécutable (invisible à l'utilisateur) par un générateur de programmes. Ces deux derniers types d'utilisation de SQL (inclus dans un langage de programmation et inclus dans un langage de spécifications type 4ème génération) ont nécessité de développer des mécanismes pour faire cohabiter deux philosophies différentes : celle de SQL dont les instructions "SELECT..." donnent en résultat un ensemble de tuples, et celle des langages type programmation qui travaillent sur un article/tuple à la fois. Pour cela, la solution généralement adoptée est de déclarer le "SELECT...", puis dans une boucle itérative de récupérer, un par un, les tuples du résultat. 114

Par exemple, pour inclure SQL dans un langage de programmation, la notion de "curseur" est employée. Un curseur est l'équivalent d'un fichier séquentiel temporaire dont le contenu est constitué d'une copie de l'ensemble des tuples résultat d'un SELECT. Exemple de programme en pseudo code + SQL avec curseur : trouver la liste des noms et villes des fournisseurs du produit de numéro numprod. DECLARE Fourn CURSOR FOR SELECT nomf, ville WHERE NF IN (SELECT NF FROM PUF WHERE NP = numprod) ; /* déclaration du curseur effectuée */ Lire (numprod) ; /* entrée du numéro du produit */ OPEN Fourn ; /* L'OPEN fait exécuter le SELECT du curseur; les tuples résultat sont chargés dans le fichier curseur Fourn */ FETCH Fourn INTO Fnom, Fville; /* un premier tuple est chargé en mémoire centrale Fnom et Fville sont des variables du langage hôte */ Tant que Rep-SGBD = "ok" faire : /* itération pour chaque tuple résultat du curseur */ Fin tant que; Afficher (Fnom, Fville) ; FETCH Fourn INTO Fnom, Fville ; /* le tuple suivant est chargé */ CLOSE Fourn ; /* le curseur est fermé */ 115

116

Exercices - Série 12 Soit la base de données relationnelle, PUF, de schéma : U (NU, NomU, Ville) P (NP, NomP, Couleur, Poids) F (NF, NomF, Statut, Ville) PUF (NP, NU, NF, Quantité) décrivant les faits suivants : - U: une usine est décrite par son numéro NU, son nom NomU, la ville Ville dans laquelle elle est située; - P: un produit est décrit par son numéro NP, son nom NomP, sa Couleur, son Poids; - F: un fournisseur est décrit par son numéro NF, son nom NomF, son Statut (fournisseur sous-traitant, fournisseur-exclusif,...), la Ville où il est domicilié; - PUF: le produit de numéro NP a été livré à l'usine de numéro NU par le fournisseur de numéro NF dans une Quantité donnée. Exprimer en SQL les requêtes suivantes: 1) Donner le numéro, le nom et la ville de toutes les usines. 2) Donner le numéro, le nom et la ville de toutes les usines de Londres. 3) Donner les numéros des fournisseurs qui approvisionnent l'usine n 1 en produit n 1. 4) Donner le nom et la couleur des produits livrés par le fournisseur n 1. 5) Donner les numéros des fournisseurs qui approvisionnent l'usine n 1 en un produit rouge. 6) Donner les noms des fournisseurs qui approvisionnent une usine de Londres ou de Paris en un produit rouge. 7) Donner les numéros des produits livrés à une usine par un fournisseur de la même ville. 8) Donner les numéros des produits livrés à une usine de Londres par un fournisseur de Londres. 9) Donner les numéros des usines qui ont au moins un fournisseur qui n'est pas de la même ville. 10) Donner les numéros des fournisseurs qui approvisionnent à la fois les usines n 1 et n 2. 11) Donner les numéros des usines qui utilisent au moins un produit disponible chez le fournisseur n 3 (c'està-dire un produit qu'il livre mais pas nécessairement à cette usine). 12) Donner le numéro du produit le plus léger (les numéros si plusieurs produits ont ce même poids). 13) Donner les numéros des usines qui ne reçoivent aucun produit rouge d'un fournisseur londonien. 14) Donner les numéros des fournisseurs qui fournissent au moins un produit fourni par au moins un fournisseur qui fournit au moins un produit rouge. 15) Donner tous les triplets (VilleF, NP, VilleU) tels qu'un fournisseur de la première ville approvisionne une usine de la deuxième ville avec un produit NP. 16) Même question qu'en 15, mais sans les triplets où les deux villes sont identiques. 17) Donner les numéros des produits qui sont livrés à toutes les usines de Londres. 18) Donner les numéros des fournisseurs qui approvisionnent toutes les usines avec un même produit. 19) Donner les numéros des usines qui achètent au fournisseur n 4 tous les produits qu'il fournit. 20) Donner les numéros des usines qui s'approvisionnent uniquement chez le fournisseur n 3. 117

21) Ajouter un nouveau fournisseur : <45, Alfred, sous-traitant, Lausanne> 22) Supprimer tous les produits de couleur noire et de numéro compris entre 100 et 199. 23) Changer la ville du fournisseur n 1 : il a déménagé à Genève. 118

Exercices - Série 13 Oracle Pour ces exercices, il faut utiliser la base de données d'essai qui est sur le serveur. Exprimer en SQL les requêtes: 1) Donner les noms des employés et les noms des départements dans lesquels ils travaillent. 2) Donner les noms de tous les employés qui ne travaillent pas à Genève. 3) Donner l'adresse des clients avec un code postal (zip) entre 1000 et 1100. 4) Donner toutes les informations sur les clients qui ont le mot "promotion" dans le commentaire. 5) Donner le nom du client et le nom de l'employé qui est en charge de ce client (lien par repid). 6) Donner les noms des employés qui ne sont pas en charge d'un client. 7) Donner pour chaque commande (order) les "items" qui sont dans la commande. 8) Donner pour chaque commande (order) les noms des "items" qui sont dans la commande. 9) Donner l'id du client (custid) et le nombre d'ordre qu'il a fait. 10) Donner le nom du client et le nombre d'ordre qu'il a fait (créer une vue de la requête 9). 11) Pour chaque produit, donner le moyen, le maximum et le minimum d'exemplaires commandés. 12) Pour chaque ordre, donner l'adresse du client, la date de l'ordre, les noms, les quantités et les prix des items et la somme totale de l'ordre. 13) Créer une table pour pouvoir stocker des informations sur des stations météorologiques: nom, description, coordonnées, altitude, pente, exposition, date d'installation de la station. 119