Ch 5 SELECT Sous-requêtes



Documents pareils
Le langage SQL Rappels

Langage SQL : créer et interroger une base

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

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

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

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

1 Introduction et installation

SQL Historique

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

Le Langage SQL version Oracle

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

FileMaker 13. Guide de référence SQL

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

Introduction aux Bases de Données 2004/2005

Cours 4 : Agrégats et GROUP BY

16H Cours / 18H TD / 20H TP

Optimisation SQL. Quelques règles de bases

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Vincent Augusto

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

BTS/CGO P10 SYSTEME INFORMATION Année

Olivier Mondet

TP 8: LES OPERATEURS ENSEMBLISTES

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

Systèmes de Gestion de Bases de Données

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

Bases de données relationnelles

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

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

1. Introduction Création d'une requête...2

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

INTRODUCTION AU DATA MINING

SQL Server et Active Directory

Excel avancé. Frédéric Gava (MCF)

SOLUTION D ENVOI DE SMS POUR PROFESSIONNELS

Auto-évaluation SQL. Document: f0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Documentation pour l envoi de SMS

Devoir Data WareHouse

Introduction aux Bases de Données

Cours: Les Jointures 1

TP Bases de données réparties

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

Thème : Gestion commerciale

Les bases fondamentales du langage Transact SQL

Base de données relationnelle et requêtes SQL

Le Langage De Description De Données(LDD)

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

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

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

Session S12 Les bases de l optimisation SQL avec DB2 for i

SUPPORT SQL. Thierry GRANDADAM

Introduction : présentation de la Business Intelligence

MySQL / SQL EXEMPLES

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

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

MODE OPERATOIRE OPENOFFICE BASE

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Mysql avec EasyPhp. 1 er mars 2006

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

Les bases de données

A QUOI SERVENT LES BASES DE DONNÉES?

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

COURS BARDON - ACCESS 2010

Oracle Décisionnel : Modèle OLAP et Vue matérialisée D BILEK

TP2_1 DE BUSINESS INTELLIGENCE ISIMA ZZ3 F3

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

Plan d Exécution Graphique pour des Requêtes SQL Simples

A QUOI SERVENT LES BASES DE DONNÉES?

TP3 : Creation de tables 1 seance

Structured Query Language

Comprendre et optimiser la base de données WordPress WP TECH 2014

COURS SQL. SQL*Plus PL/SQL

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

Les bases de l optimisation SQL avec DB2 for i

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

Évaluation et optimisation de requêtes

Performance web. Mesurer. Analyser. Optimiser. Benjamin Lampérier - Benoît Goyheneche. RMLL Beauvais. 8 Juillet 2015

Administration des bases de données. Jean-Yves Antoine

Exemples de reque tes dans data.bnf.fr

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

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Bases de données Cours 4 : Le langage SQL pour ORACLE

Avertissement : ceci est un corrigé indicatif qui n engage que son auteur

Bases de données et sites WEB

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

SAP BusinessObjects Web Intelligence (WebI) BI 4

1. SAS FEDERATION SERVER - POINT D'ACCES UNIQUE ET SECURISE AUX DONNEES DE L'ENTREPRISE

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

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

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Le langage SQL (première partie) c Olivier Caron

Transcription:

