+ All Categories
Home > Documents > STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le...

STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le...

Date post: 01-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
99
Catégorie : Informatique / Base de données STRUCTURED QUERY LANGUAGE (SQL) Version 1.4 du 01/03/2017 Emmanuel Fruchart
Transcript
Page 1: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Catégorie : Informatique / Base de données

STRUCTURED QUERY LANGUAGE

(SQL)

Version 1.4 du 01/03/2017

Emmanuel Fruchart

Page 2: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 2/99 01/03/17

SOMMAIRE

SOMMAIRE ..................................................................................................................................................................... 2

AVANT-PROPOS............................................................................................................................................................. 4

INTRODUCTION AU LANGAGE SQL ........................................................................................................................ 5

I PRESENTATION HISTORIQUE ................................................................................................................................. 5 II DESCRIPTION TECHNIQUE ...................................................................................................................................... 6

BASE DE DONNEES EXEMPLE : BDCOURS ............................................................................................................ 7

I CAHIER DES CHARGES ........................................................................................................................................... 7

A Années scolaires .............................................................................................................................................. 8 B Périodes scolaires ............................................................................................................................................ 9 C Classes ........................................................................................................................................................... 10 D Matières ......................................................................................................................................................... 11 E Professeurs .................................................................................................................................................... 12 F Professeurs de remplacement ........................................................................................................................ 13

G Enseignements ............................................................................................................................................... 14 II MODELE RELATIONNEL ....................................................................................................................................... 15

LE LANGAGE DE DEFINITION DES DONNEES ................................................................................................... 17

I INTRODUCTION.................................................................................................................................................... 17

II LES TYPES DE DONNEES SQL .............................................................................................................................. 17 A Les types chaînes de caractères ..................................................................................................................... 17

B Les types numériques ..................................................................................................................................... 19 C Les types temporels ........................................................................................................................................ 21 D Les types binaires .......................................................................................................................................... 22 E Les types pour la base exemple bdcours ........................................................................................................ 23

III CREATION ET SUPPRESSION D'UNE BASE DE DONNEES ......................................................................................... 24

A Création d'une base de données .................................................................................................................... 24

B Suppression d'une base de données ............................................................................................................... 24

IV CREATION, MISE A JOUR, SUPPRESSION D'UNE TABLE .......................................................................................... 25

A Création d'une table ...................................................................................................................................... 25 B Mise à jour d'une table .................................................................................................................................. 28 C Suppression d'une table ................................................................................................................................. 28

D Création de la base exemple bdcours ............................................................................................................ 29

LE LANGAGE DE MANIPULATION DES DONNEES ............ ............................................................................... 31

I INTRODUCTION.................................................................................................................................................... 31

II INSERTION D'UNE DONNEE DANS UNE TABLE ....................................................................................... 32

A Commande d'insertion d'une seule donnée .................................................................................................... 32

B Insertion de données primaires dans la base exemple bdcours ..................................................................... 33 III INTERROGATION DES DONNEES ................................................................................................................ 35

A Interrogation des données d'une seule table, sans regroupement ................................................................. 35 1) Introduction ................................................................................................................................................................. 35 2) Les mots clés SELECT, ALL, DISTINCT .................................................................................................................. 36

3) Les clauses de sélection............................................................................................................................................... 39 4) Critères de sélection .................................................................................................................................................... 50 5) Critères de tri ............................................................................................................................................................... 60

B Interrogation des données d'une seule table, avec regroupement(s) ............................................................. 63 1) Clauses de regroupement ............................................................................................................................................ 64 2) Critères de regroupement ............................................................................................................................................ 66

C Interrogation des données de plusieurs tables ............................................................................................... 67

1) Requêtes imbriquées ................................................................................................................................................... 68 2) Union, intersection, différence .................................................................................................................................... 75 3) Jointures ...................................................................................................................................................................... 81

IV INSERTION D'UN ENSEMBLE DE DONNEES EN UNE SEULE FOIS ............................................................................. 93 V M ISE A JOUR DE DONNEES ................................................................................................................................... 94

VI SUPPRESSION DE DONNEES .................................................................................................................................. 95

Page 3: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 3/99 01/03/17

TRANSACTIONS / ACCES CONCURRENTS. ......................................................................................................... 96

I TRANSACTIONS ................................................................................................................................................... 96

II ACCES CONCURRENTS ......................................................................................................................................... 96

CONFIDENTIALITE (OU CONTROLE) DES DONNEES ......... ............................................................................. 97

I OCTROI DE PRIVILEGES ....................................................................................................................................... 98

II RETRAIT DE PRIVILEGES ...................................................................................................................................... 99

Page 4: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 4/99 01/03/17

AVANT-PROPOS Le langage SQL étant fortement lié à ces concepts, des connaissances dans les domaines

suivants sont supposées acquises : � systèmes de gestion de bases de données (couramment appelés SGBD) � modèle relationnel / algèbre relationnelle

Page 5: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 5/99 01/03/17

INTRODUCTION AU LANGAGE SQL

I PRESENTATION HISTORIQUE

SQL (Structured Query Language) est, comme sa traduction en français l'indique, un langage structuré de requêtes.

A l'origine, SQL est une évolution du langage SEQUEL (Structured English as a QUEry

Language") développé par la compagnie IBM dans les années 70 pour accompagner son premier SGBD relationnel appelé SYSTEM-R.

SQL est peu à peu devenu la norme en matière de langage relationnel. Plusieurs versions

apparaissent successivement :

� SQL/86 (datant de 1986) est le premier standard officiel ratifié par les comités ISO (International Organization for Standardization) et ANSI (American National Standards Institute).

� SQL/89 permet en plus la définition des contraintes de référence. � SQL/92, encore appelé SQL-2 ou SQL Standard, étend la norme avec les caractéristiques

suivantes : � Mise en place des connexions et sessions pour le client / serveur. � Normalisation des types de données date et heure. � Ajout explicite des opérateurs d'intersection et de différence. � Généralisation de l'opérateur de jointure. � Définition des contraintes d'intégrité. � Traitement du SQL dynamique. � Introduction d'un catalogue pour chaque base de données.

C'est sur cette norme SQL/92, qu'on appellera dans toute la suite SQL Standard, que ce support de cours sera basé.

Page 6: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 6/99 01/03/17

II DESCRIPTION TECHNIQUE

SQL admet les caractéristiques suivantes :

� C'est un langage relationnel de type ensembliste (en particulier, il n'utilise pas de variable !) � On dit que le langage SQL réalise une intégration verticale : il est adapté aussi bien à

l'administrateur de base de données qu'à l'architecte d'applications et qu'au développeur. Les trois types d'utilisateurs utilisent la même gamme de mots réservés, dans des portées peut-être différentes.

� On dit que le langage SQL. réalise une intégration horizontale : il met à la disposition d'un

utilisateur quelconque d'une base de données relationnelle des commandes qui permettent de : � définir les données (on parle de LDD ou Langage de Définition des Données). � manipuler les données (on parle de LMD ou Langage de Manipulation des Données). � contrôler les données (on parle de LCD, ou Langage de Contrôle des Données).

� Il peut être interprété directement, ou encore incorporé (embedded) dans un langage procédural (type C ou Pascal).

� Tous les principaux SGBD relationnels (SGBDR) du marché, dont DB2, Oracle, Informix, SQL

Server, Sybase, Ingres ou Access ont adopté SQL. Cependant, chaque SGBDR utilise sa propre version, sa propre variante du langage SQL. Il existe donc un ensemble de dialectes SQL, mais ceux ci étant relativement proches les uns des autres, SQL est un langage relativement portable.

Page 7: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 7/99 01/03/17

BASE DE DONNEES EXEMPLE : BDCOURS

I CAHIER DES CHARGES

Le responsable des enseignements d’un lycée souhaite gérer les enseignements dispensés. Il souhaite mettre en place la base de données bdcours, contenant les informations et tables suivantes :

Page 8: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 8/99 01/03/17

A Années scolaires Nom de la table : annee Champs : id_annee entier desc_annee 50 caractères nb_filles entier nb_garcons entier Une année scolaire de la table annee se définit de manière unique par son identifiant id_annee. Le champ desc_annee contient quant à lui une description littérale de l'année scolaire ainsi définie. Les champs nb_filles et nb_garçons sont là pour permettre d'établir des statistiques. Exemple :

id_annee desc_annee nb_filles nb_garcons

2014 Année Scolaire 2014-2015 150 150 2015 Année Scolaire 2015-2016 157 142

Page 9: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 9/99 01/03/17

B Périodes scolaires Nom de la table : periode Champs : id_periode 2 caractères desc_periode 50 caractères

Une période de la table periode représente un trimestre de l’année scolaire. Chaque période se définit de manière unique par son identifiant littéral id_periode. Le champ desc_periode contient quant à lui une description littérale de la periode ainsi définie. Exemple :

id_periode desc_periode

1T Premier trimestre 2T Deuxième trimestre 3T Troisième trimestre

Page 10: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 10/99 01/03/17

C Classes Nom de la table : classe Champs : id_classe 4 caractères desc_classe 50 caractères

Au sein du lycée, on retrouve chaque année les mêmes classes (avec des élèves différents). Une classe de la table classe se définit de manière unique par son identifiant littéral id_classe. Le champ desc_classe contient quant à lui une description littérale de la classe ainsi définie. Exemple :

id_classe desc_classe

2ND1 Seconde 1 2ND2 Seconde 2 2ND3 Seconde 3 1LIT 1ère L 1SES 1ère ES 1SCI 1ère S TLIT Terminale L TSES Terminale ES TSCI Terminale S

Page 11: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 11/99 01/03/17

D Matières Nom de la table : matiere Champs : id_matiere 4 caractères desc_matiere 50 caractères Chaque matière enseignée de la table matiere se définit de manière unique par son identifiant littéral id_matiere. Le champ desc_matiere contient quant à lui sa description. Exemple : id_matiere desc_matiere

ANGL Anglais FRAN Français HGEO Histoire Géographie MATH Mathématiques PHCH Physique Chimie PHIL Philosophie SCVT Sciences et Vie de la Terre SECS Sciences Economiques et Sociales

Page 12: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 12/99 01/03/17

E Professeurs Nom de la table : professeur Champs : id_professeur 8 caractères nom 50 caractères prenom 50 caractères sexe 1 caractère date_naissance date id_matiere 4 caractères Un professeur du lycée est caractérisé dans la table professeur par son identifiant littéral id_professeur. Les champs nom, prenom et date_naissance donnent les informations minimales sur le professeur. A noter qu’un même professeur peut enseigner éventuellement plusieurs matières mais possède une matière de rattachement qui est donnée par le champ id_matiere. Exemple :

id_professeur nom prenom sexe date_naissance id_matiere

DUBOISAM Dubois Amélie F 1980-01-30 ANGL LEROYTHO Leroy Thomas H 1985-06-05 ANGL DUBOISGE Dubois Gérard H 1981-02-25 FRAN MOREAUPA Moreau Patrick H 1986-07-01 FRAN DURANDST Durand Stéphane H 1983-04-15 HGEO MORELSTE Morel Stéphanie F 1990-11-16 HGEO FOURNIER Fournier Nicolas H 1989-10-21 MATH PETITCHR Petit Christophe H 1982-03-20 MATH GARCIATH Garcia Thierry H 1988-09-26 PHCH THOMASVI Thomas Vincent H 1991-12-11 PHCH GIRARDAN Girard Antoine H 1992-01-21 PHIL LAMBERTA Lambert Alice F NULL PHIL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT MARTINEZ Martinez Nathalie F 1993-02-14 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS ROUSSELJ Roussel Jeanne F NULL SECS

Page 13: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 13/99 01/03/17

F Professeurs de remplacement Nom de la table : professeur_rem Champs : id_professeur 8 caractères nom 50 caractères prenom 50 caractères sexe 1 caractère date_naissance date id_matiere 4 caractères Un professeur remplaçant du lycée est caractérisé dans la table professeur_rem par son identifiant littéral id_professeur. Les champs nom, prenom et date_naissance donnent les informations minimales sur le professeur. Exemple :

id_professeur nom prenom sexe date_naissance id_matiere

DUBOISAM Dubois Amélie F 1980-01-30 ANGL LEROYTHO Leroy Thomas H 1985-06-05 ANGL DUBOISGE Dubois Gérard H 1981-02-25 FRAN MOREAUPA Moreau Patrick H 1986-07-01 FRAN DURANDST Durand Stéphane H 1983-04-15 HGEO MORELSTE Morel Stéphanie F 1990-11-16 HGEO FOURNIER Fournier Nicolas H 1989-10-21 MATH PETITCHR Petit Christophe H 1982-03-20 MATH GARCIATH Garcia Thierry H 1988-09-26 PHCH THOMASVI Thomas Vincent H 1991-12-11 PHCH GIRARDAN Girard Antoine H 1992-01-21 PHIL LAMBERTA Lambert Alice F NULL PHIL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT MARTINEZ Martinez Nathalie F 1993-02-14 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS ROUSSELJ Roussel Jeanne F NULL SECS

Page 14: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 14/99 01/03/17

G Enseignements Nom de la table : enseignement Champs :

