difference between explicit inner join and implicit

difference between explicit inner join and implicit

am 31.03.2008 20:02:30 von YZXIA

Is there any difference between explicit inner join and implicit
inner join

Example of an explicit inner join:

SELECT *
FROM employee
INNER JOIN department
ON employee.DepartmentID = department.DepartmentID

Example of an implicit inner join:

SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID

Re: difference between explicit inner join and implicit

am 31.03.2008 20:28:01 von christopher.secord

On Mar 31, 1:02 pm, YZXIA wrote:
> Is there any difference between explicit inner join and implicit
> inner join

The execution plan for both queries is the same, so that suggests to
me that they are functionally identical.

Re: difference between explicit inner join and implicit

am 01.04.2008 16:01:14 von Joe Celko

>> Like this, you mean? <<

No, try this:

SELECT ..
FROM A, B, C
WHERE A.x BETWEEN B.y AND C.z;

Versus:

SELECT ..
FROM A
INNER JOIN
B
ON A.x >= B.y
INNER JOIN
C
ON C.z <= A.x;

The "between" is lost in what typographers call the law of proximity
because things are split into binary operators. Likewise, look around
this newsgroup for

a = x1 OR a = x2 or a = x3

versus
a IN (x1, x2, x3)

The set of matches is lost in the binary operators. My favorite
example of this mindset is

x1 = 0 OR x2 = 0 OR x3 = 0
versus
0 IN (x1, x2, x3)

Because the binary mindset is a left-to-right English based ordering
that says "x is zero" and "zero is x" when coding. I used to run into
this difference with Arab and Asian students who did not have this
cultural baggage.

Re: difference between explicit inner join and implicit

am 01.04.2008 16:07:17 von Joe Celko

>> Technically no, but it's a good idea to make it a habit to use the explicit inner join. It is considered the standard nowadays, <<

Not when I was on the Standards Committee; did you join later than
me?

>> is easier to read and debug, <<

NO, it isn't; have you seen any of the human factors research? The ON
clauses can be spread so far from the matching tables debugging time
increases. Multiple parameter predicates like BETWEEN and IN are
split and their higher level meaning is lost.

But it looks like ACCESS and has a nice binary operator feel that
procedural programmers like.

>> and is consistent with the OUTER JOIN syntax. <<

Yes, that is the reason it exists.

Re: difference between explicit inner join and implicit

am 02.04.2008 01:20:21 von Hugo Kornelis

On Tue, 1 Apr 2008 07:01:14 -0700 (PDT), --CELKO-- wrote:

>>> Like this, you mean? <<
>
>No, try this:
>
>SELECT ..
> FROM A, B, C
> WHERE A.x BETWEEN B.y AND C.z;
>
>Versus:
>
>SELECT ..
> FROM A
> INNER JOIN
> B
> ON A.x >= B.y
> INNER JOIN
> C
> ON C.z <= A.x;
>
>The "between" is lost in what typographers call the law of proximity
>because things are split into binary operators.

Hi Joe,

And both versions hide the actual relationship between B and C.

SELECT ..
FROM B
INNER JOIN C
ON C.z >= B.y
INNER JOIN A
ON A.x BETWEEN B.y AND C.z;

Now we have the "between", *and* the relationship between B and C is
shown explicitly. Looks like a winner to me!

(Though I have to admit that I'd be hardpressed to come up with an
example that makes it even vaguely believeable that a query such as this
would ever show up in the real world).

--
Hugo Kornelis, SQL Server MVP
My SQL Server blog: http://sqlblog.com/blogs/hugo_kornelis

Re: difference between explicit inner join and implicit

am 03.04.2008 03:57:48 von Joe Celko

>> Now we have the "between", *and* the relationship between B and C is shown explicitly. Looks like a winner to me! <<

No, no! What you have done is hide redundancy which would have been
clearly shown in a simple WHERE clause. I don't think I am the only
guy who puts all the WHERE clause predicates into a tool to sort them
to see exactly what predicates go to which tables.


