SQL86 (standard ANSI en 86 puis ISO en 87) : la base puis SQL89 ou SQL1 : lʼintégrité:

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

1 Introduction. 2 Le modèle relationnel. 3 Algèbre relationnelle 4 SQL. 5 Organisation physique des données 1/228

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

Le Langage SQL version Oracle

Le langage SQL Rappels

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

Les bases de données

Langage SQL : créer et interroger une base

Optimisation SQL. Quelques règles de bases

1 Introduction et installation

16H Cours / 18H TD / 20H TP

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

SQL Historique

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

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

Bases de données relationnelles

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

Vincent Augusto

Systèmes de Gestion de Bases de Données

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Intégrité des données

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

Introduction aux Bases de Données 2004/2005

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

MySQL / SQL EXEMPLES

Cours 4 : Agrégats et GROUP BY

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

Intégrité sémantique dans les bases de données relationnelles

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Cours SGBD 1. Concepts et langages des Bases de Données Relationnelles

INTRODUCTION AU DATA MINING

Entrepôt de données : Extensions du langage SQL (SQL-3/SQL-99) pour lʼolap (7.1)

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

LE LANGAGE SQL2 1. INTRODUCTION

FileMaker 13. Guide de référence SQL

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

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Le Langage De Description De Données(LDD)

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

TP Contraintes - Triggers

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

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

Bases de données avancées Introduction

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

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

MODE OPERATOIRE OPENOFFICE BASE

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

Olivier Mondet

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

Corrigés détaillés des exercices

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Structured Query Language

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Comprendre les bases de données

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

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

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

Partie II Cours 3 (suite) : Sécurité de bases de données

CREATION WEB DYNAMIQUE

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

SUPPORT SQL. Thierry GRANDADAM

Bases de données et sites WEB

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

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

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

Compétences Business Objects

Chapitre Introduction : Notion de Bases de données. 2. Définition : BD Répartie. 3. Architecture des SGBD. 4. Conception des bases réparties

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

TP3 : Creation de tables 1 seance

Les bases fondamentales du langage Transact SQL

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

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

Support de cours «SGBD»

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

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

Interpréteur d algèbre relationnelle

BTS/CGO P10 SYSTEME INFORMATION Année

Bases de données. Mihaela Mathieu

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

1 Modélisation d une base de données pour une société de bourse

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

Cours Bases de données 2ème année IUT

Chapitre 11 Bases de données

OpenPaaS Le réseau social d'entreprise

Cours Bases de données 2ème année IUT

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

Mysql avec EasyPhp. 1 er mars 2006

Année Universitaire 2009/2010 Session 2 de Printemps

Transcription:

4 Introduction au langage SQL (2) : requêtes Requêtes mono-tables Requêtes multi-tables Bernard ESPINASSE Professeur à Aix-Marseille Université (AMU) Ecole Polytechnique Universitaire de Marseille (PEIP1) Novembre 2013 Imbrication de requêtes : simples, ANY, ALL, EXIST, Fonctions de calcul : COUNT, AVG, SUM, MAX, MIN, 1- Introduction 2- Requêtes mono-tables 3- Requêtes multi-tables 4- Imbrication de requêtes : simples, ANY, ALL, EXIST, 5- Fonctions de calcul : COUNT, AVG, SUM, MAX, MIN, Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 1 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 2 1 Introduction Origine : SQL (Structured Query Language) est un langage de requêtes standard pour les SGBD relationnels 3 niveaux de normes : SQL86 (standard ANSI en 86 puis ISO en 87) : la base puis SQL89 ou SQL1 : lʼintégrité: SQL91 ou SQL2 : on se situe ici dans le cadre de ce cours SQL3 (98) : SQL devient un langage de programmation et évolue vers lʼobjet Dans la séance 3, nous avons vu : - la commande CREATE TABLE permettant de créer les tables de la base de données en langage SQL, - les commandes INSERT permettant dʼinsérer et DELETE de supprimer des tuples (enregistrements) dans une base de données créée. Dans cette séance 4, nous verrons dʼautres commandes du langage SQL (SELECT, UPDATE) permettant dʼexploiter la base de données remplie dʼenregistrements en consultation et en mise à jour. Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 3 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 4

