Le langage SQL (deuxième partie) c Olivier Caron



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

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

SQL Historique

Langage SQL : créer et interroger une base

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

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

Le langage SQL Rappels

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

1 Introduction et installation

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Le Langage SQL version Oracle

Les bases de données

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

FileMaker 13. Guide de référence SQL

16H Cours / 18H TD / 20H TP

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

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

Cours: Les Jointures 1

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

Bases de données relationnelles

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

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

Systèmes de Gestion de Bases de Données

Optimisation SQL. Quelques règles de bases

Olivier Mondet

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

Introduction aux Bases de Données 2004/2005

Le Langage De Description De Données(LDD)

CREATION WEB DYNAMIQUE

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

MySQL / SQL EXEMPLES

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

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

Cours 4 : Agrégats et GROUP BY

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

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

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

Vincent Augusto

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

MODE OPERATOIRE OPENOFFICE BASE

Bases de données élémentaires Maude Manouvrier

Les bases fondamentales du langage Transact SQL

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

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

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

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

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

Mysql avec EasyPhp. 1 er mars 2006

Les BASES de DONNEES dans WampServer

TP Contraintes - Triggers

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

Devoir Data WareHouse

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

TP3 : Creation de tables 1 seance

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

BTS/CGO P10 SYSTEME INFORMATION Année

Bases de données et sites WEB

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

Présentation Windows Azure Hadoop Big Data - BI

SUPPORT SQL. Thierry GRANDADAM

Encryptions, compression et partitionnement des données

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

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

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Notes de cours : bases de données distribuées et repliquées

Intégrité des données

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

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

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

I4 : Bases de Données

OpenPaaS Le réseau social d'entreprise

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

LE LANGAGE SQL2 1. INTRODUCTION

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

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

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

Base de données relationnelle et requêtes SQL

Objectifs du TP : Initiation à Access

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : , ISBN 13 :

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

Historisation des données

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

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

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

Sybase Adaptive Server Enterprise 15

Transcription:

Le langage SQL (deuxième partie)

1 Les requêtes de consultation Représente la majorité des requêtes

1 Les requêtes de consultation Représente la majorité des requêtes Encapsule complètement l algèbre relationnel

1 Les requêtes de consultation Représente la majorité des requêtes Encapsule complètement l algèbre relationnel Une seule commande!

2 Syntaxe partielle commande Select SELECT [ ALL DISTINCT [ ON ( expression [,...] ) ] ] * expression [ AS output_name ] [,...] [ FROM from_item [,...] ] [ WHERE condition ] [ GROUP BY expression [,...] ] [ HAVING condition [,...] ] [ { UNION INTERSECT EXCEPT [ ALL ] } select ] [ ORDER BY expression [ ASC DESC USING operator ] [,...] ] [ FOR UPDATE [ OF tablename [,...] ] ] [ LIMIT { count ALL } [ { OFFSET, } start ]]

3 Etat de la base exemple (1/3) Auteur : num_a nom ------+--------------- 1 Albert Uderzo 2 Victor Hugo 3 J.K. Rowling Editeur : num_e nom ville ------+-------------+----------- 1 Albert-René Bruxelles 2 Gallimard Paris 3 Folio Paris

4 Etat de la base exemple (2/3) livre : num_l titre auteur -------+----------------------------------------+-------- 1 Le fils d Astérix 1 2 Les misérables 2 3 Notre dame de Paris 2 4 Harry Potter à l école des sorciers 3 5 Harry Potter et la chambre des secrets 3 edite_par : num_l num_e date_edition -------+-------+-------------- 1 1 1998-03-24 2 3 1940-02-02 3 2 1967-06-12 4 2 1999-03-01 5 2 2000-02-01

5 Etat de la base exemple (3/3) utilisateur : num_u nom prenom -------+------------+------------- 1 Caron Olivier 2 Janot Stéphane 3 Seynhaeve Franck 4 Duthilleul Jean-Michel emprunte : num_l num_u reserve : num_l num_u -------+------- -------+------- 1 1 1 2 2 4 4 2 4 1

6 Consultation simple d une table Syntaxe : select col1, col2,..., coln from nomtable

6 Consultation simple d une table Syntaxe : select col1, col2,..., coln from nomtable Variante usuelle : select * from nomtable