id_annee entier id_periode 2 caractères id_classe 4 caractères id_matiere 4 caractères id_professeur 8 caractères moyenne_classe réel Un enseignement se définit de manière unique dans la table enseignement par un quatuor (id_annee, id_periode, id_classe, id_matiere). Un professeur, caractérisé par son identifiant id_professeur, ainsi qu'une moyenne de classe moyenne_classe lui sont attribués. Nécessairement, les champs id_annee, id_periode, id_classe, id_matiere, id_professeur de la table enseignement doivent être respectivement référencés dans les tables annee, periode, classe, matiere et professeur. Exemple : id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 ANGL DUBOISAM 11.5 2014 1T 2ND1 FRAN DUBOISGE 10.1 2014 1T 2ND1 HGEO DURANDST 13 2014 1T 2ND1 MATH FOURNIER 10.4 2014 1T 2ND1 PHCH GARCIATH 12.1 2014 1T 2ND1 SCVT LEFEBVRE 11.8 2014 1T 2ND1 SECS LEROYPHI 14.3

Page 15: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 15/99 01/03/17

II MODELE RELATIONNEL Le schéma relationnel de la base de données est donné ci-dessous :

Le(s) champ(s) formant la clé primaire des tables est (sont) en gras dans le schéma. Les liens entre les champs de différentes tables représentent les clés étrangères. La clé primaire de la table annee est le champ id_annee. La clé primaire de la table periode est le champ id_periode. La clé primaire de la table classe est le champ id_classe. La clé primaire de la table matiere est le champ id_matiere. La clé primaire de la table professeur est le champ id_professeur. La clé primaire de la table professeur_rem est le champ id_professeur. La clé primaire de la table enseignement est le quatuor id_annee, id_periode, id_classe, id_matiere.

Page 16: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 16/99 01/03/17

Le champ id_matiere de la table matiere est une clé étrangère pour le champ id_matiere de la table professeur Le champ id_matiere de la table matiere est une clé étrangère pour le champ id_matiere de la table professeur_rem Le champ id_annee de la table annee est une clé étrangère pour le champ id_annee de la table enseignement. Le champ id_periode de la table periode est une clé étrangère pour le champ id_periode de la table enseignement. Le champ id_classe de la table classe est une clé étrangère pour le champ id_classe de la table enseignement. Le champ id_matiere de la table matiere est une clé étrangère pour le champ id_matiere de la table enseignement. Le champ id_professeur de la table professeur est une clé étrangère pour le champ id_professeur de la table enseignement.

Page 17: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 17/99 01/03/17

LE LANGAGE DE DEFINITION DES DONNEES

I INTRODUCTION Le LDD, Langage de Définition des Données (DDL en anglais, Data Definition Language)

est l'ensemble des commandes permettant de définir , modifier et supprimer un objet d'une base de données relationnelle.

Nous allons d'abord nous intéresser aux différents types SQL possibles pour les champs.

II LES TYPES DE DONNEES SQL

Il existe 4 grandes classes de types : les types chaînes de caractères, les types numériques, les types temporels et les types binaires.

A Les types chaînes de caractères

Introduction

SQL Standard introduit les 2 types chaînes de caractères suivants :

� CHAR(n) � VARCHAR(n) Définition de CHAR(n)

CHAR(n) s'utilise pour une chaîne de caractères de longueur fixe, avec n entre 1 et 16383.

Pour ce type :

� On ne peut insérer de chaîne dont la longueur dépasse n. � Une chaîne dont la longueur est inférieure à n sera complétée par des espaces (primordial

pour la comparaison de chaînes).

Page 18: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 18/99 01/03/17

Définition de VARCHAR(n)

VARCHAR(n), quant à lui, s'utilise pour une chaîne de caractères de longueur variable, avec n compris entre 1 et 16383.

Comme pour CHAR(n), il faut consulter la documentation du SGBD pour connaître la valeur maximale de n.

Comment choisir ? De manière générale, l'utilisation de CHAR est à privilégier si le contenu de la colonne est

imprévisible, mais de taille maximale connue. A l'opposé, si les valeurs de la colonne occupent en général peu d'espace et que l'utilisation de la taille maximale de la colonne fait exception, on utilisera de préférence le type VARCHAR. Utilisation de constantes chaînes

En SQL Standard, les constantes chaînes de caractères sont entourées par des apostrophes (les guillemets sont aussi souvent tolérés). Si la chaîne elle-même contient une apostrophe, celle ci doit être doublée.

Par exemple 'L''eau vive'.

Portabilité Chaque SGBD impose sa propre longueur maximale pour n. Il faut donc dans tous les cas

consulter la documentation pour avoir ce renseignement. Pour le reste, les types standard sont quasiment implémentés sur tous les SGBD relationnels courants (le cas Oracle est traité au paragraphe suivant).

Page 19: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 19/99 01/03/17

B Les types numériques Introduction

SQL Standard introduit les types numériques suivants :

� SMALLINT � INTEGER � NUMERIC(p,d) � DECIMAL(p,d) � REAL � DOUBLE PRECISION � FLOAT

Définition de SMALLINT

SMALLINT s'utilise pour un entier signé entre –32768 et 32767.

Définition de INTEGER

INTEGER s'utilise pour un entier signé entre –231 et 231 - 1. Définition de NUMERIC(p, d) et DECIMAL(p, d)

NUMERIC(p,d) ou DECIMAL(p,d) s'emploie pour un nombre décimal à p chiffres significatifs dont d après la virgule. Définition de REAL

REAL s'utilise pour un nombre réel dit à simple précision, avec au moins 7 chiffres significatifs.

Page 20: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 20/99 01/03/17

Définition de DOUBLE PRECISION et FLOAT

DOUBLE PRECISION ou FLOAT s'emploie pour un nombre réel dit à double précision, avec au moins 15 chiffres significatifs.

Utilisation de constantes numériques

A noter que les constantes numériques ont un format "classique". Par exemple, –5 ou 2.5 ou même 5.4E-5 (pour le réel 5.4 * 10-5).

Portabilité Il existe des divergences quant à l’implémentation de ces types numériques standard et

l’ajout d’autres types numériques dans les différents SGBD existants. Comme pour les types littéraux, la documentation spécifique au SGBD utilisé doit donc être consultée avant d'utiliser les types numériques.

Page 21: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 21/99 01/03/17

C Les types temporels Introduction

SQL Standard introduit les types temporels suivants :

� DATE � TIME � TIMESTAMP � INTERVAL

Définition de DATE

Le type DATE, comme son nom l'indique, s'utilise pour une date, 2 chiffres étant réservés

pour le jour, 2 pour le mois et 4 pour l'année. Définition de TIME Le type TIME représente une heure, au format "heure minute seconde". Attention, les secondes peuvent éventuellement contenir un certain nombre de décimales. Définition de TIMESTAMP

Le type TIMESTAMP s'emploie pour un moment précis, c'est à dire une date avec heures, minutes et secondes avec 6 chiffres après la virgule, c'est à dire une précision en microsecondes. Définition de INTERVAL

Le type INTERVAL s'emploie pour un intervalle de temps.

Utilisation de constantes temporelles Le format des constantes de type temporel dépend des options que l'administrateur de la

base de données a choisies à la création de la base (par exemple, '01/01/2000' si mode "français" ou '2000/01/01' si mode "anglais").

Page 22: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 22/99 01/03/17

Portabilité Il existe des divergences quant à l’implémentation des types temporels SQL Standard et

l’ajout d’autres types temporels dans les différents SGBD relationnels existants. Là encore, la documentation spécifique au SGBD utilisé doit donc être consultée avant d'utiliser les types temporels.

D Les types binaires

Introduction Ces types peuvent servir pour l'enregistrement de données type images et sons, mais nous ne

les utiliserons pas dans le cadre de ce cours. SQL Standard introduit les types binaires suivants :

� BIT � BIT VARYING

Définition de BIT

BIT s'utilise pour un type binaire de longueur constante. Définition de BIT VARYING

BIT VARYING s'emploie pour un type binaire de longueur variable.

Page 23: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 23/99 01/03/17

E Les types pour la base exemple bdcours

Afin de facilement pouvoir porter notre base exemple sur des S.G.B.D. multiples, on va utiliser les types CHAR(n) pour les chaînes de caractères, INTEGER pour les entiers, FLOAT pour les réels et DATE pour les dates.

Ainsi, on obtiendra les types suivants :

annee id_annee INTEGER

desc_annee CHAR(50) nb_filles INTEGER nb_garcons INTEGER periode

id_periode CHAR(2) desc_periode CHAR(100) classe

id_classe CHAR(4) desc_classe CHAR(100)

matiere

id_matiere CHAR(4) desc_matiere CHAR(100) professeur professeur_rem

id_professeur CHAR(8) id_professeur CHAR(8) nom CHAR(50) nom CHAR(50) prenom CHAR(50) prenom CHAR(50) sexe CHAR(1) sexe CHAR(1) date_naissance DATE date_naissance DATE id_matiere CHAR(4) id_matiere CHAR(4) enseignement

id_annee INTEGER id_periode CHAR(2) id_classe CHAR(4) id_matiere CHAR(4) id_professeur CHAR(8) moyenne_classe FLOAT

Page 24: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 24/99 01/03/17

III CREATION ET SUPPRESSION D'UNE BASE DE DONNEES A Création d'une base de données

Instruction standard SQL de création d'une base CREATE DATABASE nom_base; Le caractère ";" marque la fin de toute requête S.Q.L. Attention, sous certains S.G.B.D, les bases de données sont en fait créés par l'administrateur

au moment de la configuration du S.G.B.D. par des outils dédiés, de sorte que l'instruction ci-dessus est obsolète. L'utilisateur, lors de la connexion à une base de données, spécifie son nom d'utilisateur, son mot de passe, et l'alias de base utilisée. Il peut alors accéder alors aux objets de cette base de données.

B Suppression d'une base de données Instruction standard SQL de suppression d'une base DROP DATABASE nom_base; Attention, sous certains S.G.B.D., les bases de données sont en fait gérées par

l'administrateur au moyen d'outils dédiés, de sorte que l'instruction ci-dessus est obsolète.

Page 25: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 25/99 01/03/17

IV CREATION, MISE A JOUR, SUPPRESSION D'UNE TABLE A Création d'une table

Instruction standard SQL de création d'une table (aussi valable sous Oracle)

CREATE TABLE nom_table ( nom_ colonne type_ colonne [DEFAULT valeur] [contrainte_colonne] , …………………. …………………. […………………...] [……………..……..], nom_ colonne type_ colonne [DEFAULT valeur] [contrainte _colonne], CONSTRAINT nom_contrainte_table contrainte_table , ……………….. ……………………….. ………………… , CONSTRAINT nom_contrainte_table contrainte_table ) ;

Il est important de noter que les paramètres entre crochets sont facultatifs donc optionnels. Il

