1. Livres & vidéos
  2. SQL
  3. Introduction
Extrait - SQL Les fondamentaux du langage (avec exercices et corrigés) - (6e édition)
Extraits du livre
SQL Les fondamentaux du langage (avec exercices et corrigés) - (6e édition) Revenir à la page d'achat du livre

Introduction

Un peu d’histoire

Les bases de données sont indispensables dans tout développement informatique. Toutes les données sont stockées dans la majorité des cas dans une structure de base de données.

On parle de BDD pour désigner le stockage des données et de SGBD pour désigner les éléments qui sont mis à disposition du développeur pour manipuler ces données.

Il existe plusieurs types de bases de données.

Il y a les bases de type hiérarchique comme IMS/DL1, que l’on rencontre majoritairement sur les Mainframes. Ces éléments sont organisés comme un arbre avec un niveau de hiérarchie et des pointeurs entre les enregistrements.

Il existe également les bases en réseau (ou Codasyl) comme IDS2 ou SOCRATE qui ne sont pratiquement plus utilisées actuellement et qui reprennent un peu le modèle hiérarchique mais en permettant de naviguer entre les éléments, pas uniquement de manière descendante.

Depuis quelques années, d’autres types de bases de données sont apparus avec les sites internet utilisés par des millions d’utilisateurs :

  • Base de données qui range les données en colonnes et non en lignes pour gérer des volumes de données énormes comme Bigtable, développée par Google, ou Cassandra, utilisée par Facebook.

  • Base de données non relationnelle NoSQL (Not Only SQL), comme Redis, de type Clé-valeur, plus souple avec un schéma défini de façon imprécise, qui se préoccupe de la cohérence finale.

  • Base de données de documents, aussi non relationnelle. La plus connue et la plus utilisée est MongoDB.

Le site db-engines.com actualise régulièrement les informations sur la popularité des bases de données, globalement et par catégorie. Il explique sa méthodologie de classement.

Les bases de données relationnelles sont apparues dans les années 1980. Elles s’appuient sur les travaux développés par un chercheur, Mr Edgar Codd, travaillant chez IBM sur le modèle relationnel au début des années 1970. Les données sont organisées...

Les normes SQL

La première version de SQL normalisée par l’ANSI date de 1986.

Elle sera suivie de plusieurs versions plus ou moins importantes.

La norme SQL2 ou SQL92 est la plus importante. La majorité des SGBDR existants implémentent cette version.

Puis suivront plusieurs autres évolutions SQL-3, SQL:2003, SQL:2008 et SQL:2011 jusqu’à la dernière SQL:2023 qui apportent chacune quelques fonctions complémentaires.

Chaque fournisseur de SGBDR a implémenté à sa façon le langage SQL et a ajouté ses propres extensions. Les exemples qui sont proposés dans cet ouvrage pour illustrer les propos ne sont donc pas totalement compatibles avec tous les SGBDR.

Les exemples présentés dans cet ouvrage sont conçus principalement pour les bases les plus utilisées : Oracle, SQL Server, PostgreSQL et MySQL.

Norme

Nom courant

Explications

ISO/CEI 9075:1986

SQL-86 ou SQL-87

Édité par l’ANSI puis adopté par l’ISO en 1987.

ISO/CEI 9075:1989

SQL-89 ou SQL-1

Révision mineure.

ISO/CEI 9075:1992

SQL-92 ou SQL2

Révision majeure dont l’ajout des jointures.

ISO/CEI 9075:1999

SQL-99 ou SQL3

Expressions rationnelles, requêtes récursives, déclencheurs, types non scalaires et quelques fonctions orientées objets.

ISO/CEI 9075:2003

SQL:2003

Introduction de fonctions pour la manipulation XML, « window functions », ordres standardisés et colonnes avec valeurs autoproduites (y compris colonnes d’identité).

ISO/CEI 9075:2006

SQL:2006

Précision sur l’utilisation SQL avec XML.

ISO/CEI 9075:2008

SQL:2008

Ajout de quelques fonctions de fenêtrage (ntile, lead, lag, first value, last value, nth value), limitation du nombre de lignes (OFFSET / FETCH), amélioration mineure sur les types distincts, curseurs et mécanismes d’auto-incréments.

ISO/CEI 9075:2011

SQL:2011

