Le pirate
<script type="text/javascript"><!--
google_ad_client = "ca-pub-4939308778999512";
/* prmier test */
google_ad_slot = "3993502071";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Le pirate
<script type="text/javascript"><!--
google_ad_client = "ca-pub-4939308778999512";
/* prmier test */
google_ad_slot = "3993502071";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Le pirate
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Derniers sujets
» Delphi 7 entreprise version complète
Les Jointures Icon_minitimeMar 28 Juil - 21:54 par montecristo

» Crack windev 17
Les Jointures Icon_minitimeDim 29 Mar - 17:12 par fotsoissa

» WinDev 11 + PATCH et Crack
Les Jointures Icon_minitimeJeu 8 Jan - 12:52 par kalou

» connaitre ip sur skype
Les Jointures Icon_minitimeSam 16 Fév - 20:56 par GhOSTHaCK

» comment supprimer Windows Genuine Advantage Notifications
Les Jointures Icon_minitimeSam 29 Déc - 22:18 par Francis48

» cle pour vista
Les Jointures Icon_minitimeMer 19 Déc - 9:00 par jacthom.1

» télécharger gratuitement Windows XP sp2
Les Jointures Icon_minitimeMar 18 Déc - 22:50 par bellassima73

» pirater un site web
Les Jointures Icon_minitimeVen 9 Nov - 18:24 par django88

» MANDRIVA LINUX OFFICIAL EDITION DVD v 2007.1
Les Jointures Icon_minitimeJeu 25 Nov - 12:36 par jingjing2116

» McAfeeTotalProtection2009 version complète et gratuite
Les Jointures Icon_minitimeVen 7 Aoû - 3:01 par Invité

» Les Jointures
Les Jointures Icon_minitimeDim 11 Jan - 15:49 par Invité

» Introduction à Oracle OL/SQL
Les Jointures Icon_minitimeSam 20 Déc - 17:40 par Admin

» téléchargher Microsoft visio professionel 2007 gratuit
Les Jointures Icon_minitimeSam 11 Oct - 18:00 par Invité

» L’UWB ou la bande ultra large
Les Jointures Icon_minitimeDim 28 Sep - 13:55 par Invité

» introduction à la téléphonie mobile
Les Jointures Icon_minitimeJeu 25 Sep - 14:27 par Invité

» Présentation de l'UMTS
Les Jointures Icon_minitimeJeu 25 Sep - 13:56 par Invité

» Démarrer avec Visual C++ 2005 Express
Les Jointures Icon_minitimeMer 17 Sep - 16:47 par Invité

» télécharger tous les drivers
Les Jointures Icon_minitimeSam 13 Sep - 16:20 par Invité

» Hacher un PC
Les Jointures Icon_minitimeMar 26 Aoû - 23:04 par Lina

» Le protocole http
Les Jointures Icon_minitimeMar 26 Aoû - 2:59 par Admin

» une faille dans le DNS
Les Jointures Icon_minitimeMar 26 Aoû - 2:44 par Admin

» XP SP3
Les Jointures Icon_minitimeVen 30 Mai - 16:34 par tito

» tsonamy
Les Jointures Icon_minitimeMer 7 Mai - 18:59 par tito

» initiation UNIX
Les Jointures Icon_minitimeMer 26 Mar - 14:22 par Admin

» à ne pas voir
Les Jointures Icon_minitimeLun 24 Mar - 16:54 par Admin

» Adobe reader 8.1 vertion complète gratuite
Les Jointures Icon_minitimeLun 24 Mar - 15:43 par Admin

» Dictionnaire informatique
Les Jointures Icon_minitimeMer 5 Mar - 16:31 par Lina

» les commandes Shell de Vista
Les Jointures Icon_minitimeMer 5 Mar - 16:22 par Lina

» McAfee VirusScan Plus 2008
Les Jointures Icon_minitimeLun 25 Fév - 15:18 par Admin

» Anti-Virus Kaspersky
Les Jointures Icon_minitimeLun 25 Fév - 14:55 par Admin

Le deal à ne pas rater :
Pokémon EV06 : où acheter le Bundle Lot 6 Boosters Mascarade ...
Voir le deal

 

 Les Jointures

Aller en bas 
AuteurMessage
La peste




Nombre de messages : 5
Date d'inscription : 06/12/2007

Les Jointures Empty
MessageSujet: Les Jointures   Les Jointures Icon_minitimeMar 29 Jan - 14:29