>> (Though I have to admit that I'd be hard pressed to come up with an example that makes it even vaguely believable that a query such as this would ever show up in the real world). <<

LOL! We have seen much worse in this newsgroup!

Re: difference between explicit inner join and implicit

am 13.04.2008 04:22:22 von Neil H

If anyone is willing to help a novice,

is there any difference between the JOIN operator and the INNER JOIN
operator?

For example, in a sample database, I get identical results when I run

SELECT title, name
FROM books JOIN publisher
USING (pubid)

and

SELECT title, name
FROM books INNER JOIN publisher
USING (pubid)

Thanks,

Neil

*** Sent via Developersdex http://www.developersdex.com ***

Re: difference between explicit inner join and implicit

am 13.04.2008 15:46:51 von DeanGC

On Apr 12, 7:22 pm, Neil H wrote:
> If anyone is willing to help a novice,
>
> is there any difference between the JOIN operator and the INNER JOIN
> operator?
>
> For example, in a sample database, I get identical results when I run
>
> SELECT title, name
> FROM books JOIN publisher
> USING (pubid)
>
> and
>
> SELECT title, name
> FROM books INNER JOIN publisher
> USING (pubid)

No, there is no difference. They are the same. 'INNER' is optional:
the default JOIN is INNER JOIN.

Whether you write INNER or not is a matter of style.

Re: difference between explicit inner join and implicit

am 13.04.2008 17:03:03 von Erland Sommarskog

Neil H (trumbology@yahoo.com) writes:
> If anyone is willing to help a novice,
>
> is there any difference between the JOIN operator and the INNER JOIN
> operator?
>
> For example, in a sample database, I get identical results when I run
>
> SELECT title, name
> FROM books JOIN publisher
> USING (pubid)
>
> and
>
> SELECT title, name
> FROM books INNER JOIN publisher
> USING (pubid)

No, "JOIN" is just short for "INNER JOIN".

However, the USING syntax does not appear in MS SQL Server (which is the
topic for this newsgroup), so you seem be using a different product.

--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downlo ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books .mspx

Re: difference between explicit inner join and implicit

am 14.04.2008 21:52:33 von Joe Celko

INNER is a shorthand for INNER JOIN, and USING is a shorthand for an
equi-join. Nobody really likes USING, since adding more tables and re-
compiling can give you surprises.

Re: difference between explicit inner join and implicit

am 16.04.2008 19:11:44 von Shuurai

> >> Technically no, but it's a good idea to make it a habit to use the expl=
icit inner join. =A0It is considered the standard nowadays, <<
>
> Not when I was on the Standards Committee; did you join later than
> me?

The INNER JOIN syntax is the current standard. It is considered
"standard" by those who actually work in the field. How long ago was
it that you were on the Standards Committee?

You seriously need to stop pulling this "I was on the committee" crap
in place of having a valid argument. The fact of the matter is, the
vast majority of us are using the INNER JOIN syntax. If you feel like
doing things the old way, whatever.

> >> is easier to read and debug, <<
>
> NO, it isn't; have you seen any of the human factors research? =A0

YES, it is. That is one of the main reasons why people who actually
work in the field have so widely adopted it. But just for fun, why
don't you post a link to the research that shows that the syntax
practically *everyone* has adopted with open arms is so much worse
than the syntax we all (just as willingly) dropped.

> The ON clauses can be spread so far from the matching tables debugging tim=
e
> increases. =A0Multiple parameter predicates like BETWEEN and IN are
> split and their higher level meaning is lost.

Debugging time is actually diminished because the join criteria is not
mixed in with the filtering criteria. If you find yourself "losing"
predicates then maybe the problem is with you and not the syntax.

> But it looks like ACCESS and has a nice binary operator feel that
> procedural programmers like.

I could care less what looks like ACCESS. I don't personally use
ACCESS; have never been a fan.

> >> and is consistent with the OUTER JOIN syntax. <<
>
> Yes, that is the reason it exists.

Whatever the reason, the fact is it is currently the accepted industry
standard. If you do not realize/understand this, that is your issue.