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
    • Définition
    • Aux pays des bières
    • Au Tournoi des six nations
  • Algèbre relationnelle
  • 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

Calcul relationnel

Le calcul relationnel est une notation logique, où l’on exprimera les requêtes par la formulation de restrictions logiques que les éléments (tuples) retenus dans la réponse à la requête devront satisfaire.

Définition

On distingue :

  • Calcul Relationnel de Domaine (DRC) : les variables sont les attributs des n-uplets (tuples).

    • exemple : \(x \in Personnes.nom\)

    cette représentation de requêtes est issue des travaux sur le langage QBE (IBM)

  • calcul relationnel de tuples (TRC): les variables sont les éléments (n-uplets).

    • exemple : \(x \in Personnes\)

    cette représentation de requêtes est issue des travaux sur le langage QUEL (INGRES)

Le DRC est un langage d’interrogation de données formel permettant d’exprimer des questions à partir de formules bien formées dont chaque variable est interprétée comme variant sur le domaine d’un argument d’un prédicat.

Une question en calcul relationnel de domaine s’écrit sous la forme :

  • \(\{(x,y,...) \; \mid \; F(x,y, ...)\}\)
où :
  • \(F\) : est une formule logique
  • \((x,y ...)\) : variables libres dans \(F\)
ex: 'produits'

produits(id_prod, nom, quantite, couleur)

nom et couleur de tous les produits :

  • \(R=\{(n,c) \mid produits(-,nom:n,-,couleur:c)\}\)

nom et quantite en stock des produits de couleur rouge :

  • \(R=\{(n,q) \mid produits(-,nom:n,quantite:q,couleur="rouge")\}\)

Le TRC est un langage d’interrogation de données formel permettant d’exprimer des questions à partir de formules bien formées dont les variables sont interprétées comme variant sur les éléments (n-uplets) d’une table.

Une question en calcul relationnel de tuples s’écrit sous la forme :

  • \(\{(t_1.x,t_1.y,t_2.u,t_2.v,...) \; \mid \; F(t_1,t_2 ....) \}\)

ou bien :

  • \(\{(t.x,t.y,t_2.u,t_2.v,...) \; \mid \; t_1 \in T_1 \land t_2 \in T_2 \; ... \}\)

où :

  • \(F\) : est une formule logique sur des éléments (tuples) des ensembles \(T_1,T_2,...\)
  • \((t_1.x,t_1.y,t_2.u,t_2.v...)\) : attributs des n-uplets (tuples) des ensembles \(T_1,T_2,...\)
ex: 'produits'

produits(id_prod, nom, quantite, couleur)

nom et couleur de tous les produits :

  • \(R=\{(p.nom,p.couleur) \mid produits(p)\}\)

ou :

  • \(R=\{(p.nom,p.couleur) \mid p \in produits\}\)

nom et quantite en stock des produits de couleur "rouge" :

  • \(R=\{(p.nom,p.quantite) \mid produits(p) \land p.couleur="rouge"\}\)

ou :

  • \(R=\{(p.nom,p.quantite) \mid p \in produits \land p.couleur="rouge"\}\)

Toute requête sur une base de données peut être exprimée par une formule de logique du premier ordre en calcul relationnel.

Les opérateurs de l’algèbre relationnelle qui seront utilisés pour formuler des requêtes sur une base de données peuvent être formalisés en calcul relationnel :

  1. Projection : réduire le nombre d’attributs (\(a_1,...,a_n\)) sur les éléments d’un ensemble (\(E\))

    • \(\Pi_{(a_1,...,a_n)}(E)=\{ (e.a_1,....,e.a_n) \; | \; e \in E \}\)
  2. Restriction : récupérer les éléments (\(e\)) d’un ensemble (\(E\)) qui satisfont un critère de restriction \([p(e)]\)

    • \(\sigma_{[p(e)]}(E)=\{ e \; | \; e \in E \land p(e) \}\)
  3. Produit cartésien : mettre en relation chaque élément de l’ensemble \(S\) avec tous les éléments de l’ensemble \(T\)

    • \(\times(S,T)=\{ (s,t) \; | \; s \in S \land t \in T \}\)
  4. Union : créer l’ensemble contenant les éléments qui sont dans l’ensemble \(S\) et dans l’ensemble \(T\)

    • \(\cup(S,T)=\{ r \; | \; r \in \Pi_{(s_1,...,s_n)}(S) \lor r \in \Pi_{(t_1,...,t_n)}(T) \}\)
Les éléments des deux ensembles ont le même nombre d’attributs définis sur le même domaine.
  1. Différence : créer l’ensemble contenant les éléments de l’ensemble \(S\) qui ne sont pas dans l’ensemble \(T\)

    • \(\setminus(S,T)=\{ r \; | \; r \in \Pi_{(s_1,...,s_n)}(S) \land r \notin \Pi_{(t_1,...,t_n)}(T) \}\)
