Langage SQL. Nadi Tomeh Slides par L. Audibert. 23 avril 2015. Institut Galilée



Documents pareils
Langage SQL : créer et interroger une base

SQL Historique

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

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

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

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

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

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

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

Olivier Mondet

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

Bases de données relationnelles

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

Les bases de données

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

Le Langage De Description De Données(LDD)

Création et Gestion des tables

MySQL / SQL EXEMPLES

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

TP3 : Creation de tables 1 seance

Pour les débutants. langage de définition des données

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

Le Langage SQL version Oracle

I4 : Bases de Données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Le langage SQL Rappels

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

1 Introduction et installation

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

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

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

Introduction aux Bases de Données 2004/2005

Les BASES de DONNEES dans WampServer

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

Historisation des données

16H Cours / 18H TD / 20H TP

1. Base de données SQLite

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

FileMaker 13. Guide de référence SQL

LE LANGAGE SQL2 1. INTRODUCTION

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

CREATION WEB DYNAMIQUE

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

Structured Query Language

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

OpenPaaS Le réseau social d'entreprise

Comprendre les bases de données

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

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

Bases de données et sites WEB

Systèmes de Gestion de Bases de Données

TP Contraintes - Triggers

Réplication logique avec PostgreSQL 9.4

Devoir Data WareHouse

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

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

I. MySQL : Serveur et SGBD

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

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

Bases de données élémentaires Maude Manouvrier

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

1/ Présentation de SQL Server :

Optimisation SQL. Quelques règles de bases

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

Vincent Augusto

BASES DE DONNEES TP POSTGRESQL

SUPPORT SQL. Thierry GRANDADAM

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

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données relationnelles & SQL

Bases de données. PTSI Lycée Eiffel. 28 février 2014

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

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

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

1 Position du problème

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

Compétences Business Objects

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

Application web de gestion de comptes en banques

BTS/CGO P10 SYSTEME INFORMATION Année

Intégrité des données

Université de Nice Sophia-Antipolis. Langage SQL. version 5.7 du polycopié. Richard Grin

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

Bases de données et sites WEB Licence d informatique LI345

Corrigés détaillés des exercices

SQL Server 2000, Analysis Services et DTS

Auto-évaluation Oracle: cours de base

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

Transcription:

Nadi Tomeh Slides par L. Audibert Institut Galilée 23 avril 2015

Plan du cours sur le langage SQL 1 Introduction 2 3 4 5

SQL : présentation Introduction Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours SQL est le langage d accès normalisé aux bases de données (normalisé par l ISO) Incontournable dans tous les SGBDR moderne Le SQL n est pas un langage impératif (comme C++, Java... ) mais déclaratif : l utilisateur spécifie le résultat attendu, le SGBD se débrouille pour le produire Le SQL ne possède pas la puissance d un langage de programmation

SQL : hitorique Introduction Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours 1970 : E.F.Codd invente le modèle relationnel 1974-79 : premier prototype de BD relationnelle (IBM) et de langage associé SEQUEL ensuite rebaptisé SQL 1986 : SQL est normalisé par l ANSI 1 1987 : SQL est ratifié par l ISO 2 1989 : SQL1 (révisions mineures) 1992 : SQL2 (révisions majeures) 1999 : SQL3 (expreg, trigger, OO... ) 2003 : SQL :2003 (XML... ) 2008 : SQL :2008 (ajout de fonctions de fenêtrage et améliorations mineures... ) 1. American National Standard Institute 2. International Organization for Standardization

Catégories d instructions Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Langage de définition de données : permet essentiellement de créer, modifier, supprimer des objets Instructions : CREATE, ALTER, DROP,RENAME, TRUNCATE Langage de manipulation de données : permet l ajout, la suppression et la modification de lignes ainsi que la consultation du contenu des tables (i.e. requêtes) Instructions : INSERT, UPDATE, DELETE, SELECT

Catégories d instructions (suite) Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Langage de protections d accès : s occupe de gérer les droits d accès aux tables Instructions : GRANT, REVOKE Langage de contrôle de transaction : gère les caractéristiques des transactions et la validation et l annulation des modifications faite à la base de données Instructions : COMMIT, SAVEPOINT, ROLLBACK, SET TRANSACTION SQL intégré : permet d utiliser SQL dans un langage de troisième génération (C, C++, Java, Cobol, etc.)

Transaction Introduction Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Les transactions cherchent à répondre à la problématique des accès concurrents Définition (Transaction) Unité atomique (insécable) de mise à jour de la base de données fait passer la base d un état cohérent à un autre état cohérent

Propriétés ACID des transactions Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Atomicité : une transaction doit soit être complètement exécutée soit être totalement annulée (même en cas de panne) Cohérence : tout changement induit par une transaction doit respecter toutes les contraintes d intégrités Isolation : une transaction ne peut voir les modifications apportées par une autre transaction non achevée Durabilité : le résultat d une transaction validée doit être persistant (même en cas de défaillance du système)