6 Consultation simple d une table Syntaxe : select col1, col2,..., coln from nomtable Variante usuelle : select * from nomtable Exemple : biblio=# select * from utilisateur ; num_u nom prenom -------+------------+------------- 1 Caron Olivier 2 Janot Stéphane 3 Seynhaeve Franck 4 Duthilleul Jean-Michel (4 rows)

7 Expression d une projection Syntaxe : select coli1, col ip,..., col ip from nomtable

7 Expression d une projection Syntaxe : select coli1, col ip,..., col ip from nomtable Exemple : biblio=# select nom, prenom from utilisateur ; nom prenom ------------+------------- Caron Olivier Janot Stéphane Seynhaeve Franck Duthilleul Jean-Michel On peut inverser l ordre de présentation (aucun impact sur le calcul)

7 Expression d une projection Syntaxe : select coli1, col ip,..., col ip from nomtable Exemple : biblio=# select nom, prenom from utilisateur ; nom prenom ------------+------------- Caron Olivier Janot Stéphane Seynhaeve Franck Duthilleul Jean-Michel On peut inverser l ordre de présentation (aucun impact sur le calcul) Algèbre relationnel pur : clause distinct

8 Expression d une restriction Introduction clause WHERE

8 Expression d une restriction Introduction clause WHERE Utilisation des opérateurs booléens : and, or, not

8 Expression d une restriction Introduction clause WHERE Utilisation des opérateurs booléens : and, or, not Comparaison de chaînes, dates, d entiers,...

8 Expression d une restriction Introduction clause WHERE Utilisation des opérateurs booléens : and, or, not Comparaison de chaînes, dates, d entiers,... Exemple : biblio=# select * from livre where auteur=2 ; num_l titre auteur -------+---------------------+-------- 2 Les misérables 2 3 Notre dame de Paris 2

9 Traitement de chaînes (1/2) Accès très simple : ch1 = ch2

9 Traitement de chaînes (1/2) Accès très simple : ch1 = ch2 Opérateur LIKE

9 Traitement de chaînes (1/2) Accès très simple : ch1 = ch2 Opérateur LIKE Caractère spéciaux : % (remplace de 0 à plusieurs caractères) et (remplace exactement un caractère).

9 Traitement de chaînes (1/2) Accès très simple : ch1 = ch2 Opérateur LIKE Caractère spéciaux : % (remplace de 0 à plusieurs caractères) et (remplace exactement un caractère). Exemple : biblio=# select distinct titre from livre where titre like H% ; titre ---------------------------------------- Harry Potter à l école des sorciers Harry Potter et la chambre des secrets (2 rows)

10 Traitement de chaînes (2/2) Opérateur de comparaison >, <,...(ordre lexicographique)

10 Traitement de chaînes (2/2) Opérateur de comparaison >, <,...(ordre lexicographique) Opérateur de concaténation, fonctions prédéfinies (ex : upper)

10 Traitement de chaînes (2/2) Opérateur de comparaison >, <,...(ordre lexicographique) Opérateur de concaténation, fonctions prédéfinies (ex : upper) Exemple : biblio=# select upper(nom prenom) as nom_prenom from utilisateur ; nom_prenom ------------------------ CARON OLIVIER JANOT STÉPHANE SEYNHAEVE FRANCK DUTHILLEUL JEAN-MICHEL (4 rows)

11 Introduction clause BETWEEN Comparaison de valeurs

11 Comparaison de valeurs Introduction clause BETWEEN Applicable à tout type (integer, chaîne, date,...) select nom from utilisateur where nom between A% and F% ; nom ------------ Caron Duthilleul

11 Comparaison de valeurs Introduction clause BETWEEN Applicable à tout type (integer, chaîne, date,...) select nom from utilisateur where nom between A% and F% ; nom ------------ Caron Duthilleul Note : l exemple suivant est identique : select nom from utilisateur where nom >= A% and nom < F% ;

12 Présentation des données (1/2) Ordre d affichage des colonnes

12 Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons

12 Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Ordre d affichage des lignes, clause Order By Ordre des lignes multi-critères

12 Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Ordre d affichage des lignes, clause Order By Ordre des lignes multi-critères Aucun impact sur le traitement algébrique des requêtes

