Guillaume Lelarge wrote:
On Tue, 2012-07-17 at 20:06 -0300, Daniel Serodio (lists) wrote:
Nelson A. de Oliveira wrote:
Hi!
On Tue, Jul 17, 2012 at 7:36 PM, Daniel Serodio (lists)
<daniel.li...@mandic.com.br> wrote:
I'm using pgAdmin 1.14.3, and its Graphical Query Builder generates WHERE
clauses for joins. It would be nice if it generated JOIN clauses instead.
Is there any kind of difference between WHERE or JOINs in PostgreSQL?
Aren't they all a cartesian product internally?
They may be implemented the same way in PostgresSQL,
They are.
but they're two different concepts.
How so?
My relational algebra is a little rusty, but from what I recall plus a
quick Wikipedia read, WHERE is a "selection (σ)" while JOIN is a "join
(⋈, θ, ⋉ or ▷"):
http://en.wikipedia.org/wiki/Relational_algebra#Set_operators
Because of this, I find it a lot easier to
understand a complex query when the joins are in a JOIN clause.
I do agree here.
In more practical terms, it's easier to change "a JOIN b ON a.pk = b.fk"
to "a LEFT JOIN b ON a.pk = b.fk" (just have to type the LEFT keyword,
regardless of which tables/columns are used) then change "WHERE a.pk =
b.fk" to "WHERE a.pk = b.fk OR b.fk IS NULL" (have to add "OR b.fk IS
NULL", which changes according to which tables/columns are used).
Yes, and it's less risky. If you use a JOIN, you have to add a ON clause
if you don't want to get a syntax error. That protects you from
cartesian product.
To get back on the request, that could be interesting to do, and
probably not hard.
Thanks.
Regards,
Daniel Serodio