SQL Ch 5 SELECT Sous-requêtes I. INTRODUCTION... 1 A. SYNTAXE GENERALE... 1 B. RESULTAT RENVOYE PAR UNE SOUS-REQUETE... 2 C. SOUS REQUETE INDEPENDANTES ET SOUS REQUETE DEPENDANTES... 2 II. SOUS-REQUETES A VALEUR UNIQUE RESULTAT... 3 A. EXEMPLES DE REQUETES PRODUISANT UNE VALEUR UNIQUE... 4 B. CONSTITUER LA VALEUR D UNE COLONNE... 4 C. OPERATEURS =,<,<=,>,>=,<> OU!=... 4 D. OPERATEUR BETWEEN AND... 5 III. SOUS-REQUETES A LIGNES MULTIPLES ET COLONNE UNIQUE... 7 A. EXEMPLES DE REQUETES... 8 B. OPERATEURS IN ET NOT IN... 8 C. OPERATEUR ALL... 10 D. OPERATEUR ANY OU SOME... 12 IV. SOUS-REQUETES A JEU DE DONNEES QUELCONQUE... 15 A. EXEMPLES DE REQUETES... 15 B. OPERATEUR EXISTS... 15 V. APPORTS DE LA NORME SQL2... 16 I. Introduction Une SOUS-REQUETE, ou requête imbriquée,sous requête interne, en anglais : inner subquery est une requête utilisée pour CONSTITUER UN JEU DE RESULTAT qui va SERVIR DANS UNE REQUETE PRINCIPALE, la requête appelante requête externe, en anglais : outer query, - en général comme élément de comparaison dans la clause WHERE, - parfois comme valeur d une colonne dans la clause SELECT. Synonyme : requêtes imbriquées A. Syntaxe générale SELECT...[, sous requête AS alias_colonne] FROM... WHERE nom_colonne operateur sous requête [ GROUP BY... ] [ HAVING nom_colonne operateur sous requête ] [ ORDER BY... ] Où : sous requête est une requête SQL SQL_ch05_sousreq.doc 03/11/2014 Page 1 / 16

B. Résultat renvoyé par une sous-requête La sous requête doit produire un résultat ensemble de lignes et de colonnes conforme à ce qu attend la requête appelante. Ce résultat est : UNE VALEUR UNIQUE 1 ligne et 1 colonne : o il pourra être utilisé dans la requête appelante dans la clause WHERE ou HAVING : opérateurs de comparaison =, <, >, <=,>=, <>, opérateur BETWEEN, o il pourra être utilisé dans la requête appelante pour constituer la valeur d une colonne dans la clause SELECT LIGNES MULTIPLES, COLONNE UNIQUE 0 à N lignes une seule colonne : o il pourra être utilisé dans la requête appelante dans la clause WHERE ou HAVING : opérateurs IN, NOT IN opérateurs ALL, ANY combinés avec un opérateur de comparaison =, <, >, <=,>=, <>, Un JEU DE DONNEES QUELCONQUE 0 à N LIGNES 1 à N COLONNES : o opérateur EXISTS. Requête principale Fait appel Retourne le résultat Requête imbriquée sous-requête produit Résultat produit Résultat final C. sous-requête indépendantes et sous-requête dépendantes Deux formes de requêtes imbriquées sont définies, en fonction de leur lien avec la requête appelante : Les requêtes imbriquées indépendantes, sans aucun lien avec la requête appelante Les requêtes imbriquées dépendantes, ou liées ou corrélées, qui ont un lien avec la requête appelante 1. INDEPENDANTES Une requête indépendante peut être lancée seule, elle est totalement indépendante de la requête appelante. L évaluation de la requête imbriquée est d abord effectuée une fois pour toutes et va servir comme valeur unique, ou liste de valeurs à la requête appelante. SQL_ch05_sousreq.doc 03/11/2014 Page 2 / 16

SELECT nummembre, nom, prenom FROM t_membre WHERE nummembre IN 1, 2, 4, 5 2 SELECT nummembre FROM t_inscrire 1 1, 2, 4, 5 1 La requête imbriquée est exécutée 2 La requête principale s exécute et évalue la clause WHERE grâce au résultat retourné par la requête imbriquée 2. DEPENDANTES, ou CORRELEES, ou LIEES La requête imbriquée corrélée va dépendre, cette fois, de valeurs de colonnes de la requête appelante, elle est liée à la requête appelante, elle en est dépendante, corrélée en relation avec. La requête imbriquée est alors effectué/évaluée à chaque ligne de la requête appelante. SELECT nom, prenom, titre, prix FROM t_artiste A INNER JOIN t_œuvre O ON A.numartiste = O.numartiste WHERE prix < SELECT AVGprix 110 FROM t_œuvre O2 WHERE O2.numartiste = A.numartiste 3 110 1 La requête principale récupère une ligne 2 La requête imbriquée s exécute et utilise dans sa clause WHERE une valeur de colonne de la requête principale 3 La requête principale évalue la clause WHERE grâce au résultat retourné par la requête imbriquée II. Sous-requêtes à VALEUR UNIQUE résultat 1 CORRELATION EN CAS DE RETOUR D UN ENSEMBLE DE RESULTAT MULTIPLE PLUSIEURS LIGNES OU PLUSIEURS COLONNES, UNE ERREUR SE PRODUIT. 2 SQL_ch05_sousreq.doc 03/11/2014 Page 3 / 16