Structure de base d'une expression SQL «SELECT» comporte 3 clauses : SELECT <liste des attributs à garder> : désigne la liste des attributs des tables désirés (à afficher) FROM <liste des tables arguments> : liste des tables à considérer COMMANDES (CNUM, CNOM, PNOM, QUANTITE) : PNOM = clé étrangère vers PRODUIT CNUM : N commande ;CNOM : nom client ; PNOM : Nom du produit ; QUANTITE : quantité commandée ; PRODUIT (PNOM, PRIXV) PNOM : nom produit ; PRIXV : prix vente produit FOURNISSEUR (FNOM, FNOM, STATUT, VILLE) FNOM : nom fournisseur ; STATUT : statut fournisseur ; VILLE : ville fournisseur, FOURNITURE (PNOM, FNOM, PRIXA) : PNOM et FNOM = clés étrangères vers PRODUIT et FOURNISSEUR PNUM : N produit ; FNUM : N fournisseur; PRIXA: prix dʼachat; WHERE <conditions sur un ou plusieurs attributs> : condition à vérifier sur des attributs de tables de la clause FROM DEPT(DEPNO, DNOM, LOC) DEPTNO : N département ; DNOM : nom département ; LOC: localisation EMPLOYE(EMPNO, ENOM, DEPTNO, SAL) : DEPNO = clé étrangère vers DEPT EMPNO : N employé ; ENOM : nom employé ; DEPTNO : N département ; SAL : Salaire ; Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 5 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 6 2 Requêtes monotables Sélection Sélection avec condition : =, <, >, <>, Sélection avec condition : BETWEEN, LIKE Sélection avec condition : IS NULL, IS NOT NULL, IN, NOT IN Soit le schéma de table COMMANDES(NUM,CNOM,PNOM,QUANTITE)! Requête: Informations sur toutes les commandes (Num, Cnom, Pnom, Quantité) SQL: SELECT NUM,CNOM,PNOM,QUANTITE ou SELECT *! Requête: Produits commandés Remarque : SQL nʼélimine pas les doublons. Pour les éliminer on utilise DISTINCT : SELECT DISTINCT PNOM Le DISTINCT peut être remplacé par la clause UNIQUE dans certains systèmes Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 7 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 8

Ex1 : CLIENT nocli nom ville 121 BERTRAND PARIS 256 PAGNOL MARSEILLE 542 LANDRY QUEBEC 652 DUPOND PARIS Sélection des clients où ville = PARIS : SELECT * FROM CLIENT WHERE ville = Paris ; CLIENT-1 nocli nom ville 121 BERTRAND PARIS 652 DUPOND PARIS Ex2 : LIGNE_DE_COMMANDE nocommande noarticle date quantité 10 121 A 5/5 10 10 253 Z 5/5 1 10 712 H 5/5 3 12 253 Z 5/5 5 13 712 H 6/5 2 Sélection avec projection : lignes de commandes en date du 05/05: SELECT noarticle, date FROM LIGNE WHERE date=5/5; LIGNE noarticle date 121 A 5/5 253 Z 5/5 712 H 5/5 Conditions de sélection : =, <, >, <>, Table COMMANDES (NUM, CNOM, PNOM, QUANTITE)! Requête: Produits commandés par Paul WHERE CNOM = PAUL! Requête: Produits de prix supérieur à 2000 WHERE PRIXA > 2000! Requête: Produits dont le nom est celui du fournisseur WHERE PNOM = FNOM Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 9 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 10 Conditions de sélection : BETWEEN, LIKE! Requête: Produits avec un coût entre 1000 et 2000 WHERE PRIXA BETWEEN 1000 AND 2000 Remarque: La condition y BETWEEN x AND z est équivalente à y <= z AND x <= y Table COMMANDES (CNUM, CNOM, PNOM, QUANTITE)! Requête: Clients dont le nom commence par "C" SELECT CNOM WHERE CNOM LIKE C% Remarque: le littéral qui suit LIKE, doit être une chaîne de caractères éventuellement avec des caractères jokers (_, %). Conditions de sélection : IS NULL, IS NOT NULL, IN, NOT IN Table FOURNISSEUR (FNOM, STATUT, VILLE)! Requête: Fournisseurs dont lʼadresse est inconnu. FROM FOURNISSEUR WHERE VILLE IS NULL! Requête: Produits avec un coût de 100, de 200 ou de 300 WHERE PRIXA IN {100,200,300} Remarque : La condition x IN {a, b,, z} est équivalente à a OR x = b OR OR x = z. Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 11 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 12