Ajout des types de données temporels et des tables temporelles.

ISO/CEI 9075:2016

SQL:2016

Ajout de la prise en charge du format JSON, la correspondance des motifs de ligne ainsi que les fonctions de table polymorphes.

ISO/CEI 9075:2019

SQL:2019

Prise en charge des tableaux multi-dimensionnels.

ISO/CEI 9075:2023

SQL:2023

Ajout du type...

Description rapide du modèle relationnel

Le modèle relationnel a été créé, comme indiqué précédemment, par un chercheur, Edgar Codd, travaillant chez IBM au début des années 1970. Celui-ci a travaillé à partir de principes mathématiques simples, la théorie des ensembles et la logique de prédicats.

Le modèle relationnel repose sur la notion d’ensemble. Schématiquement, un ensemble peut être représenté par une table (une table peut également être appelée une relation).

Cet ensemble a des attributs (les colonnes) et des lignes contenant des valeurs (les tuples). La forme la plus couramment utilisée pour représenter une table est celle-ci :

images/01RI01V3.PNG

Le modèle relationnel présente les données sous forme logique, il est totalement indépendant du modèle physique. C’est le fournisseur qui décide du mode de stockage physique des tables. C’est l’avantage majeur des bases de données relationnelles, l’indépendance entre le logique et le physique.

Une fois les tables définies, il faut disposer d’un langage pour les manipuler, il s’agit de l’algèbre relationnelle. Celui-ci a également été inventé par Edgar Codd. À l’aide de ces opérateurs, on peut interroger les relations existantes et créer de nouvelles relations. On parle d’opérateurs ensemblistes : union, intersection, différence, produit cartésien, division et jointure.

L’algèbre relationnelle est mise en œuvre par le SQL et les systèmes de gestion de bases de données relationnelles (SGBDR) implémentent le modèle relationnel. Les exemples de ce livre s’appuient sur quelques tables d’une base de données d’une société dans le secteur de l’hôtellerie. Cette base gère les tarifs des chambres par type de chambre et par hôtel. Le schéma de la base est présenté plus loin dans cet ouvrage (cf. chapitre La définition des données (LDD) - La clé étrangère (FOREIGN KEY)).

1. Principaux concepts du modèle relationnel

Les trois principaux concepts du modèle relationnel sont le domaine, le produit cartésien et les relations.

Domaine

C’est un ensemble de valeurs caractérisé par un nom.

Par exemple :

Le type de salle de bains (TYPESDB) est un domaine qui comprend les valeurs D, DW ou BW pour les douches, douches avec WC séparés ou baignoires avec WC séparés.

Le type de lit (TYPELIT) est un autre domaine (lit simple, lit double, lit XL).

Le nombre d’occurrences de chacun des domaines donne la cardinalité.

Pour les types de lits, la cardinalité est de 3.

Produit cartésien

Celui-ci représente la jonction entre deux domaines. Si par exemple on effectue le produit cartésien des types de salles de bains et des types de lits, on obtient des tuples D1, D2.

Dans notre exemple, le produit cartésien du domaine 1 (nombre de lits) et du domaine 2 (type de lit) donne :

(DW, lit simple), (DW, lit double), (DW, lit XL), (BW, lit simple), (BW, lit double), etc.

Relation

La notion de relation est le fondement du modèle relationnel. La relation permet de mettre en relation les domaines selon certains critères.

Par exemple, si l’on veut créer une relation nommée TYPESDBTYPELIT, on indiquera que l’on veut associer tous les types de salles de bains du domaine TypeSDB avec le seul élément « Lit double » du domaine TypeLit.

La représentation de cette relation se fait sous forme de tableau à deux dimensions.

RELATION : TYPESDBTYPELIT

TYPESDB

TYPELIT

D

Lit double

DW

Lit double

BW

Lit double

TYPELIT et TYPESDB sont des attributs.

Chaque ligne est unique et représente un objet de la relation.

Le degré est le nombre d’attributs d’une relation (ici = 2).

2. Principales règles

Le modèle relationnel gère donc un objet principal, la relation, associée aux concepts de domaine et d’attribut.

Des règles s’appliquent à cette relation afin de respecter les contraintes liées à l’analyse. Voici quelques-unes de ces règles :

Cohérence

