# select * from T1 natural       inner join T2
# select * from T1               inner join T2 on <条件, 列1個>
# select * from T1               inner join T2 using <条件, 列1個>
#                           left outer
#                          right outer
#
# Join条件の列のうち索引のついているものが1個(T1のみ、T2のみ)で, 索引のついている列が
#   1) 数値型                                   で比較対象の列が文字列型(varchar(10), char(10), nvarchar(10), nchar(10))
#   2) 可変長文字列型(varchar(10), nvarchar(10))で比較対象の列が数値型
#   3) 固定長文字列型(char(10), nchar(10))      で比較対象の列が数値型
#
# T1が数字型, T2が文字列型
#
# 単索引
# --T1索引無し, T2索引有り
#   -- 1に該当
#   -- 2と3は11500に該当(T1索引有り, T2索引無し)
# --同種テスト 1150[0,2]

Begin;
Initialize;

InitializeSession "";
Command "create database TESTDB";
TerminateSession;

InitializeSession "TESTDB";

# テーブルT1
Command  "create table T1(C1 int, C2 int)";
Command  "create index I1_1 on T1(C1)";
Command  "create index I1_2 on T1(C2)";
Command  "insert into T1 (C1, C2) values (?, ?)" [111,  1   ];
Command  "insert into T1 (C1, C2) values (?, ?)" [222,  null];
Command  "insert into T1 (C1, C2) values (?, ?)" [333,  2   ];
Command  "insert into T1 (C1, C2) values (?, ?)" [444,  3   ];
Command  "insert into T1 (C1, C2) values (?, ?)" [666,  4   ];
Command  "insert into T1 (C1, C2) values (?, ?)" [null, 5   ];
Command  "insert into T1 (C1, C2) values (?, ?)" [null, null];


# テーブルT2 --char型
Command  "create table T2(C1 char(10))";
Command  "insert into T2 (C1) values (?)" ["111"];
Command  "insert into T2 (C1) values (?)" [null ];
Command  "insert into T2 (C1) values (?)" ["333"];
Command  "insert into T2 (C1) values (?)" ["555"];


# -- --natural join
Command  "select * from T1 natural inner join T2";
Command  "select * from T1 natural left outer join T2";
Command  "select * from T1 natural right outer join T2";


# -- --join .. on 
Command  "select * from T1 inner join T2 on T1.C1 = T2.C1";
Command  "select * from T1 left outer join T2 on T1.C1 = T2.C1";
Command  "select * from T1 right outer join T2 on T1.C1 = T2.C1";


# -- --join .. using 
Command  "select * from T1 inner join T2 using (C1)";
Command  "select * from T1 left outer join T2 using (C1)";
Command  "select * from T1 right outer join T2 using (C1)";

Command  "drop table T2";


# テーブルT2 --nchar型
Command  "create table T2(C1 nchar(10))";
Command  "insert into T2 (C1) values (?)" ["111"];
Command  "insert into T2 (C1) values (?)" [null ];
Command  "insert into T2 (C1) values (?)" ["333"];
Command  "insert into T2 (C1) values (?)" ["555"];


# -- --natural join
Command  "select * from T1 natural inner join T2";
Command  "select * from T1 natural left outer join T2";
Command  "select * from T1 natural right outer join T2";


# -- --join .. on 
Command  "select * from T1 inner join T2 on T1.C1 = T2.C1";
Command  "select * from T1 left outer join T2 on T1.C1 = T2.C1";
Command  "select * from T1 right outer join T2 on T1.C1 = T2.C1";


# -- --join .. using 
Command  "select * from T1 inner join T2 using (C1)";
Command  "select * from T1 left outer join T2 using (C1)";
Command  "select * from T1 right outer join T2 using (C1)";

Command  "drop table T2";


# テーブルT2 --varchar型
Command  "create table T2(C1 varchar(10))";
Command  "insert into T2 (C1) values (?)" ["111"];
Command  "insert into T2 (C1) values (?)" [null ];
Command  "insert into T2 (C1) values (?)" ["333"];
Command  "insert into T2 (C1) values (?)" ["555"];


# -- --natural join
Command  "select * from T1 natural inner join T2";
Command  "select * from T1 natural left outer join T2";
Command  "select * from T1 natural right outer join T2";


# -- --join .. on 
Command  "select * from T1 inner join T2 on T1.C1 = T2.C1";
Command  "select * from T1 left outer join T2 on T1.C1 = T2.C1";
Command  "select * from T1 right outer join T2 on T1.C1 = T2.C1";


# -- --join .. using 
Command  "select * from T1 inner join T2 using (C1)";
Command  "select * from T1 left outer join T2 using (C1)";
Command  "select * from T1 right outer join T2 using (C1)";

Command  "drop table T2";


# テーブルT2 --nvarchar型
Command  "create table T2(C1 nvarchar(10))";
Command  "insert into T2 (C1) values (?)" ["111"];
Command  "insert into T2 (C1) values (?)" [null ];
Command  "insert into T2 (C1) values (?)" ["333"];
Command  "insert into T2 (C1) values (?)" ["555"];


# -- --natural join
Command  "select * from T1 natural inner join T2";
Command  "select * from T1 natural left outer join T2";
Command  "select * from T1 natural right outer join T2";


# -- --join .. on 
Command  "select * from T1 inner join T2 on T1.C1 = T2.C1";
Command  "select * from T1 left outer join T2 on T1.C1 = T2.C1";
Command  "select * from T1 right outer join T2 on T1.C1 = T2.C1";


# -- --join .. using 
Command  "select * from T1 inner join T2 using (C1)";
Command  "select * from T1 left outer join T2 using (C1)";
Command  "select * from T1 right outer join T2 using (C1)";

Command  "drop table T2";

Command  "drop table T1";


TerminateSession;
# DBの後始末
InitializeSession "";
Command  "drop database TESTDB";
TerminateSession;
Terminate;
End;