faut faire très attention à la syntaxe précise (notamment, ne pas oublier de virgules, ni en rajouter avant de fermer la parenthèse finale de l'instruction).

Noms des colonnes Les noms des colonnes seront, de préférence, des noms communs, sans caractères spéciaux,

ni accents. Types des colonnes Les types de colonnes ont été étudiées dans II. Valeurs par défaut Ces valeurs sont des constantes du type de la colonne (ex : 2000 pour une colonne de type

INTEGER, 500.00 pour une colonne de type FLOAT, 'Chaîne par défaut' pour une colonne chaîne de caractères).

Page 26: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 26/99 01/03/17

Contraintes de colonnes Les contraintes de colonne possibles sont :

� PRIMARY KEY : pour dire que la colonne en question est la clé primaire de la table. � NOT NULL : pour dire que les valeurs de la colonne doivent absolument être renseignées. � UNIQUE : pour empêcher la présence de doublons dans les valeurs de la colonne. � CHECK (expression_de_condition_colonne) : pour spécifier que les données de la colonne

doivent respecter une certaine condition portant sur la colonne uniquement. � REFERENCES nom_table_reference (nom_colonne_reference) : pour spécifier que la

colonne est reliée à une clé étrangère extérieure qui est le champ nom_colonne_reference de la table nom_table_reference.

Noms des contraintes de tables Les noms des contraintes de table seront, de préférence, des noms communs, sans caractères

spéciaux, ni accents, composés classiquement de symboles représentant les types de contrainte (exemple PKperiode pour la clé primaire de la table periode).

Contraintes de tables Les contraintes de table possibles sont :

� PRIMARY KEY (nom_colonne1, nom_colonne2, … ) : pour dire que la clé primaire de la table est formée des champs nom_colonne1, nom_colonne2, …

� UNIQUE(nom_colonne1, nom_colonne2, … ) : pour empêcher la présence de doublons dans

les valeurs des t - uplets (valeur_colonne1, valeur_colonne2, …). � CHECK (expression_de_condition_table) : pour spécifier que les données de la table doivent

respecter une certaine condition portant sur tout ou partie des colonnes de la table. � FOREIGN KEY(nom_colonne) REFERENCES nom_table_ref (nom_colonne_ref) : pour

spécifier que la colonne est reliée à une clé étrangère extérieure qui est le champ nom_colonne_ref de la table nom_table_ref.

Les expressions de conditions sur une colonne ou sur la table (contraintes CHECK colonne

ou table) seront étudiées plus en détails dans IV. En effet, elles ont la même syntaxe que les critères d'interrogation dans les requêtes SQL. Des exemples de telles expressions seront étudiées à la fin de ce chapitre lors de la création de la base exemple bdcours.

Page 27: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 27/99 01/03/17

Remarque

Sous certains autres S.G.B.D. du marché, on peut aussi créer une table en utilisant le résultat d'une requête de sélection (voir ci-après, chapitre IV.) de la manière suivante :

CREATE TABLE nom_table AS SELECT …. FROM … ; La table créée comportera les colonnes sélectionnées dans la requête effectuée (avec leur

type d'origine) et sera initialisée avec les données résultant de cette même requête.

Page 28: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 28/99 01/03/17

B Mise à jour d'une table

Instruction standard SQL de mise à jour d'une table (aussi valable sous Oracle) ALTER TABLE nom_table ordre_de_mise_a_jour; Ordres de mise à jour Ils se déclinent sous 5 formes :

� Ajout d'une colonne à la définition de la table ADD COLUMN nom_ colonne type_ colonne [DEFAULT valeur] [contrainte_colonne] � Ajout d'une contrainte de table à la définition de la table ADD CONSTRAINT nom_contrainte_table contrainte_table � Modification de la définition d'une colonne (nécessairement déjà existante) ALTER nom_ colonne type_ colonne [DEFAULT valeur] [contrainte_colonne] � Suppression d'une colonne à la définition de la table DROP COLUMN nom_ colonne � Suppression d'une contrainte de table à la définition de la table DROP CONSTRAINT nom_contrainte_table C Suppression d'une table

Instruction standard SQL de suppression d'une table (aussi valable sous Oracle) DROP TABLE nom_ table;

Page 29: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 29/99 01/03/17

D Création de la base exemple bdcours

Un script SQL est un certain nombre de commandes SQL, séparées par des points-virgules, visant à effectuer un certain nombre d’opérations sur une base de données (définition d’une base, insertion de données, mise à jour…)

Voici un exemple de script SQL standard de création des tables de la base de données

exemple bdcours :

------------------------------------------------------------------------------------------------------------------------ create database if not exists bdcours; use bdcours; drop table if exists enseignement; drop table if exists professeur; drop table if exists professeur_rem; drop table if exists annee; drop table if exists periode; drop table if exists classe; drop table if exists matiere; create table annee ( id_annee integer NOT NULL, desc_annee char(50), nb_filles integer, nb_garcons integer, constraint PK_annee PRIMARY KEY(id_annee), constraint CK_annee CHECK(id_annee >= 2014 and id_annee < 2500) ); create table periode ( id_periode char(2) NOT NULL, desc_periode char(100), constraint PK_periode PRIMARY KEY(id_periode) ); create table classe ( id_classe char(4) NOT NULL, desc_classe char(100), constraint PK_classe PRIMARY KEY(id_classe) ); create table matiere ( id_matiere char(4) NOT NULL, desc_matiere char(100), constraint PK_matiere PRIMARY KEY(id_matiere) );

Page 30: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 30/99 01/03/17

create table professeur ( id_professeur char(8) NOT NULL, nom char(50) NOT NULL, prenom char(50) NOT NULL, sexe char(1) NOT NULL, date_naissance date, id_matiere char(4) NOT NULL, constraint PK_professeur PRIMARY KEY(id_professeur), constraint FK_prof_mat FOREIGN KEY(id_matiere) REFERENCES MATIERE(id_matiere), constraint CK_prof_sexe CHECK(sexe IN ('H', 'F')) ); create table professeur_rem ( id_professeur char(8) NOT NULL, nom char(50) NOT NULL, prenom char(50) NOT NULL, sexe char(1) NOT NULL, date_naissance date, id_matiere char(4) NOT NULL, constraint PK_profrem PRIMARY KEY(id_professeur), constraint FK_profrem_mat FOREIGN KEY(id_matiere) REFERENCES MATIERE(id_matiere), constraint CK_profrem_sexe CHECK(sexe IN ('H', 'F')) ); create table enseignement ( id_annee integer NOT NULL, id_periode char(2) NOT NULL, id_classe char(4) NOT NULL, id_matiere char(4) NOT NULL, id_professeur char(8) NOT NULL, moyenne_classe float, constraint PK_enseign PRIMARY KEY

(id_annee, id_periode, id_classe, id_matiere), constraint FK_enseign_ann FOREIGN KEY(id_annee) REFERENCES ANNEE(id_annee), constraint FK_enseign_per FOREIGN KEY(id_periode) REFERENCES PERIODE(id_periode), constraint FK_enseign_cla FOREIGN KEY(id_classe) REFERENCES CLASSE(id_classe), constraint FK_enseign_mat FOREIGN KEY(id_matiere) REFERENCES MATIERE(id_matiere), constraint FK_enseign_prof FOREIGN KEY(id_professeur) REFERENCES PROFESSEUR(id_professeur), constraint CK_moyenne CHECK(moyenne_classe BETWEEN 0 AND 20) );

------------------------------------------------------------------------------------------------------------------------

Page 31: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 31/99 01/03/17

LE LANGAGE DE MANIPULATION DES DONNEES

I INTRODUCTION Le langage de manipulation des données (LMD, ou DML en anglais pour Data Manipulation

Language) est l'ensemble des commandes permettant d'interroger et de modifier les données d'une base de données relationnelle.

L'interrogation consiste en l'obtention de l'ensemble des tuplets qui satisfont un critère de

qualification. En S.Q.L., la commande d'interrogation est SELECT. On dit alors qu'on effectue une requête de sélection sur la base de données.

La modification revêt un triple aspect : ajout, mise à jour, et suppression de données. Il s'agit

respectivement des commandes INSERT, UPDATE et DELETE . Quand un champ (d'une colonne) d'un enregistrement d'une table est non renseigné, ou

encore vide, on dit que sa valeur est la valeur NULL. Ceci est vrai quel que soit le type du champ, chaîne de caractère, numérique, ou temporel. NULL ne représente ni zéro, ni une valeur par défaut quelconque. NULL représente une absence de valeur.

Un problème se pose lorsque dans un critère SQL par exemple, l'une des valeurs d'un des

attributs est la valeur NULL. Comment comparer par exemple un champ comme le nom d'un professeur et 2 valeurs comme "Sarlat" et NULL ?

La règle est qu'en pratique aucune règle de gestion de la valeur NULL n'existe en tant que

standard. Autrement dit, il faut soit consulter la documentation du S.G.B.D. sur lequel on travaille, soit utiliser en plus le test IS NULL ou IS NOT NULL (voir par la suite) en plus dans le critère à utiliser.

Page 32: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 32/99 01/03/17

II INSERTION D'UNE DONNEE DANS UNE TABLE

A Commande d'insertion d'une seule donnée

Instruction standard SQL d’insertion d'une seule donnée dans une table INSERT INTO nom_table VALUES (valeur_colonne1, valeur_colonne2, …);

Avec cette syntaxe, les valeurs de toutes les colonnes doivent être renseignées, éventuellement au besoin avec la valeur NULL.

Une deuxième syntaxe possible est :

INSERT INTO nom_table (colonneA, colonneB, …) VALUES (valeur_colonneA, valeur_colonneB, …); Avec cette syntaxe, seules les valeurs des colonnes A, B (quelles qu'elles soient) sont renseignées, les valeurs des autres colonnes pour la ligne insérée étant positionnés à NULL, ou à la valeur par défaut de la colonne s'il en existe une. Cette syntaxe est donc possible seulement si parmi les colonnes non renseignées ne figure aucune colonne avec la contrainte NOT NULL (notamment aucune colonne faisant partie de la clé primaire de la table).

Exemple illustratif de la première syntaxe

INSERT INTO professeur VALUES (' SARLATJE ', 'Sarlat', 'Jean-Michel', ‘H’, NULL, ‘AN GL’);

Exemple illustratif de la seconde syntaxe

INSERT INTO professeur (id_professeur, nom, prenom, sexe) VALUES (' SARLATJE ', 'Sarlat', 'Jean-Michel', ‘H’);

Page 33: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 33/99 01/03/17

B Insertion de données primaires dans la base exemple bdcours

Voici un exemple de script SQL standard d'insertion de données dans les tables de la base de données exemple bdcours, aussi applicable sous Oracle :

------------------------------------------------------------------------------------------------------------------------

use bdcours; delete from enseignement; delete from professeur; delete from annee; delete from periode; delete from classe; delete from matiere; insert into annee values (2014, 'Année Scolaire 2014-2015', 150, 150); insert into annee values (2015, 'Année Scolaire 2015-2016', 157, 142); insert into periode values ('1T', 'Premier trimestre'); insert into periode values ('2T', 'Deuxième trimestre'); insert into periode values ('3T', 'Troisième trimestre'); insert into classe values ('2ND1', 'Seconde 1'); insert into classe values ('2ND2', 'Seconde 2'); insert into classe values ('2ND3', 'Seconde 3'); insert into classe values ('1LIT', '1ère L'); insert into classe values ('1SES', '1ère ES'); insert into classe values ('1SCI', '1ère S'); insert into classe values ('TLIT', 'Terminale L'); insert into classe values ('TSES', 'Terminale ES'); insert into classe values ('TSCI', 'Terminale S'); insert into matiere values ('ANGL', 'Anglais'); insert into matiere values ('FRAN', 'Français'); insert into matiere values ('HGEO', 'Histoire Géographie'); insert into matiere values ('MATH', 'Mathématiques'); insert into matiere values ('PHCH', 'Physique Chimie'); insert into matiere values ('PHIL', 'Philosophie'); insert into matiere values ('SCVT', 'Sciences et Vie de la Terre'); insert into matiere values ('SECS', 'Sciences Economiques et Sociales');

Page 34: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 34/99 01/03/17

insert into professeur values ('DUBOISAM', 'Dubois', 'Amélie', 'F', '1980-01-30', 'ANGL'); insert into professeur values ('LEROYTHO', 'Leroy', 'Thomas', 'H', '1985-06-05', 'ANGL'); insert into professeur values ('DUBOISGE', 'Dubois', 'Gérard', 'H', '1981-02-25', 'FRAN'); insert into professeur values ('MOREAUPA', 'Moreau', 'Patrick', 'H', '1986-07-01', 'FRAN'); insert into professeur values ('DURANDST', 'Durand', 'Stéphane', 'H', '1983-04-15','HGEO'); insert into professeur values ('MORELSTE', 'Morel', 'Stéphanie','F', '1990-11-16', 'HGEO'); insert into professeur values ('FOURNIER', 'Fournier', 'Nicolas','H', '1989-10-21', 'MATH'); insert into professeur values ('PETITCHR', 'Petit', 'Christophe','H', '1982-03-20', 'MATH'); insert into professeur values ('GARCIATH', 'Garcia', 'Thierry','H','1988-09-26', 'PHCH'); insert into professeur values ('THOMASVI', 'Thomas', 'Vincent','H', '1991-12-11', 'PHCH'); insert into professeur values ('GIRARDAN', 'Girard', 'Antoine','H', '1992-01-21', 'PHIL'); insert into professeur values ('LAMBERTA', 'Lambert', 'Alice','F', NULL, 'PHIL'); insert into professeur values ('LEFEBVRE', 'Lefebvre', 'Géraldine','F', '1987-08-31','SCVT'); insert into professeur values ('MARTINEZ', 'Martinez', 'Nathalie','F', '1993-02-14', 'SCVT'); insert into professeur values ('LEROYPHI', 'Leroy', 'Philippe','H', '1984-05-10', 'SECS'); insert into professeur values ('ROUSSELJ', 'Roussel', 'Jeanne','F', NULL, 'SECS'); insert into professeur_rem values ('DUBOISAM', 'Dubois', 'Amélie', 'F', NULL, 'ANGL'); insert into professeur_rem values ('DURANDST', 'Durand', 'Stéphane', 'H', NULL, 'HGEO'); insert into professeur_rem values ('LEROYXAV', 'Leroy', 'Xavier', 'H', NULL, 'FRAN'); insert into professeur_rem values ('LAMBERTP', 'Lambert', 'Pierre', 'H', NULL, 'FRAN'); insert into professeur_rem values ('RICHARDP', 'Richard', 'Pascal', 'H', NULL, 'FRAN'); insert into professeur_rem values ('CASTELAI', 'Castelain', 'Alice', 'F', NULL, 'FRAN'); insert into enseignement values (2014, '1T', '2ND1', 'ANGL', 'DUBOISAM', 11.5); insert into enseignement values (2014, '1T', '2ND1', 'FRAN', 'DUBOISGE', 10.1); insert into enseignement values (2014, '1T', '2ND1', 'HGEO', 'DURANDST', 13); insert into enseignement values (2014, '1T', '2ND1', 'MATH', 'FOURNIER', 10.4); insert into enseignement values (2014, '1T', '2ND1', 'PHCH', 'GARCIATH', 12.1); insert into enseignement values (2014, '1T', '2ND1', 'SCVT', 'LEFEBVRE', 11.8); insert into enseignement values (2014, '1T', '2ND1', 'SECS', 'LEROYPHI', 14.3); insert into enseignement values (2014, '2T', '2ND1', 'ANGL', 'DUBOISAM', 11.4); insert into enseignement values (2014, '2T', '2ND1', 'FRAN', 'DUBOISGE', 10.8); insert into enseignement values (2014, '2T', '2ND1', 'HGEO', 'DURANDST', 13.2); insert into enseignement values (2014, '2T', '2ND1', 'MATH', 'FOURNIER', 10.7); insert into enseignement values (2014, '2T', '2ND1', 'PHCH', 'GARCIATH', 13.1); insert into enseignement values (2014, '2T', '2ND1', 'SCVT', 'LEFEBVRE', 11.4); insert into enseignement values (2014, '2T', '2ND1', 'SECS', 'LEROYPHI', 13.4); insert into enseignement values (2014, '3T', '2ND1', 'ANGL', 'DUBOISAM', 12.5); insert into enseignement values (2014, '3T', '2ND1', 'FRAN', 'DUBOISGE', 11.1); insert into enseignement values (2014, '3T', '2ND1', 'HGEO', 'DURANDST', 12.2); insert into enseignement values (2014, '3T', '2ND1', 'MATH', 'FOURNIER', 10.8); insert into enseignement values (2014, '3T', '2ND1', 'PHCH', 'GARCIATH', 13.1); insert into enseignement values (2014, '3T', '2ND1', 'SCVT', 'LEFEBVRE', 14.8); insert into enseignement values (2014, '3T', '2ND1', 'SECS', 'LEROYPHI', 11.3);

------------------------------------------------------------------------------------------------------------------------

Page 35: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 35/99 01/03/17

III INTERROGATION DES DONNEES

L'interrogation consiste en l'obtention de l'ensemble des t-uplets qui satisfont un critère de qualification. En S.Q.L., la commande d'interrogation est SELECT. On dit alors qu'on effectue une requête de sélection sur la base de données. On étudiera d'abord les mécanismes d'interrogation des données sur une seule table, avant de généraliser l'étude à l'interrogation de données provenant d'un ensemble de tables. A Interrogation des données d'une seule table, sans regroupement 1) Introduction

Instruction standard SQL la plus simple d’interrogation des données d’une table SELECT [ALL | DISTINCT] clause_de_selection FROM nom_table [WHERE critere_de_selection] [ORDER BY critere_de_tri];

Comme précédemment, il est important de noter que les paramètres entre crochets sont

facultatifs donc optionnels. Le symbole « | » montre un choix optionnel (de type l’un ou l’autre). Typiquement, le SELECT de base permet de "récupérer" certaines données d'une table dont

les valeurs satisfont une condition spécifique.

Page 36: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 36/99 01/03/17

2) Les mots clés SELECT, ALL, DISTINCT

Exemple d'illustration SELECT de base Liste des couples (nom, prénom) des professeurs dont le nom est Dubois

SELECT nom, prenom FROM professeur WHERE nom = 'Dubois';

L’expression "nom, prenom" est dans cette requête la clause de sélection. L'expression "professeur" est le nom de la table. L'expression "nom = 'Dubois'" est le critère de sélection. On remarque qu'aucun mot clé ALL ou DISTINCT n'est ici utilisé (voir ci-après). La réponse du S.G.B.D. à la requête est :

nom prenom

Dubois Amélie Dubois Gérard

Page 37: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 37/99 01/03/17

Exemple d'illustration SELECT de base avec le mot clé ALL Le mot clé ALL permet de garder tous les t-uplets réponse à la requête, même si certains

sont en double (c'est l'option par défaut, lorsqu'aucun mot ALL ou DISTINCT n'est présent) Liste des noms des professeurs répertoriés

SELECT nom FROM professeur;

D'après les définitions précédentes, cette requête peut tout aussi bien être remplacée par la

requête équivalente

SELECT ALL nom FROM professeur;

L’expression "nom" est dans cette requête la clause de sélection. L'expression "professeur" est le nom de la table. Il n'y a pas de critère de sélection.

Pour traiter cette requête, le S.G.B.D. va lister les lignes de la table professeur et

sélectionner uniquement les données de la colonne nom, sans éliminer d'éventuels doublons dans les réponses.

La réponse du S.G.B.D. à la requête sera donc :

nom

Dubois Leroy Dubois Moreau Durand Morel Fournier Petit Garcia Thomas Girard Lambert Lefebvre Martinez Leroy Roussel

On remarque que la réponse à la requête contient plusieurs données en doublons.

Page 38: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 38/99 01/03/17

Exemple d'illustration SELECT de base avec le mot clé DISTINCT Le mot clé DISTINCT permet d'éliminer les doublons dans les t-uplets réponse à la requête. Liste des noms distincts des professeurs répertoriés

SELECT DISTINCT nom FROM professeur;

Pour traiter cette requête, le S.G.B.D. va lister les lignes de la table professeur et

sélectionner les données de la colonne nom, en éliminant après coup les éventuels doublons dans les réponses.

Et la réponse du S.G.B.D. à la requête serait donc :

nom

Dubois Leroy Moreau Durand Morel Fournier Petit Garcia Thomas Girard Lambert Lefebvre Martinez Roussel

Page 39: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 39/99 01/03/17

3) Les clauses de sélection

Exemple d'illustration sélection de toutes les colonnes Liste des professeurs répertoriés (sous entendu avec toutes leurs caractéristiques)

SELECT * FROM professeur;

Dans cette requête, le symbole "*" représente l'ensemble des colonnes de la table professeur.

La requête est donc équivalente à la requête : SELECT id_professeur, nom, prenom, sexe, date_naissance, id_matiere FROM professeur; La réponse du S.G.B.D. serait donc le contenu de la table professeur, soit :

id_professeur nom prenom sexe date_naissance id_matiere

DUBOISAM Dubois Amélie F 1980-01-30 ANGL LEROYTHO Leroy Thomas H 1985-06-05 ANGL DUBOISGE Dubois Gérard H 1981-02-25 FRAN MOREAUPA Moreau Patrick H 1986-07-01 FRAN DURANDST Durand Stéphane H 1983-04-15 HGEO MORELSTE Morel Stéphanie F 1990-11-16 HGEO FOURNIER Fournier Nicolas H 1989-10-21 MATH PETITCHR Petit Christophe H 1982-03-20 MATH GARCIATH Garcia Thierry H 1988-09-26 PHCH THOMASVI Thomas Vincent H 1991-12-11 PHCH GIRARDAN Girard Antoine H 1992-01-21 PHIL LAMBERTA Lambert Alice F NULL PHIL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT MARTINEZ Martinez Nathalie F 1993-02-14 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS ROUSSELJ Roussel Jeanne F NULL SECS

Page 40: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 40/99 01/03/17

Exemple d'illustration sélection de certaines colonnes Liste (nom, prenom, date_naissance) des professeurs répertoriés

SELECT nom, prenom, date_naissance FROM professeur; La réponse du S.G.B.D. serait donc le contenu de la table professeur, en éliminant les colonnes non sélectionnées, soit :

nom prenom date_naissance

Dubois Amélie 1980-01-30 Leroy Thomas 1985-06-05 Dubois Gérard 1981-02-25 Moreau Patrick 1986-07-01 Durand Stéphane 1983-04-15 Morel Stéphanie 1990-11-16 Fournier Nicolas 1989-10-21 Petit Christophe 1982-03-20 Garcia Thierry 1988-09-26 Thomas Vincent 1991-12-11 Girard Antoine 1992-01-21 Lambert Alice NULL Lefebvre Géraldine 1987-08-31 Martinez Nathalie 1993-02-14 Leroy Philippe 1984-05-10 Roussel Jeanne NULL

Page 41: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 41/99 01/03/17

Exemple d'illustration incorporation de colonnes constantes chaines de caractères Liste des caractéristiques (sauf les identifiants) des professeurs répertoriés et incorporation

de la colonne constante chaîne de caractères 'DATE DE NAISSANCE' SELECT nom, prenom, sexe, 'DATE DE NAISSANCE', date_naissance FROM professeur; La réponse du S.G.B.D. serait donc le contenu de la table professeur, en éliminant les colonnes id_professeur et id_matiere, non sélectionnées ici, et en insérant une colonne constante chaîne de caractère, soit :

nom prenom sexe DATE DE NAISSANCE date_naissance

Dubois Amélie F DATE DE NAISSANCE 1980-01-30 Leroy Thomas H DATE DE NAISSANCE 1985-06-05 Dubois Gérard H DATE DE NAISSANCE 1981-02-25 Moreau Patrick H DATE DE NAISSANCE 1986-07-01 Durand Stéphane H DATE DE NAISSANCE 1983-04-15 Morel Stéphanie F DATE DE NAISSANCE 1990-11-16 Fournier Nicolas H DATE DE NAISSANCE 1989-10-21 Petit Christophe H DATE DE NAISSANCE 1982-03-20 Garcia Thierry H DATE DE NAISSANCE 1988-09-26 Thomas Vincent H DATE DE NAISSANCE 1991-12-11 Girard Antoine H DATE DE NAISSANCE 1992-01-21 Lambert Alice F DATE DE NAISSANCE NULL Lefebvre Géraldine F DATE DE NAISSANCE 1987-08-31 Martinez Nathalie F DATE DE NAISSANCE 1993-02-14 Leroy Philippe H DATE DE NAISSANCE 1984-05-10 Roussel Jeanne F DATE DE NAISSANCE NULL

Page 42: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 42/99 01/03/17

Exemple d'illustration incorporation de colonnes constantes numériques Liste des caractéristiques (sauf les identifiants) des professeurs répertoriés et incorporation

de la colonne constante numérique 2015 SELECT 2015, nom, prenom, sexe, date_naissance FROM professeur; La réponse du S.G.B.D. serait donc le contenu de la table professeur, en éliminant les colonnes id_professeur et id_matiere, non sélectionnées ici, et en insérant une colonne constante numérique, soit :

2015 nom prenom sexe date_naissance

2015 Dubois Amélie F 1980-01-30 2015 Leroy Thomas H 1985-06-05 2015 Dubois Gérard H 1981-02-25 2015 Moreau Patrick H 1986-07-01 2015 Durand Stéphane H 1983-04-15 2015 Morel Stéphanie F 1990-11-16 2015 Fournier Nicolas H 1989-10-21 2015 Petit Christophe H 1982-03-20 2015 Garcia Thierry H 1988-09-26 2015 Thomas Vincent H 1991-12-11 2015 Girard Antoine H 1992-01-21 2015 Lambert Alice F NULL 2015 Lefebvre Géraldine F 1987-08-31 2015 Martinez Nathalie F 1993-02-14 2015 Leroy Philippe H 1984-05-10 2015 Roussel Jeanne F NULL

Page 43: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 43/99 01/03/17

Exemple d'illustration fonctions arithmétiques sur les colonnes sélectionnées

Liste des années répertoriées avec identifiant indicé à 0 pour 2000, 1 pour 2001, etc…

SELECT id_annee - 2000, desc_annee FROM annee; La réponse du S.G.B.D. serait :

id_annee - 2000 desc_annee

14 Année Scolaire 2014-2015 15 Année Scolaire 2015-2016

Liste (id_annee, nombre total d'élèves) des années repertoriées

SELECT id_annee, nb_filles + nb_garcons FROM annee; La réponse du S.G.B.D. serait :

id_annee nb_filles + nb_garcons 2014 300 2015 299

Liste (id_annee, 'Pourcentage de filles : ', % de filles) des années répertoriées

SELECT id_annee, 'Pourcentage de filles :', nb_filles * 100 / (nb_filles + nb_garcons) FROM annee; La réponse à la requête serait :

id_annee Pourcentage de filles : nb_filles * 100 / (nb_filles + nb_garcons) 2014 Pourcentage de filles : 50.0000 2015 Pourcentage de filles : 52.5084

Page 44: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 44/99 01/03/17

Exemple d'illustration fonctions littérales LOWER et UPPER sur les colonnes sélectionnées Liste (nom en majuscules, prénom en minuscules, date_naissance) des professeurs

répertoriés

SELECT UPPER(nom), LOWER(prenom), date_naissance FROM professeur; La réponse du S.G.B.D. serait :

UPPER(nom) LOWER(prenom) date_naissance

DUBOIS amélie 1980-01-30 LEROY thomas 1985-06-05 DUBOIS gérard 1981-02-25 MOREAU patrick 1986-07-01 DURAND stéphane 1983-04-15 MOREL stéphanie 1990-11-16 FOURNIER nicolas 1989-10-21 PETIT christophe 1982-03-20 GARCIA thierry 1988-09-26 THOMAS vincent 1991-12-11 GIRARD antoine 1992-01-21 LAMBERT alice NULL LEFEBVRE géraldine 1987-08-31 MARTINEZ nathalie 1993-02-14 LEROY philippe 1984-05-10 ROUSSEL jeanne NULL

Page 45: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 45/99 01/03/17

Exemple d'illustration fonction littérale CONCAT (c oncaténation) sur les colonnes sélectionnées Liste (nom en majuscule espace prenom en minuscule, date_naissance) des professeurs

répertoriés SELECT CONCAT(UPPER(nom), ' ', LOWER(prenom)), date_naissance FROM professeur; La réponse du S.G.B.D. serait : A noter que la syntaxe de l'expression de concaténation est fortement dépendante du S.G.B.D. sur lequel on travaille (ex : CONCAT() ou || ou autre). Consulter la documentation pour de plus amples détails. CONCAT(UPPER(nom), ' ', LOWER(prenom)) date_naissance

DUBOIS amélie 1980-01-30 LEROY thomas 1985-06-05 DUBOIS gérard 1981-02-25 MOREAU patrick 1986-07-01 DURAND stéphane 1983-04-15 MOREL stéphanie 1990-11-16 FOURNIER nicolas 1989-10-21 PETIT christophe 1982-03-20 GARCIA thierry 1988-09-26 THOMAS vincent 1991-12-11 GIRARD antoine 1992-01-21 LAMBERT alice NULL LEFEBVRE géraldine 1987-08-31 MARTINEZ nathalie 1993-02-14 LEROY philippe 1984-05-10 ROUSSEL jeanne NULL

Page 46: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 46/99 01/03/17

Exemple d'illustration fonction littérale SUBSTRING (sous-chaine) sur les colonnes

sélectionnées

Liste sans doublons des 3 premières lettres des prénoms des professeurs répertoriés

SELECT DISTINCT SUBSTRING(prenom FROM 1 FOR 3) FROM professeur; La réponse du S.G.B.D. serait :

SUBSTRING(prenom FROM 1 FOR 3)

Amé Tho Gér Pat Sté Nic Chr Thi Vin Ant Ali Nat Phi Jea

Page 47: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 47/99 01/03/17

Exemple d'illustration fonction littérale CHARACTER _LENGTH (nombre de

caractères d'une chaîne) sur les colonnes sélectionnées Liste globale (prénom, longueur du prénom) des professeurs répertoriés

SELECT ALL prenom, CHARACTER_LENGTH(prenom) FROM professeur; La réponse du S.G.B.D. serait : prenom CHARACTER_LENGTH(prenom)

Amélie 6 Thomas 6 Gérard 6 Patrick 7 Stéphane 8 Stéphanie 9 Nicolas 7 Christophe 10 Thierry 7 Vincent 7 Antoine 7 Alice 5 Géraldine 9 Nathalie 8 Philippe 8 Jeanne 6 A noter que la syntaxe de l'expression du nombre de caractères est fortement dépendante du S.G.B.D. sur lequel on travaille (ex : CHARACTER_LENGTH () ou len() ou autre). Consulter la documentation pour de plus amples détails.

Page 48: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 48/99 01/03/17

Exemples d'illustration utilisation du mot clé COUNT S.Q.L. permet aussi de compter les lignes résultat d'une requête au moyen du mot clé

COUNT.

Nombre de professeurs répertoriés SELECT COUNT(*) FROM professeur;

Requête équivalente à

SELECT COUNT(prenom) FROM professeur; En pratique, on privilégie de loin la première forme. Dans les 2 cas, le S.G.B.D. va effectuer les requêtes SELECT sans les COUNT et va compter le nombre de lignes trouvées. Le résultat est donc ici :

COUNT(prenom)

16

Nombre de noms distincts répertoriés de professeurs SELECT COUNT(DISTINCT nom) FROM professeur; Le S.G.B.D. va effectuer la requête SELECT sans les COUNT, et récupérer 14 noms distincts (deux doublons). Il va compter le nombre de lignes trouvées. Le résultat est donc ici :

COUNT(DISTINCT nom)

14

Page 49: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 49/99 01/03/17

Exemples d'illustration utilisation des mot clé SUM, MIN, MAX, AVG S.Q.L. permet aussi de faire des calculs sur les lignes résultat d'une requête au moyen des

mots clé SUM (somme de), MIN (minimum), MAX (maximum), AVG (moyenne).

Plus grand nombre de filles, et plus petit nombre de filles des années

SELECT MAX(nb_filles), MIN(nb_filles) FROM annee; La réponse du S.G.B.D. serait :

MAX(nb_filles) MIN(nb_filles)

157 150

Somme des nombres de filles, moyenne du nombre de garçons de la table annee

SELECT SUM(nb_filles), AVG(nb_garcons) FROM annee; La réponse du S.G.B.D. serait : SUM(nb_filles) AVG(nb_garcons) 307 146.0000

Page 50: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 50/99 01/03/17

4) Critères de sélection

Exemples d'illustration utilisation des mots clé =, <> (différent de), <, >, <=, >=

Liste des caractéristiques du ou des professeurs dont le nom est 'Leroy'

SELECT * FROM professeur WHERE nom = 'Leroy'; La réponse du S.G.B.D. serait :

id_professeur nom prenom sexe date_naissance id_matiere

LEROYTHO Leroy Thomas H 1985-06-05 ANGL LEROYPHI Leroy Philippe H 1984-05-10 SECS

Liste des caractéristiques du ou des professeurs dont le nom est après 'Lombart' dans l'ordre

alphabétique

SELECT * FROM professeur WHERE nom > 'Lombart'; La réponse du S.G.B.D. serait (critère classique comparant les chaînes de caractères) :

id_professeur nom prenom sexe date_naissance id_matiere MOREAUPA Moreau Patrick H 1986-07-01 FRAN MORELSTE Morel Stéphanie F 1990-11-16 HGEO PETITCHR Petit Christophe H 1982-03-20 MATH THOMASVI Thomas Vincent H 1991-12-11 PHCH MARTINEZ Martinez Nathalie F 1993-02-14 SCVT ROUSSELJ Roussel Jeanne F NULL SECS

Page 51: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 51/99 01/03/17

Liste des années où il y a eu plus de 150 filles

SELECT * FROM annee WHERE nb_filles > 150; La réponse du S.G.B.D. serait :

id_annee desc_annee nb_filles nb_garcons

2015 Année Scolaire 2015-2016 157 142

Page 52: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 52/99 01/03/17

Exemples d'illustration utilisation des mots clé AND et OR

Liste des caractéristiques du ou des professeurs dont le nom est 'Leroy' ou le prénom est 'Géraldine'

SELECT * FROM professeur WHERE (nom = 'Leroy') OR (prenom = 'Géraldine'); La réponse du S.G.B.D. serait : id_professeur nom prenom sexe date_naissance id_matiere

LEROYTHO Leroy Thomas H 1985-06-05 ANGL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS

Liste des caractéristiques du ou des professeurs dont le nom est après 'Lombart' dans l'ordre

alphabétique et dont le prénom est avant 'Marc' dans l'ordre alphabétique

SELECT * FROM professeur WHERE (nom > 'Lombart') AND (prenom < 'Marc'); La réponse du S.G.B.D. serait (critère classique comparant les chaînes de caractères) : id_professeur nom prenom sexe date_naissance id_matiere PETITCHR Petit Christophe H 1982-03-20 MATH ROUSSELJ Roussel Jeanne F NULL SECS

Page 53: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 53/99 01/03/17

Liste des enseignements dont id_periode est '1T' et pour lesquels la moyenne de classe est

supérieure ou égale à 12 ou inférieure à 8.5

SELECT * FROM enseignement WHERE (id_periode = '1T') AND ( (moyenne_classe >= 12) OR (moyenne_classe < 8.5) ); La réponse du S.G.B.D. serait : id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 HGEO DURANDST 13 2014 1T 2ND1 PHCH GARCIATH 12.1 2014 1T 2ND1 SECS LEROYPHI 14.3

Page 54: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 54/99 01/03/17

Exemples d'illustration utilisation des mots clé BETWEEN et IN

Liste des enseignements pour lesquels la moyenne de classe est comprise entre 11 et 11.5

SELECT * FROM enseignement WHERE moyenne_classe BETWEEN 11.0 AND 11.5; La réponse du S.G.B.D. serait :

id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 ANGL DUBOISAM 11.5 2014 2T 2ND1 ANGL DUBOISAM 11.4 2014 2T 2ND1 SCVT LEFEBVRE 11.4 2014 3T 2ND1 FRAN DUBOISGE 11.1 2014 3T 2ND1 SECS LEROYPHI 11.3

Liste des caractéristiques du ou des professeurs dont le prénom est dans l'ensemble

{'Jacques', 'Thomas', 'Pierre')

SELECT * FROM professeur WHERE prenom IN ('Jacques', 'Thomas', 'Pierre'); La réponse du S.G.B.D. serait :

id_professeur nom prenom sexe date_naissance id_matiere LEROYTHO Leroy Thomas H 1985-06-05 ANGL

Liste des caractéristiques du ou des professeurs dont le prénom est dans l'ensemble

{'Géraldine', 'Thomas', 'Antoine') et le nom est avant ''Latour' dans l'ordre alphabétique

SELECT * FROM professeur WHERE prenom IN ('Géraldine', 'Thomas', 'Antoine') AND nom < 'Latour'; La réponse du S.G.B.D. serait : id_professeur nom prenom sexe date_naissance id_matiere GIRARDAN Girard Antoine H 1992-01-21 PHIL

Page 55: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 55/99 01/03/17

Exemples d'illustration utilisation du mot clé LIK E

Dans ces critères, on cherche des valeurs chaînes de caractères correspondant à un modèle donné. Au sein des modèles, le caractère '%' modélise une chaine quelconque de caractères (incluant une chaine vide), et le caractère '_' modélise 1 seul caractère.

Liste des caractéristiques du ou des professeurs dont le nom est de la forme '_e_o_'

SELECT * FROM professeur WHERE nom LIKE '_e_o_'; La réponse du S.G.B.D. serait :

id_professeur nom prenom sexe date_naissance id_matiere

LEROYTHO Leroy Thomas H 1985-06-05 ANGL LEROYPHI Leroy Philippe H 1984-05-10 SECS

Liste des caractéristiques du ou des professeurs dont le prénom comporte un 'r' en 4ème

position

SELECT * FROM professeur WHERE prenom LIKE '___r%'; La réponse du S.G.B.D. serait : id_professeur nom prenom sexe date_naissance id_matiere

MOREAUPA Moreau Patrick H 1986-07-01 FRAN

Page 56: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 56/99 01/03/17

Exemples d'illustration utilisation du mot clé NOT

Liste des enseignements pour lesquels la moyenne de classe n'est pas comprise entre 8 et 14

SELECT * FROM enseignement WHERE moyenne_classe NOT BETWEEN 8.0 AND 14.0; La réponse du S.G.B.D. serait :

id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 SECS LEROYPHI 14.3 2014 3T 2ND1 SCVT LEFEBVRE 14.8

Liste des caractéristiques du ou des professeurs dont le prénom n'est ni 'Amélie' ni 'Thomas'

ni 'Gérard' ni 'Stéphane' ni 'Patrick'

SELECT * FROM professeur WHERE prenom NOT IN ('Amélie', 'Thomas', 'Gérard', 'Stéphane', 'Patrick'); La réponse du S.G.B.D. serait :

id_professeur nom prenom sexe date_naissance id_matiere MORELSTE Morel Stéphanie F 1990-11-16 HGEO FOURNIER Fournier Nicolas H 1989-10-21 MATH PETITCHR Petit Christophe H 1982-03-20 MATH GARCIATH Garcia Thierry H 1988-09-26 PHCH THOMASVI Thomas Vincent H 1991-12-11 PHCH GIRARDAN Girard Antoine H 1992-01-21 PHIL LAMBERTA Lambert Alice F NULL PHIL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT MARTINEZ Martinez Nathalie F 1993-02-14 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS ROUSSELJ Roussel Jeanne F NULL SECS

Page 57: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 57/99 01/03/17

Liste des caractéristiques du ou des professeurs dont le prénom ne comporte pas un 'r' en

4ème position

SELECT * FROM professeur WHERE prenom NOT LIKE '___r%'; La réponse du S.G.B.D. serait : id_professeur nom prenom sexe date_naissance id_matiere

DUBOISAM Dubois Amélie F 1980-01-30 ANGL LEROYTHO Leroy Thomas H 1985-06-05 ANGL DUBOISGE Dubois Gérard H 1981-02-25 FRAN DURANDST Durand Stéphane H 1983-04-15 HGEO MORELSTE Morel Stéphanie F 1990-11-16 HGEO FOURNIER Fournier Nicolas H 1989-10-21 MATH PETITCHR Petit Christophe H 1982-03-20 MATH GARCIATH Garcia Thierry H 1988-09-26 PHCH THOMASVI Thomas Vincent H 1991-12-11 PHCH GIRARDAN Girard Antoine H 1992-01-21 PHIL LAMBERTA Lambert Alice F NULL PHIL LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT MARTINEZ Martinez Nathalie F 1993-02-14 SCVT LEROYPHI Leroy Philippe H 1984-05-10 SECS ROUSSELJ Roussel Jeanne F NULL SECS

Page 58: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 58/99 01/03/17

Exemples d'illustration utilisation du mot clé IS NULL

Liste (nom, prenom) des professeurs dont la date de naissance n'est pas renseignée SELECT nom, prenom FROM professeur WHERE date_naissance IS NULL;

On retrouve bien la spécificité de la valeur NULL.(voir II) La réponse du S.G.B.D. serait :

nom prenom

Lambert Alice Roussel Jeanne

Liste (nom, prenom) des professeurs dont on connaît la date de naissance et dont le prénom

ne possède pas de 't' en 6ème position SELECT nom, prenom FROM professeur WHERE date_naissance IS NOT NULL and prenom NOT LIKE '_____t%'; La réponse du S.G.B.D. serait :

nom prenom Dubois Amélie Leroy Thomas Dubois Gérard Moreau Patrick Durand Stéphane Morel Stéphanie Fournier Nicolas Garcia Thierry Thomas Vincent Girard Antoine Lefebvre Géraldine Martinez Nathalie Leroy Philippe

Page 59: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 59/99 01/03/17

Exemples d'illustration utilisation des mots clés LOWER, UPPER, SUBSTRING,

CHARACTER_LENGTH et CONCAT (concaténation) Liste (nom en majuscules, prénom en minuscules, date_naissance) des professeurs

répertoriés dans la base bdcours pour lesquels la longueur nom + prénom est entre 12 et 15

SELECT UPPER(nom), LOWER(prenom), date_naissance FROM professeur WHERE CHARACTER_LENGTH(CONCAT(nom, prenom)) BETWEEN 12 AND 15; La réponse du S.G.B.D. serait : UPPER(nom) LOWER(prenom) date_naissance

DUBOIS amélie 1980-01-30 DUBOIS gérard 1981-02-25 MOREAU patrick 1986-07-01 DURAND stéphane 1983-04-15 MOREL stéphanie 1990-11-16 FOURNIER nicolas 1989-10-21 PETIT christophe 1982-03-20 GARCIA thierry 1988-09-26 THOMAS vincent 1991-12-11 GIRARD antoine 1992-01-21 LAMBERT alice NULL LEROY philippe 1984-05-10 ROUSSEL jeanne NULL

Liste complète des prénoms des professeurs répertoriés dans la base bdcours pour lesquels les 3 premières lettres du prénom sont dans l'ensemble {'Pie', 'Mar', 'Dan', 'Pat') et pour lesquels la date de naissance est connue

SELECT prenom FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 3) IN ('Pie', 'Mar', 'Dan', 'Pat')

AND date_naissance IS NOT NULL; La réponse du S.G.B.D. serait : prenom

Patrick

Page 60: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 60/99 01/03/17

5) Critères de tri