13 Présentation des données (2/2) Syntaxe : ORDER BY expression [ ASC DESC USING operator ] [,...]

13 Présentation des données (2/2) Syntaxe : ORDER BY expression [ ASC DESC USING operator ] [,...] Exemple : biblio=# select * from livre order by auteur DESC, titre ASC ; num_l titre auteur -------+----------------------------------------+-------- 4 Harry Potter à l école des sorciers 3 5 Harry Potter et la chambre des secrets 3 2 Les misérables 2 3 Notre dame de Paris 2 1 Le fils d Astérix 1

14 Opérations de calcul Opérateurs arithmétiques : +,,...

14 Opérations de calcul Opérateurs arithmétiques : +,,... Exemple : biblio=# select now()-date_edition as duree, num_l from edite_par ; duree num_l ---------------------+------- 1423 days 17:30:01 1 22658 days 16:30:01 2 12666 days 17:30:01 3 1081 days 17:30:01 4 744 days 17:30:01 5

14 Opérations de calcul Opérateurs arithmétiques : +,,... Exemple : biblio=# select now()-date_edition as duree, num_l from edite_par ; duree num_l ---------------------+------- 1423 days 17:30:01 1 22658 days 16:30:01 2 12666 days 17:30:01 3 1081 days 17:30:01 4 744 days 17:30:01 5 Expressions arithmétiques applicables dans la clause where

15 Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*)

15 Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) le résultat est stocké dans une colonne correspondant au nom de la fonction (sauf si renommage)

15 Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) le résultat est stocké dans une colonne correspondant au nom de la fonction (sauf si renommage) Toujours une ligne résultat. Fonctions standards : count, min, max, avg, sum

16 Fonctions de calcul - exemples biblio=# select count(*) as nombre from livre ; nombre ------- 5 biblio=# select min(num_l), max(num_l), avg(num_l), sum(num_l) from livre ; min max avg sum -----+-----+--------------+----- 1 5 3.0000000000 15

17 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul

17 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul Introduction clause Group By

17 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul Introduction clause Group By biblio=# select auteur, count(*) as nbre_par_auteur biblio-# from livre group by auteur ; auteur nbre_par_auteur --------+----------------- 1 1 2 2 3 2 Note : Toutes les colonnes figurant dans un group by doivent apparaître dans la clause select.

18 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul

18 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul Introduction clause Group By

18 Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul Introduction clause Group By biblio=# select auteur, count(*) as nbre_par_auteur biblio-# from livre group by auteur ; auteur nbre_par_auteur --------+----------------- 1 1 2 2 3 2 Note : Toutes les colonnes figurant dans un group by doivent apparaître dans la clause select.

19 Calcul sur des groupes de lignes (2/2) Imposer une condition aux groupes formés par la clause Group By

19 Calcul sur des groupes de lignes (2/2) Imposer une condition aux groupes formés par la clause Group By Introduction clause Having

19 Calcul sur des groupes de lignes (2/2) Imposer une condition aux groupes formés par la clause Group By Introduction clause Having Exemple : biblio=# select auteur, count(*) as nbre_par_auteur biblio-# from livre group by auteur having count(*)>1 ; auteur nbre_par_auteur --------+----------------- 2 2 3 2

19 Calcul sur des groupes de lignes (2/2) Imposer une condition aux groupes formés par la clause Group By Introduction clause Having Exemple : biblio=# select auteur, count(*) as nbre_par_auteur biblio-# from livre group by auteur having count(*)>1 ; auteur nbre_par_auteur --------+----------------- 2 2 3 2 Ne pas confondre avec clause where

20 Expression d un produit cartésien Utilisation clause from

20 Expression d un produit cartésien Utilisation clause from Déclaration de variables (ou utiliser le nom de la table)

20 Expression d un produit cartésien Utilisation clause from Déclaration de variables (ou utiliser le nom de la table) Produit cartésien : pas de sens en soi!

20 Expression d un produit cartésien Utilisation clause from Déclaration de variables (ou utiliser le nom de la table) Produit cartésien : pas de sens en soi! Exemples : select * from utilisateur, livre ;... (20 lignes) select distinct e.nom as nomediteur, a.nom as NomAuteur from editeur e, auteur a;

