TP9

9.0 Utiliser les jointures.

Parfois, il vous faut utiliser deux ou plusieurs tables pour accéder à l'information que vous voulez. Par exemple, supposons que le propriétaire du The Coffee Break veut une liste des cafés qu'il a achetés chez Acme, Inc. Cela demande des informations dans la table CAFE ainsi que dans la table FOURNISSEURS. C'est un des cas ou une jointure est nécessaire. Une jointure est une opération qui relit deux ou plusieurs tables par les valeurs qu'elles ont en commun. Dans notre base de données, la table CAFE et FOURNISSEURS ont toutes deux la colonne FO_ID, qui pourra être utilisée pour joindre les deux tables.

Mais avant d'aller plus loin, nous devons créer la table FOURNISSEURS et la remplir de ses valeurs.
Le code ci-dessous créera la table FOURNISSEURS :

String createFournisseurs = "create table FOURNISSEURS" +
"(FO_ID INTEGER, NOM_FO VARCHAR(40),RUE VARCHAR(40), VILLE VARCHAR(20), " +
"ETAT CHAR(2), CODE_POSTAL CHAR(5))";
stmt.executeUpdate(createFournisseurs);

Le code suivant insère les lignes pour les trois fournisseurs dans FOURNISSEURS :

stmt.executeUpdate("insert into FOURNISSEURS values (101,'Acme, Inc.',"+ "'99 Market Street', 'Groundsville', 'CA', '95199'");
stmt.executeUpdate("Insert into FOURNISSEURS values (49,'Superior " + "Coffee', '1 Party Place', 'Mendocino', 'CA','95460'");
stmt.executeUpdate("Insert into FOURNISSEURS values (150,'The High"+ "Ground', '100 Coffee Lane', 'Meadows', 'CA','93966'");

Maintenant que nous avons les tables CAFE et FOURNISSEURS, nous pouvons procéder au scénario ou le propriétaire veut obtenir la liste des cafés qu'il a achetés auprès d'un fournisseur en particulier. Le nom des fournisseurs se trouve dans la table FOURNISSEURS et le nom des cafés se trouve dans la table CAFE. Deux des tables possèdent maintenant la colonne FO_ID, cette colonne peut être alors utilisée comme jointure. Mais vous devez pouvoir distinguer de quelle table on parle lorsque la colonne FO_ID est utilisée. On utilise pour ça, le nom de la table devant la colonne séparée par un point, par exemple " CAFE.FO_ID" réfère que vous utilisez la colonne FO_ID de la table CAFE. Le code suivant, dans lequel stmt est un objet Statement, sélectionne les cafés achetés chez Acme, Inc :

String requete = "
SELECT CAFE.NOM_CAFE" +
"FROM CAFE, FOURNISSEURS " +
"WHERE FOURNISSEURS.NOM_FO LIKE 'Acme,Inc.''" +
"and FOURNISSEURS.FO_ID = CAFE.FO_ID";

ResultSet rs = stmt.executeQuery(requete);
System.out.println("Les café acheté à Acme, Inc. : ");
while(rs.next()){
String nomCafe= rs.getString("NOM_CAFE");
System.out.println(" " + nomCafe);
}

Cela devrait produire le résultat suivant :

Les café acheté à Acme, Inc. :
Colombian
Colombian_Decaf

Précédent Suivant


Revenir à la page principale

© Tous droits réservés 2003 - Patrick ITEY - INRIA Sophia-Antipolis