1. Les Jointures ou comment faire des requêtes sur plusieurs tables
Les jointures permettent d'exploiter pleinement le modèle relationnel des tables d'une base de données.
Elle sont faites pour mettre en relation deux (ou plus) tables concourant à rechercher la réponse à des interrogations. Une jointure permet donc de combiner les colonnes de plusieurs tables.


Il existe en fait différentes natures de jointures que nous expliciterons plus en détail. Retenez cependant que la plupart des jointures entre tables s'effectuent en imposant l'égalité des valeurs d'une colonne d'une table à une colonne d'une autre table. On parle alors de jointure naturelle ou équi-jointure. Mais on trouve aussi des jointures d'une table sur elle même. On parle alors d'auto-jointure. Enfin il arrive que l'on doive procéder à des jointures externe, c'est à dire joindre une table à une autre, même si la valeur de liaison est absente dans une table ou l'autre. Enfin, dans quelques cas, on peut procéder à des jointures hétérogènes, c'est à dire que l'on remplace le critère d'égalité par un critère d'inégalité ou de différence. Nous verrons au moins un cas de cette espèce.


Une jointure entre tables peut être mise en oeuvre, soit à l'aide des éléments de syntaxe SQL que nous avons déjà vu, soit à l'aide d'une clause spécifique du SQL, la clause JOIN. Nous allons commencer par voir comment à l'aide du SQL de base nous pouvons exprimer une jointure.



1.1. Premiers essais de jointure

Rappel de la syntaxe du SELECT :


SELECT [DISTINCT ou ALL] * ou liste de colonnes FROM nom des tables ou des vues
C'est ici le pluriel de la partie FROM qui change tout...

Tâchons donc de récupérer les n° des téléphones associés aux clients.

Exemple 1

SELECT CLI_NOM, TEL_NUMERO
FROM T_CLIENT, T_TELEPHONE
CLI_NOM TEL_NUMERO
------- --------------
DUPONT 01-45-42-56-63
DUPONT 01-44-28-52-52
DUPONT 01-44-28-52-50
DUPONT 06-11-86-78-89
DUPONT 02-41-58-89-52
DUPONT 01-51-58-52-50
DUPONT 01-54-11-43-21
DUPONT 06-55-41-42-95
DUPONT 01-48-98-92-21
DUPONT 01-44-22-56-21
...

Cette requête ne possède pas de critère de jointure entre une table et l'autre. Dans ce cas, le compilateur SQL calcule le produit cartésien des deux ensembles, c'est à dire qu'à chaque ligne de la première table, il accole l'ensemble des lignes de la seconde à la manière d'une "multiplication des petits pains" ! Nous verrons qu'il existe une autre manière, normalisée cette fois, de générer ce produit cartésien. Mais cette requête est à proscrire. Dans notre exemple elle génère 17 400 lignes...

Il faut donc définir absolument un critère de jointure.

Dans le cas présent, ce critère est la correspondance entre les colonnes contenant la référence de l'identifiant du client (CLI_ID).
Exemple 2


SELECT CLI_NOM, TEL_NUMERO
FROM T_CLIENT, T_TELEPHONE
WHERE CLI_ID = CLI_ID
CLI_NOM TEL_NUMERO
------- --------------
DUPONT 01-45-42-56-63
DUPONT 01-44-28-52-52
DUPONT 01-44-28-52-50
DUPONT 06-11-86-78-89
DUPONT 02-41-58-89-52
DUPONT 01-51-58-52-50
DUPONT 01-54-11-43-21
DUPONT 06-55-41-42-95
DUPONT 01-48-98-92-21
DUPONT 01-44-22-56-21
...

Nous n'avons pas fait mieux, car nous avons créé une clause toujours vrai, un peu à la manièreb de 1 = 1 !
En fait il nous manque une précision : il s'agit de déterminer de quelles tables proviennent les colonnes CLI_ID de droite et de gauche. Cela se précise à l'aide d'une notation pointée en donnant le nom de la table.

Il est donc nécessaire d'indiquer au compilateur la provenance de chacune des colonnes CLI_ID et donc d'opérer une distinction entre l'une et l'autre colonne.
Ainsi, chaque colonne devra être précédée du nom de la table, suivi d'un point.

Exemple 3

SELECT CLI_NOM, TEL_NUMERO
FROM T_CLIENT, T_TELEPHONE
WHERE T_CLIENT.CLI_ID = T_TELEPHONE.CLI_ID
CLI_NOM TEL_NUMERO
------- --------------
DUPONT 01-45-42-56-63
DUPONT 01-44-28-52-52
DUPONT 01-44-28-52-50
BOUVIER 06-11-86-78-89
DUBOIS 02-41-58-89-52
DREYFUS 01-51-58-52-50
DUHAMEL 01-54-11-43-21
BOYER 06-55-41-42-95
MARTIN 01-48-98-92-21
MARTIN 01-44-22-56-21
...

