package my.test.command.dml; import my.test.TestBase; public class SelectUnionTest extends TestBase { public static void main(String[] args) throws Exception { new SelectUnionTest().start(); } @Override public void startInternal() throws Exception { stmt.executeUpdate("DROP TABLE IF EXISTS SelectUnionTest1"); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS SelectUnionTest1(id int, name varchar(500), b boolean, id1 int)"); stmt.executeUpdate("CREATE INDEX IF NOT EXISTS SelectUnionTestIndex1 ON SelectUnionTest1(name)"); stmt.executeUpdate("DROP TABLE IF EXISTS SelectUnionTest2"); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS SelectUnionTest2(id int, name varchar(500), b boolean, id2 int)"); stmt.executeUpdate("CREATE INDEX IF NOT EXISTS SelectUnionTestIndex2 ON SelectUnionTest2(name)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(1, 'a1', true)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(1, 'b1', true)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(2, 'a2', false)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(2, 'b2', true)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(3, 'a3', false)"); stmt.executeUpdate("insert into SelectUnionTest1(id, name, b) values(3, 'b3', true)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(4, 'a1', true)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(4, 'b1', true)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(5, 'a2', false)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(5, 'b2', true)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(6, 'a3', false)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(6, 'b3', true)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(3, 'a3', false)"); stmt.executeUpdate("insert into SelectUnionTest2(id, name, b) values(3, 'b3', true)"); //查询列个数必须一样 sql = "select id from SelectUnionTest1 UNION select name, b from SelectUnionTest2 order by id"; //查询列名必须一样 sql = "select id from SelectUnionTest1 UNION select name from SelectUnionTest2 order by id"; sql = "select id from SelectUnionTest1 UNION select id from SelectUnionTest2 order by id"; //这两条是等价的,没有重复 sql = "select * from SelectUnionTest1 UNION select * from SelectUnionTest2 order by id"; sql = "select * from SelectUnionTest1 UNION DISTINCT select * from SelectUnionTest2 order by id"; //有重复 sql = "select * from SelectUnionTest1 UNION ALL select * from SelectUnionTest2 order by id"; //这两条是等价的,结果集有重复 sql = "select * from SelectUnionTest1 EXCEPT select * from SelectUnionTest2 order by id"; sql = "select * from SelectUnionTest1 MINUS select * from SelectUnionTest2 order by id"; sql = "select * from SelectUnionTest1 INTERSECT select * from SelectUnionTest2 order by id"; //sql = "select id, name from SelectUnionTest1 INTERSECT select id, name from SelectUnionTest2 order by id"; //排序列必须是左边的select字段列表中的 //这两条sql都不对 //sql = "select id, name from SelectUnionTest1 INTERSECT select id2, name from SelectUnionTest2 order by id2"; //sql = "select id, name from SelectUnionTest1 INTERSECT select id, name from SelectUnionTest2 order by id2"; executeQuery(); } }