A couple years ago, I purchased Paul Nielsen’s wonderful book “SQL Server 2005 Bible” published by Wiley. It includes a very small little sidenote-type of box discussing an excellent parable regarding joins. Paul’s analogy comes to mind almost every time I create a JOIN. Remembering it alone is sufficient to refresh my memory on which JOIN does what. It’s easy to remember, makes it’s point, and is succinct; what more could you ask?
So, I thought I would re-tell Paul’s example in order that this may possibly reach an individual or two that doesn’t have this book. This will help both new and old SQL’ites alike.
Consider a very old style, ultra-conservative church where men are expected to sit on one side of the aisle (the right for the sake of this example), and women on the other (the left). Married couples can indeed attend this church, but they still must sit on their respective sides. The minister instructs all married individuals who’s spouse is on the other side of the aisle, to stand up, grab their partner’s hand, and file out of the church. This is our INNER JOIN. Only matched “pieces” from each side are considered in the output.
Now imagine that instead of married individuals only, the minister instructs all the men to stand up. Those that are married are to grab the hand of their spouse on the other side of the aisle, and then all men and only the married women are exited from the church. Here is our OUTER JOIN; a RIGHT one in this case. Our output consists of all members of the right group and only matches from the left.
Conversely, perhaps the minister instead does the opposite. He instructs all women to stand, grab their husband’s hand, and then all women and their partners exit the building. This is our LEFT OUTER JOIN. All members from the left group are included and as well only matches from the right group come along.
Or instead, the minister instructs everyone to stand up, all the married folks to grab hands, and then everyone leaves the building. This is our FULL [OUTER] JOIN! Everything is included in the output, but matched couples are still sent out together.
That’s it. Simple, but extremely useful when any bit of doubt creeps into your mind about which JOIN may be appropriate in a specific situation. Again, I give credit where it is due; and this time it is to Paul Nielsen for teaching me this wonderful memory aid.
Another post coming in the next couple days to announce a job change for me that I’m very very excited about. Look for that by this time next week.
Have a grateful day…Troy