Toute valeur prise par un attribut doit appartenir au domaine sur lequel il est défini.

Unicité

Tous les éléments d’une relation doivent être distincts.

Identifiant

Attribut ou ensemble d’attributs permettant de caractériser de manière unique chaque élément de la relation.

Clé primaire

Identifiant minimum d’une relation.

Clés secondaires

Autres identifiants de la relation.

Intégrité référentielle

Cette règle impose qu’un attribut ou ensemble d’attributs d’une relation apparaisse comme clé primaire dans une autre relation.

Clé étrangère

Attribut ou ensemble d’attributs vérifiant la règle d’intégrité référentielle.

Exemples

RELATION TYPECHAMBRE

NUMERO

NOMBRE_LIT

TYPE_LIT

TYPE_SDB

DESCRIPTION

1

1

lit simple

D

1 lit simple avec douche

2

2

lit simple

D

2 lits simples avec douche

3

2

lit simple

DW

2 lits simples avec douche et WC séparés

4

1

lit double

D

1 lit double avec douche

5

1

lit double

DW

1 lit double avec douche et WC séparés

NUMERO est l’identifiant primaire.

NOMBRE_LIT et DESCRIPTION sont des clés secondaires. 

TYPE_LIT et TYPE_SDB sont des clés étrangères référençant les clés primaires des relations TYPELIT et TYPESDB.

RELATION HOTEL

HOTEL

LIB_HOTEL

ETOILE

1

Ski Hotel

*

2

Art Hotel

**

3

Rose Hotel

***

4

Lions Hotel

****

HOTEL est l’identifiant primaire.

ETOILE est un identifiant secondaire.

Valeur nulle

Dans le modèle relationnel, la notion de nullité est admise. C’est une valeur représentant une information inconnue ou inapplicable...

L’algèbre relationnelle

1. Généralités

L’algèbre relationnelle a conduit à la mise au point du SQL qui est devenu le standard en ce qui concerne la gestion des données.

C’est une méthode d’extraction permettant la manipulation des tables et des colonnes. Son principe repose sur la création de nouvelles tables (tables résultantes) à partir des tables existantes, ces nouvelles tables devenant des objets utilisables immédiatement.

Les opérateurs de l’algèbre relationnelle permettant de créer les tables résultantes sont basés sur la théorie des ensembles.

La syntaxe et les éléments de notations retenus ici sont les plus couramment utilisés.

2. Les opérateurs

a. Union

L’union entre deux relations de même structure (degré et domaines) donne une table résultante de même structure ayant comme éléments l’ensemble des éléments distincts des deux relations initiales.

Notation : Rx = R1 images/signe1.png R2

Exemple

Soient les relations HOTELS_EUROPE et HOTELS_AFRIQUE.

RELATION HOTELS_EUROPE

idHotel

Libelle

Etoile

1

Ski Hotel

*

2

Art Hotel

**

RELATION HOTELS_AFRIQUE

idHotel

Libelle

Etoile

1

Ski Hotel

*

2

Lions Hotel

****

UNION DES DEUX RELATIONS

idHotel

Libelle

Etoile

1

Ski Hotel

*

2

Art Hotel

**

4

Lions Hotel

****

b. Intersection

L’intersection entre deux relations de même structure (degré et domaines) donne une table résultante de même structure ayant comme éléments l’ensemble des éléments communs aux deux relations initiales.

Notation : Rx = R1 images/signe2.png R2

Exemple

RELATION SKIHOTEL_TYPECHAMBRE

NumChambre

Description

1

1 lit simple avec douche

4

1 lit double avec douche

6

1 lit double avec bain et WC séparés

RELATION ARTHOTEL_TYPECHAMBRE

NumChambre

Description

1

1 lit simple avec douche

4

1 lit double avec douche

6

1 lit double avec bain et WC séparés

7

1 lit double large avec bain et WC séparés

TYPECHAMBRE communes aux deux relations :

NumChambre

Description

1

1 lit simple avec douche

4

1 lit double avec douche

6

1 lit double avec bain et WC séparés

c. Différence

La différence entre deux relations de même structure (degré et domaines) donne une table résultante de même structure ayant comme éléments l’ensemble des éléments de la première relation qui ne sont pas dans la deuxième. 

Notation : Rx = R2 - R1

Exemple

