Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Systèmes d'Information

  • Notions mathématiques
  • Calcul relationnel
  • Algèbre relationnelle
  • Langage de requêtes
  • Arbre de requêtes
  • Exercices
  • Introduction
  • Commandes de bases
  • Langage de définition de données (LDD)
  • Langage de manipulation de données (LMD)
  • Types de données
  • Exercice
  • Présentation
  • Calcul relationnel
  • Algèbre relationnelle
    • Opérateurs de base
    • Opérateurs dérivés
    • Equivalences algébriques
    • Exercices
    • Aux pays des bières
    • Au Tournoi des six nations
  • Division relationnelle
  • Relation
  • Fonction
  • Application
  • Injection
  • Surjection
  • Bijection
  • Association
  • Exemples
  • Dépendances fonctionnelles
  • Décomposition de relations
  • Inférence logique
  • Normalisation
  • Aux pays des bières
  • Modélisation
  • Exercices
  • Liste des projets
  • Aux pays des bières
  • Au Tournoi des six nations
  • Salles de concerts
  • Généralités
  • Langage SQL
  • Modèle relationnel
  • Généralités
  • SQL
  • Algèbre relationnelle
  • Synthèse
Index

Archives

  • Site Web
  • Sources reStructuredText
  • EniBook 1.618033988
logo

Crédits

© Your Copyright

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Algèbre relationnelle

L’algèbre relationnelle propose un ensemble d’opérations élémentaires formelles sur les relations dans le but de créer de nouvelles relations.

Ces nouvelles relations constitueront le résultat d’une requête formulée sur le système d’Information à l’aide du langage SQL.

On distingue trois familles d’opérateurs relationnels :

  • les opérateurs unaires qui sont les plus simples (projection,restriction) et qui portent sur une seule table
  • les opérateurs binaires ensemblistes (union,intersection,différence) entre deux ensembles (relations)
  • les opérateurs binaires ou n-aires (produit cartésien,jointure,division) entre deux ou plusieurs ensembles (tables).

Opérateurs de base

  1. Projection (\(\Pi\)) :
    • \(R=\Pi_{(a_1,...,a_n)}(E)\)
    • réduire le nombre d’attributs (\(a_1,...,a_n\)) sur les éléments d’un ensemble (\(E\))
  2. Restriction (\(\sigma\)) :
    • \(R=\sigma_{[p(e)]}(E)\)
    • récupérer les éléments (\(e\)) d’un ensemble (\(E\)) qui satisfont un critère de restriction (\([p(e)]\))
  3. Produit cartésien (\(\times\)) :
    • \(R=\times(S,T)\)
    • mettre en relation chaque élément de l’ensemble \(S\) avec tous les éléments de l’ensemble \(T\)
  4. Union (\(\cup\)) :
    • \(R=\cup(S,T)\)
    • créer l’ensemble contenant les éléments qui sont dans l’ensemble \(S\) et/ou dans l’ensemble \(T\)
  5. Différence (\(\setminus\)) :
    • \(R=\setminus(S,T)\)
    • créer l’ensemble contenant les éléments de l’ensemble \(S\) qui ne sont pas dans l’ensemble \(T\)

Opérateurs dérivés

  1. Intersection (\(\cap\)) :
    • \(R=\cap(S,T)\)
    • créer l’ensemble contenant les éléments de l’ensemble \(S\) qui sont dans l’ensemble \(T\)
  2. Jointure (\(\Join\)) :
    • \(R=\Join_{[p(s,t)]}(S,T)\)
    • mettre en relation les éléments \((s,t)\) des ensembles \((S,T)\) s’ils satisfont un critère de jointure (\([p(s,t)]\))
  3. Division relationnelle (\(\div\)):
    • \(R=\div(S,T)\)
    • récupérer les éléments \((r,t)\) de l’ensemble \(S\) qui sont en relation avec tous les éléments de l’ensemble \(T\)
    où \(attr(T) \subset attr(S)\) :
    • l’ensemble des attributs de l’ensemble \(T\) est un sous-ensemble de l’ensemble des attributs de l’ensemble \(S\) :

