Nous allons utiliser dans ce TP une base de données classique, Gymnase2000. Cette base de données concernent des sportifs, des sports et des gymnases. Un sportif peut jouer, arbitrer et/ou entraîner un ou plusieurs sports (ou aucun). Dans un gymnase, il peut y avoir une ou plusieurs séances d’un sport, avec un entraîneur spécifié.
Vous pouvez accéder aux tables de cette base de données via le chargement du fichier Gymnase2000.RData avec la commande load() dans R. Le fichier est disponible ici.
subset(Sportifs, 
       subset = Age > 20 & Age < 30, 
       select = c(IdSportif, Nom, Prenom)
       )
# avec jointure
unique(
    subset(
        merge(Gymnases, Seances),
        subset = tolower(Jour) == "dimanche",
        select = c(Ville, NomGymnase)
    )
)
# sans jointure
subset(Gymnases,
       subset = IdGymnase %in% subset(Seances, subset = tolower(Jour) == "dimanche")$IdGymnase,
       select = c(Ville, NomGymnase)
)
# avec jointure
subset(
    merge(
        subset(Sportifs, 
               subset = Nom == "KERVADEC", 
               select = c(Nom, IdSportifConseiller)),
        subset(Sportifs,
               select = -IdSportifConseiller),
        by.x = "IdSportifConseiller",
        by.y = "IdSportif"
    ),
    select = c(Nom.y, Prenom)
)
# sans jointure
subset(
    Sportifs,
    subset = IdSportif == subset(Sportifs, subset = Nom == "KERVADEC")$IdSportifConseiller,
    select = c(Nom, Prenom)
)
unique(
    transform(
        subset(
            merge(Gymnases, Seances),
            subset = IdSport == subset(Sports, subset = Libelle == "Hand ball")$IdSport,
            select = c(Ville, NomGymnase, Jour)
        ),
        Jour = tolower(Jour)
    )
)
# avec calcul direct
subset(
    Gymnases,
    subset = Surface == min(Gymnases$Surface)
)
# avec jointure et calcul d'agrégat
merge(
    Gymnases,
    aggregate(Surface ~ 1, data = Gymnases, min)
)