Exemple d'utilisation des mots clés ASC et DESC, tri sur une seule colonne

Le mot clé ASC s'emploie pour un tri croissant (ou ascendant) alors que le mot clé DESC s'entend pour un tri décroissant (ou descendant). Si aucun mot clé n'est précisé, le tri est par défaut croissant.

Liste sans doublon des prénoms des professeurs répertoriés dans l'ordre alphabétique

SELECT DISTINCT prenom FROM professeur ORDER BY prenom;

Une autre syntaxe possible est : SELECT DISTINCT prenom FROM professeur ORDER BY prenom ASC;

Une troisième syntaxe possible est : SELECT DISTINCT prenom FROM professeur ORDER BY 1;

Une quatrième syntaxe possible est : SELECT DISTINCT prenom FROM professeur ORDER BY 1 ASC;

Page 61: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 61/99 01/03/17

La réponse du S.G.B.D. serait en tout cas :

prenom

Alice Amélie Antoine Christophe Géraldine Gérard Jeanne Nathalie Nicolas Patrick Philippe Stéphane Stéphanie Thierry Thomas Vincent

Page 62: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 62/99 01/03/17

Exemple d'utilisation des mots clés ASC et DESC, tri sur plusieurs colonnes

Le principe est le même.

Liste complète des nom, prénom des professeurs répertoriés pour lesquels les 3 premières lettres du prénom font partie de l'ensemble {'Ant', 'Mar', 'Dan', 'Pat'), triée par prénom dans l'ordre inverse alphabétique, puis par nom dans l'ordre alphabétique

SELECT nom, prenom FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 3) IN ('Ant', 'Ma r', 'Dan', 'Pat') ORDER BY prenom DESC, nom ASC;

Une autre syntaxe possible est : SELECT nom, prenom FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 3) IN ('Ant', 'Ma r', 'Dan', 'Pat') ORDER BY 2 DESC, 1 ASC; La réponse du S.G.B.D. serait en tout cas :

nom prenom Moreau Patrick Girard Antoine

Page 63: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 63/99 01/03/17

B Interrogation des données d'une seule table, avec regroupement(s)

Certaines requêtes SQL permettent de regrouper les lignes d'une table selon un certain

nombre d'attributs. Instruction standard SQL d’interrogation des données d’une table avec regroupement (aussi valable sous Oracle)

SELECT [ALL | DISTINCT] clause_de_selection FROM nom_table [WHERE critere_de_selection] [GROUP BY clause_de_regroupement] [HAVING critere_de_regroupement] [ORDER BY critere_de_tri];

Comme précédemment, il est important de noter que les paramètres entre crochets sont

facultatifs. Le symbole « | » montre un choix optionnel (de type l’un ou l’autre). Au moyen de la clause GROUP BY, il est possible de subdiviser la table en groupes,

chaque groupe étant l'ensemble des lignes ayant une valeur commune. Typiquement, on groupe suivant un certain nombre de colonnes. Dans ce cas, la clause de sélection se compose obligatoirement de ces colonnes ainsi que de fonctions de groupe.