3 Requêtes multi-tables Jointures Union Intersection Différence Le produit cartésien de 2 tables R et S est une table T ayant pour attributs la concaténation de ceux de R et S et dont les enregistrements (tuples) sont toutes les concaténations d'un tuple de R à un tuple de S : Ex : VINS (num, cru, millésime, degré) ; VITICULTEURS (nom, ville, PNOM, QUANTITE) ; VINS num cru millésime degré 110 corbière 1974 13 120 macon 1976 14 VITICULTEURS nom ville région nicolas poully bougogne martin bordeaux bordelais Produit cartésien VINVIT = VINS X VITICULTEURS VINVIT num cru millésime degré nom ville région 110 corbière 1974 13 nicolas poully bougogne 120 macon 1976 14 martin bordeaux bordelais 110 corbière 1974 13 martin bordeaux bordelais 120 macon 1976 14 nicolas poully bougogne Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 13 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 14 La jointure de 2 tables R et S est une table T obtenue à partir du produit cartésien des 2 tables R et S dans lequel on ne garde que les tuples qui respectent une condition définie Ex (équi-jointure) : VINS (num, cru, millésime, degré) ; VITICULTEURS (nom, ville, PNOM, QUANTITE) ; VINS nun cru millésime degré 120 bordeaux 1975 14 200 macon 1978 12 210 macon 1977 12 VITICULTEUR nom ville région nicolas bordeaux bordelais bernard saumur loire pierre macon bourgogne Jointure VINVITI = VINS VITICULTEUR avec condition «cru = ville» : VINVITI n cru millésime degré nom ville région 120 bordeaux 1975 14 nicolas bordeaux bordelais 200 macon 1978 12 pierre macon bourgogne 210 macon 1977 12 pierre macon bourgogne Soit les tables : COMMANDES (NUM, CNOM, PNOM, QUANTITE) FOURNITURE (PNOM, FNOM, PRIXA)! Requête: Nom, Prix dʼachat, Fournisseur des Produits commandés par Paul : En SQL de base : SELECT COMMANDES.PNOM, PRIXA, FNOM, FOURNITURE WHERE COMMANDES.PNOM = FOURNITURE.PNOM AND CNOM = PAUL En SQL2 : SELECT COMMANDES.PNOM, PRIXA, FNOM INNER JOINT FOURNITURE ON COMMANDES.PNOM = FOURNITURE.PNOM WHERE CNOM = PAUL Remarques : INNER est facultatif dans la plupart des SGBDR Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 15 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 16

Soit les tables : VINS n cru millés. deg. 120 bordeaux 1975 14 200 macon 1978 12 210 macon 1977 12 VITICULTEUR nom ville région nicolas bordeaux bordelais bernard saumur loire pierre macon bourgogne SELECT * FROM VINS INNER JOINT VITICULTEUR ON VINS.cru = VITICULTEUR.ville ; VINVITI n cru millés. deg. nom ville région 120 bordeaux 1975 14 nicolas bordeaux bordelais 200 macon 1978 12 pierre macon bourgogne 210 macon 1977 12 pierre macon bourgogne Tables : COMMANDES (CNUM, CNOM, PNOM, QUANTITE) FOURNITURE (PNOM, FNOM, PRIXA)! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul En SQL de base : SELECT COMMANDES.PNOM, PRIXA, FNOM, FOURNITURE WHERE CNOM = PAUL AND COMMANDES.PNOM = FOURNITURE.PNOM On a une jointure naturelle car les attributs de jointure ont le même nom En SQL2 : SELECT COMMANDES.PNOM, PRIXA, FNOM NATURAL JOINT FOURNITURE WHERE CNOM = PAUL Remarque : Il est possible de restreindre ou préciser le ou les attributs de jointure avec USING PNOM Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 17 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 18 Soit les tables : CLIENT nocli nom COMMANDE nocde nocli date 121 DUVAL 10 121 5/5 253 LEROY 11 260 5/5 260 LANDRY 12 121 5/5 293 SANCHEZ 15 253 6/5 Jointure naturelle de CLIENT et COMMANDE (nocli de CLIENT = nocli de COMMANDE) : SELECT * FROM CLIENT NATURAL JOINT COMMANDE ;! Requête: Nom et Salaire des Employés gagnant plus que lʼemployé de numéro 12546 En SQL de base : SELECT E1.ENOM, E1.SAL FROM EMPLOYE E1, EMPLOYE E2 WHERE E2.EMPNO = 12546 AND E1.SAL > E2.SAL CLICDE nocli nom nocde date 121 DUVAL 10 5/5 253 LEROY 15 6/5 121 DUVAL 12 5/5 260 LANDRY 11 5/5 Remarques : E1 et E2 sont 2 instances différentes de EMPLOYE Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 19 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 20