A. Exemples de requêtes produisant une valeur unique Lister la date de naissance du membre de numéro 12 SELECT datenais_memb FROM t_membre WHERE id_memb = 12 datenais_memb 14/12/1985 Lister le nombre de membres SELECT COUNT* AS nbmembres FROM t_membre nbmembres 225 Lister le total des dernières cotisations versées par les membres SELECT SUMdernCotis AS totalcotis FROM t_membre totalcotis 2812,50 B. Constituer la valeur d une colonne 1. Exemple : «Le titre des peintures, leur largeur et la largeur moyenne de toutes les peintures» 1_La largeur moyenne des peintures : SELECT AVGlargeur FROM t_peinture Requête indépendante 2_Les titres des œuvres, leur largeurs et la largeur moyenne de toutes les peintures résultat trouvé en 1 : SELECT titre, largeur, SELECT AVGlargeur FROM t_peinture AS largeur_moyenne FROM t_oeuvre A INNER JOIN t_peinture B ON A.numoeuvre = B.numoeuvre C. Opérateurs =,<,<=,>,>=,<> ou!= 1. Exemple : «Le titre des œuvre d un artiste dont le nom est picasso» 1_Retrouver le numéro de l artiste dont le nom est picasso il faut être sûr qu SELECT numartiste FROM t_artiste WHERE LOWERnom = picasso 2_Retrouver la liste des œuvres dont le numéro d artiste est celui trouvé en 1 : SELECT titre FROM t_oeuvre WHERE numartiste = SELECT numartiste FROM t_artiste WHERE LOWERnom = picasso Requête indépendante SQL_ch05_sousreq.doc 03/11/2014 Page 4 / 16

2. Exemple : «Le titre des peintures leur largeur et la largeur moyenne de toutes les peintures dont la largeur est inférieure à la moyenne» 1_La largeur moyenne des peintures : SELECT AVGlargeur FROM t_peinture Requête indépendante 2_Les oeuvres dont la largeur est inférieure au résultat trouvé en 1 on affiche également la largeur et sa moyenne autre utilisation de la requête imbriquée à valeur unique - afin de vérifier la bonne exécution de la requête : SELECT titre, largeur, SELECT AVGlargeur FROM t_peinture AS largeur_moyenne FROM t_oeuvre A INNER JOIN t_peinture B ON A.numoeuvre = B.numoeuvre WHERE largeur < SELECT AVGlargeur FROM t_peinture 3. Exemple : «Le titre des peintures dont la largeur est supérieure à la largeur moyenne de toutes les peintures» SELECT titre FROM t_oeuvre A INNER JOIN t_peinture B ON A.numoeuvre = B.numoeuvre WHERE largeur > SELECT AVGlargeur FROM t_peinture D. Opérateur BETWEEN AND 1. Exemple : «Le titre des peintures dont la largeur est égale à la moyenne de toutes les peintures, plus ou moins 50%» SELECT titre FROM t_oeuvre A INNER JOIN t_peinture B ON A.numoeuvre = B.numoeuvre SQL_ch05_sousreq.doc 03/11/2014 Page 5 / 16