PostgreSQL : historique Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours 1980 : Lancement par la société RTI de Ingres développé à Berkeley par Michal Stonebraker 1985 : M. Stonebraker recommencer le développement de zéro pour produire Postgres (PostIngres) 1995 : Intégration du SQL (Postgres devient Postgres95) 1996 : Postgres95 est renommé PostgreSQL

PostgreSQL : propriétés Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours PostgreSQL est un SGBDR OpenSource et gratuit (probablement l un des plus avancé) Fonctionne sous Unix/Linux, Windows, MacOS... Respect les propriétés ACID Pratiquement conforme à la norme SQL :2008

Architecture client/serveur Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours PostgreSQL, comme beaucoup de SGBD, fonctionne selon une architecture client/serveur Partie serveur (postmaster) : application fonctionnant sur la machine hébergeant la base de données (le serveur de bases de données) capable de traiter les requêtes des clients Partie client (psql) : permet d interroger le serveur de bases de données à l aide de requêtes SQL (clients et serveur peuvent fonctionner sur la même machine)

Méta-langage des syntaxes Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Permet de décrire la syntaxe d écriture des commandes SQL : [ ] : ce qui est à l intérieur est optionnel < > : à préciser par l utilisateur (ex : CREATE TABLE <table>) { X1 X2 } : choix entre X1 et X2... : suite de séquence (le contexte permettant de comprendre) Exemple de définition : SELECT { * <attribut> [,...] } FROM <nom table> Exemple commandes respectant la définition : SELECT * FROM personne SELECT nom, prenom FROM personne

Le langage SQL Transaction Propriétés ACID des transactions PostgreSQL Pour la suite du cours Base de données utilisée dans les exemples personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) où id enseignant fait référence à personne suivre(id etudiant, id cours, note) où id etudiant et id cours font référence à personne et cours

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE 1 Introduction 2 Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE 3 4 5

Contraintes de domaine Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Lors de la création d une table, il faut préciser le type de chaque colonne La commande SQL pour créer une table est CREATE TABLE Exemple de création de la relation cours(intitule, credit) : CREATE TABLE cours ( intitule VARCHAR, credit INTEGER ) ;

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Contrainte de non nullité (NOT NULL) Une contrainte de non nullité permet d imposer que la valeur d un attribut soit renseignée (c.-à-d. ne soit pas NULL) En SQL, cette contrainte s écrit NOT NULL Pour imposer que chaque cours possède bien un intitulé : CREATE TABLE cours ( intitule VARCHAR NOT NULL, credit INTEGER ) ;

