3. LE LANGAGE SQL DML (2) 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é 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3. LE LANGAGE SQL DML (2) Version 2 - Janvier 2012 Support du chapitre 8, Le langage SQL DML (2) de l'ouvrage Bases de données, J-L Hainaut, Dunod 2009. II. Utilisation des bases de données
3. LE LANGAGE SQL DML (2) 3.1 Les jointures 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3. LE LANGAGE SQL DML (2) 3.1 Les jointures 3.2 Opérateurs ensemblistes 3.3 Structures cycliques 3.4 Données groupées 3.5 Ordre et interprétation 3.6 Modification des données 3.7 Modification des structures Contenu II. Utilisation des bases de données
3.1 Les jointures 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures 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é 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures La jointure permet de produire une table constituée de données extraites de plusieurs tables : colonne commune NCOM DATECOM NCLI NOM LOCALITE 30178 30179 30182 30184 30185 30186 30188 21/12/2008 22/12/2008 23/12/2008 2/01/2009 3/01/2009 K111 C400 S127 F011 B512 VANBIST FERARD VANDERKA PONCELET GILLET Lille Poitiers Namur Toulouse table COMMANDE table CLIENT select NCOM, DATECOM, CLIENT.NCLI, NOM, LOCALITE from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI; II. Utilisation des bases de données
3.1 Les jointures - Structure d'une requête de jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Structure d'une requête de jointure NCOM DATECOM NCLI NOM LOCALITE 30178 30179 30182 30184 30185 30186 30188 21/12/2008 22/12/2008 23/12/2008 2/01/2009 3/01/2009 K111 C400 S127 F011 B512 VANBIST FERARD VANDERKA PONCELET GILLET Lille Poitiers Namur Toulouse préfixe nécessaire car ambiguité select NCOM , DATECOM, CLIENT.NCLI, NOM, LOCALITE from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI plusieurs tables condition de jointure II. Utilisation des bases de données
conditions de sélection 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Variantes select CLIENT.NCLI, NOM, DATECOM, NPRO from CLIENT, COMMANDE, DETAIL where CLIENT.NCLI = COMMANDE.NCLI and COMMANDE.NCOM = DETAIL.NCOM; jointure de 3 tables select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI and CAT = 'C1' and DATECOM < '23-12-2009'; condition de jointure + conditions de sélection II. Utilisation des bases de données
3.1 Les jointures - Produit relationnel 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Produit relationnel select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE from COMMANDE, CLIENT; pas de condition de jointure ! Produit relationnel : chaque ligne de COMMANDE est couplée avec chaque ligne de CLIENT requête valide mais d'utilité réduite II. Utilisation des bases de données
3.1 Les jointures - Notion de ligne célibataire 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Notion de ligne célibataire La requête : select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI; . . . ignore les lignes de CLIENT qui n'ont pas de lignes correspondantes dans COMMANDE Ces lignes de CLIENT sont dites célibataires : select '--', NCLI, '--', NOM, LOCALITE from CLIENT where not exists (select * from COMMANDE where NCLI = CLIENT.NCLI); II. Utilisation des bases de données
= 3.1 Les jointures - Sous-requêtes ou jointures ? 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Sous-requêtes ou jointures ? Peut-on remplacer une sous-requête par une jointure ? select NCOM,DATECOM from COMMANDE where NCLI in (select NCLI from CLIENT where LOCALITE = 'Poitiers'); = select NCOM,DATECOM from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI and LOCALITE = 'Poitiers'; II. Utilisation des bases de données
3.1 Les jointures - Sous-requêtes ou jointures ? Mais ... 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Sous-requêtes ou jointures ? Mais ... select NCOM, DATECOM, NCLI from COMMANDE where NCOM not in ( select NCOM from DETAIL where NPRO = 'PA60'); select distinct COMMANDE.NCOM, DATECOM, NCLI from COMMANDE, DETAIL where COMMANDE.NCOM = DETAIL.NCOM and NPRO <> 'PA60'; select distinct COMMANDE.NCOM, DATECOM, NCLI from COMMANDE, DETAIL where COMMANDE.NCOM <> DETAIL.NCOM and NPRO = 'PA60'; II. Utilisation des bases de données
3.1 Les jointures - Sous-requêtes ou jointures ? 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Sous-requêtes ou jointures ? La sous-requête permet de formuler une condition d'association (in) une condition de non-association (not in) La jointure permet de formuler une condition d'association II. Utilisation des bases de données
3.1 Les jointures - Valeurs dérivées dans une jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Valeurs dérivées dans une jointure select NCOM, D.NPRO, QCOM*PRIX from DETAIL D, PRODUIT P where D.NPRO = P.NPRO; select 'Montant commande 30184 = ', sum(QCOM*PRIX) from DETAIL D, PRODUIT P where D.NCOM = '30184' and D.NPRO = P.NPRO; II. Utilisation des bases de données
3.1 Les jointures - Jointures généralisées 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Jointures généralisées pas de clé étrangère ! select distinct PRODUIT,VILLE,PRIX from VENTE V, IMPLANTATION I where V.CHAINE = I.CHAINE; II. Utilisation des bases de données
3.1 Les jointures - Interprétation du résultat d'une jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Interprétation du résultat d'une jointure Une ligne de CLIENT représente un client. Une ligne de COMMANDE représente une commande. select C.NCLI, NOM, LOCALITE from CLIENT C, COMMANDE M where M.NCLI = C.NCLI; un client ? un client qui a passé une commande ? une commande ? Que représente chaque ligne de la jointure CLIENT * COMMANDE : Autre formulation : il y autant de lignes dans le résultat qu’il y a de clients ? de clients qui ont passé des commandes ? de commandes ? II. Utilisation des bases de données
TB 3.1 Les jointures - Interprétation du résultat d'une jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Interprétation du résultat d'une jointure select * from TA, TB where TA.IA = TB.RA; TB Le résultat d'une jointure FK/Id représente les entités de la table de la clé étrangère II. Utilisation des bases de données
3.1 Les jointures - Interprétation du résultat d'une jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.1 Les jointures - Interprétation du résultat d'une jointure select COMMANDE.NCOM,DATECOM,NCLI from COMMANDE,DETAIL where COMMANDE.NCOM = DETAIL.NCOM; select D.NCOM,D.NPRO,LOCALITE,LIBELLE from CLIENT CLI,COMMANDE COM,DETAIL D,PRODUIT P where CLI.NCLI = COM.NCLI and COM.NCOM = D.NCOM and D.NPRO = P.NPRO; II. Utilisation des bases de données
3.2 Opérations ensemblistes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes union () intersection () différence (-) Pas de problèmes pour deux ensembles. Mais qu'en est-il pour deux tables ? II. Utilisation des bases de données
3.2 Opérations ensemblistes - Les ensembles 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes - Les ensembles Opérateurs ensemblistes entre 2 tables sans doublons T1 T2 GILLET AVRON MERCIER PONCELET NEUMAN MONTI JACOB T1 T2 NOM NOM GILLET AVRON MERCIER PONCELET NEUMAN MONTI NEUMAN JACOB MERCIER AVRON select NOM from T1 union from T2 NOM GILLET AVRON MERCIER PONCELET NEUMAN MONTI JACOB select NOM from T1 intersect from T2 NOM AVRON MERCIER NEUMAN select NOM from T1 except from T2 NOM GILLET PONCELET II. Utilisation des bases de données
3.2 Opérations ensemblistes - Les multi-ensembles 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes - Les multi-ensembles Opérateurs ensemblistes entre 2 tables avec doublons T1 T2 T1 T2 NUM NUM 34 34 12 93 12 34 27 93 12 34 49 12 12 27 12 12 49 select NUM from T1 union from T2 select NUM from T1 intersect from T2 NUM 34 12 select NUM from T1 except from T2 NUM 27 select NUM from T2 except from T1 NUM 93 49 NUM 12 34 27 93 49 II. Utilisation des bases de données
3.2 Opérations ensemblistes - Les multi-ensembles 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes - Les multi-ensembles Opérateurs multi-ensemblistes entre 2 tables avec doublons T1 T2 T1 T2 NUM NUM 34 34 12 93 12 34 27 93 12 34 49 12 12 27 12 12 49 select NUM from T1 union all from T2 select NUM from T1 intersect all from T2 select NUM from T1 except all from T2 select NUM from T2 except all from T1 NUM NUM NUM NUM 12 34 27 93 49 34 12 12 27 93 49 II. Utilisation des bases de données
3.2 Opérations ensemblistes - Expressions complexes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes - Expressions complexes Les opérateurs peuvent être combinés (ex. différence symétrique) T1 T2 T1 T2 NOM NOM AVRON GILLET JACOB GILLET AVRON MERCIER PONCELET NEUMAN MONTI NEUMAN JACOB MERCIER AVRON MERCIER PONCELET NEUMAN MONTI (select NOM from T1 except select NOM from T2) union from T2 from T1) NOM GILLET PONCELET JACOB MONTI II. Utilisation des bases de données
3.2 Opérations ensemblistes - Jointure externe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.2 Opérations ensemblistes - Jointure externe Exemple pratique : la jointure externe select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE from COMMANDE, CLIENT where COMMANDE.NCLI = CLIENT.NCLI union select null as NCOM, NCLI, null as DATECOM, NOM, LOCALITE from CLIENT where not exists (select * from COMMANDE where NCLI = CLIENT.NCLI); En SQL3, il existe un opérateur spécifique (left | right outer join) II. Utilisation des bases de données
3.3 Les structures cycliques 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques Une table peut-elle se référencer elle-même ? Comment utiliser une telle table ? II. Utilisation des bases de données
3.3 Les structures cycliques - Structure directe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure directe p1 p2 p8 p3 p4 p5 p6 p7 create table PERSONNE ( NPERS char (4) not null, NOM char(25) not null, RESPONSABLE char (4), primary key (NPERS), foreign key (RESPONSABLE) references PERSONNE); II. Utilisation des bases de données
3.3 Les structures cycliques - Structure directe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure directe Associer à chaque subordonné le numéro et le nom de son responsable : select S.NPERS, R.NPERS, R.NOM from PERSONNE S, PERSONNE R where S.RESPONSABLE = R.NPERS; select S.NPERS, R.NPERS, R.NOM from PERSONNE S, PERSONNE R where S.RESPONSABLE = R.NPERS and S.NOM = 'Dupont' union select NPERS, '--', '--' from PERSONNE where RESPONSABLE is null and NOM = 'Dupont'; Associer à chaque personne de nom 'Dupont' le numéro et le nom de son responsable : II. Utilisation des bases de données
3.3 Les structures cycliques - Structure directe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure directe En SQL2, il n'est pas possible de retrouver en une seule requête tous les responsables (ou les subordonnés) directs et indirects d'une personne. En SQL3 : on pourra utiliser une requête récursive. II. Utilisation des bases de données
3.3 Les structures cycliques - Structure indirecte 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure indirecte II. Utilisation des bases de données
3.3 Les structures cycliques - Structure indirecte 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure indirecte create table PRODUIT ( NPRO char(4) not null primary key, LIBELLE char(25) not null, PRIX_U char(4), POIDS_U char(4)); create table COMPOSITION ( COMPOSE char(4) not null references PRODUIT, COMPOSANT char(4) not null references PRODUIT, QTE decimal(4) not null, primary key (COMPOSE,COMPOSANT)); II. Utilisation des bases de données
3.3 Les structures cycliques - Structure indirecte 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure indirecte table PRODUIT P1 P4 P2 P3 P7 8 P9 P8 5 P10 P12 1.7 P11 0.5 P6 3.5 P5 2 1 4 7 3 PRIX_U table COMPOSITION Structure typique d'une nomenclature de produits ou Bill of material (BoM) II. Utilisation des bases de données
3.3 Les structures cycliques - Structure indirecte 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.3 Les structures cycliques - Structure indirecte Donner la composition du produit 'p4' select H.NPRO,H.LIBELLE,C.QTE,B.NPRO,B.LIBELLE from PRODUIT H, COMPOSITION C, PRODUIT B where C.COMPOSE = H.NPRO and C.COMPOSANT = B.NPRO and H.NPRO = 'p4'; H.NPRO H.LIBELLE C.QTE B.NPRO B.LIBELLE p4 4 5 B-122 p8 p9 p10 G-993 F-016 J-500 PRODUIT composé (Haut) PRODUIT composant (Bas) II. Utilisation des bases de données
3.4 Les données groupées 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées II. Utilisation des bases de données
3.4 Les données groupées - Principe 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Principe le groupe des clients de Namur le groupe des clients de Poitiers le groupe des clients de Genève II. Utilisation des bases de données
On s'intéresse aux localités et non plus aux clients 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Principe select LOCALITE, count(*) as NOMBRE_CLIENTS, avg(COMPTE) as MOYENNE_COMPTE from CLIENT group by LOCALITE; LOCALITE NOMBRE_CLIENTS MOYENNE_COMPTE Bruxelles Geneve Lille Namur Paris Poitiers Toulouse 1 4 3 5 0.00 720.00 -2520.00 533.33 -2530.00 le groupe des clients de Namur le groupe des clients de Poitiers le groupe des clients de Genève On s'intéresse aux localités et non plus aux clients II. Utilisation des bases de données
3.4 Les données groupées - Sélection de groupes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Sélection de groupes select LOCALITE, count(*), avg(COMPTE) from CLIENT group by LOCALITE having count(*) >= 3; LOCALITE count(*) avg(COMPTE) Namur Poitiers Toulouse 4 3 5 -2520.00 533.33 -2530.00 select NCLI, count(*) from COMMANDE group by NCLI having count(*) >= 2; II. Utilisation des bases de données
3.4 Les données groupées - Sélection de lignes et de groupes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Sélection de lignes et de groupes select NCLI, count(*) from COMMANDE where NCOM in ( select NCOM from DETAIL where NPRO = 'PA45') group by NCLI having count(*) >= 2; sélection des lignes sélection des groupes II. Utilisation des bases de données
3.4 Les données groupées - Groupes dans une jointure 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Groupes dans une jointure select M.NCLI, count(*), sum(QCOM) from COMMANDE M, DETAIL D where M.NCOM = D.NCOM and NPRO = 'PA45' group by M.NCLI having count(*) >= 2; select 'Montant dû par ',C.NCLI,' = ',sum(QCOM*PRIX) from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P where LOCALITE = 'Poitiers' and M.NCLI = C.NCLI and M.NCOM = D.NCOM and D.NPRO = P.NPRO group by M.NCLI; II. Utilisation des bases de données
[*] sauf en MySQL, mais il n'y a pas de quoi en être fier ! 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Liste select et critère de groupement [*] select P.NPRO, QSTOCK - sum(D.QCOM) as SOLDE from DETAIL D, PRODUIT P where D.NPRO = P.NPRO group by P.NPRO; requête invalide ! select P.NPRO, QSTOCK - sum(D.QCOM) as SOLDE from DETAIL D, PRODUIT P where D.NPRO = P.NPRO group by P.NPRO, QSTOCK; NPRO SOLDE CS262 CS464 PA45 PA60 PH222 PS222 -15 -135 535 -1 690 620 [*] sauf en MySQL, mais il n'y a pas de quoi en être fier ! II. Utilisation des bases de données
3.4 Les données groupées - Composition du critère de groupement 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Composition du critère de groupement select LOCALITE,P.NPRO,sum(QCOM*PRIX) as Montant from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P where M.NCLI = C.NCLI and M.NCOM = D.NCOM and D.NPRO = P.NPRO group by LOCALITE, P.NPRO; 2 colonnes CAT N null B C 2 8 6 select substring(CAT from 1 for 1) as CAT, count(*) as N from CLIENT group by substring(CAT from 1 for 1); expression II. Utilisation des bases de données
3.4 Les données groupées - Composition du critère de groupement 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Composition du critère de groupement select "de ", int(COMPTE/1000)*1000 as Min, " à ", int(COMPTE/1000)*1000 + 999 as Max, count(*) as N from CLIENT C group by int(COMPTE/1000); expression de Min à Max N de à -9000 -5000 -4000 -3000 -2000 1000 -8001 -4001 -3001 -2001 -1001 999 1999 1 2 9 II. Utilisation des bases de données
En SQL2, impossible en une seule requête 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.4 Les données groupées - Groupements multiniveaux select LOCALITE, sum(COMPTE), count(*) from CLIENT C, COMMANDE M where C.NCLI = M.NCLI group by LOCALITE; LOCALITE sum(COMPTE) count(*) Lille Namur Poitiers Toulouse 720.00 -4580.00 1050.00 -8700.00 1 3 2 FAUX (=350) LOCALITE sum(COMPTE) count(*) Lille Namur Poitiers Toulouse 720.00 -4580.00 1050.00 -8700.00 1 3 2 En SQL2, impossible en une seule requête II. Utilisation des bases de données
3.5 Ordre et interprétation 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.5 Ordre et interprétation II. Utilisation des bases de données
3.5 Ordre et interprétation - Ordre des lignes du résultat 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.5 Ordre et interprétation - Ordre des lignes du résultat select NCLI, NOM, LOCALITE from CLIENT where CAT in ('C1','C2') order by LOCALITE; ordonné par LOCALITE select * from CLIENT order by LOCALITE, CAT; ordonné par LOCALITE puis par CAT select LOCALITE, count(*) as POPULATION, sum(COMPTE) from CLIENT group by LOCALITE order by POPULATION desc; ordonné par une expression du select select NCOM, NPRO, QCOM from DETAIL D, PRODUIT P where D.NPRO = P.NPRO order by NCOM, QCOM*PRIX desc; ordonné par une expression explicite II. Utilisation des bases de données
3.5 Ordre et interprétation - Comment lire (écrire) une requête ? 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.5 Ordre et interprétation - Comment lire (écrire) une requête ? 7 : select NCLI, count(*), sum(QCOM) 1 : from COMMANDE M, DETAIL D 2 : where M.NCOM = D.NCOM 3 : and NPRO = 'PA60' 4 : group by NCLI 5 : having count(*) >= 2 6 : order by NCLI II. Utilisation des bases de données
3.6 Modification des données 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données Trois opérateurs : Insérer des lignes Supprimer des lignes Modifier des lignes II. Utilisation des bases de données
Insérer plusieurs lignes (dans une table) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Insertion de lignes Insérer une ligne insert into DETAIL values ('30185','PA45',12); insert into CLIENT (NCLI,NOM,ADRESSE,COMPTE,LOCALITE) values ('C402','BERNIER','avenue de France, 28',-2500,'Lausanne'); colonnes facultatives, valeurs par défaut Insérer plusieurs lignes (dans une table) insert into CLIENT_TOULOUSE select NCLI, NOM, ADRESSE from CLIENT where LOCALITE = 'Toulouse'; II. Utilisation des bases de données
3.6 Modification des données - Suppression de lignes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Suppression de lignes delete from CLIENT where NCLI = 'K111'; delete from DETAIL where NPRO in (select NPRO from PRODUIT where QSTOCK <= 0); delete from CLIENT where CAT is null; II. Utilisation des bases de données
3.6 Modification des données - Modification de lignes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Modification de lignes update CLIENT set ADRESSE = '29, av. de la Magne', LOCALITE = 'Niort' where NCLI = 'F011'; update PRODUIT set PRIX = PRIX * 1.05 where LIBELLE like '%SAPIN%'; II. Utilisation des bases de données
! 3.6 Modification des données - Modification de lignes 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Modification de lignes update PRODUIT P set QSTOCK = QSTOCK - (select sum(QCOM) from DETAIL where NPRO = P.NPRO); prévoir une TRES bonne assurance ! ! update PRODUIT P set QSTOCK = QSTOCK - (select sum(QCOM) from DETAIL where NPRO = P.NPRO) where exists (select * from DETAIL where NPRO = P.NPRO); En réalité, le problème sera autre : la modification échouera par violation de la contrainte not null associée à QSTOCK. L’intégrité des données ne sera pas vraiment mise en danger ! II. Utilisation des bases de données
Rappel 3.6 Modification des données - Intégrité référentielle 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Intégrité référentielle Rappel {NCLI} clé étrangère de COMMANDE vers CLIENT insérer une ligne de COMMANDE la valeur de NCLI doit être présente dans la colonne NCLI d'une ligne de CLIENT modifier valeur de NCLI de COMMANDE la nouvelle valeur de NCLI doit être présente dans la colonne NCLI d'une ligne de CLIENT supprimer une ligne de CLIENT l'intégrité référentielle doit être satisfaite après l'opération plusieurs comportements possibles modifier valeur de NCLI de CLIENT l'intégrité référentielle doit être satisfaite après l'opération plusieurs comportements possibles II. Utilisation des bases de données
{NCLI} clé étrangère de COMMANDE vers CLIENT 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Intégrité référentielle Rappel Comportement {NCLI} clé étrangère de COMMANDE vers CLIENT supprimer une ligne de CLIENT 1. mode no action opération refusée si lignes de COMMANDE dépendantes 2. mode cascade ligne supprimée mais aussi les lignes de COMMANDE dépendantes 3. mode set null (si NCLI de COMMANDE facultative) la colonne NCLI des lignes dépendantes de COMMANDE est mise à null 4. mode set default (si default pour NCLI de COMMANDE) la colonne NCLI des lignes dépendantes de COMMANDE est mises à la valeur par défaut II. Utilisation des bases de données
3.6 Modification des données - Intégrité référentielle 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Intégrité référentielle Mode bloquant (no action) create table COMMANDE ( NCOM char(12) not null, NCLI char(10) not null, ..., primary key (NCOM), foreign key (NCLI) references CLIENT on delete no action); create table COMMANDE ( NCOM char(12) not null, NCLI char(10) not null, ..., primary key (NCOM), foreign key (NCLI) references CLIENT on update no action); II. Utilisation des bases de données
3.6 Modification des données - Intégrité référentielle 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Intégrité référentielle Mode propagation (cascade) create table COMMANDE ( NCOM char(12) not null, NCLI char(10) not null, ..., primary key (NCOM), foreign key (NCLI) references CLIENT on delete cascade); create table COMMANDE ( NCOM char(12) not null, NCLI char(10) not null, ..., primary key (NCOM), foreign key (NCLI) references CLIENT on update cascade); II. Utilisation des bases de données
3.6 Modification des données - Intégrité référentielle 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Intégrité référentielle Mode découplage (set null, set default) create table COMMANDE ( NCOM char(12) not null, NCLI char(10), ..., primary key (NCOM), foreign key (NCLI) references CLIENT on delete set null); NCLI facultative create table COMMANDE ( NCOM char(12) not null, NCLI char(10), ..., primary key (NCOM), foreign key (NCLI) references CLIENT on update set null); NCLI facultative 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é 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.6 Modification des données - Attention aux hiérarchies de clés étrangères create table CLIENT ( NCLI char(10) not null, primary key (NCLI) ); create table COMMANDE ( NCOM char(12) not null, NCLI char(10) not null, primary key (NCOM), foreign key (NCLI) references CLIENT on delete cascade); create table DETAIL ( NCOM char(12) not null, NPRO char(15) not null, foreign key (NCOM) references COMMANDE on delete no action); N'y a-t-il pas contradiction ? II. Utilisation des bases de données
3.7 Modification des structures 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é 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.7 Modification des structures de données Si la base de données n'est pas vide, la modification des structures peut être soumise à des contraintes. II. Utilisation des bases de données
3.7 Modification des structures 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é 3.1 Jointures 3.5 Ordre et interprétation 3.2 Opérateurs ensemblistes 3.6 Modification des données 3.3 Structures cycliques 3.7 Modification des structures 3.4 Données groupées 3.7 Modification des structures de données Ajout d'une colonne : si facultative : OK si default : OK sinon : la table doit être vide Suppression d'une colonne : si pas composant d'un identifiant : OK si pas composant d'une clé étrangère : OK sinon : d'abord supprimer l'identifiant ou clé étrangère Suppression d'une table : si pas cible d'une clé étrangère : OK sinon : d'abord supprimer la clé étrangère Ajout d'un identifiant : si table vide : OK sinon : d'abord vérifier l'unicité des données Ajout d'un clé étrangère : si table vide : OK sinon : d'abord vérifier l'intégrité référentielle des données II. Utilisation des bases de données
Fin du module 3 Module suivant : 4. Le langage SQL avancé 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé Fin du module 3 Module suivant : 4. Le langage SQL avancé II. Utilisation des bases de données
II. Utilisation des bases de données