les opérateurs dérivés se déduisent des opérateurs de base.

L’intersection peut s’exprimer en fonction des opérateurs de différence (\(\setminus\)) et d’union (\(\cup\)) :
  • \(\cap(R,S)=\setminus(R,\setminus(R,S))\)
  • \(\cap(R,S)=\setminus(S, \setminus(S,R))\)
  • \(\cap(R,S)=\setminus(\cup(R,S),[(\cup (\setminus(R,S),\setminus(S,R))])\)
La jointure peut s’exprimer par un produit cartésien suivi d’une restriction sur les valeurs d’attributs des ensembles du produit cartésien :
  • \(\Join_{[p(s,t)]}(S,T)=\sigma_{[p(s,t)]}(\times(S,T))\)
La division relationnelle sur les ensembles :
  • \(S,T\)
d’attributs :
  • \(attr(S)=\{ X,Y \},attr(T)=\{ Y \}\)
peut s’exprimer en fonction des opérateurs de projection (\(\Pi\)), de produit cartésien (\(\times\)) et de différence (\(\setminus\)) :
  • \(\div(S,T)=\setminus(\Pi_{(X)}(S),\Pi_{(X)}(\setminus(\times(\Pi_{(X)}(S),T),S)))\)

Equivalences algébriques

Les équivalences algébriques sont à la base des optimisations de requêtes sur une base de données.

Commutativité de la restriction :
  • \(\displaystyle \sigma_{[p_1(r)]}(\sigma_{[p_2(r)]}(R))=\sigma_{[p_2(r)]}(\sigma_{[p_1 (r)]}(R))\)
Commutativité des intersections :
  • \(\displaystyle \cap(R,S)=\cap(S,R)\)
Commutativité de la jointure :
  • \(\displaystyle \Join_{[p(r,s)]}(R,S)=\Join_{[p(r,s)]}(S,R)\)
Associativité de la jointure :
  • \(\displaystyle \Join_{[p_1(r,x)]}(R,X=\Join_{[p_2(s,t)]}(S,T))=\Join_{[p_2(x,t)]}(X=\Join_{[p_1(r,s)]}(R,S),T)\)
Eclatement d’une sélection conjonctive :
  • \(\displaystyle \sigma_{[p_1(r) \land p_2(r)]}(R)=\sigma_{[p_1(r)]}(\sigma_{[p_2(r)]}(R))\)
Elimination des projections en cascade :
  • \(\displaystyle \Pi_{(a_1,...,a_j)}( \Pi_{(a_j,...,a_n)]}(R))=\Pi_{(a_1,...,a_j)}(R)\)

Exercices

Opérateurs relationnels
  • Question
  • Solution

Soit les tables :

table \(S\)

X Y Z
1 1 1
2 2 2
3 3 3

table \(T\)

X Y
1 1
2 3
3 3

Quel sera le résultat de la requête : \(R=\cap(\Pi_{(X,Y)}( \sigma_{[Z!=1]}(S)),T)\)

Votre réponse :
Ecrire sur papier libre les résultats intermédiaires de l’expression relationnelle \(R\).
Une solution possible :

L’ensemble contient un seul élément : \(\{(3,3)\}\)

Vérification en décomposant la requête :

  1. \(R_1=\sigma_{[Z!=1]}(S)=\{(2,2,2),(3,3,3)\}\)
  2. \(R_2=\Pi_{(X,Y)}(R_1)=\{(2,2),(3,3)\}\)
  3. \(\cap(R_2,T)=\{(3,3)\}\)
Opérateurs relationnels et SQL
  • Question
  • Solution

Soit les tables :

table \(S\)

X Y Z
1 1 1
2 2 2
3 3 3

table \(T\)