Contrainte de vérification (CHECK) Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE La contrainte de vérification permet de spécifier que la valeur d une colonne particulière doit satisfaire une expression booléenne En SQL, cette contrainte s écrit CHECK(<condition>) Pour imposer que le nombre de crédits d un cours soit un entier positif : CREATE TABLE cours ( intitule VARCHAR NOT NULL, credit INTEGER CHECK(credit > 0 OR credit IS NULL) ) ;

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Contraintes d unicité ou de clé (UNIQUE) La contrainte d unicité permet de garantir que deux lignes ne peuvent pas recevoir les mêmes valeurs pour ces attributs En SQL, cette contrainte s écrit UNIQUE Pour imposer que le sigle (ex : INF1010, INF2705, LOG2410, MTH1006, PHS1101, SSH5201) d un cours est unique : CREATE TABLE cours ( sigle CHAR(7) UNIQUE, intitule VARCHAR NOT NULL, credit INTEGER CHECK(credit > 0 OR credit IS NULL) ) ; Attention : deux valeurs NULL ne sont pas considérées égales (conformément au standard SQL) Clé : UNIQUE NOT NULL

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Contraintes de clé primaire (PRIMARY KEY) La contrainte de clé primaire permet de préciser les attributs clés d une table En SQL, cette contrainte s écrit PRIMARY KEY et signifie UNIQUE NOT NULL id cours est la clé primaire de la table cours : CREATE TABLE cours ( id_cours INTEGER PRIMARY KEY, sigle CHAR(7) UNIQUE, intitule VARCHAR NOT NULL, credit INTEGER CHECK(credit > 0 OR credit IS NULL) ) ;

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Contrainte d intégrité de référence (REFERENCES) Une contrainte d intégrité de référence (ou contrainte de clé étrangère) permet de préciser que les valeurs d un groupe de colonnes doivent correspondre aux valeurs qui apparaissent dans les lignes d une autre table En SQL, cette contrainte s écrit REFERENCES Pour préciser qui dispense un cours, il faut introduire une colonne id enseignant qui fait référence à la colonne id personne de la table personne : CREATE TABLE cours ( id_cours INTEGER PRIMARY KEY, id_enseignant INTEGER REFERENCES personne (id_personne), sigle CHAR(7) UNIQUE NOT NULL, intitule VARCHAR NOT NULL, credit INTEGER CHECK(credit > 0 OR credit IS NULL) ) ;

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Contrainte d intégrité de référence (suite) La table cours est qualifiée de dépendante La table personne est qualifiée d indépendante puisque ne dépendant d aucune autre table Lors d une insertion dans cours, le SGBD doit vérifier que la valeur id enseignant correspond bien à une valeur existante dans la colonne id personne de personne Lors d une suppression dans la table personne, le SGBD doit vérifier qu aucune ligne de la table cours n y fait référence Le cas échéant, le SGBD peut : 1 interdire la suppression 2 supprimer également les lignes concernées dans cours 3 avertir l utilisateur d une incohérence 4 mettre les valeurs des colonnes concernées à NULL dans la table cours si l opération est possible

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Créer une table : CREATE TABLE (Syntaxe) Syntaxe de création d une table : CREATE TABLE <nom_table> ( <colonne> <type> [ DEFAULT <valeur> ] [ <contraintecolonne> [...]] [, <colonne> <type> [ DEFAULT <valeur> ] [ <contraintecolonne> [...]] [,...]] [, <contraintetable> [,...]] ) DEFAULT <valeur> permet de spécifier la valeur par défaut de l attribut La syntaxe de <type>, de <contraintecolonne> et de <contraintetable> fait l objet des diapositives qui suivent

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Créer une table : types des colonnes (<type>) INTEGER : entiers signés codés sur 4 octets REAL : réels comportant 6 chiffres significatifs codés sur 4 octets CHAR[(<longueur>)] : chaînes de caractères de longueur fixe (<longueur> doit être inférieur à 255) VARCHAR[(<longueur>)] : chaînes de caractères de longueur variable (<longueur> doit être inférieur à 2000) DATE : date TIMESTAMP : données constituées d une date et d une heure BOOLEAN : valeurs Booléenne TEXT : chaînes de caractères de longueur variable

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Créer une table : contraintes de colonne NOT NULL ou NULL : interdit (NOT NULL) ou autorise (NULL) l insertion de valeur NULL pour cet attribut UNIQUE : désigne l attribut comme clé secondaire de la table PRIMARY KEY : désigne l attribut comme clé primaire de la table (équivalente à la contraite UNIQUE NOT NULL) REFERENCES <table> [(<colonne>)] [ON DELETE {CASCADE RESTRICT SET NULL}] : contrainte d intégrité référentielle ; <colonne> doit posséder une contrainte PRIMARY KEY ou UNIQUE dans <table> ; par défaut, l attribut <colonne> retenu est la clé primaire de la table <table> CHECK (<condition>) : vérifie lors de l insertion de n-uplets que l attribut réalise la condition <condition> DEFAULT <valeur> : permet de spécifier une valeur par défaut

Créer une table : contraintes de table Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE PRIMARY KEY (<colonne>,...) : clé primaire composée UNIQUE (<colonne>,...) : clé secondaire composée FOREIGN KEY (<colonne>,...) REFERENCES <table> [(<colonne>,...)] [ON DELETE {CASCADE SET NULL}] : contrainte d intégrité référentielle composée CHECK (<condition>) : condition qui doit exister entre plusieurs attributs de la table

Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Créer une table : complément sur les contraintes ON DELETE CASCADE : suppression des n-uplets dépendants dans la table en cours de définition, quand un n-uplet contenant la clé primaire référencée est supprimé dans la table maître ON DELETE SET NULL : mise à NULL des attributs constituant la clé étrangère qui font référence au n-uplet supprimé dans la table maître La suppression d un n-uplet dans la table maître peut être impossible si l une de ces deux options n est pas précisée

Créer une table : illustration Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE CREATE TABLE personne ( id_personne INTEGER PRIMARY KEY, num_secu CHAR(15) UNIQUE, nom VARCHAR NOT NULL, prenom VARCHAR NOT NULL, date_naissance DATE ) ; CREATE TABLE cours ( id_cours INTEGER PRIMARY KEY, id_enseignant INTEGER REFERENCES personne (id_personne) ON DELETE SET NULL, sigle CHAR(7) UNIQUE NOT NULL, intitule VARCHAR NOT NULL, credit INTEGER CHECK(credit > 0 OR credit IS NULL), description TEXT ) ; CREATE TABLE suivre ( id_etudiant INTEGER REFERENCES personne ON DELETE CASCADE, id_cours INTEGER REFERENCES cours ON DELETE CASCADE, PRIMARY KEY (id_etudiant, id_cours), note REAL CHECK(note > 0 OR note IS NULL) ) ;

Supprimer une table : DROP TABLE Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE DROP TABLE <nom_table>