21 Expression d une jointure Relier avec cohérence deux (ou plus) tables.

21 Expression d une jointure Relier avec cohérence deux (ou plus) tables. Relier les clés étrangères avec les clés primaires correspondantes

21 Expression d une jointure Relier avec cohérence deux (ou plus) tables. Relier les clés étrangères avec les clés primaires correspondantes Exemple : select titre, nom from auteur, livre where auteur.num_a=livre.auteur ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling

22 Jointures sur une même table Appelée également auto-jointure Exemple : liste de couples de livres ayant le même auteur select l1.titre, l2.titre from livre l1, livre l2 where l1.auteur=l2.auteur and l1.titre > l2.titre ; titre titre --------------------------------+---------------------------- Notre dame de Paris Les misérables Harry Potter et la chambre... Harry Potter à l école...

23 Les jointures à la SQL/2 Nouvelles possibilités d expression de jointures

23 Les jointures à la SQL/2 Nouvelles possibilités d expression de jointures Non encore implémenté par tous les SGBD (ex. Oracle)

23 Les jointures à la SQL/2 Nouvelles possibilités d expression de jointures Non encore implémenté par tous les SGBD (ex. Oracle) Les expressions de jointures sont exprimés dans la clause from Distinction de jointures : inner join (défaut), left outer join, right outer join, full outer join

23 Les jointures à la SQL/2 Nouvelles possibilités d expression de jointures Non encore implémenté par tous les SGBD (ex. Oracle) Les expressions de jointures sont exprimés dans la clause from Distinction de jointures : inner join (défaut), left outer join, right outer join, full outer join insert into livre values (6, Le livre inconnu, null) ; insert into auteur values (4, Paltoquet ) ;

24 Jointure SQL/2 classique select titre, nom from livre inner join auteur on livre.auteur=auteur.num_a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling (5 rows)

25 Jointure externe gauche select titre, nom from livre left outer join auteur on livre.auteur=auteur.num_a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling le livre inconnu (6 rows)

26 Jointure externe droite select titre, nom from livre right outer join auteur on livre.auteur=auteur.num_a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling Paltoquet (6 rows)

27 Jointure externe complète select titre, nom from livre full outer join auteur on livre.auteur=auteur.num_a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling le livre inconnu Paltoquet (7 rows)

28 Multi-jointures SQL/2 select nom, titre from (utilisateur u join emprunte e on u.num_u= e.num_u) join livre l on e.num_l=l.num_l ; nom titre ------------+------------------------------------- Caron Le fils d Astérix Duthilleul Les misérables Caron Harry Potter à l école des sorciers (3 rows)

29 Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe

29 Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Jointures croisées : Syntaxe : from T1 cross join t2 Est équivalent à un produit cartésien Est équivalent à from T1 inner join t2 on true

