# 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) 固定長文字列型(char(10), nchar(10))で比較対象の列が最大長の短い文字列型(char(5), nchar(5), varchar(5), nvarchar(5))
#
# T1が固定長文字列型, T2が文字列型
#
# 単索引
# --T1索引有り, T2索引無し
# --同種テスト 1150[4,6]

Begin;
Initialize;

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

InitializeSession "TESTDB";

# 固定長文字列型(char(10))
# テーブルT1
Command  "create table T1(C1 char(10), 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 (?, ?)" ["piyo", 1   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["puu",  null];
Command  "insert into T1 (C1, C2) values (?, ?)" ["hoge", 2   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["PIYO", 3   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["HOGE", 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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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";


# 固定長文字列型(nchar(10))
# テーブルT1
Command  "create table T1(C1 nchar(10), 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 (?, ?)" ["piyo", 1   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["puu ", null];
Command  "insert into T1 (C1, C2) values (?, ?)" ["hoge", 2   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["PIYO", 3   ];
Command  "insert into T1 (C1, C2) values (?, ?)" ["HOGE", 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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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(5))";
Command  "insert into T2 (C1) values (?)" ["piyo"];
Command  "insert into T2 (C1) values (?)" [ null ];
Command  "insert into T2 (C1) values (?)" ["hoge"];
Command  "insert into T2 (C1) values (?)" ["PUU" ];


# -- --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;