Modifier une table : ALTER TABLE Introduction aux contraintes d intégrité Créer une table : CREATE TABLE Supprimer une table : DROP TABLE Modifier une table : ALTER TABLE Ajouter une colonne : ADD [ COLUMN ] <nom_colonne> <type> [<contrainte_de_colonne> [...] ] Supprimer une colonne : DROP [ COLUMN ] <nom_colonne> Ajouter une contrainte de table : ADD CONSTRAINT <contrainte_de_table> Supprimer une contrainte de table : DROP CONSTRAINT <nom_contrainte>

Insertion de n-uplets Modification de lignes Suppression de lignes Insertion de n-uplets : INSERT INTO Insérer une ligne dans une table en spécifiant les valeurs à insérer : INSERT INTO <nom_table> [ (<nom_colonne> [,...]) ] VALUES (<valeur> [,...]) Exemple : INSERT INTO personne VALUES (100,NULL, Duchesne, Louis ) ; Insérer dans une table des lignes provenant du résultat d une requête : INSERT INTO <nom_table> [ (<nom_colonne> [,...]) ] VALUES <requ^ete_select>

Modification de lignes (UPDATE) Insertion de n-uplets Modification de lignes Suppression de lignes UPDATE <nom_table> SET <nom_colonne> = { <expression> (<requ^ete_select>) } [,...] WHERE <prédicat> Les valeurs des colonnes spécifiées sont modifiées dans toutes les lignes qui satisfont le prédicat <prédicat> En l absence d une clause WHERE, toutes les lignes sont mises à jour Exemple, rajouter un point à toutes les notes de la table suivre : UPDATE suivre SET note = note + 1 WHERE note IS NOT NULL ;

Suppression de lignes (DELETE) Insertion de n-uplets Modification de lignes Suppression de lignes DELETE FROM <nom_table> [ WHERE <prédicat> ] Toutes les lignes pour lesquelles <predicat> est évalué à vrai sont supprimées En l absence de clause WHERE, toutes les lignes de la table <nom table> sont supprimées Exemple, supprimer les inscriptions des étudiants à des cours pour lesquels ils n ont pas obtenu la moyenne : DELETE FROM suivre WHERE note IS NOT NULL AND note<10 ;

5 Introduction Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs 1 Introduction 2 3 4 Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Base de données utilisée dans les exemples personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) où id enseignant fait référence à personne suivre(id etudiant, id cours, note) où id etudiant et id cours font référence à personne et cours

Introduction à la commande SELECT Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Commande SELECT = langage d interrogation d une base de données Permet de sélectionner des colonnes (projection) Permet de sélectionner des lignes (sélection) Permet de combiner des informations issues de plusieurs tables (jointure, union, intersection, différence et division) Le résultat d un SELECT est une table permet de combiner des opérations

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Introduction à la commande SELECT : syntaxe simplifiée SELECT [ { ALL DISTINCT } ] { * <attribut> [,...] } FROM <nom_table> [,...] [ WHERE <condition> ] SELECT : selection des colonnes de la table générée par la clause FROM (caractère * pour tous les attributs) projection FROM : spécification du produit cartésien des tables sur lequel porte la requête WHERE : facultative, énonce une condition sur les lignes sélection Exemple : SELECT * FROM personne ;

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Introduction à la commande SELECT : projection Personne Num-Personne Nom Prénom 1 Dumont Pierre 2 Dunand Paul 3 Dudoit Pierre 4 Duluc Caroline 5 Dumont Paul 6 Dumas Colette 7 Dunand Monique 8 Duwat Monique Résultat Prénom Pierre Paul Caroline Colette Monique Algèbre relationnelle Π (A1,...A n)(relation) Traduction en SQL SELECT DISTINCT A_1,..., A_n FROM relation (DISTINCT pour éliminer les doublons) Exemple Lister les prénoms des personnes : SELECT DISTINCT prenom FROM personne ;

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Introduction à la commande SELECT : sélection Personne Num-Personne Nom Prénom 1 Dumont Pierre 2 Dunand Paul 3 Dudoit Pierre 4 Duluc Caroline 5 Dumont Paul 6 Dumas Colette 7 Dunand Monique 8 Duwat Pierre Résultat Num-Personne Nom Prénom 1 Dumont Pierre 3 Dudoit Pierre 8 Duwat Pierre Algèbre relationnelle σ (prédicat) (relation) Traduction en SQL SELECT * FROM relation WHERE prédicat ; Exemple Sélectionner les personnes dont le prénom est Pierre : SELECT * FROM Personne WHERE Prénom= Pierre Chaînes, dates et expressions régulières entre apostrophe! ex : arbre, 01/01/2005, l arbre ou $$l arbre$$

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Introduction à la commande SELECT : produit cartésien Homme Jekyll Hyde Femme Marilou Judith Ophélie Résultat Homme Femme Jekyll Marilou Jekyll Judith Jekyll Ophélie Hyde Marilou Hyde Judith Hyde Ophélie Algèbre relationnelle relation 1 relation 2 Traduction en SQL SELECT * FROM relation1, relation2 ; Exemple Tous les couples possibles entre la table Homme la table Femme : SELECT * FROM Homme, Femme

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Introduction à la commande SELECT : équi-jointure Syntaxe en algèbre relationnelle relation 1 A1 =A 2 relation 2 Variante en algèbre relationnelle σ (A1 =A 2 ) (relation 1 relation 2 ) Traduction en SQL SELECT * FROM relation1, relation2 WHERE relation1.a1 = relation2.a2 Exemple Liste des cours avec leur enseignant respectif : SELECT * FROM cours, personne WHERE cours.id_enseignant = personne.id_personne ;

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe générale de la commande SELECT SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] FROM <nom_table> [ [ AS ] <alias> ] [,...] [ WHERE <prédicat> ] [ GROUP BY <expression> [,...] ] [ HAVING <prédicat> ] [ { UNION INTERSECT EXCEPT [ ALL ] } <requ^ete> ] [ ORDER BY <expression> [ { ASC DESC } ] [,...] ]