WHERE largeur BETWEEN SELECT AVGlargeur * 0.50 FROM t_peinture AND SELECT AVGlargeur * 1.5 FROM t_peinture 2. Exemple : «Les nom et prénom des membres qui se sont inscrits à une activité avant de s inscrire à l activité Paris expo.» 1_Retrouver le numéro de l activité Paris Expo. SELECT numactivite FROM t_activite WHERE LOWERintitule = paris expo. Requête indépendante 2_Retrouver la date d inscription à cette activité POUR CHAQUE MEMBRE corrélation SELECT dateinscrire FROM t_inscrire WHERE numactivite = SELECT numactivite FROM t_activite WHERE LOWERintitule = paris expo. AND nummembre = MEMBRE DE LA TABLE APPELANTE 3_Retrouver la liste des membres qui ont une date d inscription antérieure à la date d inscription trouvée en 2 SELECT DISTINCT nom, prenom FROM t_membre A INNER JOIN t_inscrire B ON A.nummembre = WHERE date_inscrire < SELECT dateinscrire FROM t_inscrire WHERE numactivite = SELECT numactivite FROM t_activite WHERE LOWERintitule = paris expo. AND nummembre = A.nummembre CORRELATION Requête corrélée SQL_ch05_sousreq.doc 03/11/2014 Page 6 / 16

3. Exemple : «Le titre des peintures leur largeur et la largeur moyenne des peintures pour chaque artiste dont la largeur est supérieure à la largeur moyenne des peintures du même artiste» SELECT titre, largeur, SELECT AVGlargeur FROM t_oeuvre A2 INNER JOIN t_peinture B2 ON A2.numoeuvre = B2.numoeuvre WHERE A2.numartiste = A.numartiste CORRELATION AS moyenneparartiste FROM t_oeuvre A INNER JOIN t_peinture B ON A.numoeuvre = B.numoeuvre WHERE largeur > SELECT AVGlargeur FROM t_peinture WHERE numoeuvre IN SELECT numoeuvre FROM t_œuvre WHERE numartiste = A.numartiste CORRELATION III. Sous-requêtes à LIGNES MULTIPLES et COLONNE UNIQUE Les valeurs de la COLONNE UNIQUE retournées par une requête imbriquée vont servir d élément de comparaison avec un opérateur traitant d un ensemble de valeurs : IN et NOT IN, ALL, ANY. SQL_ch05_sousreq.doc 03/11/2014 Page 7 / 16

A. Exemples de requêtes Lister numéro des membres qui habitent Arras SELECT id_memb FROM t_membre WHERE ville_memb = "Arras" id_memb 13 231 57 121 Lister dates de naissance des membres qui habitent Arras SELECT datenais_memb FROM t_membre WHERE ville_memb = "Arras" datenais_memb 14/12/1985 06/01/1095 15/03/1976 03/06/1977 B. Opérateurs IN et NOT IN L opérateur IN permet de vérifier qu une valeur de colonne de la requête appelante existe dans la liste des valeurs retournées par la requête imbriquée. Avec l opérateur IN, AU MOINS UNE DES VALEURS renvoyée par la sous requête doit être égale à la valeur de la colonne externe. 1. Exemple : «Le nom et le prénom des membres qui se sont inscrits au moins une fois à une activité» 1_les numéros des membres qui se sont inscrits : SELECT nummembre FROM t_inscrire 1 _un membre peut s inscrire plusieurs fois, on peut optimiser le résultat en n ayant qu une seule fois un numéro de membre suppression des doublons grâce à la clause DISTINCT : SELECT DISTINCT nummembre FROM t_inscrire 2_liste des membres dont le numéro est parmi les numéros de 1 SELECT nom, prenom FROM membre WHERE nummembre IN SELECT DISTINCT nummembre FROM t_inscrire On aurait pu également traiter la requête grâce à une jointure : SELECT DISTINCT nom, prenom SQL_ch05_sousreq.doc 03/11/2014 Page 8 / 16

