STRUCTURED QUERY LANGUAGE (SQL)

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

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

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

Le Langage SQL version Oracle

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

Bases de données relationnelles

Langage SQL : créer et interroger une base

Le Langage De Description De Données(LDD)

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

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

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

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Olivier Mondet

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

Le langage SQL Rappels

Création et Gestion des tables

SQL Historique

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

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

1 Introduction et installation

1/ Présentation de SQL Server :

MySQL / SQL EXEMPLES

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

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

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

TP Contraintes - Triggers

CREATION WEB DYNAMIQUE

I4 : Bases de Données

TP3 : Creation de tables 1 seance

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

Les bases de données Page 1 / 8

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

Compétences Business Objects

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

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

LE LANGAGE SQL2 1. INTRODUCTION

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

Les bases de données

FileMaker 13. Guide de référence SQL

Historisation des données

16H Cours / 18H TD / 20H TP

MODE OPERATOIRE OPENOFFICE BASE

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

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

Les BASES de DONNEES dans WampServer

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

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

I. MySQL : Serveur et SGBD

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

A QUOI SERVENT LES BASES DE DONNÉES?

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Application web de gestion de comptes en banques

Bases de données relationnelles & SQL

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

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Bases de Données Relationnelles. Le Modèle Relationnel

NF26 Data warehouse et Outils Décisionnels Printemps 2010

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

Cours: Administration d'une Base de Données

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

Stockage du fichier dans une table mysql:

1 Position du problème

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

Vincent Augusto

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Créer une base de données

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

Bases de Données. Plan

SUPPORT SQL. Thierry GRANDADAM

Présentation du module Base de données spatio-temporelles

OpenPaaS Le réseau social d'entreprise

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

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

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

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

1. Base de données SQLite

Devoir Data WareHouse

Information utiles. webpage : Google+ : digiusto/

Conception des bases de données : Modèle Entité-Association

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Gestion des utilisateurs et de leurs droits

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

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

Mejdi BLAGHGI & Anis ASSÈS

Introduction aux Bases de Données

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

Utilisation du BDE pour la maintenance des fichiers DBF de l'application TopoCad:

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Mysql avec EasyPhp. 1 er mars 2006

Création de Sous-Formulaires

Bases de données Outils de gestion

Introduction aux Bases de Données 2004/2005

Transcription:

Catégorie : Informatique / Base de données STRUCTURED QUERY LANGUAGE (SQL) Version 1.2 du 01/02/2015 Emmanuel Fruchart

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 MISE A JOUR DE DONNEES... 94 VI SUPPRESSION DE DONNEES... 95 Page 2/99 02/03/15

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 3/99 02/03/15

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 4/99 02/03/15

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 5/99 02/03/15

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 6/99 02/03/15

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 7/99 02/03/15

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 8/99 02/03/15

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 9/99 02/03/15

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 10/99 02/03/15

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 11/99 02/03/15

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 12/99 02/03/15

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 13/99 02/03/15

G Enseignements Le langage SQL Nom de la table : Champs : enseignement 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 14/99 02/03/15

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 15/99 02/03/15

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 16/99 02/03/15

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 CHAR(n) SQL Standard introduit les 2 types chaînes de caractères suivants : 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 17/99 02/03/15

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). Application à Oracle Sous Oracle, les types chaîne de caractères sont conformes à la norme, sauf le type VARCHAR(n) qui est remplacé par VARCHAR2(n). La valeur maximale de n est de 255 pour les CHAR et 2000 pour les VARCHAR2 Page 18/99 02/03/15

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 2 31 et 2 31-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 19/99 02/03/15

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 existence 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. Application à Oracle Le SGBD Oracle ne possède réellement qu'un seul type numérique qui est NUMBER. Ceci dit, Oracle accepte syntaxiquement, pour la portabilité du langage SQL, les autres types numériques SQL Standard, qui sont alors convertis au format NUMBER. Le type NUMBER, pour un nombre à virgule flottante entre 10 128 et 10 128 1, se décline sous 3 formes : NUMBER NUMBER(p) NUMBER(p,d) Les entiers p et d représentent successivement le nombre de chiffres significatifs et le nombre de chiffres après la virgule. Si d n'est pas renseigné, 0 est pris par défaut. L'entier p est inférieur ou égal à 38. On ne peut insérer de nombres comprenant plus que p chiffres significatifs. Page 20/99 02/03/15

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 21/99 02/03/15

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. Application à Oracle Oracle ne possède qu'un seul type temporel qui est DATE, qui inclut un temps en heures, minutes et secondes. Un constante de type DATE est une chaîne entre apostrophes. 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. BIT SQL Standard introduit les types binaires suivants : 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. Application à Oracle Sous Oracle, le type binaire est LONG RAW. On n'utilisera pas ce type de données dans le cadre de ce cours. Page 22/99 02/03/15