La clause SELECT Introduction Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Afficher la table personne : SELECT * FROM personne ; SELECT personne.* FROM personne ; Liste des prénoms sans doublon (ALL par défaut) : SELECT DISTINCT prenom FROM personne ;

La clause SELECT Introduction Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Afficher la table personne : SELECT * FROM personne ; SELECT personne.* FROM personne ; Liste des prénoms sans doublon (ALL par défaut) : SELECT DISTINCT prenom FROM personne ;

La clause SELECT (suite) Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Afficher la table suivre avec la note sur 10 : SELECT id_etudiant, id_cours, note/2 FROM suivre ; Renommer ou nommer une colonne : SELECT id_etudiant, id_cours, note/2 AS Sur_10 FROM suivre ; Concaténer des champs de type caractères : SELECT La date de naissance de prenom nom est : date_naissance FROM personne ;

La clause SELECT (suite) Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Afficher la table suivre avec la note sur 10 : SELECT id_etudiant, id_cours, note/2 FROM suivre ; Renommer ou nommer une colonne : SELECT id_etudiant, id_cours, note/2 AS Sur_10 FROM suivre ; Concaténer des champs de type caractères : SELECT La date de naissance de prenom nom est : date_naissance FROM personne ;

La clause SELECT (suite) Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe SELECT [ { ALL DISTINCT } ] { * <expression> [ AS <nom_affiché> ] } [,...] Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Afficher la table suivre avec la note sur 10 : SELECT id_etudiant, id_cours, note/2 FROM suivre ; Renommer ou nommer une colonne : SELECT id_etudiant, id_cours, note/2 AS Sur_10 FROM suivre ; Concaténer des champs de type caractères : SELECT La date de naissance de prenom nom est : date_naissance FROM personne ;

La clause FROM (1ère partie) Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe : FROM <nom_table> [ [ AS ] <alias> ] [,...] Spécifie les tables sur lesquelles porte la requête Construit la table intermédiaire (virtuelle) sur laquelle travaille les clauses SELECT, WHERE, GROUP BY et HAVING La table intermédiaire est le produit cartésien de toutes les tables énumérées

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs La clause FROM (1ère partie) : Opérateur AS Utilité : renommer une table, ou nommer une table créée dans la requête (sous-requête) Syntaxe : FROM <nom_de_table> AS <nouveau_nom> Exemple de simplification des noms trop long : SELECT * FROM nom_de_table_1 AS t1, nom_de_table_2 AS t2 WHERE t1.a_1 = t2.a_2

Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs La clause FROM (1ère partie) : Sous-requête Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Liste des étudiants SELECT id_etudiant, nom, prenom FROM personne, suivre WHERE personne.id_personne = suivre.id_etudiant ; Liste des étudiants qui dispensent un cours SELECT * FROM cours, ( SELECT id_etudiant, nom, prenom FROM personne, suivre WHERE id_personne=id_etudiant ) AS etudiant WHERE etudiant.id_etudiant = cours.id_enseignant ;

La clause ORDER BY Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Utilité : Ordonner les lignes de la table résultat Syntaxe : ORDER BY <expression> [ { ASC DESC } ] [,...] Exemple : Ordonner les personnes par ordre descendant des noms de famille et, en cas de nom identique, par ordre descendant des prénoms SELECT id_personne, nom, prenom FROM personne ORDER BY nom DESC, prenom DESC ; Attention : le tri se fait sur le résultat final de la requête la dernière clause de tout ordre SQL n utiliser que des noms de colonnes de la clause SELECT

La clause WHERE Introduction Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Syntaxe : WHERE <prédicat> Schéma relationnel personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Exemples Personnes dont le prénom en minuscule est jean et la date de naissance est inférieure à 1970 : SELECT * FROM personne WHERE LOWER(personne.nom) = jean AND personne.date_naissance <= 01/01/1970 ; Cours dont le sigle commence par INF ou le nombre de crédits est supérieur à 4 : SELECT * FROM cours WHERE cours.sigle~ ^INF OR cours.credit >= 4 ;