2. Exemple : «Le nom et le prénom des membres qui NE se sont JAMAIS inscrits à une activité» SELECT nom, prenom FROM t_membre WHERE nummembre NOT IN SELECT DISTINCT nummembre FROM t_inscrire ou bien...where NOT nummembre IN SELECT DISTINCT nummembre FROM t_inscrire 3. Exemple : «Les nom et prénom des membres inscrits à une activité consistant en une visite d exposition à Paris» 1_les numéros des expositions ayant eu lieu à Paris SELECT numexpo FROM t_exposition WHERE LOWERville = 'paris' 2_les numéros des activités qui sont parmi la liste des numéros de 1 SELECT numactivite FROM t_visiter WHERE numexpo IN SELECT numexpo FROM t_exposition WHERE LOWERville = 'paris' 3_les numéros des membres qui se sont inscrits à une activité dont le numéro est l un des numéros de 2 SELECT nummembre FROM t_inscrire WHERE numactivite IN SELECT numactivite FROM t_visiter WHERE numexpo IN SELECT numexpo FROM t_exposition WHERE LOWERville = 'paris' 4_les membres dont le numéro est l un des numéros de 3 SELECT nom, prenom FROM t_membre WHERE nummembre IN SQL_ch05_sousreq.doc 03/11/2014 Page 9 / 16

SELECT nummembre FROM t_inscrire WHERE numactivite IN SELECT numactivite FROM t_visiter WHERE numexpo IN SELECT numexpo FROM t_exposition WHERE LOWERville = 'paris' Une jointure nous permet également d obtenir ce résultat : SELECT DISTINCT nom, prenom INNER JOIN t_visiter C ON B.numactivite = C.numactivite INNER JOIN t_exposition D ON C.numexpo = D.numexpo WHERE LOWERD.ville = 'paris' C. Opérateur ALL L opérateur ALL est associé à un opérateur de comparaison et permet de contrôler une valeur de colonne de la requête appelante par rapport à toutes les valeurs retournées par la requête imbriquée. Avec l opérateur ALL, TOUTES les valeurs de la sous requêtes doivent répondre au critère de comparaison. 1. Exemple : «Les membres qui sont plus jeunes que tous les membres qui se sont inscrits» = dont la date de naissance est supérieure à toutes les dates de naissance des membres qui se sont inscrits à une activité WHERE datenaissance > ALL SELECT datenaissance > ALL SELECT colonne... est équivalent à > SELECT MAX colonne... WHERE datenaissance > SELECT MAXdatenaissance SQL_ch05_sousreq.doc 03/11/2014 Page 10 / 16

2. Exemple : «Les membres qui sont plus âgés que tous les membres qui se sont inscrits» = dont la date de naissance est inférieure à toutes les dates de naissance des membres qui se sont inscrits à une activité WHERE datenaissance < ALL SELECT datenaissance < ALL SELECT colonne... est équivalent à < SELECT MIN colonne... WHERE datenaissance < SELECT MINdatenaissance 3. Exemple : «Les membres qui ne sont pas nés à la même date que les membres qui se sont inscrits» = dont la date de naissance est différente de toutes les dates de naissance des membres qui se sont inscrits à une activité WHERE datenaissance <> ALL SELECT datenaissance <> ALL SELECT colonne... est équivalent à NOT IN SELECT colonne... WHERE datenaissance NOT IN SELECT datenaissance SQL_ch05_sousreq.doc 03/11/2014 Page 11 / 16

D. Opérateur ANY ou SOME L opérateur ANY est associé à un opérateur de comparaison et permet de contrôler une valeur de colonne de la requête appelante par rapport à toutes les valeurs retournées par la requête imbriquée. Avec l opérateur ANY, AU MOINS UNE des valeurs de la sous requête doit répondre au critère de comparaison pour que cette comparaison soit vraie. WHERE datenaissance < ANY SELECT datenaissance < ANY SELECT colonne... est équivalent à < SELECT MAX colonne... WHERE datenaissance < SELECT MAXdatenaissance WHERE datenaissance > ANY SELECT datenaissance > ANY SELECT colonne... est équivalent à > SELECT MIN colonne... WHERE datenaissance > SELECT MINdatenaissance WHERE datenaissance = ANY SELECT datenaissance SQL_ch05_sousreq.doc 03/11/2014 Page 12 / 16