Table COMMANDES (NUM, CNOM, PNOM, QUANTITE) Table DEPARTEMENT (DEPTNO, DNOM, LOC)! Requête: Produits qui coûtent plus que 1000 ou ceux qui sont commandés par Jules WHERE PRIXA >= 1000 UNION WHERE CNOM = Jules Remarque: lʼunion élimine les doublons Pour les garder on utilise lʼopération UNION ALL : le résultat contient chaque tuple a + b fois, où a et b est le nombre dʼoccurrences du tuple dans le 1 et le 2 SELECT.! Requête: Départements sans employés? EXCEPT FROM EMPLOYE Remarque: la différence ne fait pas partie du standard la différence élimine les doublons pour les garder on utilise lʼopération EXCEPT ALL : le résultat contient chaque tuple a - b fois, où a et b est le nombre dʼoccurrences du tuple dans la 1 et le 2 SELECT. Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 21 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 22 Table DEPARTEMENT (DEPTNO, DNOM, LOC)! Requête: Départements ayant des employés gagnant plus que 20000 et se trouvant à Paris? WHERE LOC = Paris INTERSECT FROM EMPLOYE WHERE SAL > 20000 Remarques : lʼintersection ne fait pas partie du standard lʼintersection élimine les doublons pour les garder on utilise lʼopération INTERSECT ALL : le résultat contient chaque n-uplet min(a, b) fois où a et b est le nombre dʼenregistrements dans le 1 et le 2 SELECT 4 Imbrication de requêtes Cas simples ANY ALL EXISTS Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 23 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 24

Table COMMANDES (NUM, CNOM, PNOM, QUANTITE) Table DEPARTEMENT (DEPTNO, DNOM, LOC)! Requête: Nom, prix et fournisseurs des Produits commandés par Paul? SELECT FOURNITURE.PNOM,PRIXA,FNOM,COMMANDES WHERE FOURNITURE.PNOM = COMMANDES.PNOM AND CNOM = PAUL la Jointure peut aussi sʼexprimer par 2 blocs imbriqués :,PRIXA,FNOM WHERE PNOM IN ( WHERE CNOM = PAUL ) la Différence peut aussi sʼexprimer par 2 blocs imbriqués! Requête: Départements sans employés? EXCEPT SELECT DISTINCT DEPTNO FROM EMPLOYE Equivalent à : WHERE DETPNO NOT IN (SELECT DISTINCT DEPTNO FROM EMPLOYE) Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 25 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 26 Table COMMANDES (NUM, CNOM, PNOM, QUANTITE)! Requête: Fournisseurs des Tuiles à un coût inférieur au coût maximum des Ardoises? WHERE PNOM = Tuile AND PRIX < ANY (SELECT PRIX WHERE PNOM = Ardoise ) Remarque: la condition < ANY (SELECT F FROM... ) est vraie ssi la comparaison >v est vraie au moins pour une valeur v du résultat du bloc (SELECT F FROM... ).! Requête: Nom, Coût et Fournisseur des Produits commandés par Paul, PRIX, FNOM WHERE PNOM = ANY ( FROM COMMANDE WHERE CNOM = PAUL ) Remarque: les prédicats IN et = ANY sont utilisés de la même façon. Table COMMANDES (NUM, CNOM, PNOM, QUANTITE)! Requête: Client ayant commandé la plus petite quantité de Tuiles SELECT CNOM FROM COMMANDE WHERE PNOM = Tuile AND QUANTITE <= ALL (SELECT QUANTITE FROM COMMANDE WHERE PNOM = Tuile ) Remarque: la condition <= ALL (SELECT F FROM... ) est vraie ssi la comparaison v est vraie pour toutes les valeurs v du résultat du bloc (SELECT F FROM... ). Table DEPARTEMENT (DEPTNO, DNOM, LOC)! Requête: Départements sans employés WHERE DETPNO NOT = ALL (SELECT DISTINCT DEPTNO FROM EMPLOYE) Remarque: les prédicats NOT IN et NOT = ALL sont utilisés de la même façon. Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 27 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 28