Opérateurs de comparaison Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Schéma relationnel : personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Cours dont le nombre de crédits est strictement supérieur à 2 : SELECT * FROM cours WHERE credit > 2 ; Cours dont le nombre de crédits est défini (pas NULL) : SELECT * FROM cours WHERE credit IS NOT NULL ; Cours dont le nombre de crédits est compris ente 2 et 3 : SELECT * FROM cours WHERE credit BETWEEN 2 AND 3 ; SELECT * FROM cours WHERE credit >= 2 AND credit <= 3 ;

Fonctions sur date/heure Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Schéma relationnel : personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Nom et prénom des personnes nées après 1980 : SELECT nom, prenom FROM personne WHERE EXTRACT( year FROM date_naissance) >= 1980 ; Nom, prénom et âge des personnes : SELECT nom, prenom, AGE(date_naissance) FROM personne ;

Fonctions de sous-requêtes Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Schéma relationnel : personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Nom et prénom des personnes qui dispensent au moins un cours : SELECT personne.nom, personne.prenom FROM personne WHERE EXISTS( SELECT * FROM cours WHERE personne.id_personne = cours.id_enseignant ) ; ou encore : SELECT personne.nom, personne.prenom FROM personne WHERE personne.id_personne IN ( SELECT cours.id_enseignant FROM cours ) ;

Fonctions de sous-requêtes (suite) Introduction à la commande SELECT La clause SELECT La clause FROM (1ère partie) La clause ORDER BY La clause WHERE Fonctions et opérateurs Schéma relationnel : personne(id personne, id secu, nom, prenom, date naissance) cours(id cours, id enseignant, sigle, intitule, credit, description) suivre(id etudiant, id cours, note) Nom et prénom des personnes qui ont eu un 10 à une évaluation : SELECT personne.nom, personne.prenom FROM personne WHERE 10 IN ( SELECT note FROM suivre WHERE personne.id_personne = suivre.id_etudiant ) ; Nom et prénom des personnes qui ne dispensent pas de cours : SELECT personne.nom, personne.prenom FROM personne WHERE personne.id_personne NOT IN ( SELECT cours.id_enseignant FROM cours WHERE cours.id_enseignant IS NOT NULL ) ;

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) 1 Introduction 2 3 4 5 La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite)

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : produit cartesien en SQL Syntaxe en algèbre relationnelle : relation 1 relation 2 Traduction en SQL : SELECT * FROM relation_1, relation_2 Traduction alternative en SQL : SELECT * FROM relation_1 CROSS JOIN relation_2

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : jointure SQL sans jointure! Syntaxe en algèbre relationnelle : relation 1 A1,A 2 relation 2 Variante en algèbre relationnelle : σ (A1 =A 2 ) (relation 1 relation 2 ) Traduction en SQL : Cette suite d instruction ne contient aucune jointure! SELECT * FROM relation_1, relation_2 WHERE relation_1.a_1 = relation_2.a_2

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] Ces trois syntaxes diffèrent par la condition de jointure spécifiée par les clause ON ou USING, ou implicite (mot-clé NATURAL).

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] ON : Condition de jointure générale, <predicat> est une expression logique analogue à celle la clause WHERE USING : la liste de colonnes (<colonnes>) doit correspondre à des colonnes communes aux deux tables, la condition de jointure est l égalité de chacune des paires de colonnes qui, de plus, sont fusionnées NATURAL : notation abrégée de la clause USING dans laquelle la liste de colonnes est implicite et correspond à la liste des colonnes communes aux deux tables

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] ON : Condition de jointure générale, <predicat> est une expression logique analogue à celle la clause WHERE USING : la liste de colonnes (<colonnes>) doit correspondre à des colonnes communes aux deux tables, la condition de jointure est l égalité de chacune des paires de colonnes qui, de plus, sont fusionnées NATURAL : notation abrégée de la clause USING dans laquelle la liste de colonnes est implicite et correspond à la liste des colonnes communes aux deux tables

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] ON : Condition de jointure générale, <predicat> est une expression logique analogue à celle la clause WHERE USING : la liste de colonnes (<colonnes>) doit correspondre à des colonnes communes aux deux tables, la condition de jointure est l égalité de chacune des paires de colonnes qui, de plus, sont fusionnées NATURAL : notation abrégée de la clause USING dans laquelle la liste de colonnes est implicite et correspond à la liste des colonnes communes aux deux tables

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] INNER et OUTER : permettent de préciser s il s agit d une jointure interne (comportement par défaut) ou externe (LEFT, RIGHT ou FULL) INNER JOIN : la table résultat est constituée de toutes les juxtapositions possibles d une ligne de la table <table 1> avec une ligne de la table <table 2> qui satisfont la condition de jointure

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] INNER et OUTER : permettent de préciser s il s agit d une jointure interne (comportement par défaut) ou externe (LEFT, RIGHT ou FULL) INNER JOIN : la table résultat est constituée de toutes les juxtapositions possibles d une ligne de la table <table 1> avec une ligne de la table <table 2> qui satisfont la condition de jointure

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] LEFT OUTER JOIN : une jointure interne (i.e. de type INNER JOIN) est tout d abord effectuée, puis chacunes les lignes de <table 1> qui n apparaissent pas dans le résultat sont ajoutées (attributs de <table 2> à NULL) RIGHT OUTER JOIN : même scénario que pour LEFT OUTER JOIN, mais en inversant les rôles des tables <table 1> et <table 2> FULL OUTER JOIN : la jointure externe bilatérale est la combinaison des deux opérations précédentes (LEFT OUTER JOIN et RIGHT OUTER JOIN) afin que la table résultat contienne au moins une occurrence de chacune des lignes des deux tables impliquées dans l opération de jointure

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] LEFT OUTER JOIN : une jointure interne (i.e. de type INNER JOIN) est tout d abord effectuée, puis chacunes les lignes de <table 1> qui n apparaissent pas dans le résultat sont ajoutées (attributs de <table 2> à NULL) RIGHT OUTER JOIN : même scénario que pour LEFT OUTER JOIN, mais en inversant les rôles des tables <table 1> et <table 2> FULL OUTER JOIN : la jointure externe bilatérale est la combinaison des deux opérations précédentes (LEFT OUTER JOIN et RIGHT OUTER JOIN) afin que la table résultat contienne au moins une occurrence de chacune des lignes des deux tables impliquées dans l opération de jointure

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause FROM (2ème partie) : les véritables jointures <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> ON <predicat> [...] <table_1> [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> USING (<colonnes>) [...] <table_1> NATURAL [{INNER {LEFT RIGHT FULL} [OUTER]}] JOIN <table_2> [...] LEFT OUTER JOIN : une jointure interne (i.e. de type INNER JOIN) est tout d abord effectuée, puis chacunes les lignes de <table 1> qui n apparaissent pas dans le résultat sont ajoutées (attributs de <table 2> à NULL) RIGHT OUTER JOIN : même scénario que pour LEFT OUTER JOIN, mais en inversant les rôles des tables <table 1> et <table 2> FULL OUTER JOIN : la jointure externe bilatérale est la combinaison des deux opérations précédentes (LEFT OUTER JOIN et RIGHT OUTER JOIN) afin que la table résultat contienne au moins une occurrence de chacune des lignes des deux tables impliquées dans l opération de jointure

Exemple de jointure naturelle La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) id film id real titre id real nom prenom 1 1 Dogville 1 von Trier Lars 2 1 Breaking the waves 4 Tarantino Quentin 3 5 Faux-Semblants 3 Eastwood Clint 4 5 Crash 2 Parker Alan 5 3 Chasseur blanc, coeur noir SELECT * FROM film NATURAL JOIN realisateur SELECT * FROM film JOIN realisateur USING (id_real); id real id film titre nom prenom 1 1 Dogville von Trier Lars 1 2 Breaking the waves von Trier Lars 3 5 Chasseur blanc, coeur noir Eastwood Clint

