2. LE LANGAGE SQL DML (1) Version 2 - Janvier 2012 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2. LE LANGAGE SQL DML (1) Version 2 - Janvier 2012 modifié le 18/9/2013 Support du chapitre 7, Le langage SQL DML (1) de l'ouvrage Bases de données, J-L Hainaut, Dunod 2009. II. Utilisation des bases de données
2. LE LANGAGE SQL DML (1) 2.1 Introduction 2.2 Extraction simple 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2. LE LANGAGE SQL DML (1) 2.1 Introduction 2.2 Extraction simple 2.3 Conditions plus complexes 2.4 Données extraites et données dérivées 2.5 Les fonctions agrégatives 2.6 Les sous-requêtes 2.7 Les quantificateurs ensemblistes Contenu II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.1 Introduction Le sous-langage DML de SQL permet de consulter le contenu des tables et de les modifier. Il comporte 4 verbes. La requête select extrait des données des tables La requête insert insère de nouvelles lignes dans une table La requête delete supprime des lignes d'une table La requête update modifie les valeurs de colonnes de lignes existantes Chapitres 2 et 3 : étude limitée à SQL2 II. Utilisation des bases de données
Ce chapitre étudie la requête select opérant sur une seule table 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.1 Introduction Ce chapitre étudie la requête select opérant sur une seule table Toute requête select renvoie un résultat sous la forme d'une table En principe, une requête select peut opérer sur le résultat d'une autre requête select; vrai en SQL3 mais limité en SQL2 SQL est un langage imparfait, mais c'est tout ce dont on dispose : quand on n'a pas ce que l'on aime, il faut aimer ce que l'on a ! II. Utilisation des bases de données
2.2 Extraction simple 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.2 Extraction simple II. Utilisation des bases de données
2.2 Extraction simple select NCLI, NOM, LOCALITE from CLIENT; select * 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.2 Extraction simple select NCLI, NOM, LOCALITE from CLIENT; NCLI NOM LOCALITE B062 B112 B332 B512 C003 C123 C400 D063 F010 F011 F400 K111 K729 L422 S127 S712 GOFFIN HANSENNE MONTI GILLET AVRON MERCIER FERARD TOUSSAINT PONCELET JACOB VANBIST NEUMAN FRANCK VANDERKA GUILLAUME Namur Poitiers Genève Toulouse Bruxelles Lille Paris select * from CLIENT; * = liste des colonnes II. Utilisation des bases de données
2.2 Extraction simple select NCLI, NOM from CLIENT 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.2 Extraction simple select NCLI, NOM from CLIENT where LOCALITE = 'Toulouse'; NCLI NOM B512 C003 D063 F011 K729 GILLET AVRON MERCIER PONCELET NEUMAN II. Utilisation des bases de données
2.2 Extraction simple select LOCALITE from CLIENT where CAT = 'C1'; 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.2 Extraction simple select LOCALITE from CLIENT where CAT = 'C1'; LOCALITE Poitiers Namur lignes en double LOCALITE Namur Poitiers select distinct LOCALITE from CLIENT where CAT = 'C1'; II. Utilisation des bases de données
2.3 Conditions plus complexes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.3 Conditions plus complexes II. Utilisation des bases de données
2.3 Conditions plus complexes - les valeurs null 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.3 Conditions plus complexes - les valeurs null NCLI select NCLI from CLIENT where CAT = null; null ne peut être comparé à rien, même pas à lui-même ! NCLI D063 K729 select NCLI from CLIENT where CAT is null; select NCLI from CLIENT where CAT is not null; II. Utilisation des bases de données
2.3 Conditions plus complexes - in et between 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.3 Conditions plus complexes - in et between select NCLI from CLIENT where CAT in ('C1','C2','C3'); select NCLI from CLIENT where LOCALITE not in ('Toulouse','Breda'); select NCLI from CLIENT where COMPTE between 1000 and 4000; II. Utilisation des bases de données
2.3 Conditions plus complexes - Les masques 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.3 Conditions plus complexes - Les masques select NCLI from CLIENT where CAT like 'B_'; '_' = un caractère quelconque masques select NPRO from PRODUIT where LIBELLE like '%SAPIN%'; '%' = une chaîne quelconque Un masque définit une famille de chaînes de caractères : 'B_' 'B1' 'Bd' 'B ' '%SAPIN%' 'PL. SAPIN 200x20x2' 'Boite en SAPIN' 'SAPIN VERNI' 'B_' 'xB' 'B' 'B12' '%SAPIN%' 'Boite en Sapin' 'Achetez S A P I N !' II. Utilisation des bases de données
2.3 Conditions plus complexes - Combinaisons logiques 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.3 Conditions plus complexes - Combinaisons logiques select NOM, ADRESSE, COMPTE from CLIENT where LOCALITE = 'Toulouse' and COMPTE < 0; select NOM, ADRESSE, COMPTE from CLIENT where COMPTE > 0 and (CAT = 'C1' or LOCALITE = 'Paris') II. Utilisation des bases de données
2.4 Données extraites et données dérivées 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.4 Données extraites et données dérivées II. Utilisation des bases de données
2.4 Données extraires et données dérivées - expressions de calcul 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.4 Données extraires et données dérivées - expressions de calcul select 'TVA de ', NPRO, ' = ',0.21*PRIX*QSTOCK from PRODUIT where QSTOCK > 500; TVA de NPRO = 0,21*PRIX*QSTOCK 67788 12789 37770.6 47397 TVA de CS264 PA45 PH222 PS222 = select NPRO as Produit, 0.21*PRIX*QSTOCK as Valeur_TVA from PRODUIT where QSTOCK > 500; "Produit" est un alias de colonne Produit Valeur_TVA 67788 12789 37770.6 47397 CS264 PA45 PH222 PS222 II. Utilisation des bases de données
2.4 Données extraires et données dérivées - Fonctions SQL 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.4 Données extraires et données dérivées - Fonctions SQL Les fonctions SQL Outre les 4 opérations arithmétiques, SQL offre une large gamme de fonctions Chaînes de caractères trim(both ' ' from ADRESSE)||' '||upper(LOCALITE) position('NEUVE' in upper(ADRESSE)) > 0 upper(ADRESSE) like '%'||upper(LOCALITE)||'%' Conversion de type cast(DATECOM as char(12)) CLI.COMPTE - cast(QCOM*PRIX as decimal(9,2)) Fonctions temporelles extract(year from DATECOM) + 1 extract(hour from current_time) > 18 II. Utilisation des bases de données
2.4 Données extraires et données dérivées - Fonctions SQL 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.4 Données extraires et données dérivées - Fonctions SQL Fonction de sélection select NCLI, case substring(CAT from 1 for 1) when 'A' then 'bon' when 'B' then 'moyen' when 'C' then 'occasionnel' else 'inconnu' end, LOCALITE from CLIENT; Registres du système current_user : identification de l’utilisateur courant ; current_date : date courante ; current_time : instant courant ; current_timestamp : date + instant courant. II. Utilisation des bases de données
2.5 Les fonctions agrégatives (statistiques) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.5 Les fonctions agrégatives (statistiques) II. Utilisation des bases de données
2.5 Les fonctions agrégatives (statistiques) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.5 Les fonctions agrégatives (statistiques) select 'Namur',avg(COMPTE) as Moyenne, max(COMPTE)-min(COMPTE) as Ecart_max, count(*) as Nombre from CLIENT where LOCALITE = 'Namur'; Namur Moyenne Ecart_max Nombre 4 Namur -2520 4580 le résultat ne comprend qu'une seule ligne select sum(QSTOCK*PRIX) from PRODUIT where LIBELLE like '%SAPIN%'; II. Utilisation des bases de données
2.5 Les fonctions agrégatives (statistiques) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.5 Les fonctions agrégatives (statistiques) Attention aux valeurs dupliquées select count(NCLI) from COMMANDE; count(NCLI) 7 select distinct count(NCLI) from COMMANDE; count(NCLI) 7 select count(distinct NCLI) from COMMANDE; count(NCLI) 5 II. Utilisation des bases de données
2.5 Les fonctions agrégatives (statistiques) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.5 Les fonctions agrégatives (statistiques) select count(NCLI) as Numeros, count(NOM) as Noms, count(LOCALITE) as Localites, count(CAT) as Categories from CLIENT; Numeros Noms Localites Categories 14 16 select count(distinct NCLI) as Numeros, count(distinct NOM) as Noms, count(distinct LOCALITE) as Localites, count(distinct CAT) as Categories from CLIENT; Numeros Noms Localites Categories 4 16 15 7 II. Utilisation des bases de données
2.5 Les fonctions agrégatives (statistiques) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.5 Les fonctions agrégatives (statistiques) Attention aux ensembles vides select count(*) as Nombre, sum(COMPTE) as Somme, max(CAT) as Max from CLIENT where LOCALITE = 'Alger'; Nombre Somme Max <null> II. Utilisation des bases de données
2.6 Les sous-requêtes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes II. Utilisation des bases de données
2.6 Les sous-requêtes - Principe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Principe Les numéros des clients de Namur : select NCLI from CLIENT where LOCALITE = 'Namur'; NCLI B062 C123 L422 S127 II. Utilisation des bases de données
2.6 Les sous-requêtes - Principe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Principe Les numéros des clients de Namur : NCLI B062 C123 L422 S127 Les numéros des commandes des clients de Namur : select NCOM, DATECOM from COMMANDE where NCLI in ('C123','S127','B062','L422'); ne marche qu'une fois mieux : select NCOM, DATECOM from COMMANDE where NCLI in (select NCLI from CLIENT where LOCALITE = 'Namur'); marchera toujours II. Utilisation des bases de données
2.6 Les sous-requêtes - Principe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Principe select * from PRODUIT where NPRO in (select NPRO from DETAIL where NCOM in (select NCOM from COMMANDE where NCLI in (select NCLI from CLIENT where LOCALITE='Namur'))); II. Utilisation des bases de données
2.6 Les sous-requêtes - Principe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Principe select * from PRODUIT where NPRO in (select NPRO from DETAIL where NCOM in (select NCOM from COMMANDE where NCLI in (select NCLI from CLIENT where LOCALITE='Namur'))); les produits référencés par les détails des commandes des clients de Namur les détails des commandes des clients de Namur les commandes des clients de Namur les clients de Namur II. Utilisation des bases de données
2.6 Les sous-requêtes - Condition d'association 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Condition d'association Une condition in (sous-requête) correspond le plus souvent à une condition d'association = qui sont associés à ... select * from T where CT in (select CS from S where <condition>); "on recherche les T qui sont associés à des S qui ..." II. Utilisation des bases de données
Remarque : symétrie des conditions d'association 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Condition d'association Remarque : symétrie des conditions d'association select * from COMMANDE where NCLI in (select NCLI from CLIENT where LOCALITE = 'Namur'); select * from CLIENT where NCLI in (select NCLI from COMMANDE where DATECOM = '12-09-2009'); II. Utilisation des bases de données
2.6 Les sous-requêtes - Condition d'association 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Condition d'association Forme négative des conditions d'association Quelles sont les commandes qui ne spécifient pas le produit PA60 = qui ne sont pas associées à un détail spécifiant PA60. select NCOM, DATECOM, NCLI from COMMANDE where NCOM not in (select NCOM from DETAIL where NPRO = 'PA60'); ensemble des numéros des commandes de PA60 select NCOM, DATECOM, NCLI from COMMANDE where NCOM in (select NCOM from DETAIL where NPRO <> 'PA60'); que signifie cette requête ? II. Utilisation des bases de données
2.6 Les sous-requêtes - Références multiples 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Références multiples Références multiples à une même table Sous-requêtes corrélées select NCLI, NOM, LOCALITE, COMPTE from CLIENT as C where COMPTE > (select avg(COMPTE) from CLIENT where LOCALITE = C.LOCALITE); un alias de table "C" est C est une variable qui à chaque instant référence la ligne courante de CLIENT dans la requête externe (on suppose qu'on examine successivement les lignes de CLIENT) II. Utilisation des bases de données
2.6 Les sous-requêtes - Références multiples 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.6 Les sous-requêtes - Références multiples Condition d'association quantifiée : recherche des commandes d'au moins 3 détails select NCOM, DATECOM, NCLI from COMMANDE C where (select count(*) from DETAIL where NCOM = C.NCOM) >= 3; II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - exists, not exists 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - exists, not exists exists et not exists le prédicat exists(E), où E est une sous-requête, est vrai si l'ensemble désigné par E est non vide select NPRO, LIBELLE from PRODUIT as P where exists (select * from DETAIL where NPRO = P.NPRO); quels sont les produits pour lesquels il existe au moins un détail ? le prédicat not exists(E), est vrai si l'ensemble désigné par E est vide II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - all, any 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - all, any all et any quelles sont les commandes qui spécifient la plus petite quantité de PA60 ? select distinct NCOM from DETAIL where QCOM <= all (select QCOM where NPRO = 'PA60') and NPRO = 'PA60'; select distinct NCOM from DETAIL where QCOM = (select min(QCOM) where NPRO = 'PA60') and NPRO = 'PA60'; variante "distinct" est-il utile ? II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - all, any 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - all, any all et any quels sont les commandes qui ne spécifient pas la plus petite quantité de PA60 ? select * from DETAIL where QCOM > any (select QCOM where NPRO = 'PA60') and NPRO = ’PA60’; select distinct NCOM from DETAIL where QCOM > (select min(QCOM) where NPRO = 'PA60') and NPRO = 'PA60'; variante II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - Sous-requête 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - Sous-requête Deux expressions d'une condition d'association select * from CLIENT where NCLI in (select NCLI from COMMANDE where DATECOM = '12-09-2009'); plus concise select * from CLIENT C where exists (select * from COMMANDE M where M.NCLI = C.NCLI and DATECOM = '12-09-2009'); plus générale II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - pour tout 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - pour tout Curieusement, SQL ne permet pas d'exprimer directement le quantificateur pour tout la logique nous apprend que : (" x, p(x)) ($ x, p(x)) Application : quelles sont les commandes qui spécifient tous les produits ? la COMMANDE M est retenue si, il n'existe pas de PRODUIT P, tel que P n'est pas dans l'ensemble des PRODUITs commandés par M select NCOM from COMMANDE M where not exists (select * from PRODUIT P P.NPRO not in (select NPRO from DETAIL where NCOM = M.NCOM)); II. Utilisation des bases de données
2.7 Les quantificateurs ensemblistes - pour tout 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées 2.7 Les quantificateurs ensemblistes - pour tout Pour terminer, un défi pour les experts : que signifie la requête suivante ? select NCOM from DETAIL group by NCOM having count(distinct NPRO) = (select count(*) from PRODUIT); pour les autres, lire d'abord le chapitre suivant II. Utilisation des bases de données
Fin du module 2 Module suivant : 3. Le langage SQL DML (2) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 2.1 Introduction 2.5 Les fonctions agrégatives 2.2 Extraction simple 2.6 Les sous-requêtes 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes 2.4 Données extraites et dérivées Fin du module 2 Module suivant : 3. Le langage SQL DML (2) II. Utilisation des bases de données