Table FOURNISSEUR (FNOM, STATUS, VILLE)! Requête: Fournisseurs qui fournissent au moins un produit FROM FOURNISSEUR WHERE EXISTS (SELECT * WHERE FNOM = FOURNISSEUR.FNOM) Remarque: la condition EXISTS (SELECT * FROM... ) est vraie ssi le résultat du bloc (SELECT F FROM... ) nʼest pas vide.! Requête: Fournisseurs qui ne fournissent aucun produit FROM FOURNISSEUR WHERE NOT EXISTS (SELECT * WHERE FNOM = FOURNISSEUR.FNOM) Remarque: la condition NOT EXISTS (SELECT * FROM... ) est vraie ssi le résultat du bloc (SELECT F FROM... ) est vide. 5 Fonctions de calculs et opérateurs dʼagrégation de SQL Fonction de calcul : MAX, MIN, AVG, SUM Opérations dʼagrégation : GROUP BY, HAVING, ORDER BY Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 29 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 30 La fonction COUNT(*) compte le nombre des tuples du résultat dʼune requête sans élimination des tuples doubles ni vérification des valeurs nulles. Dans le cas contraire on utilise la clause COUNT(UNIQUE ) :! Requête: Nombre de Fournisseurs de Paris SELECT COUNT(*) FROM FOURNISSEUR WHERE VILLE = Paris! Requête: Nombre de Fournisseurs qui fournissent actuellement des produits SELECT COUNT(DISTINCT FNOM)! Requête: Quantité totale de Tuiles commandées SELECT SUM (QUANTITE) WHERE PNOM = Tuile! Requête: Le prix des Tuiles qui sont le plus chères. SELECT MAX (PRIXA) WHERE PNOM = Tuiles ;! Requête: Prix dʼachat moyen de Tuiles fournies SELECT AVG (PRIXA) WHERE PNOM = Tuile ou SELECT SUM (PRIXA)/COUNT(PRIX) WHERE PNOM = Tuile! Requête: Fournisseurs des Tuiles au prix dʼachat moyen des Tuiles WHERE PNOM = Tuile AND PRIXA < (SELECT AVG(PRIX) WHERE PNOM = Tuile ) Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 31 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 32

La clause GROUP BY permet de préciser les attributs de partitionnement des tables déclarées dans la clause FROM, par exemple un regroupement des fournisseurs par ville :! Requête: Nombre de fournisseurs par ville SELECT VILLE, COUNT(FNOM) FROM FOURNISSEUR GROUP BY VILLE Base : Résultat : VILLE FNOM VILLE COUNT(FNOM) Paris DUVAL Paris 2 Paris DURAND Lyon 3 Lyon DUPONT Lyon LAFRANCE Lyon SMITH Les fonctions de calcul appliquées au résultat de regroupement sont directement indiquées dans la clause SELECT, par exemple le calcul de la moyenne se fait par produit obtenu au résultat après le regroupement :! Requête: Donner pour chaque produit fourni son coût moyen, AVG (PRIX) GROUP BY PNOM Résultat : PNOM AVG(PRIX) Tuile 10,5 Ardoise 9,8 La clause HAVING permet dʼéliminer des partitionnements, comme la clause WHERE élimine des tuples du résultat dʼune requête. Ex : on garde les produits dont le nombre des fournisseurs est 2. Ainsi des conditions de sélection peuvent être appliquées avant le calcul dʼagrégat (clause WHERE) mais aussi après (clause HAVING).! Requête: Produits fournis par 2 ou plus fournisseurs avec un coût supérieur de 100 WHERE PRIXA > 100 GROUP BY PNOM HAVING COUNT(*) >= 2 Avant la clause HAVING : Après la clause HAVING : PNOM FNOM PRIX PNOM FNOM PRIX Tuile Duval 15 Ardoise Durand 20 Ardoise Durand 20 Ardoise Dupont 25 Ardoise Dupont 25 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 33 Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 34 En général, le résultat dʼune requête SQL nʼest pas trié. Pour trier le résultat par rapport aux valeurs dʼun ou de plusieurs attributs, on utilise la clause ORDER BY : SELECT VILLE, FNOM, PNOM, FOURNISSEUR WHERE FOURNITURE.FNOM = FOURNISSEUR.FNOM ORDER BY VILLE, FNOM DESC => Le résultat est trié par les villes (ASC) et le nom des fournisseurs dans lʼordre inverse (DESC). Bernard ESPINASSE PEIP 2013 Séance 4 : Introduction au langage SQL 35