= ANY SELECT colonne... est équivalent à IN SELECT colonne... WHERE datenaissance IN SELECT DISINCT datenaissanc SQL_ch05_sousreq.doc 03/11/2014 Page 13 / 16

> < <> = ALL «supérieur à toutes les valeurs de la sousrequête» équivalent : > SELECT MAX colonne... supérieur à la plus grande des valeurs de la liste «inférieur à toutes les valeurs de la sousrequête» équivalent : < SELECT MIN colonne... inférieur à la plus petite des valeurs de la liste «différent de toutes les valeurs de la sousrequête» équivalent : NOT IN SELECT colonne... n est pas parmi les valeurs de la liste «égal à toutes les valeurs de la sousrequête» ANY ou SOME «supérieur à au moins une des valeurs de la sous-requête»» équivalent : > SELECT MIN colonne... supérieur à la plus petite des valeurs de la liste «inférieur à au moins une des valeurs de la sous-requête» équivalent : < SELECT MAX colonne... inférieur à la plus grande des valeurs de la liste «différent d au moins une des valeurs de la sous-requête» «égal à au moins une des valeurs de la sous-requête» équivalent : IN SELECT colonne... est parmi les valeurs de la liste SQL_ch05_sousreq.doc 03/11/2014 Page 14 / 16

IV. Sous-requêtes à JEU DE DONNEES QUELCONQUE Les requêtes exploitent le retour de ce type de sous-requêtes pour vérifier que le résultat est vide ou non. A. Exemples de requêtes Lister les membres qui habitent Arras WHERE ville_memb = "Arras" id_memb Nom_memb Prenom_memb... 13 Dupond gérard 231 Durant julie 57 Lambert martine 121 Assain Marc Lister les membres qui habitent Moscou WHERE ville_memb = "Moscou" id_memb Nom_memb Prenom_memb... vide B. Opérateur EXISTS L opérateur EXISTS permet de contrôler qu une sous requête renvoie un résultat non vide. Le résultat de l évaluation est VRAI si le résultat de la sous requête comporte au moins 1 ligne, résultat non vide, FAUX sinon. résultat vide, aucune ligne renvoyée par la sous requête. 1. Exemple : «la liste des artistes s il existe des membres dont l anniversaire est fêté ce mois-ci» SELECT * FROM t_artiste WHERE EXISTS SELECT * 1 FROM t_membre WHERE EXTRACTMONTH FROM datenaissance = EXTRACTMONTH FROM CURRENT_DATE SQL_ch05_sousreq.doc 03/11/2014 Page 15 / 16

2. Exemple : «la liste des artistes s il existe certaines de leurs œuvres qui ont été exposées» SELECT * FROM t_artiste WHERE EXISTS SELECT * FROM t_oeuvre A INNER JOIN t_exposer B ON A.numoeuvre = B.numoeuvre WHERE A.numartiste = t_artiste.numartiste CORRELATION ATTENTION : si la sous requête comporte une fonction d agrégation, l application de l opérateur EXISTS sera toujours vérifiée : en effet, un COUNT* retourne forcément une valeur, qui peut être 0. V. Apports de la norme SQL2 Les plus récentes normes SQL modifient sensiblement le format des jeux de valeurs utilisés avec certains opérateurs dans l évaluation des requêtes imbriquées. Il devient possible de comparer non plus une seule valeur à un ensemble de valeurs uniques, mais un jeu de valeurs à d autres jeux de valeurs. 1. Exemple «les membres nom et prénom qui sont aussi des artistes nom, prenom» SELECT * FROM t_membre WHERE nom, prenom IN SELECT nom, prenom FROM t_artiste 2. Exemple Utiliser une sous-requête à la place d une table dans la clause WHERE SELECT * FROM SELECT... FROM... WHERE.....WHERE... SQL_ch05_sousreq.doc 03/11/2014 Page 16 / 16