TYPECHAMBRE présente dans la relation 2 et pas dans la relation 1 :

NumChambre

Description

7

1 lit double large avec bain et WC séparés

d. Division

La division entre deux relations est possible à condition que la relation diviseur soit totalement incluse dans la relation dividende. Le quotient de la division correspond à l’information qui, présente dans le dividende, n’est pas présente dans le diviseur.

Il est également possible de définir la division de la façon suivante : soit R1 et R2 des relations telles que R2 soit totalement incluse dans R1. Le quotient R1÷R2 est constitué des tuples t tels que pour tout tuple t’ défini sur R2, il existe le tuple t.t’ défini sur R1.

Notation : Rx = R2÷R1

Exemple

RELATION SKIHOTEL_TYPECHAMBRE

NumChambre

Description

1

1 lit simple avec douche

4

1 lit double avec douche

6

1 lit double avec bain et WC séparés

RELATION ARTHOTEL_TYPECHAMBRE

NumChambre

Description

Prix

1

1 lit simple avec douche

67.49

4

1 lit double avec douche

74.99

6

1 lit double avec bain et WC séparés

99.99

4

1 lit double large avec bain et WC séparés

214.90

La division entre les deux relations permet d’isoler l’information complémentaire à la relation SKIHOTEL_TYPECHAMBRE et présente dans la relation ARTHOTEL_TYPECHAMBRE :

Prix

67.49

74.99

99.99

e. Restriction

La restriction repose sur une condition. Elle produit, à partir d’une relation, une relation de même schéma n’ayant que les éléments de la relation initiale qui répondent à la condition.

Notation : Rx = s (condition) R1

La condition s’exprime sous la forme :

[NON] [(] attribut opérateur valeur [)] [{ET/OU}condition] 

opérateur : un opérateur de comparaison (=, <>, >, <, >=, <=).

valeur : une constante ou un autre attribut.

Exemple

Hôtels avec un type de chambre = 7

TypesChambre7=σ(idTypeChambre=7)Hotels 

idHotel

Libelle

idTypeChambre

Description

2

Art Hotel

7

1 lit double large avec bain et WC séparés

3

Rose Hotel

7

1 lit double large avec bain et WC séparés

4

Lions Hotel

7

1 lit double large avec bain et WC séparés

f. Projection

La projection d’une relation sur un groupe d’attributs donne une relation résultante ayant comme schéma uniquement ces attributs, et comme éléments les n-uplets distincts composés par les valeurs associées de ces attributs.

Notation : Rx = p R (A1, A2,..., An)

Exemple sur NombreLit et Description de la table TypesChambre :

LISTTypCham=p TypesChambre(NombreLit,Description) 

NombreLit

Description

1

1 lit simple avec douche

2

2 lits simples avec douche

3

3 lits simples avec douche et WC séparés

1

1 lit double avec douche

S’il y avait eu des doublons, ils auraient été supprimés du résultat.

g. Produit cartésien

Le produit cartésien entre deux relations produit une relation ayant comme schéma tous les attributs des deux relations existantes et comme éléments l’association de chaque ligne de la première table avec chaque ligne de la deuxième.

Notation : Rx = S1 X S2

Exemple

RELATION Hotels

IdHotel

Libelle

1

Ski Hotel

2

Art Hotel

4

Lions Hotel

RELATION TypesChambre

idTypeChambre

Description

1

1 lit simple avec douche

2

2 lits simples avec douche

3

3 lits simples avec douche et WC séparés

 

HOTELTypeCh = Hotels X TypesChambre 

 

IdHotel

Libelle

idTypeChambre

Description...

Les systèmes de gestion de bases de données utilisant SQL

Les SGBDR sur le marché sont assez nombreux. Les plus utilisés sont Oracle, MySQL, SQL Server (Microsoft), PostgreSQL et DB2 (IBM), notamment dans les entreprises qui ont des volumes de données importants et des contraintes de performance transactionnelles fortes.

Nous n’allons pas ici réaliser un comparatif de tous ces SGBDR, chacun a ses spécificités, ses avantages et ses inconvénients. Le choix d’une base de données est une décision qui doit être bien réfléchie, en fonction de critères tels que le volume des données, les types de données, les contraintes de performance, les coûts d’achat et de maintenance, les connaissances des développeurs, etc.