Les fonctions de groupe sont les fonctions COUNT, AVG , MAX , MIN , SUM déjà rencontrées dans la découverte des diverses clauses de sélection. Ces fonctions calculent respectivement le nombre, la moyenne, le maximum, le minimum, et la somme d'une collection d'expressions.

Il est aussi possible de déterminer des critères sur les groupes constitués, à savoir des conditions sur le nombre d'éléments des groupes, sur la somme, moyenne, le minimum, le maximum des données des groupes, au moyen de la clause HAVING . Cette ou ces conditions sera ou seront évaluée(s) pour chaque groupe formé en fonction de la clause GROUP BY. Les groupes qui ne satisfont pas à la condition sont éliminés. On peut donc dire que la clause HAVING est aux groupes ce que la clause WHERE est aux lignes. Enfin, comme précédemment, le résultat de la requête peut faire l'objet d'un tri au moyen de la clause ORDER BY.

Page 64: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 64/99 01/03/17

1) Clauses de regroupement

Nombre de professeurs répertoriés dont le prénom ne commence pas par un 'J' groupé par nom

SELECT nom, COUNT(*) FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 1) <> 'J' GROUP BY nom; On note bien que les colonnes dans la clause GROUP BY sont présentes dans la clause de sélection, accompagnées de la seule fonction de groupe COUNT(*). La réponse du S.G.B.D. serait :

nom

COUNT(*)

Dubois 2 Durand 1 Fournier 1 Garcia 1 Girard 1 Lambert 1 Lefebvre 1 Leroy 2 Martinez 1 Moreau 1 Morel 1 Petit 1 Thomas 1

Page 65: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 65/99 01/03/17

Moyenne des moyennes de classe des enseignements, par année (id_annee) et première lettre

du professeur (substring(id_professeur from 1 for 1))

SELECT id_annee, SUBSTRING(id_professeur FROM 1 FOR 1), AVG(moyenne_classe) FROM enseignement GROUP BY id_annee, SUBSTRING(id_professeur FROM 1 FOR 1);

On note bien que les colonnes dans la clause GROUP BY sont présentes dans la clause de sélection, accompagnées de la seule fonction de groupe AVG(moyenne_classe).

id_annee SUBSTRING(id_professeur FROM 1 FOR 1) AVG(moyenne_classe) 2014 D 11.755555576748318 2014 F 10.633333206176758 2014 G 12.766667048136393 2014 L 12.833333333333334

Page 66: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 66/99 01/03/17

2) Critères de regroupement

Nombre de professeurs répertoriés dont le prénom ne commence pas par un 'J' groupé par nom dont le nombre de professeurs est supérieur à 1 SELECT nom, COUNT(*) FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 1) <> 'J' GROUP BY nom HAVING COUNT(*) > 1; On note bien que les colonnes dans la clause GROUP BY sont présentes dans la clause de sélection, accompagnées de la seule fonction de groupe COUNT(*). La réponse du S.G.B.D. serait (on élimine tous les groupes vus dans la feuille précédente dont le nombre est 1) :

nom COUNT(*)

Dubois 2 Leroy 2

Moyenne des moyennes de classe des enseignements, par année (id_annee) et période (id_periode) pour les couples (année, période) dont la plus haute moyenne de classe dépasse 12.

SELECT id_annee, SUBSTRING(id_professeur FROM 1 FOR 1), AVG(moyenne_classe) FROM enseignement GROUP BY id_annee, SUBSTRING(id_professeur FROM 1 FOR 1) HAVING MAX(moyenne_classe) > 12.0;

On note bien que les colonnes dans la clause GROUP BY sont présentes dans la clause de sélection, accompagnées de la seule fonction de groupe AVG(moyenne_classe).

La réponse du S.G.B.D. serait (seul 2 groupes de la feuille précédente possèdent un maximum de la moyenne de classe supérieur à 12) : id_annee SUBSTRING(id_professeur FROM 1 FOR 1) AVG(moyenne_classe) 2014 D 11.755555576748318 2014 G 12.766667048136393 2014 L 12.833333333333334

Page 67: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 67/99 01/03/17

C Interrogation des données de plusieurs tables Souvent, les données qu’on désire obtenir doivent être issues de plusieurs tables. Le SELECT simple vu jusqu’alors ne peut répondre à ces besoins. Heureusement, S.Q.L. étend les possibilités à des requêtes mettant en jeu plusieurs relations, ou tables.

L'interrogation des données de plusieurs tables se décline sous 3 grandes formes distinctes :

� L'utilisation de requêtes dites imbriquées. � L'utilisation des opérateurs union, intersection et différence. � L'utilisation des jointures, internes ou externes, qui consiste en fait à spécifier dans la clause de

sélection de la requête des données issues de relations joignant plusieurs tables.

Page 68: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 68/99 01/03/17

1) Requêtes imbriquées

On appelle requête imbriquée, ou sous-requête SQL, toute requête d'interrogation utilisée dans le critère de sélection d'une requête principale. Le principe d'utilisation des requêtes dites imbriquées consiste en fait à se servir du résultat d'une ou plusieurs requêtes "filles" dans le critère de sélection de la requête "mère". On peut utiliser autant de sous-requêtes qu'on le souhaite dans le critère de sélection d'une requête principale.

Instruction standard SQL d’interrogation des données de plusieurs tables avec le principe des requêtes imbriquées (aussi valable sous Oracle)

SELECT [ALL | DISTINCT] clause_de_selection FROM nom_table [WHERE critere_de_selection_avec_sous_requetes] [GROUP BY clause_de_regroupement] [HAVING critere_de_regroupement] [ORDER BY critere_de_tri];

Page 69: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 69/99 01/03/17

Exemples d'illustration utilisation d'une sous-requête avec IN, =, <, >, <>, <=, >=

Liste des enseignements effectués dans l'id_periode '1T' par M. Leroy et Lefebvre

SELECT * FROM enseignement WHERE id_periode = '1T' AND id_professeur IN

(SELECT id_professeur FROM professeur WHERE nom = 'Leroy' OR nom = 'Lefebvre');

Le S.G.B.D. effectuerait d'abord la sous-requête et "ramènerait" les id_professeur 'LEROYPHI', 'LEROYTHO' et 'LEFEBVRE', enfin il chercherait les enseignements dispensés par l'un ou l'autre de ces professeurs au premier trimestre. La réponse serait donc : id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 SCVT LEFEBVRE 11.8 2014 1T 2ND1 SECS LEROYPHI 14.3

Liste des enseignements de l'année la plus récente répertoriée

SELECT * FROM enseignement WHERE id_annee = (SELECT MAX(id_annee) FROM annee); Le S.G.B.D. effectuerait d'abord la sous-requête et "ramènerait" l'id_annee 2015, enfin il chercherait les enseignements dispensés en 2015 et n'en trouverait pas.

En vertu de quoi la réponse serait : (Aucune ligne réponse) On pourrait tout aussi bien utiliser une autre fonction de groupe dans la sous-requête, comme MIN ou AVG , ou dans un autre contexte COUNT ou SUM. L'essentiel est ici de noter que dans un critère de type =, ou <, <=, >, >=, <> on doit comparer au résultat d'une requête qui renvoie une et une seule valeur. D'où l'utilisation des fonctions de groupes dans l'exemple ci-dessus. Selon la tolérance de l'implémentation de S.Q.L. sur chaque SGBD, d'autres sous-requêtes n'utilisant pas de fonctions de groupe, mais renvoyant quand même une seule valeur seraient ou ne seraient pas acceptées.

Page 70: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 70/99 01/03/17

Requêtes imbriquées : utilisation d'une sous-requête avec ANY et ALL

Liste des enseignements du '1T' '2014' dont la moyenne de classe est supérieure à celle de tous les enseignements du '2T' '2014'

SELECT * FROM enseignement WHERE id_periode = '1T' AND id_annee = 2014 AND moyenne_classe > ALL

(SELECT moyenne_classe FROM enseignement WHERE id_periode = '2T' AND id_annee = 2014);

La réponse serait ici : id_annee id_periode id_classe id_matiere id_professeur moyenne_classe

2014 1T 2ND1 SECS LEROYPHI 14.3

Liste des enseignements du '1T' '2014' dont la moyenne de classe est supérieure à au moins une moyenne du '2T' '2014'

SELECT * FROM enseignement WHERE id_periode = '1T' AND id_annee = 2014 AND moyenne_classe > ANY

(SELECT moyenne_classe FROM enseignement WHERE id_periode = '2T' AND id_annee = 2014);

La réponse serait ici : id_annee id_periode id_classe id_matiere id_professeur moyenne_classe 2014 1T 2ND1 ANGL DUBOISAM 11.5 2014 1T 2ND1 HGEO DURANDST 13 2014 1T 2ND1 PHCH GARCIATH 12.1 2014 1T 2ND1 SCVT LEFEBVRE 11.8 2014 1T 2ND1 SECS LEROYPHI 14.3

Page 71: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 71/99 01/03/17

Requêtes imbriquées : utilisation d'une sous-requête avec EXISTS

Nom, prénom des professeurs ayant enseigné en 2014

SELECT nom, prenom FROM professeur WHERE EXISTS

(SELECT * FROM enseignement WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014);

La réponse serait ici :

nom prenom

Dubois Amélie Dubois Gérard Durand Stéphane Fournier Nicolas Garcia Thierry Lefebvre Géraldine Leroy Philippe