Les éléments des deux ensembles ont le même nombre d’attributs définis sur le même domaine.
  1. Intersection : créer l’ensemble contenant uniquement les éléments de l’ensemble \(S\) qui sont aussi dans l’ensemble \(T\)

    • \(\cap(S,T)=\{ r \; | \; r \in \Pi_{(s_1,...,s_n)}(S) \land r \in \Pi_{(t_1,...,t_n)}(T) \}\)
Les éléments des deux ensembles ont le même nombre d’attributs définis sur le même domaine.
  1. Jointure : mettre en relation les éléments \((s,t)\) des ensembles \((S,T)\) s’ils satisfont un critère de jointure \([p(s,t)]\)

    • \(\Join_{[p(s,t)]}(S,T)=\{ (s,t) \; | \; s \in S \land t \in T \land p(s,t) \}\)
  2. Division relationnelle : récupérer les éléments (\(r\)) des éléments (\(s=(r,t)\)) de l’ensemble \(S\) qui sont en relation avec tous les éléments (\(t\)) de l’ensemble \(T\)

    • \(\div(S,T)=\{r \; | \; \forall t \in T, (r,t) \in S \}\)
où l’ensemble des attributs de \(T\) est un sous-ensemble de l’ensemble des attributs de \(S\) (\(attr(T) \subset attr(S)\))

Aux pays des bières

On formulera ici les recherches d’information en calcul relationnel 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
                      );

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 couleur des bières

Calcul relationnel de domaine :

\(R=\{ (b,c) \; | \; bieres(-,biere:b,couleur:c,-) \}\)

Calcul relationnel de n-uplets :

\(R=\{ (b.biere,b.couleur) \; | \; b \in bieres \}\)

SQL :

SELECT couleur,biere FROM bieres;

bières françaises

Calcul relationnel de domaine :

\(R=\{ (id,b,c,o) \; | \; bieres(id\_biere:id,biere:b,couleur:c,origine="France":o) \}\)

Calcul relationnel de n-uplets :

\(R=\{ b \; | \; b \in bieres \land origine="France" \}\)

SQL :

SELECT * FROM bieres WHERE origine='France';

toutes les combinaisons possibles de bars et de bières

Calcul relationnel de domaine :

\(R= \{ (id\_ba,ba,p,id\_bi,bi,c,o) \; | \; bars(id\_bar:id\_ba,bar:ba,pays:p) \land bieres(id\_biere:id\_bi,biere:bi,couleur:c,origine:o) \}\)

Calcul relationnel de n-uplets :

