| 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 relie deux ou plusieurs tables
par les valeurs qu'elles ont en commun. Dans notre base de données,
les tables 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 où 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
|