E Les types pour la base exemple bdcours Afin de facilement pouvoir porter notre base exemple sur des S.G.B.D. multiples, et compte tenu du fait qu'oracle gère la plupart des types standards SQL (dans un souci de portabilité), 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 periode classe id_annee desc_annee nb_filles nb_garcons id_periode desc_periode id_classe desc_classe INTEGER CHAR(50) INTEGER INTEGER CHAR(2) CHAR(100) CHAR(4) CHAR(100) matiere id_matiere desc_matiere CHAR(4) 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 id_periode id_classe id_matiere id_professeur moyenne_classe INTEGER CHAR(2) CHAR(4) CHAR(4) CHAR(8) FLOAT Page 23/99 02/03/15

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 Oracle, les bases de données sont en fait créés par l'administrateur Oracle 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 Oracle, les bases de données sont en fait gérées par l'administrateur Oracle au moyen d'outils dédiés, de sorte que l'instruction ci-dessus est obsolète. Page 24/99 02/03/15

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 25/99 02/03/15

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 26/99 02/03/15

Remarque Sous Oracle, ainsi que 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 27/99 02/03/15

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 28/99 02/03/15

D Création de la base exemple bdcours Le langage SQL 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, aussi applicable sous Oracle : ------------------------------------------------------------------------------------------------------------------------ create database if not exists bdcours; use bdcours; drop table if exists enseignement; drop table if exists professeur; 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 29/99 02/03/15

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) constraint FK_enseign_cla REFERENCES PERIODE(id_periode), FOREIGN KEY(id_classe) REFERENCES CLASSE(id_classe), Le langage SQL 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 30/99 02/03/15

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 31/99 02/03/15

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 VALUES nom_table (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 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). Exemple illustratif de la première syntaxe INSERT INTO VALUES professeur (' SARLATJE ', 'Sarlat', 'Jean-Michel', NULL); Exemple illustratif de la seconde syntaxe INSERT INTO professeur (id_professeur, nom, prenom) VALUES (' SARLATJE ', 'Sarlat', 'Jean-Michel'); Page 32/99 02/03/15

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 33/99 02/03/15

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 34/99 02/03/15

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 (aussi valable sous Oracle) 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 35/99 02/03/15

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 FROM WHERE nom, prenom professeur 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 36/99 02/03/15

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 FROM nom 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 FROM ALL nom 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 37/99 02/03/15

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 38/99 02/03/15

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 FROM id_professeur, nom, prenom, sexe, date_naissance, id_matiere 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 39/99 02/03/15

Exemple d'illustration sélection de certaines colonnes Liste (nom, prenom, date_naissance) des professeurs répertoriés SELECT FROM nom, prenom, date_naissance 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 40/99 02/03/15

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 FROM nom, prenom, sexe, 'DATE DE NAISSANCE', date_naissance 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 41/99 02/03/15

Exemple d'illustration incorporation de colonnes constantes numériques Le langage SQL Liste des caractéristiques (sauf les identifiants) des professeurs répertoriés et incorporation de la colonne constante numérique 2015 SELECT FROM 2015, nom, prenom, sexe, date_naissance 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 42/99 02/03/15

Exemple d'illustration fonctions arithmétiques sur les colonnes sélectionnées Le langage SQL Liste des années répertoriées avec identifiant indicé à 0 pour 2000, 1 pour 2001, etc SELECT FROM id_annee - 2000, desc_annee 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 FROM id_annee, nb_filles + nb_garcons 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 FROM id_annee, 'Pourcentage de filles :', nb_filles * 100 / (nb_filles + nb_garcons) 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 43/99 02/03/15

Exemple d'illustration fonctions littérales LOWER et UPPER sur les colonnes sélectionnées Le langage SQL Liste (nom en majuscules, prénom en minuscules, date_naissance) des professeurs répertoriés SELECT FROM UPPER(nom), LOWER(prenom), date_naissance 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 44/99 02/03/15

Exemple d'illustration fonction littérale CONCAT (concaténation) sur les colonnes sélectionnées Liste (nom en majuscule espace prenom en minuscule, date_naissance) des professeurs répertoriés SELECT FROM CONCAT(UPPER(nom), ' ', LOWER(prenom)), date_naissance 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 45/99 02/03/15

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 46/99 02/03/15

Exemple d'illustration fonction littérale CHARACTER_LENGTH (nombre de caractères d'une chaîne) sur les colonnes sélectionnées Le langage SQL 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 47/99 02/03/15

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 FROM COUNT(*) professeur; Requête équivalente à SELECT FROM COUNT(prenom) 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 FROM COUNT(DISTINCT nom) 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 48/99 02/03/15

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 FROM MAX(nb_filles), MIN(nb_filles) 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 FROM SUM(nb_filles), AVG(nb_garcons) annee; La réponse du S.G.B.D. serait : SUM(nb_filles) AVG(nb_garcons) 307 146.0000 Page 49/99 02/03/15

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 50/99 02/03/15