Thread: 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
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