X Y
1 1
2 3
3 3
Sous l’interpréteur SQL :
  1. Créer les tables (\(S,T\)).
  2. Insérer les enregistrements correspondants à l’énoncé.
  3. Ecrire la requête SQL correspondant à l’expression algébrique : \(R=\cap(\Pi_{(X,Y)}( \sigma_{[Z!=1]}(S)),T)\)
  4. vérifier que l’on trouve bien le résultat attendu : \(R=\{(3,3)\}\)
Votre réponse :
sql : essai.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
Une solution possible :
sql : essai.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
Opérations ensemblistes et équivalence
  • Question
  • Solution
Parmi les équivalences suivantes trouvez celles qui sont fausses en expliquant à l’aide de contre-exemples.
  1. \(\Pi_{X}(\cap(S,T))=\cap(\Pi_{X}(S),\Pi_{X}(T))\)
  2. \(\Pi_{X}(\backslash(S,T))=\backslash(\Pi_{X}(S),\Pi_{X}(T))\)
  3. \(\Pi_{X}(\cup(S,T))=\cup(\Pi_{X}(S),\Pi_{X}(T))\)

en considérant les instances de tables suivantes contenant un seul enregistrement :

table S :

X Y
1 2

table T :

X Y
1 3

appliquez les expressions algébriques sur les instances de tables ci-dessus pour justifier vos réponses,

Votre réponse :
Texte : inputlines696.txt

Zone de saisie de texte

ClavierAction
F1Afficher une aide technique
F2Afficher une aide pédagogique
Ctrl-ATout sélectionner
Ctrl-CCopier la sélection dans le presse-papier
Ctrl-VCopier le presse-papier dans la sélection
Ctrl-XCouper la sélection et la copier dans le presse-papier
Ctrl-ZAnnuler la modification
Maj-Ctrl-ZRétablir la modification

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Valider la zone de saisie
Initialiser la zone de saisie
Charger le contenu d'un fichier dans la zone de saisie
Sauvegarder le contenu de la zone de saisie dans un fichier
Imprimer le contenu de la zone de saisie
Une solution possible :

en considérant les tables suivantes :

table S :

X Y
1 2

table T :

X Y
1 3

On peut vérifier que l’équivalence :

  • \(\Pi_{X}(\cap(S,T))=\cap(\Pi_{X}(S),\Pi_{X}(T))\)

est fausse.

En effet :

  • \(\cap(S,T)=\{\}\)

donc : \(\Pi_{X}(\cap(S,T))=\{\}\)

  • \(\Pi_{X}(S)=\{ 1 \}\) et \(\Pi_{X}(T) =\{ 1 \}\)

donc : \(\cap(\Pi_{X}(S),\Pi_{X}(T))=\{ 1 \}\)

par conséquent :

  • \(\Pi_{X}(\cap(S,T)) \neq \cap(\Pi_{X}(S),\Pi_{X}(T))\)

On peut également vérifier que l’équivalence :

  • \(\Pi_{X}(\setminus(S,T))=\setminus(\Pi_{X}(S),\Pi_{X}(T))\)

est fausse.

En effet :

  • \(\setminus(S,T)=\{(1,2) \}\)

donc : \(\Pi_{X}(\setminus(S,T))=\{ 1 \}\)

  • \(\Pi_{X}(S) = \{ 1 \}\) et \(\Pi_{X}(T) = \{ 1 \}\)

donc : \(\setminus(\Pi_{X}(S),\Pi_{X}(T)) = \{\}\)

par conséquent :

  • \(\Pi_{X}(\setminus(S,T)) \neq \setminus(\Pi_{X}(S),\Pi_{X}(T))\)

La seule équivalence vraie est celle de la distributivité de la projection sur l’union (\(\cup(S,T)\)) :

  • \(\Pi_{X}(\cup(S,T))=\cup(\Pi_{X}(S),\Pi_{X}(T))\)

On peut vérifier sur l’exemple précédent :

  • \(\cup(S,T)=\{(1,2),(1,3) \}\)

donc : \(\Pi_{X}(\cup(S,T))=\{ 1 \}\)

  • \(\Pi_{X}(S) = \{ 1 \}\) et \(\Pi_{X}(T) = \{ 1 \}\)