Liste des noms des professeurs avec le nombre de professeurs associé n'ayant pas enseigné

en 2014

SELECT nom, COUNT(*) FROM professeur WHERE NOT EXISTS

(SELECT * FROM enseignement WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014)

GROUP BY nom;

Page 72: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 72/99 01/03/17

La réponse serait ici :

nom COUNT(*)

Girard 1 Lambert 1 Leroy 1 Martinez 1 Moreau 1 Morel 1 Petit 1 Roussel 1 Thomas 1

Page 73: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 73/99 01/03/17

Exemple d'illustration utilisation d'une sous-requête avec UNIQUE

Nom des professeurs ayant eu un seul enseignement en 2000

SELECT nom FROM professeur WHERE UNIQUE

(SELECT * FROM enseignement WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014);

Sous MySQL, le mot clé UNIQUE n'existe pas. On peut donc remplacer par : SELECT nom FROM professeur WHERE (SELECT count(*) FROM enseignement

WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014) = 1;

(Aucune ligne résultat)

Liste des noms des professeurs avec le nombre de professeurs associé n'ayant pas eu un et un seul enseignement en 2014

SELECT nom, COUNT(*) FROM professeur WHERE NOT UNIQUE

(SELECT * FROM enseignement WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014)

GROUP BY nom; Sous MySQL, le mot clé UNIQUE n'existe pas. On peut donc remplacer par : SELECT nom, COUNT(*) FROM professeur WHERE (SELECT count(*) FROM enseignement

WHERE enseignement. id_professeur = professeur. id_professeur AND id_annee = 2014) <> 1

GROUP BY nom;

Page 74: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 74/99 01/03/17

La réponse serait ici :

nom COUNT(*)

Dubois 2 Durand 1 Fournier 1 Garcia 1 Girard 1 Lambert 1 Lefebvre 1 Leroy 2 Martinez 1 Moreau 1 Morel 1 Petit 1 Roussel 1 Thomas 1

Page 75: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 75/99 01/03/17

2) Union, intersection, différence

S.Q.L. dispose des trois opérateurs ensemblistes que sont l’union, l’intersection et la différence.

Instruction standard SQL d’interrogation des données de plusieurs tables avec le principe des union, intersection, différence (aussi valable sous Oracle)

SELECT [ALL | DISTINCT] clause_de_selection1 FROM nom_table1 [WHERE critere_de_selection1] [GROUP BY clause_de_regroupement1] [HAVING critere_de_regroupement1] UNION [ALL] SELECT [ALL | DISTINCT] clause_de_selection2 FROM nom_table2 [WHERE critere_de_selection2] [GROUP BY clause_de_regroupement2] [HAVING critere_de_regroupement2]; La même syntaxe est applicable avec INTERSECT ou EXCEPT à la place de UNION Par défaut, les doublons sont éliminés. La clause ALL permet de conserver les doublons dans la réponse à la requête.

Page 76: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 76/99 01/03/17

Exemples d'illustration UNION

Réunion des couples (nom, prenom) des tables professeur et professeur_rem

SELECT nom, prenom FROM professeur UNION SELECT nom, prenom FROM professeur_rem;

La réponse serait ici :

nom prenom

Dubois Amélie Leroy Thomas Dubois Gérard Moreau Patrick Durand Stéphane Morel Stéphanie Fournier Nicolas Petit Christophe Garcia Thierry Thomas Vincent Girard Antoine Lambert Alice Lefebvre Géraldine Martinez Nathalie Leroy Philippe Roussel Jeanne Leroy Xavier Lambert Pierre Richard Pascal Castelain Alice

Page 77: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 77/99 01/03/17

Exemples d'illustration UNION ALL

Réunion totale des couples (nom, prenom) des tables professeur et professeur_rem

SELECT nom, prenom FROM professeur UNION ALL SELECT nom, prenom FROM professeur_rem;

La réponse serait ici :

nom prenom

Dubois Amélie Leroy Thomas Dubois Gérard Moreau Patrick Durand Stéphane Morel Stéphanie Fournier Nicolas Petit Christophe Garcia Thierry Thomas Vincent Girard Antoine Lambert Alice Lefebvre Géraldine Martinez Nathalie Leroy Philippe Roussel Jeanne Dubois Amélie Durand Stéphane Leroy Xavier Lambert Pierre Richard Pascal Castelain Alice

Page 78: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 78/99 01/03/17

Exemples d'illustration INTERSECT

Intersection des couples (nom, prenom) des tables professeur et professeur_rem

SELECT nom, prenom FROM professeur INTERSECT SELECT nom, prenom FROM professeur_rem;

Sous MySQL, le mot clé INTERSECT n'existe pas. On peut donc remplacer par : SELECT nom, prenom FROM professeur WHERE EXISTS(SELECT * from professeur_rem

WHERE professeur.nom = professeur_rem. nom AND professeur.prenom = professeur_rem.prenom);

La réponse serait ici :

nom prenom

Dubois Amélie Durand Stéphane

Page 79: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 79/99 01/03/17

Exemples d'illustration INTERSECT ALL

Intersection totale des couples (nom, prenom) des tables professeur et professeur_rem

SELECT nom, prenom FROM professeur INTERSECT ALL SELECT nom, prenom FROM professeur_rem; Sous MySQL, le mot clé INTERSECT n'existe pas. On peut donc remplacer par : SELECT nom, prenom FROM professeur WHERE EXISTS(SELECT * from professeur_rem

WHERE professeur.nom = professeur_rem. nom AND professeur.prenom = professeur_rem.prenom)

UNION ALL SELECT nom, prenom FROM professeur_rem WHERE EXISTS(SELECT * from professeur

WHERE professeur_rem.nom = professeur. nom AND professeur_rem.prenom = professeur.prenom);

La réponse serait ici :

nom prenom

Dubois Amélie Durand Stéphane Dubois Amélie Durand Stéphane

Page 80: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 80/99 01/03/17

Exemples d'illustration EXCEPT

Différence des couples (nom, prenom) des tables professeur et professeur_rem

SELECT nom, prenom FROM professeur EXCEPT SELECT nom, prenom FROM professeur_rem;

Sous MySQL, le mot clé EXCEPT n'existe pas. On peut donc remplacer par : SELECT nom, prenom FROM professeur WHERE NOT EXISTS(SELECT * from professeur_rem

WHERE professeur.nom = professeur_rem. nom AND professeur.prenom = professeur_rem.prenom);

La réponse serait ici :

nom prenom

Leroy Thomas Dubois Gérard Moreau Patrick Morel Stéphanie Fournier Nicolas Petit Christophe Garcia Thierry Thomas Vincent Girard Antoine Lambert Alice Lefebvre Géraldine Martinez Nathalie Leroy Philippe Roussel Jeanne

Page 81: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 81/99 01/03/17

3) Jointures

S.Q.L. donne à l'utilisateur la possibilité d'interroger des données de plusieurs tables grace au mécanisme dit de jointure.

Instruction standard SQL d’interrogation des données de plusieurs tables avec le principe des jointures (aussi valable sous Oracle)

SELECT [ALL | DISTINCT] clause_de_selection FROM liste_noms_tables [WHERE critere_de_selection_multi_table] [GROUP BY clause_de_regroupement_multi_table] [HAVING critere_de_regroupement_multi_table] [ORDER BY critere_de_tri_multi_table];

Page 82: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 82/99 01/03/17

Utilisation du produit cartésien

Produit cartésien des tables annee et periode

SELECT * FROM annee, periode; Une autre syntaxe possible (mais peu utilisée) est : SELECT * FROM annee CROSS JOIN periode;

La réponse serait ici : id_annee desc_annee nb_filles nb_garcons id_periode desc_periode

2014 Année Scolaire 2014-2015 150 150 1T Premier trimestre 2015 Année Scolaire 2015-2016 157 142 1T Premier trimestre 2014 Année Scolaire 2014-2015 150 150 2T Deuxième trimestre 2015 Année Scolaire 2015-2016 157 142 2T Deuxième trimestre 2014 Année Scolaire 2014-2015 150 150 3T Troisième trimestre 2015 Année Scolaire 2015-2016 157 142 3T Troisième trimestre

Produit cartésien des tables annee et periode avec critère sur des colonnes non communes

SELECT * FROM annee, periode WHERE id_annee = 2014; Une autre syntaxe possible (mais peu utilisée) est : SELECT * FROM annee CROSS JOIN periode WHERE id_annee = 2014;

La réponse serait ici :

id_annee desc_annee nb_filles nb_garcons id_periode desc_periode

2014 Année Scolaire 2014-2015 150 150 1T Premier trimestre 2014 Année Scolaire 2014-2015 150 150 2T Deuxième trimestre 2014 Année Scolaire 2014-2015 150 150 3T Troisième trimestre

Page 83: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 83/99 01/03/17

Exemples d'illustration jointure interne

Jointure interne basique entre les tables enseignement et professeur

SELECT * FROM enseignement, professeur WHERE enseignement. id_professeur = professeur. id_professeur; Une deuxième syntaxe possible (peu utilisée) est : SELECT * FROM enseignement INNER JOIN professeur ON (enseignement. id_professeur =

professeur. id_professeur);

Une troisième syntaxe possible (peu utilisée) est : SELECT * FROM enseignement INNER JOIN professeur USING id_professeur;

Une quatrième syntaxe possible (peu utilisée) est :

SELECT * FROM enseignement NATURAL INNER JOIN professeur;

Page 84: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 84/99 01/03/17

La réponse serait ici :

id_annee

id_periode

id_classe

id_matiere

id_professeur

moyenne_classe

id_professeur nom prenom sexe

date_naissance

id_matiere

2014 1T 2ND1 ANGL DUBOISAM 11.5 DUBOISAM Dubois Amélie F 1980-01-30 ANGL

2014 1T 2ND1 FRAN DUBOISGE 10.1 DUBOISGE Dubois Gérard H 1981-02-25 FRAN

2014 1T 2ND1 HGEO DURANDST 13 DURANDST Durand Stéphane H 1983-04-15 HGEO

2014 1T 2ND1 MATH FOURNIER 10.4 FOURNIER Fournier Nicolas H 1989-10-21 MATH

2014 1T 2ND1 PHCH GARCIATH 12.1 GARCIATH Garcia Thierry H 1988-09-26 PHCH

2014 1T 2ND1 SCVT LEFEBVRE 11.8 LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT

2014 1T 2ND1 SECS LEROYPHI 14.3 LEROYPHI Leroy Philippe H 1984-05-10 SECS

2014 2T 2ND1 ANGL DUBOISAM 11.4 DUBOISAM Dubois Amélie F 1980-01-30 ANGL

2014 2T 2ND1 FRAN DUBOISGE 10.8 DUBOISGE Dubois Gérard H 1981-02-25 FRAN

2014 2T 2ND1 HGEO DURANDST 13.2 DURANDST Durand Stéphane H 1983-04-15 HGEO

2014 2T 2ND1 MATH FOURNIER 10.7 FOURNIER Fournier Nicolas H 1989-10-21 MATH

2014 2T 2ND1 PHCH GARCIATH 13.1 GARCIATH Garcia Thierry H 1988-09-26 PHCH

2014 2T 2ND1 SCVT LEFEBVRE 11.4 LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT

2014 2T 2ND1 SECS LEROYPHI 13.4 LEROYPHI Leroy Philippe H 1984-05-10 SECS

2014 3T 2ND1 ANGL DUBOISAM 12.5 DUBOISAM Dubois Amélie F 1980-01-30 ANGL

2014 3T 2ND1 FRAN DUBOISGE 11.1 DUBOISGE Dubois Gérard H 1981-02-25 FRAN

2014 3T 2ND1 HGEO DURANDST 12.2 DURANDST Durand Stéphane H 1983-04-15 HGEO

2014 3T 2ND1 MATH FOURNIER 10.8 FOURNIER Fournier Nicolas H 1989-10-21 MATH

2014 3T 2ND1 PHCH GARCIATH 13.1 GARCIATH Garcia Thierry H 1988-09-26 PHCH

2014 3T 2ND1 SCVT LEFEBVRE 14.8 LEFEBVRE Lefebvre Géraldine F 1987-08-31 SCVT

2014 3T 2ND1 SECS LEROYPHI 11.3 LEROYPHI Leroy Philippe H 1984-05-10 SECS

Page 85: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 85/99 01/03/17

Exemple d'application jointure interne et conditions supplémentaires

Jointure simple entre les tables enseignements et professeur avec critère complémentaire

SELECT id_annee, nom FROM enseignement, professeur WHERE enseignement. id_professeur = professeur. id_professeur AND moyenne_classe < 10.2; Une deuxième syntaxe possible (peu utilisée) est : SELECT * FROM enseignement INNER JOIN professeur ON (enseignement. id_professeur =

professeur. id_professeur) WHERE moyenne_classe < 10.2;

Une troisième syntaxe possible (peu utilisée) est :

SELECT * FROM enseignement INNER JOIN professeur USING id_professeur WHERE moyenne_classe < 10.2;

Une quatrième syntaxe possible (peu utilisée) est :

SELECT * FROM enseignement NATURAL INNER JOIN professeur WHERE moyenne_classe < 10.2;

La réponse serait ici : id_annee nom 2014 Dubois

Page 86: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 86/99 01/03/17

Exemple d'illustration remplacement du nom des tables par des alias

Jointure simple entre les tables enseignement et professeur avec critère complémentaire

