On 2015-06-11 01:36 PM, Igor Korot wrote:
> Clemens,
>
> On Thu, Jun 11, 2015 at 7:01 AM, Clemens Ladisch <clemens at ladisch.de>
> wrote:
>> Paul Sanderson wrote:
>>> I have just been asked whether implicit and explicit join are the same
>>>
>>> select text, handle.id from message,handle where handle_id = handle.ROWID;
>> This is an implicit *inner* join.
>>
>>> SELECT message."text", handle.id FROM message LEFT JOIN handle ON
>>> message.handle_id = handle."ROWID";
>> This is an explicit *outer* join.
>>
>> Outer joins are one reason for using explicit joins, but you want to
>> compare against a query with the same semantics:
>>
>> select text, handle.id from message join handle on handle_id =
>> handle.ROWID;
> But even outer joins can be rewritten to use standard semantics:
>
> SELECT <smth> FROM <table_names> WHERE <condition>;
>
> So what is the purpose to use joins at all?
How will this statement:
SELECT <smth> FROM <table_names> WHERE <condition>;
ever be able to also signify a left outer join?
I have never come across such an example, but if there is a way then I
would like to learn about it.
i.e. just to be sure we are on the same page, consider in this next SQL,
how can I write the second query (in the format above) to produce the
same results as the first Query?
CREATE TABLE T1(id INT, name TEXT);
CREATE TABLE T2(id INT, T1_Ref INT);
INSERT INTO T1 VALUES
(1, 'John'),
(2, 'James'),
(3, 'Joe');
INSERT INTO T2 VALUES
(1,1),
(2,4),
(3,3),
(4,7);
-- First Query
SELECT T2.id, T2.T1_Ref, T1.name
FROM T2
LEFT JOIN T1 ON T1.id=T2.T1_Ref
-- id | T1_Ref | name
-- ------------ | ------ | ------
-- 1 | 1 | John
-- 2 | 4 | Null
-- 3 | 3 | Joe
-- 4 | 7 | Null
-- Second Query
SELECT T2.id, T2.T1_Ref, T1.nameFROM T2, T1WHERE T1.id=T2.T1_Ref
-- id | T1_Ref | name
-- ------------ | ------------ | ------
-- 1 | 1 | John
-- 3 | 3 | Joe