donc : \(\cup(\Pi_{X}(S),\Pi_{X}(T)) = \{ 1 \}\)

par conséquent :

  • \(\Pi_{X}(\cup(S,T))=\cup(\Pi_{X}(S),\Pi_{X}(T))\)

Aux pays des bières

On formulera ici les recherches d’information en algèbre relationnelle sur le modèle de données des « bars qui servent des bières ».

On pourra vérifier le résultat sur une base de données SQLite en formulant les requêtes SQL.

Faire le diagramme de classes et les commandes SQL de création des tables du modèle données :
  • Un bar a un nom (bar), est localisé dans un pays (pays),
  • Une bière a un nom (biere), une couleur (couleur) et un pays d’origine de fabrication (origine),
  • un service contient les quantités (stock) de bières servies dans les bars.
Diagramme de classes

_images/bars_UML.png

Création des tables SQL

CREATE TABLE bars (
                   id_bar INTEGER NOT NULL PRIMARY KEY,
                   bar VARCHAR(20),
                   pays  VARCHAR(20)
                  );

CREATE TABLE bieres (
                     id_biere INTEGER NOT NULL PRIMARY KEY,
                     biere VARCHAR(20),
                     couleur VARCHAR(10),
                     origine VARCHAR(20)
                    );

CREATE TABLE services (
                       id_bar INTEGER NOT NULL,
                       id_biere INTEGER NOT NULL,
                       stock SMALLINT,
                       PRIMARY KEY (id_bar, id_biere),
                       FOREIGN KEY (id_bar)   REFERENCES bars,
                       FOREIGN KEY (id_biere) REFERENCES bieres
                      );

Algèbre relationnelle :
  • rechercher les informations suivantes sur le modèle de données en écrivant les requêtes en algèbre relationnelle et en langage SQL.
nom et couleur des bières

Algèbre relationnelle :

\(R=\Pi_{(biere,couleur)}(bieres)\)

SQL :

SELECT couleur,biere FROM bieres;

bières françaises

Algèbre relationnelle :

\(R=\sigma_{[origine="France"]}(bieres)\)

SQL :

SELECT * FROM bieres WHERE origine='France';

toutes les combinaisons possibles de bars et de bières

Algèbre relationnelle :

\(R=\times(bars,bieres)\)

SQL :

SELECT * FROM bars, bieres;
-- ou
SELECT * FROM bars CROSS JOIN bieres;

nom des pays qui ont des bars et nom de l'origine de production des bières

Algèbre relationnelle :

\(R=\cup(\Pi_{(pays)}(bars),\Pi_{(origine)}(bieres))\)

SQL :

(SELECT pays AS nom FROM bars)
UNION
(SELECT origine AS nom FROM  bieres);

les pays qui ont des bars et qui ne produisent pas de bière

Algèbre relationnelle :

\(R=\setminus(\Pi_{(pays)}(bars),\Pi_{(origine)}(bieres))\)

SQL :

(SELECT pays AS nom FROM bars)
EXCEPT
(SELECT origine AS nom FROM  bieres);

les pays qui ont des bars et qui produisent de la bière

Algèbre relationnelle :

\(R=\cap(\Pi_{(pays)}(bars),\Pi_{(origine)}(bieres))\)

SQL :

(SELECT pays AS nom FROM bars)
INTERSECT
(SELECT origine AS nom FROM  bieres);

les noms des pays qui ont des bars et qui sont aussi des pays qui produisent de la bière

Algèbre relationnelle :

\(R=\Pi_{pays}(\Join_{[pays=origine]}(bars,bieres))\)

SQL :

SELECT pays  FROM bars INNER JOIN bieres ON(pays=origine);
-- ou
SELECT pays FROM  bars,bieres WHERE pays=origine;

les bars qui servent toutes les bières

Algèbre relationnelle : \(R=\div(S(X,Y),T(Y))\)

Dans le cas des bars qui servent des bières :

  • \(R=\div(services(id\_bar,id\_biere),bieres(id\_biere))\)

SQL :

L’opérateur n’existe pas en SQL mais peut être exprimé par une double négation (NOT EXISTS)

« Trouver les bars tel qu’il n’existe pas de bière pour laquelle il n’existe pas de service associant ce bar et cette bière »

SELECT DISTINCT id_bar
FROM services s1
WHERE NOT EXISTS (
                  SELECT *
                  FROM bieres b
                  WHERE NOT EXISTS ( SELECT *
                                     FROM services s2
                                     WHERE s1.id_bar=s2.id_bar AND s2.id_biere=b.id_biere )
                 );

-- si on souhaite plus d'informations sur les bars
SELECT *
FROM bars ba WHERE
NOT EXISTS(SELECT *
           FROM bieres bi
           WHERE NOT EXISTS(SELECT *
                            FROM services s
                            WHERE s.id_bar=ba.id_bar
                              AND s.id_biere=bi.id_biere)
          );

Formulation SQL :
  • On pourra vérifier les requêtes SQL correspondantes aux questions précédentes avec les instances de tables suivantes :
Table « bars » Table « bieres » Table « services »
bar_idbarpays
1Bar du CoinFrance
2Corners PubUSA
3Cafe der EckeAllemagne
4Cafe des AmisFrance
biere_idbierecouleurorigine
1KronenbourgBlondeFrance
2GuinnessBruneIrlande
3HeinekenBlondeHollande
4NewcastleRousseUK
5SpatenBlondeAllemagne
6BushBlondeUSA
7KanterbrauBlondeFrance
8KronenbourgBruneFrance
bar_idbiere_idstock
111000
12250
1350
1410
1510
1610
1740
1860
21100
261500
355000
sql : essai.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

Au Tournoi des six nations

On formulera ici les recherches d’information en calcul relationnel sur le modèle de données du « Tournoi des six nations ».

On pourra vérifier le résultat sur une base de données SQLite en formulant les requêtes SQL.

Faire le diagramme de classes correspondant au modèle de données suivant :

  • une équipe (equipe) a un nom (nom_equipe), fait partie d’une nation (pays) et a un entraîneur (coach)

  • les joueurs (joueurs) font partie d’une équipe (id_equipe) ont un nom et un prénom (nom,prenom), jouent à un poste précis (position) peuvent être de différentes nationalités (nationalite).

    Pour chaque joueur on connaît sa date de naissance, leur taille et leur poids (naissance,taille,poids).

  • un (match) concerne deux équipes (id_locaux,id_visiteurs), a lieu un jour à un horaire précis (jour,horaire) sur le stade de l’équipe qui accueille (stade)

    Chaque match donnera lieu à un score pour l’équipe qui reçoit (locaux_score) et celle qui joue à l’extérieur visiteurs_score).

    On notera aussi l’affluence du nombre de spectateurs (spectateurs) le jour du match.

  • Les matchs donnent lieu à des (selections) de joueurs.

    A chaque match (id_match) on associera les joueurs (id_joueur) sélectionnés, le nombre d’essais (essais), de transformations (transformations) et de pénalités qu’ils ont marqués (penalites).

Diagramme de classes

_images/sixnations_Class_diagram.png

Créer les tables correspondant à ce modèle de données :

Création des tables SQL

CREATE TABLE equipes (
                      id_equipe CHAR(3) PRIMARY KEY,
                      nom_equipe TEXT,
                      pays TEXT,
                      coach TEXT
                     );
CREATE TABLE joueurs (
                      id_joueur INTEGER PRIMARY KEY AUTOINCREMENT,
                      id_equipe  CHAR(3),
                      nom TEXT,
                      prenom TEXT,
                      position TEXT,
                      nationalite TEXT,
                      naissance DATE,
                      taille  FLOAT CHECK (1 < taille and taille < 3) DEFAULT 1.80,
                      poids FLOAT CHECK (50 < poids and poids < 150) DEFAULT 80,
                      FOREIGN KEY(id_equipe) REFERENCES equipes(id_equipe)
                     );