\(R= \{ (ba,bi) \; | \; ba \in bars \land bi \in 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

Calcul relationnel de domaine :

\(R= \{ nom \; | \; bars(-,-,pays:nom) \lor bieres(-,-,-,origine:nom) \}\)

Calcul relationnel de n-uplets :

\(R=\{ nom \; | \; (b.pays:nom, b \in bars) \lor (b.origine:nom, b \in 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

Calcul relationnel de domaine :

\(R= \{ nom \; | bars(-,-,pays:nom) \land \neg bieres(-,-,-,origine:nom) \}\)

Calcul relationnel de n-uplets :

\(R=\{ nom \; | \; (b.pays:nom, b \in bars) \land \neg (b.origine:nom, b \in 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

Calcul relationnel de domaine :

\(R= \{ nom \; | \; bars(-,-,pays:nom) \land bieres(-,-,-,origine:nom) \}\)

Calcul relationnel de n-uplets :

\(R=\{ (nom \; | \; (b.pays:nom, b \in bars) \land (b.origine:nom, b \in 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

Calcul relationnel de domaine :

\(R= \{ nom \; | \; bars(-,-,pays:nom) \land \exists \; o \; bieres(-,-,-,origine:o=nom) \}\)

Calcul relationnel de n-uplets :

\(R=\{ nom \; | \; (ba.pays:nom, ba \in bars) \land (bi.origine:nom, bi \in bieres) \land ba.pays=bi.origine\}\)

SQL :

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

le nom des bars qui servent toutes les bières

Calcul relationnel de domaine :

\(R=\{nom \; | \; bars(id\_bar:id_\_ba,bar:nom,-,-) \land \; \forall \; id\_bi \; bieres(id\_biere:id\_bi,-,-,-), services(id\_ba,id\_bi,-)) \}\)

Calcul relationnel de n-uplets :

\(R=\{ba.bar \; | ba \in bars \land \; (\forall bi \in bieres \; , \; (ba,bi) \in services) \}\)

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 *
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
                                  )
                );

NB : pour plus d’information sur la division relationnelle on pourra se reporter à la section correspondante de ce chapitre.

NB: la notation : attribut:alias (ex : pays:nom) symbolise un alias (ex: nom) d”attribut (ex: pays) .

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

Calcul relationnel de domaine :

\(R=\{ (n,p) \; | \; joueurs(-,-,nom:n,prenom:p,-,-,-,-,-) \}\)

Calcul relationnel de n-uplets :

\(R=\{ (j.nom,j.prenom) \; | \; j \in joueurs \}\)

SQL :

SELECT nom,prenom FROM joueurs;

joueurs de l'équipe de France

Calcul relationnel de domaine :

\(R=\{ (id\_j,id\_equipe,n,pr,pos,nat,nai,t,poi) \; |\)

\(\qquad \quad joueurs(id\_joueur:id_j,id\_equipe='FRA',nom:n,prenom:pr,position:pos,\)

\(\qquad \qquad \qquad \qquad nationalite:nat,naissance:nai,taille:t,poids:poi) \}\)

Calcul relationnel de n-uplets :

\(\displaystyle R=\{ j \; | \; j \in joueurs \land j.id\_equipe="FRA" \}\)

SQL :

SELECT * FROM joueurs WHERE id_equipe='FRA';

toutes les combinaisons possibles des joueurs avec les équipes

Calcul relationnel de domaine :

\(R= \{ (id\_eq,eq,p,c,id\_j,id\_e,n,pr,pos,nat,nai,t,poi) \; |\)

\(\qquad \quad equipes(id\_equipe:id\_eq,nom\_equipe:eq,pays:p,coach:c) \land\)

\(\qquad \quad joueurs(id\_joueur:id_j,id\_e:id\_equipe:id_e,nom:n,prenom:pr,position:pos,nationalite:nat,naissance:nai,taille:t,poids:poi) \}\)

Calcul relationnel de n-uplets :

\(R = \{ (e,j) \; | \; e \in equipes \land j \in joueurs \}\)

SQL :

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

noms du coach et des joueurs du XV de France

Calcul relationnel de domaine :

\(R=\{ nom \; | \; equipes(-,nom\_equipe='XV \; de \; France',-,coach:nom) \lor joueurs(-,id\_equipe='FRA',nom,-,-,-,-,-,-) \}\)

Calcul relationnel de n-uplets :

\(R=\{ nom \; | \; (e.coach:nom, e \in equipes) \land e.nom\_equipe='XV \; de \; France' \lor (j.nom:nom, j \in joueurs \land j.id\_equipe='FRA' ) \}\)

SQL :

(SELECT coach AS nom FROM equipes WHERE nom_equipe='XV de France')
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

Calcul relationnel de domaine :

\(R=\{ id \; | \; joueurs(id\_joueur:id,-,-,-,-,-,-,-,-) \land \neg selections(id\_joueur:id,-,-,-,-,-,-,-,-) \}\)

Calcul relationnel de n-uplets :

\(R=\{ id \; | (j.id\_joueur:id, j \in joueurs) \land \neg (s.id\_joueur:id, s \in 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

Calcul relationnel de domaine :

\(R=\{ id \; | \; joueurs(id\_joueur:id,-,-,-,-,-,-,-,-) \land selections(id\_joueur:id,-,-,-,-,-,-,-,-) \}\)

Calcul relationnel de n-uplets :

\(R=\{ id \; | (j.id\_joueur:id, j \in joueurs) \land (s.id\_joueur:id, s \in 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.

Calcul relationnel de domaine :

\(R=\{ (nom,nationalite) \; | \; joueurs(-,id\_equipe:id,nom,-,-,nationalite,-,-,-) \land equipes(id\_equipe:id,-,pays,-) \land pays!=nationalite\}\)

Calcul relationnel de n-uplets :

\(R=\{ (j.nom,j.nationalite) \; | \; j \in joueurs \land e \in equipes \land j.id\_equipe=e.id\_equipe \land e.pays!=j.nationalite\}\)

SQL :

SELECT nom,nationalite FROM  joueurs j INNER JOIN equipes e 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

Calcul relationnel de domaine :

\(R=\{ nom \; | \; joueurs(id\_joueur,id\_equipe,nom,-,-,-,-,-,-)\)

\(\qquad \qquad \land \; \forall \; match(id\_match,id\_locaux,id\_visiteurs,-,-,-,-,-,-), selections(id\_joueur,id\_match,-,-,-)\)

\(\qquad \qquad \land (id\_equipe=id\_locaux \lor id\_equipe=id\_visiteurs)\}\)

Calcul relationnel de n-uplets :

\(R=\{j.nom \; | \; j \in joueurs \land \; (\forall m \in matchs \; , \; (j.id\_joueur,m.id\_match) \in selections \land\)

\(\qquad \quad (j.id\_equipe=m.id\_locaux \lor j.id\_equipe=m.id\_visiteurs) \}\)

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);

NB: la notation : attribut:alias (ex : coach:nom) symbolise un alias (ex: nom) d”attribut (ex: coach) .

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 : Calcul relationnel, 13 avr. 2023.