SELECT t1.moyenne_classe FROM enseignement t1, professeur t2 WHERE t1. id_professeur = t2. id_professeur AND t1.moyenne_classe > 13.0 ;

Une deuxième syntaxe possible (peu utilisée) est :

SELECT t1.moyenne_classe FROM enseignement INNER JOIN professeur ON (enseignement. id_professeur =

professeur. id_professeur) t1 WHERE t1.moyenne_classe > 13.0;

Une troisième syntaxe possible (peu utilisée) est : SELECT t1.moyenne_classe FROM enseignement INNER JOIN professeur USING id_professeur t1 WHERE t1.moyenne_classe > 13.0;

Une quatrième syntaxe possible (peu utilisée) est : SELECT t1.moyenne_classe FROM enseignement NATURAL INNER JOIN professeur t1 WHERE t1.moyenne_classe > 10.0;

La réponse serait ici :

moyenne_classe

14.3 13.2 13.1 13.4 13.1 14.8

Page 87: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 87/99 01/03/17

Exemple d'illustration jointures internes et groupement de lignes

Plus haute moyenne de classe par professeur pour l'année 2014

SELECT t2.nom, max(t1.moyenne_classe) FROM enseignement t1, professeur t2 WHERE t1. id_professeur = t2. id_professeur AND t1.id_annee = 2014 GROUP BY t2.nom; Les 3 autres syntaxes de la jointure interne restent aussi possibles

La réponse serait ici :

nom max(t1.moyenne_classe)

Dubois 12.5 Durand 13.2 Fournier 10.8 Garcia 13.1 Lefebvre 14.8 Leroy 14.3

Plus haute moyenne de classe par professeur pour l'année 2014 quand cette plus haute moyenne de classe dépasse 13

SELECT t2.nom, max(t1.moyenne_classe) FROM enseignement t1, professeur t2 WHERE t1. id_professeur = t2. id_professeur AND t1.id_annee = 2014 GROUP BY t2.nom HAVING max(t1.moyenne_classe) > 13; Les 3 autres syntaxes de la jointure interne restent aussi possibles

La réponse serait ici :

nom max(t1.moyenne_classe) Durand 13.2 Garcia 13.1 Lefebvre 14.8 Leroy 14.3

Page 88: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 88/99 01/03/17

Exemple d'illustration jointures internes et utilisation de plus que 2 tables

Liste détaillée des enseignements sans les professeurs

SELECT t1.desc_annee, t2.desc_periode, t3.desc_classe, t4.desc_matiere, t5.moyenne_classe

FROM annee t1, periode t2, classe t3, matiere t4, enseignement t5 WHERE t1. id_annee = t5. id_annee AND t2.id_periode = t5.id_periode AND t3.id_classe = t5.id_classe AND t4.id_matiere = t5.id_matiere;

La réponse serait ici :

desc_annee desc_periode desc_classe desc_matiere moyenne_classe

Année Scolaire 2014-2015 Premier trimestre Seconde 1 Anglais 11.5 Année Scolaire 2014-2015 Premier trimestre Seconde 1 Français 10.1 Année Scolaire 2014-2015 Premier trimestre Seconde 1 Histoire Géographie 13 Année Scolaire 2014-2015 Premier trimestre Seconde 1 Mathématiques 10.4 Année Scolaire 2014-2015 Premier trimestre Seconde 1 Physique Chimie 12.1 Année Scolaire 2014-2015 Premier trimestre Seconde 1 Sciences et Vie de la Terre 11.8

Année Scolaire 2014-2015 Premier trimestre Seconde 1 Sciences Economiques et Sociales

14.3

Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Anglais 11.4 Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Français 10.8 Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Histoire Géographie 13.2 Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Mathématiques 10.7 Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Physique Chimie 13.1 Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Sciences et Vie de la Terre 11.4

Année Scolaire 2014-2015 Deuxième trimestre Seconde 1 Sciences Economiques et Sociales

13.4

Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Anglais 12.5 Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Français 11.1 Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Histoire Géographie 12.2 Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Mathématiques 10.8 Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Physique Chimie 13.1 Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Sciences et Vie de la Terre 14.8

Année Scolaire 2014-2015 Troisième trimestre Seconde 1 Sciences Economiques et Sociales

11.3

Page 89: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 89/99 01/03/17

Jointures externes gauches

Instruction standard SQL d’interrogation des données par une jointure externe gauche entre 2 tables A et B

SELECT [ALL | DISTINCT] clause_de_selection FROM A LEFT OUTER JOIN B USING (C 1, …, Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une deuxième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A LEFT OUTER JOIN B ON (A.C1 = B.C1 AND … AND A.Cn=B.Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une troisième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A NATURAL LEFT OUTER JOIN B [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

C1, …, Cn sont les colonnes communes de A et B, sur lesquelles s'effectuent la jointure externe.

Page 90: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 90/99 01/03/17

Jointures externes droites

Instruction standard SQL d’interrogation des données par une jointure externe droite entre 2 tables A et B

SELECT [ALL | DISTINCT] clause_de_selection FROM A RIGHT OUTER JOIN B USING (C 1, …, Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une deuxième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A RIGHT OUTER JOIN B ON (A.C1 = B.C1 AND … AND A.Cn=B.Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une troisième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A NATURAL RIGHT OUTER JOIN B [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

C1, …, Cn sont les colonnes communes de A et B, sur lesquelles s'effectuent la jointure externe.

Page 91: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 91/99 01/03/17

Jointures externes totales

Instruction standard SQL d’interrogation des données par une jointure externe totale entre 2 tables A et B

SELECT [ALL | DISTINCT] clause_de_selection FROM A FULL OUTER JOIN B USING (C 1, …, Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une deuxième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A FULL OUTER JOIN B ON (A.C1 = B.C1 AND … AND A.Cn=B.Cn) [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Une troisième syntaxe possible est : SELECT [ALL | DISTINCT] clause_de_selection FROM A FULL LEFT OUTER JOIN B [WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …];

Page 92: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 92/99 01/03/17

Généralisation de l'utilisation des synonymes

L'utilisation des synonymes peut se généraliser aux colonnes et aux tables utilisés : Plus haute moyenne de classe par professeur pour l'année 2014 triée par nom

SELECT t1.nom AS nom_prof, max(t1.moyenne_classe) FROM (enseignement NATURAL INNER JOIN professeur) AS t1 WHERE t1.id_annee = 2014 GROUP BY t1.nom ORDER BT nom_prof;

La réponse serait ici :

(Non compatible avec MySql)

Page 93: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 93/99 01/03/17

IV INSERTION D'UN ENSEMBLE DE DONNEES EN UNE SEULE FOIS

Instruction standard SQL d’insertion multiple de données dans une table

INSERT INTO nom_table SELECT … FROM … [WHERE …] [GROUP BY …] [HAVING …];

Avec cette syntaxe, les colonnes successives sélectionnées dans la clause de sélection doivent être compatibles avec le type des colonnes successives de la table dans laquelle les données sont insérées.

Une deuxième syntaxe possible est :

INSERT INTO nom_table (colonneA, colonneB, …) SELECT … FROM … [WHERE …] [GROUP BY …] [HAVING …]; Avec cette syntaxe, seules les valeurs des colonnes A, B (quelles qu'elles soient) sont renseignées, les valeurs des autres colonnes pour la ligne insérée étant positionnés à NULL, ou a la valeur par défaut de la colonne s'il en existe une. Cette syntaxe est donc possible seulement si parmi les colonnes non renseignées ne figure aucune colonne avec la contrainte NOT NULL (notamment aucune colonne faisant partie de la clé primaire de la table).

De la même façon qu'avec la première syntaxe, les colonnes successives sélectionnées dans la clause de sélection doivent être compatibles avec le type des colonnes successives de la table dans laquelle les données sont insérées.

Exemple illustratif

INSERT INTO enseignement SELECT 2015, id_periode, id_classe, id_matiere, id_professeur, moyenne_classe FROM enseignement WHERE id_annee = 2014;

Page 94: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 94/99 01/03/17

V MISE A JOUR DE DONNEES

Instruction standard SQL de mise à jour des données d'une table

UPDATE nom_table SET colonne1 = expr1, colonne2 = expr2, …, colonneN = exprN [WHERE …];

Avec cette syntaxe, les colonnes 1, 2, …, N des lignes vérifiant éventuellement un critère de clause WHERE seront mises à jour au moyen des expressions 1, 2, …, N;

Exemple illustratif

UPDATE annee SET nb_filles = nb_filles + 2, nb_garcons = nb_filles, desc_annee = concat(desc_annee, ' 3 trimestres scolaires') WHERE id_annee = 2015;

Exemple illustratif 2

UPDATE professeur SET prenom = 'Eric' WHERE id_professeur = 'SADRIJAC';

Page 95: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 95/99 01/03/17

VI SUPPRESSION DE DONNEES

Instruction standard SQL de suppression de données d'une table

DELETE FROM nom_table [WHERE …]

Avec cette syntaxe, les lignes vérifiant un critère de clause WHERE seront supprimées. Si aucune clause WHERE n'est présente, toutes les données de la table sont effacées.

Exemple illustratif

DELETE FROM enseignement WHERE id_annee = 2015;

Exemple illustratif 2

DELETE FROM professeur WHERE id_professeur = 'SADRIJAC';

Page 96: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 96/99 01/03/17

TRANSACTIONS / ACCES CONCURRENTS.

I TRANSACTIONS

Une base de données est dans un état dit cohérent si les valeurs contenues dans la base vérifient toutes les contraintes d'intégrité définies sur la base

Une transaction peut être définie comme un ensemble d'actions (en pratique de requêtes) sur la base de données. Les actions sont des unités de traitement indivisibles.

Une transaction possède la propriété d'atomicité : elle doit être traitée comme une seule opération. Le gestionnaire des transactions doit assurer que toutes les actions de la transactions sont exécutées, ou alors qu'aucune ne l'est.

Une transaction est marqué par un début (parfois implicite) et par une fin , définie soit par une action valider (COMMIT en S.Q.L.) soit par l'action annuler (ROLLBACK en S.Q.L.) .

Une transaction possède en outre la propriété de durabilité : lorsqu'une transaction a exécuté valider, ses effets deviennent permanents et ne peuvent plus être effacés de la base. Ils doivent survivre à toute espèce de panne.

En cas d'arrêt interne (violation de contrainte par exemple) ou externe (panne par exemple), le S.G.B.D. doit, pour assurer l'atomicité de la transaction, procéder à un ROLLBACK implicite. En cas de panne, effacer les traces du passage de la transaction ne peut être réalisé qu'après le redémarrage du système. Ceci est traité par un mécanisme spécial appelé reprise après panne ou recovery en anglais.

II ACCES CONCURRENTS

On dit que 2 transactions sont concurrentes si elles accèdent en même temps aux mêmes

données.

Dans ce cas, il faut que le S.G.B.D. gère les exécutions concurrentes de sorte à ne pas conduire la base dans un état incohérent. En effet, si aucun mécanisme de contrôle de l'exécution n'est présent, 3 types d'anomalies peuvent se produire : perte de mise à jour, lecture impropre, et lecture non reproductible. Ces problèmes d'interférence de transaction concurrentes amènent à une autre propriété des transactions : l'isolation , qui exige que chaque transaction perçoive à tout moment la base dans un état cohérent. Ainsi, une transaction en cours d'exécution peut ne pas dévoiler ses effets aux autres transactions concurrentes avant d'avoir été confirmée.

Page 97: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 97/99 01/03/17

CONFIDENTIALITE (OU CONTROLE) DES DONNEES Des privilèges (principalement SELECT, INSERT, UPDATE, DELETE , ALL ) peuvent être octroyées ou retirés à un utilisateur de base de données. Seul le créateur d'un objet possède tous les privilèges sur l'objet. Pour qu'un utilisateur puisse accéder à un objet qu'il n'a pas créé, il doit avoir au préalable reçu explicitement les autorisations nécessaires. Ce principe de privilèges sur une base de données permet d'obtenir une confidentialité, en tout cas une sécurisation des accès des utilisateurs aux données.

Page 98: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 98/99 01/03/17

I OCTROI DE PRIVILEGES

Instruction standard SQL d'octroi de privilèges sur une table GRANT privilege ON TABLE nom_table TO utilisateur [WITH GRANT OPTION]; L'option WITH GRANT OPTION octroie à l'utilisateur le privilege d'octroyer lui même des privilèges de moindre importance sur la table

Exemple illustratif 1

GRANT ALL ON TABLE enseignement TO directeur WITH GRANT OPTION;

Exemple illustratif 2

GRANT INSERT ON TABLE enseignement TO professeur, principal;

Exemple illustratif 3

GRANT SELECT, UPDATE (moyenne_classe) ON TABLE enseignement TO professeur, principal ;

Page 99: STRUCTURED QUERY LANGUAGE (SQL) · 2017-11-07 · Version 1.4 du 01/03/2017 Emmanuel Fruchart . Le langage SQL Page 2/99 01/03/17 SOMMAIRE SOMMAIRE ... LEROYPHI Leroy Philippe H 1984-05-10

Le langage SQL

Page 99/99 01/03/17

II RETRAIT DE PRIVILEGES

Instruction standard SQL d'octroi de privilèges sur une table REVOKE privilege ON TABLE nom_table FROM utilisateu r ;

Exemple illustratif 1

REVOKE SELECT ON TABLE enseignement FROM eleve;


Recommended