Exemple de jointure externe gauche La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) id film id real titre id real nom prenom 1 1 Dogville 1 von Trier Lars 2 1 Breaking the waves 4 Tarantino Quentin 3 5 Faux-Semblants 3 Eastwood Clint 4 5 Crash 2 Parker Alan 5 3 Chasseur blanc, coeur noir SELECT * FROM film LEFT JOIN realisateur USING (id_real); id real id film titre nom prenom 1 1 Dogville von Trier Lars 1 2 Breaking the waves von Trier Lars 5 3 Faux-Semblants 5 4 Crash 3 5 Chasseur blanc, coeur noir Eastwood Clint

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) Pourquoi l utilisation des jointures est-elle très avantageuse? SELECT * FROM T1 JOIN T2 USING (A1) JOIN T3 USING (A2) JOIN T4 USING (A3) WHERE A4= truc AND A5>A6 SELECT * FROM T1, T2, T3, T4 WHERE T3.A3=T4.A3 AND A4= truc AND T2.A2=T3.A2 AND T1.A1=T2.A1 AND A5>A6 Permet d isoler les conditions de sélections (clause WHERE) de celles de jointures (clauses JOIN) Permet de cloisonner les conditions de jointures entre chaque couples de table Permet l optimisation d exécution de la requête Permet la suppression de la clause WHERE à des fins de tests

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) Notion de groupe et de fonctions d agrégation Un groupe est un sous-ensemble des lignes d une table ayant la même valeur pour un attribut Par exemple, on peut dénombrer les films en fonction de leur réalisateur : SELECT nom, prenom, COUNT(*) FROM film JOIN realisateur USING (id_real) GROUP BY nom, prenom;