On tombe ici à 174 enregistrements dans la table !!!

Mais il existe une autre façon de faire, plus simple encore. On utilise la technique du "surnommage", c'est à dire que l'on attribue un surnom à chacune des tables présente dans la partie FROM du SELECT :

Exemple 4


SELECT CLI_NOM, TEL_NUMERO
FROM T_CLIENT C, T_TELEPHONE T
WHERE C.CLI_ID = T.CLI_ID
CLI_NOM TEL_NUMERO
------- --------------
DUPONT 01-45-42-56-63
DUPONT 01-44-28-52-52
DUPONT 01-44-28-52-50
BOUVIER 06-11-86-78-89
DUBOIS 02-41-58-89-52
DREYFUS 01-51-58-52-50
DUHAMEL 01-54-11-43-21
BOYER 06-55-41-42-95
MARTIN 01-48-98-92-21
MARTIN 01-44-22-56-21
...
.


Ici, la table T_CLIENT a été surnommée "C" et la table T_TELEPHONE "T".


Bien entendu, et comme dans les requêtes monotabulaires on peut poser des conditions supplémentaires de filtrage dans la clause where. Cherchons par exemple les clients dont les numéros de téléphone correspondent à un fax :

Exemple 5


SELECT CLI_NOM, TEL_NUMERO
FROM T_CLIENT C, T_TELEPHONE T
WHERE C.CLI_ID = T.CLI_ID
AND TYP_CODE = 'FAX'

CLI_NOM TEL_NUMERO
------- --------------
DUPONT 01-44-28-52-50
MARTIN 01-44-22-56-21
DUHAMEL 01-54-11-43-89
DUPONT 05-59-45-72-42
MARTIN 01-47-66-29-55
DUBOIS 04-66-62-95-64
DREYFUS 04-92-19-18-58
DUHAMEL 01-55-60-93-81
PHILIPPE 01-48-44-86-19
DAUMIER 01-48-28-17-95
...

Le fait de placer comme critère de jointure entre les tables, l'opérateur logique "égal" donne ce que l'on apelle une "équi-jointure".


REMARQUE IMPORTANTE

Comme vous pouvez le constater, le nom du client BOUVIER n'apparaît pas. Il n'a pas été "oublié" par le traitement de la requête, mais le numéro de fax de ce client n'est pas présent dans la table T_TELEPHONE. Or le moteur SQL recherche les valeurs de la jointure par égalité. Comme l'ID_CLI de BOUVIER n'est pas présent dans la table T_TELEPHONE, il ne peut effectuer la jointure et ignore donc la ligne concernant le client BOUVIER. Nous verrons comment réparer cette lacune lorsque nous parlerons des jointures externes.


NOTA : on peut aussi utiliser les surnoms dans la partie qui suit immédiatement le mot clef SELECT. Ainsi l'exemple 4, peut aussi s'écrire :

Exemple 6



SELECT C.CLI_ID, C.CLI_NOM, T.TEL_NUMERO
FROM T_CLIENT C, T_TELEPHONE T
WHERE C.CLI_ID = T.CLI_ID
AND T.TYP_CODE = 'FAX'

CLI_ID CLI_NOM TEL_NUMERO
------ ------- --------------
1 DUPONT 01-44-28-52-50
10 MARTIN 01-44-22-56-21
8 DUHAMEL 01-54-11-43-89
1 DUPONT 05-59-45-72-42
2 MARTIN 01-47-66-29-55
4 DUBOIS 04-66-62-95-64
5 DREYFUS 04-92-19-18-58
8 DUHAMEL 01-55-60-93-81
13 PHILIPPE 01-48-44-86-19
15 DAUMIER 01-48-28-17-95
...
C'est particulièrement pratique lorsque l'on veut récupérer une colonne qui se retrouve dans les deux tables, ce qui est souvent le cas de la (ou les) colonne de clef étrangère qui permet juutement d'assurer la jointure.


Pour joindre plusieurs tables, on peut utiliser le même processus de manière répétitive...
Revenir en haut Aller en bas
Invité
Invité




Les Jointures Empty
MessageSujet: Re: Les Jointures   Les Jointures Icon_minitimeDim 11 Jan - 15:49

Très intéressant, Merci.
Revenir en haut Aller en bas
 
Les Jointures
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le pirate :: Programmation-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser