ANSI join types
I got this list from Gavin Roy's presentation at O'Reilly. Is there a
good spot for this summary?
Also, I can not find documentation on UNION JOINS in our docs.
---------------------------------------------------------------------------
Bruce Momjian wrote:
SELECT
* JOINS* Cross: All combinations of rows are used
* Inner: Only rows where matches are found are retained
* Left (Outer): Returns all rows from table A, matched or not, and
only rows from table B where matches are found
* Right (Outer): Inverse of Left, returns all rows from table B and
only matches from table A
* Full: A combination of left and right. Where matches are not
found, NULLs fill the columns of the other table
* Union: This is different than the UNION operator used to merge the
output of multiple queries. This is the inverse of an Inner, only
rows are returned when no matches are found-- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Import Notes
Reply to msg id not found: 200208011633.g71GXQu02723@candle.pha.pa.us
Bruce Momjian <pgman@candle.pha.pa.us> writes:
Also, I can not find documentation on UNION JOINS in our docs.
There is none because we don't support it. While I took the trouble
to make the parser take it, there's no implementation. I'm not now
excited about making it happen ever, because I read this in SQL99:
Annex D
Deprecated features
It is intended that the following features will be removed at a
later date from a revised version of this part of ISO/IEC 9075:
1) The ability to specify UNION JOIN in a <joined table> has been
deprecated.
BTW, I think the description
* Union: This is different than the UNION operator used to merge the
output of multiple queries. This is the inverse of an Inner, only
rows are returned when no matches are found
is pretty poor. As near as I can tell from the SQL92 spec, "x UNION
JOIN y" is supposed to produce the same result as
(select *,<y.nulls> from x) UNION ALL (select <x.nulls>,* from y)
where <y.nulls> denotes a list of NULLs matching the columnset of y,
and similarly for <x.nulls>. This behavior has nothing to do with
whether any value matches exist between x and y --- it makes no join
comparisons at all.
regards, tom lane