La clause GROUP BY : Exemple La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) SELECT nom, prenom FROM film JOIN realisateur USING (id_real); 1 1 Dogville von Trier Lars 1 2 Breaking the waves von Trier Lars 3 5 Chasseur blanc, coeur noir Eastwood Clint SELECT nom, prenom, COUNT(*) FROM film JOIN realisateur USING (id_real) GROUP BY nom, prenom; von Trier Lars 2 Eastwood Clint 1

Les clauses GROUP BY et HAVING La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) SELECT <expression_1>, [...,] <expression_n> [, <fonction_agrégation> [,...] ] FROM <nom_table> [ [ AS ] <alias> ] [,...] [ WHERE <prédicat> ] [ GROUP BY <expression_1>, [...,] <expression_n> ] [ HAVING <condition_regroupement> ] La commande GROUP BY permet de définir des regroupements. <expression 1>, [...,] <expression N> derrière SELECT = <expression 1>, [...,] <expression N> derrière GROUP BY La table résultat comporte une ligne pour chaque groupe

Les clauses GROUP BY et HAVING La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) SELECT <expression_1>, [...,] <expression_n> [, <fonction_agrégation> [,...] ] FROM <nom_table> [ [ AS ] <alias> ] [,...] [ WHERE <prédicat> ] [ GROUP BY <expression_1>, [...,] <expression_n> ] [ HAVING <condition_regroupement> ] AVG(<expr>) : Moyenne des valeurs de l expression <expr> COUNT(*) : Nombre de lignes du groupe MAX(<expr>) : Plus petite des valeurs de l expression <expr> MIN(<expr>) : Plus grande des valeurs de l expression <expr> SUM(<expr>) : Somme des valeurs de l expression <expr>

Les clauses GROUP BY et HAVING La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) SELECT <expression_1>, [...,] <expression_n> [, <fonction_agrégation> [,...] ] FROM <nom_table> [ [ AS ] <alias> ] [,...] [ WHERE <prédicat> ] [ GROUP BY <expression_1>, [...,] <expression_n> ] [ HAVING <condition_regroupement> ] Fonctions d agrégation sans clause GROUP BY : la clause SELECT ne doit comporter que des fonctions d agrégation (aucun nom de colonne) le résultat ne contient qu une ligne Exemple : SELECT COUNT(*) FROM film JOIN realisateur USING (id_real) WHERE nom= von Trier AND prenom= Lars ;

La clause HAVING Introduction La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) La clause HAVING est l équivalent de la clause WHERE appliqué aux groupes Même syntaxe qu un prédicat d une clause WHERE Ne peut porter que sur des caractéristiques du groupe : fonction d agrégation ou expression de la clause GROUP BY Une requête de groupe peut contenir à la fois une clause WHERE et une clause HAVING

La clause HAVING : Exemples La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) Nombre de fois que chacun des films a été projeté en ne s intéressant qu aux films projetés plus de 2 fois : SELECT num_film, titre, COUNT(*) FROM film NATURAL JOIN projection GROUP BY num_film, titre HAVING COUNT(*)>2; En plus, on ne s intéresse qu aux films projetés au cinéma Le Fontenelle : SELECT num_film, titre, COUNT(*) FROM film NATURAL JOIN projection NATURAL JOIN cinema WHERE cinema.nom = Le Fontenelle GROUP BY num_film, titre HAVING COUNT(*)>2;

Ordre d évaluation d une requête La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) 1 La clause FROM est la première évaluée 2 Puis, la sélection de la clause WHERE s opère sur la table intermédiaire générée par la clause FROM 3 Les groupes sont ensuite constitués en respectant les spécifications de la clause GROUP BY 4 C est alors que la clause HAVING est appliquée pour opérer sa tâche de sélection sur les groupes 5 Enfin, la clause SELECT intervient pour réaliser son travail de projection et d évaluation des fonctions d agrégation

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Les résultats de deux requêtes peuvent être combinés en utilisant les opérateurs ensemblistes d union (UNION), d intersection (INTERSECT) et de différence (EXCEPT) : <requ^ete_1> {UNION INTERSECT EXCEPT} <requ^ete_2> [...] Il faut que <requ^ete 1> et <requ^ete 2> aient le même schéma Il est possible de chaîner plusieurs opérations ensemblistes

La clause FROM (2ème partie) : les jointures Les clauses GROUP BY et HAVING et les fonctions d agrégation Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT Traduction des opérateurs de l algèbre relationnelle (suite) Traduction des opérateurs de l algèbre relationnelle (suite) L union R 1 R 2 se traduit en SQL par : SELECT * FROM R_1 UNION SELECT * FROM R_2 L intersection R 1 R 2 se traduit en SQL par : SELECT * FROM R_1 INTERSECT SELECT * FROM R_2 La différence R 1 R 2 se traduit en SQL par : SELECT * FROM R_1 EXCEPT SELECT * FROM R_2