30 Remarques sur la syntaxe des jointures SQL/2 (1/2) Les syntaxes : T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 on boolean_expression T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 using liste_nom_colonne T1 NATURAL { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 USING a équivalent à on t1.a = t2.a USING (a,b) équivalent à on t1.a=t2.a and t1.a=t2.a NATURAL effectue une comparaison de toutes les colonnes de même nom dans les deux tables.

31 Expression d une union Les deux tables doivent avoir la même structure

31 Expression d une union Les deux tables doivent avoir la même structure Exemple : select nom from auteur union select nom from editeur ; nom --------------- Albert-René Albert Uderzo Folio Gallimard J.K. Rowling Victor Hugo

32 Expression d une intersection Les deux tables doivent avoir la même structure

32 Expression d une intersection Les deux tables doivent avoir la même structure Exemple : select nom from auteur intersect select nom from editeur ; nom --------------- (0 rows)

33 Expression d une différence Les deux tables doivent avoir la même structure Exemple : select nom from auteur except select nom from editeur ; nom --------------- Albert Uderzo J.K. Rowling Victor Hugo

34 Sous-requêtes non corrélatives (1/4) Cas 1 : une sous-requête retourne une valeur unique

34 Sous-requêtes non corrélatives (1/4) Cas 1 : une sous-requête retourne une valeur unique Cette valeur est exploitée dans une clause where Exemple : liste des personnes dont le salaire est supérieur au salaire moyen du personnel select nom from personne where salaire > (select avg(salaire) from personne) ;

35 Sous-requêtes non corrélatives (2/4) Cas 2 : une sous-requête retourne des valeurs multiples avec la clause in

35 Sous-requêtes non corrélatives (2/4) Cas 2 : une sous-requête retourne des valeurs multiples avec la clause in Exemple : liste des livres empruntés et réservés select titre from livre, emprunte where emprunte.num_l=livre.num_l and livre.num_l in (select num_l from reserve) ; titre ------------------------------------- Le fils d Astérix Harry Potter à l école des sorciers

36 Sous-requêtes non corrélatives (3/4) Cas 3 : une sous-requête retourne des valeurs multiples avec la clause all

36 Sous-requêtes non corrélatives (3/4) Cas 3 : une sous-requête retourne des valeurs multiples avec la clause all Exemple : liste des personnes dont le salaire est supérieur à tous les salaires du personnel select nom from personne where salaire >= ALL (select salaire from personne) ; (on peut faire plus simple...)

37 Sous-requêtes non corrélatives (4/4) Cas 4 : une sous-requête retourne des valeurs multiples avec la clause [NOT] EXISTS

37 Sous-requêtes non corrélatives (4/4) Cas 4 : une sous-requête retourne des valeurs multiples avec la clause [NOT] EXISTS Exemple : Afficher le nom de l auteur 1 si il a écrit des livres select nom from auteur where num_a=1 and exists(select * from livre where auteur=1) ; exists retourne vrai ou faux si la requête retourne des lignes ou pas. On peut tester aussi la valeur null.

38 Sous-requêtes corrélatives Requête et sous-requête sont liées

38 Sous-requêtes corrélatives Requête et sous-requête sont liées Exemple : Liste des auteurs n ayant pas écrit de livres select num_a, nom from auteur where not exists(select * from livre where auteur=auteur.num_a) ; Note : La requête supérieure fournit une à une les valeurs de auteur.num a à la requête inférieure.

39 Alias de table Possibilité de donner un nom de variable à une table Syntaxe : FROM nom table tres long [ AS ] nom alias Permet aussi d exprimer des sous-requêtes : Syntaxe : FROM (select...) as nom alias

40 Mais aussi... Stockage d une requête dans des tables select... into table nomnouvelletable from...

40 Mais aussi... Stockage d une requête dans des tables select... into table nomnouvelletable from... Insertion de plusieurs lignes insert into table nomtable select...

41 Le langage est simple! En résumé

41 En résumé Le langage est simple! Répond à la majorité des requêtes

41 En résumé Le langage est simple! Répond à la majorité des requêtes Langage en constante évolution

41 En résumé Le langage est simple! Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives)

41 En résumé Le langage est simple! Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives) La puissance est au détriment de la complexité

41 En résumé Le langage est simple! Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives) La puissance est au détriment de la complexité Une solution : le concept de vue

42 Les vues Indépendance logique des données

42 Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables

42 Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement

42 Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement A l exécution d une requête portant sur une vue, une opération de reconstitution de la vue est effectuée

42 Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement A l exécution d une requête portant sur une vue, une opération de reconstitution de la vue est effectuée Une vue est considérée comme une table pour les utilisateurs

43 Création d une vue Syntaxe : CREATE VIEW view AS SELECT query Suivant les SGBD, il existe certaines restrictions sur la définition de la vue (ex : ORDER BY)

44 Un exemple Création d une vue donnant la liste de tous les livres dont le prix est supérieur au prix moyen. CREATE VIEW prix_sup_moyen AS SELECT n_livre, titre,prix FROM LIVRE WHERE prix > (SELECT avg(prix) FROM livre) ;

45 Utilisation de la vue Se comporte comme une table : select titre, prix from prix_sup_moyen order by titre Suppression d une vue : drop view prix_sup_moyen ; mise à jour possible dans certains cas (Oracle)

46 Utilisé pour les SGBD simples Et QBE

46 Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir

46 Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir Permet de répondre aux requêtes simples (selection, projection, jointure)

46 Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir Permet de répondre aux requêtes simples (selection, projection, jointure) Ne dispose pas de la puissance de SQL