CREATE TABLE matchs (
                     id_match INTEGER PRIMARY KEY  AUTOINCREMENT,
                     id_locaux CHAR(3),
                     id_visiteurs CHAR(3),
                     jour DATE,
                     horaire TIME,
                     locaux_score INTEGER,
                     visiteurs_score INTEGER,
                     stade TEXT,
                     spectateurs INTEGER,
                     FOREIGN KEY(id_locaux) REFERENCES equipes(id_equipe),
                     FOREIGN KEY(id_visiteurs) REFERENCES equipes(id_equipe)
                    );
CREATE TABLE selections (
                         id_joueur INTEGER NOT NULL,
                         id_match INTEGER NOT NULL,
                         essais SMALLINT DEFAULT 0,
                         transformations SMALLINT DEFAULT 0,
                         penalites SMALLINT DEFAULT 0,
                         PRIMARY KEY(id_joueur,id_match),
                         FOREIGN KEY(id_match) REFERENCES matchs(id_match),
                         FOREIGN KEY(id_joueur) REFERENCES joueurs(id_joueur)
                        );

Calcul relationnel :
  • rechercher les informations suivantes sur le modèle de données en écrivant les requêtes en calcul relationnel et en langage SQL.
nom et prénom des joueurs du tournoi des six nations

Algèbre relationnelle :

\(\displaystyle R=\Pi_{(nom,prenom)}(joueurs)\)

SQL :

SELECT nom,prenom FROM joueurs;

joueurs de l'équipe de France

Algèbre relationnelle :

\(\displaystyle R=\sigma_{[id\_equipe="FRA"]}(joueurs)\)

SQL :

SELECT * FROM joueurs WHERE id_equipe='FRA';

toutes les combinaisons possibles des joueurs avec les équipes

Algèbre relationnelle :

\(R=\times(equipes,joueurs)\)

SQL :

SELECT * FROM equipes, joueurs;
-- ou
SELECT * FROM equipes CROSS JOIN joueurs;

noms du coach et des joueurs du XV de France

Algèbre relationnelle :

\(R=\cup(\Pi_{(coach)}(\sigma_{[id\_equipe='FRA']}(equipes),\Pi_{(nom)}(\sigma_{[id\_equipe='FRA']}(joueurs)))\)

SQL :

(SELECT coach AS nom FROM Equipes WHERE id_equipe='FRA')
UNION
(SELECT nom FROM  Joueurs WHERE id_equipe='FRA');

identifiant des joueurs qui n’ont pas été selectionnés pendant le tournoi des 6 nations

Algèbre relationnelle :

\(R=\setminus(\Pi_{(id\_joueur)}(joueurs),\Pi_{(id\_joueur)}(selections))\)

SQL :

SELECT id_joueur FROM joueurs
EXCEPT
SELECT id_joueur FROM selections;

identifiant des joueurs qui ont été selectionnés pendant le tournoi des 6 nations

Algèbre relationnelle :

\(R=\cap(\Pi_{(id\_joueur)}(joueurs),\Pi_{(id\_joueur)}(selections))\)

SQL :

SELECT id_joueur
FROM joueurs
INTERSECT
SELECT id_joueur
FROM selections;

nom et nationalité des joueurs qui évoluent dans une autre nation que celle de leur pays d'origine.

Algèbre relationnelle :

\(R=\Pi_{(nom,nationalite)}\Join_{[joueurs.id\_equipe=equipes.id\_equipe \land nationalite!=pays]}(joueurs,equipes)\)

SQL :

SELECT (nom,nationalite) FROM  equipes e INNER JOIN joueurs j ON (e.id_equipe=j.id_equipe AND e.pays!=j.nationalite);
-- ou
SELECT (nom,nationalite) FROM joueurs NATURAL JOIN equipes WHERE pays!=nationalite;

nom des joueurs qui ont été sélectionnés pour tous les matchs de leur équipe

Algèbre relationnelle : \(R=\div(S(X,Y),T(Y))\)

Dans le cas du toutnoi des six nations :

  • \(R=\div(selections(id\_joueur,id\_match),matchs(id\_match))\)

SQL :

L’opérateur n’existe pas en SQL mais peut être exprimé par une double négation (NOT EXISTS)

« Trouver les joueurs tel qu” il n’existe pas de matchs de son equipe pour lesquels il n’ait pas été sélectionné »

SELECT j.nom
FROM joueurs j
WHERE  NOT EXISTS ( SELECT id_match
                    FROM matchs m WHERE j.id_equipe=m.id_locaux OR j.id_equipe=m.id_visiteurs
                    EXCEPT
                    SELECT id_match
                    FROM selections s WHERE j.id_joueur=s.id_joueur);

Formulation SQL :

  • On pourra vérifier les requêtes SQL correspondantes aux questions précédentes avec les instances de tables suivantes :
Table « equipes »
id_equipenom_equipepayscoach
FRAXV de FranceFranceNovès
ANGXV de la RoseAngleterreJones
GALXV du PoireauPays de GallesGatland
IRLXV du TrèfleIrlandeSchmidt
ECOXV du ChardonEcosseCotter
ITAAzzuriItalieBrunel
Table « joueurs »
id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
1ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580
2ECOHoggStuartArriereEcosse1992-06-241.880
3ECODunbarAlex3/4 centreEcosse1990-04-231.9180
4ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380
5ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580
6ECOGrayRichie2eme ligneEcosse1989-08-242.0680
7IRLEarlsKeith3/4 centreIrlande1987-10-021.880
8IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880
9IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880
10IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980
11IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380
12IRLRingroseGarry3/4 centreIrlande1995-01-261.8780
13IRLBestRoryTalonneurIrlande du Nord1982-08-151.880
14ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980
15ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880
16ANGDalyElliot3/4 centreAngleterre1992-10-081.8480
17ANGYoungsTomTalonneurAngleterre1987-01-281.7580
18ANGColeDanPilierAngleterre1987-05-091.9180
19FRASlimaniRabahPilierFrance1989-10-181.7880
20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
21FRAFickouGael3/4 centreFrance1994-03-291.980
22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
23ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880
24ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180
25ITAParisseSergio3eme ligneArgentine1983-09-121.9680
26GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680
27GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880
28GALNorthGeorge3/4 aileAngleterre1992-04-131.9280
29GALHalfpennyLeighArrierePays de Galles1988-12-221.7880
30GALBiggarDan1/2 ouverturePays de Galles1989-10-161.8880
Table « matchs »
id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
1ECOIRL2017-02-0415:25:002722Murrayfield67144
2ANGFRA2017-02-0417:50:001916Twickenham81902
3ITAGAL2017-02-0515:00:00733Stadio olympico40986
4ITAIRL2017-02-1115:25:001063Stadio olympico50197
5GALANG2017-02-1117:50:001621Millennium Stadium74500
6FRAECO2017-02-1216:00:002216Stade de France75283
7ECOGAL2017-02-2515:25:00Murrayfield
8IRLFRA2017-02-2517:50:00Aviva Stadium
9ANGITA2017-02-2616:00:00Twickenham
10GALIRL2017-03-1021:05:00Millennium Stadium
11ITAFRA2017-03-1114:30:00Stadio olympico
12ANGECO2017-03-1117:00:00Twickenham
13ECOITA2017-03-1813:30:00Murrayfield
14FRAGAL2017-03-1815:45:00Stade de France
15IRLANG2017-03-1818:00:00Aviva Stadium
Table « selections »
id_joueurid_matchessaistransformationspenalites
21200
31100
11032
71100
81100
91121
142100
152013
162001
192100
202013
233100
243010
263100
273100
283100
293034
275100
295013
165100
175100
155013
244011
74200
104300
114300
124100
94090
216100
206015
26100
56100
46002
208000
2011000
2014000
sql : sixnations.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
 
Systèmes d'Information : Algèbre relationnelle, 13 avr. 2023.