未验证 提交 87226467 编写于 作者: 羽飞's avatar 羽飞 提交者: GitHub

Merge pull request #27 from hnwyllmm/main

add test cases like mysql-test
......@@ -70,7 +70,7 @@ MESSAGE("Install target dir is " ${CMAKE_INSTALL_PREFIX})
ADD_SUBDIRECTORY(deps)
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(unitest)
ADD_SUBDIRECTORY(test)
ADD_SUBDIRECTORY(test/perf)
# install 准备安装的目录是cmakefile 的当前目录, 不是build 后生成的目录
......
# miniob-test
miniob自动化功能测试
使用方法参考 miniob_test.py
{
"basic":{"necessary":true, "score":10},
"primary-date":{"necessary":true, "score":10},
"primary-update":{"necessary":true, "score":10},
"primary-select-meta":{"necessary":true, "score":10},
"primary-select-tables":{"necessary":true, "score":10},
"primary-aggregation-func":{"necessary":true, "score":10},
"primary-drop-table":{"necessary":true, "score":10},
"primary-insert":{"necessary":false, "score":10},
"primary-join-tables":{"necessary":false, "score":20},
"primary-null":{"necessary":false, "score":10},
"primary-unique":{"necessary":false, "score":10},
"primary-simple-sub-query":{"necessary":false, "score":10},
"primary-multi-index":{"necessary":false, "score":20},
"primary-text":{"necessary":false, "score":20},
"primary-expression":{"necessary":false, "score":20},
"primary-complex-sub-query":{"necessary":false, "score":20},
"primary-order-by":{"necessary":false, "score":10},
"primary-group-by":{"necessary":false, "score":20}
}
此差异已折叠。
BASIC INSERT
create table t_basic(id int, age int, name char, score float);
SUCCESS
insert into t_basic values(1,1, 'a', 1.0);
SUCCESS
insert into t_basic values(2,2, 'b', 2.0);
SUCCESS
insert into t_basic values(4,4, 'c', 3.0);
SUCCESS
insert into t_basic values(3,3, 'd', 4.0);
SUCCESS
insert into t_basic values(5,5, 'e', 5.5);
SUCCESS
insert into t_basic values(6,6, 'f', 6.6);
SUCCESS
insert into t_basic values(7,7, 'g', 7.7);
SUCCESS
select * from t_basic;
1 | 1 | A | 1
2 | 2 | B | 2
3 | 3 | D | 4
4 | 4 | C | 3
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
BASIC DELETE
delete from t_basic where id=3;
SUCCESS
select * from t_basic;
1 | 1 | A | 1
2 | 2 | B | 2
4 | 4 | C | 3
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
BASIC SELECT
select * from t_basic where id=1;
ID | AGE | NAME | SCORE
1 | 1 | A | 1
select * from t_basic where id>=5;
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
select * from t_basic where age>1 and age<3;
ID | AGE | NAME | SCORE
2 | 2 | B | 2
select * from t_basic where t_basic.id=1 and t_basic.age=1;
ID | AGE | NAME | SCORE
1 | 1 | A | 1
select * from t_basic where id=1 and age=1;
ID | AGE | NAME | SCORE
1 | 1 | A | 1
select id, age, name, score from t_basic;
1 | 1 | A | 1
2 | 2 | B | 2
4 | 4 | C | 3
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
select t_basic.id, t_basic.age, t_basic.name, t_basic.score from t_basic;
1 | 1 | A | 1
2 | 2 | B | 2
4 | 4 | C | 3
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
select t_basic.id, t_basic.age, name from t_basic;
1 | 1 | A
2 | 2 | B
4 | 4 | C
5 | 5 | E
6 | 6 | F
7 | 7 | G
ID | AGE | NAME
CREATE INDEX
create index i_id on t_basic (id);
SUCCESS
select * from t_basic;
1 | 1 | A | 1
2 | 2 | B | 2
4 | 4 | C | 3
5 | 5 | E | 5.5
6 | 6 | F | 6.6
7 | 7 | G | 7.7
ID | AGE | NAME | SCORE
INITIALIZATION
CREATE TABLE aggregation_func(id int, num int, price float, addr char, birthday date);
SUCCESS
INSERT INTO aggregation_func VALUES (1, 18, 10.0, 'abc', '2020-01-01');
SUCCESS
INSERT INTO aggregation_func VALUES (2, 15, 20.0, 'abc', '2010-01-11');
SUCCESS
INSERT INTO aggregation_func VALUES (3, 12, 30.0, 'def', '2021-01-21');
SUCCESS
INSERT INTO aggregation_func VALUES (4, 15, 30.0, 'dei', '2021-01-31');
SUCCESS
1. COUNT
SELECT count(*) FROM aggregation_func;
COUNT(*)
4
SELECT count(num) FROM aggregation_func;
COUNT(NUM)
4
2. MIN
SELECT min(num) FROM aggregation_func;
MIN(NUM)
12
SELECT min(price) FROM aggregation_func;
MIN(PRICE)
10
SELECT min(addr) FROM aggregation_func;
MIN(ADDR)
ABC
3. MAX
SELECT max(num) FROM aggregation_func;
MAX(NUM)
18
SELECT max(price) FROM aggregation_func;
MAX(PRICE)
30
SELECT max(addr) FROM aggregation_func;
MAX(ADDR)
DEI
4. AVG
SELECT avg(num) FROM aggregation_func;
AVG(NUM)
15
SELECT avg(price) FROM aggregation_func;
AVG(PRICE)
22.5
5. ERROR WITH *
SELECT min(*) FROM aggregation_func;
FAILURE
SELECT max(*) FROM aggregation_func;
FAILURE
SELECT avg(*) FROM aggregation_func;
FAILURE
6. ERROR WITH REDUNDANT COLUMNS
SELECT count(*,num) FROM aggregation_func;
FAILURE
SELECT min(num,price) FROM aggregation_func;
FAILURE
SELECT max(num,price) FROM aggregation_func;
FAILURE
SELECT avg(num,price) FROM aggregation_func;
FAILURE
7. ERROR WITH EMPTY COLUMNS
SELECT count() FROM aggregation_func;
FAILURE
SELECT min() FROM aggregation_func;
FAILURE
SELECT max() FROM aggregation_func;
FAILURE
SELECT avg() FROM aggregation_func;
FAILURE
8. ERROR WITH NON-EXISTENT COLUMNS
SELECT count(id2) FROM aggregation_func;
FAILURE
SELECT min(id2) FROM aggregation_func;
FAILURE
SELECT max(id2) FROM aggregation_func;
FAILURE
SELECT avg(id2) FROM aggregation_func;
FAILURE
9. SELECT MANY AGGREGATION
SELECT min(num),max(num),avg(num) FROM aggregation_func;
MIN(NUM) | MAX(NUM) | AVG(NUM)
12 | 18 | 15
INITIALIZATION
CREATE TABLE csq_1(id int, col1 int, feat1 float);
SUCCESS
CREATE TABLE csq_2(id int, col2 int, feat2 float);
SUCCESS
CREATE TABLE csq_3(id int, col3 int, feat3 float);
SUCCESS
CREATE TABLE csq_4(id int, col4 int, feat4 float);
SUCCESS
INSERT INTO csq_1 VALUES (1, 4, 11.2);
SUCCESS
INSERT INTO csq_1 VALUES (2, 2, 12.0);
SUCCESS
INSERT INTO csq_1 VALUES (3, 3, 13.5);
SUCCESS
INSERT INTO csq_2 VALUES (1, 2, 13.0);
SUCCESS
INSERT INTO csq_2 VALUES (2, 7, 10.5);
SUCCESS
INSERT INTO csq_2 VALUES (5, 3, 12.6);
SUCCESS
INSERT INTO csq_3 VALUES (1, 2, 11.0);
SUCCESS
INSERT INTO csq_3 VALUES (3, 6, 16.5);
SUCCESS
INSERT INTO csq_3 VALUES (5, 5, 14.6);
SUCCESS
1. SELECT
select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3));
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id not in (select csq_3.id from csq_3));
2 | 2 | 12
ID | COL1 | FEAT1
select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3));
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id in (select csq_3.id from csq_3));
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from csq_1 where col1 > (select avg(csq_2.col2) from csq_2 where csq_2.feat2 >= (select min(csq_3.feat3) from csq_3));
1 | 4 | 11.2
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from csq_1 where (select avg(csq_2.col2) from csq_2 where csq_2.feat2 > (select min(csq_3.feat3) from csq_3)) = col1;
ID | COL1 | FEAT1
select * from csq_1 where (select avg(csq_2.col2) from csq_2) <> (select avg(csq_3.col3) from csq_3);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from csq_1 where feat1 > (select min(csq_2.feat2) from csq_2) and col1 <= (select min(csq_3.col3) from csq_3);
2 | 2 | 12
ID | COL1 | FEAT1
select * from csq_1 where (select max(csq_2.feat2) from csq_2) > feat1 and col1 > (select min(csq_3.col3) from csq_3);
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from csq_1 where (select max(csq_2.feat2) from csq_2) > feat1 and (select min(csq_3.col3) from csq_3) < col1;
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from csq_1 where feat1 <> (select avg(csq_2.feat2) from csq_2 where csq_2.feat2 > csq_1.feat1);
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id in (select csq_3.id from csq_3 where csq_1.id = csq_3.id));
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
2. SELECT WITH EMPTY TABLE
select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3 where 1=0));
ID | COL1 | FEAT1
select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3 where 1=0) and 1=0);
ID | COL1 | FEAT1
select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3 where 1=0));
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3) and 1=0);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from csq_3 where feat3 < (select max(csq_2.feat2) from csq_2 where csq_2.id not in (select csq_3.id from csq_3 where 1=0));
1 | 2 | 11
ID | COL3 | FEAT3
select * from csq_3 where feat3 < (select max(csq_2.feat2) from csq_2 where csq_2.id not in (select csq_3.id from csq_3 ) and 1=0);
ID | COL3 | FEAT3
3. ERROR
select * from csq_1 where col1 = (select csq_2.col2 from csq_2);
FAILURE
select * from csq_1 where col1 = (select * from csq_2);
FAILURE
select * from csq_1 where col1 in (select * from csq_2);
FAILURE
select * from csq_1 where col1 not in (select * from csq_2);
FAILURE
INITIALIZATION
CREATE TABLE date_table(id int, u_date date);
SUCCESS
CREATE INDEX index_id on date_table(u_date);
SUCCESS
1. INSERT NORMAL DATE DATA
INSERT INTO date_table VALUES (1,'2020-01-21');
SUCCESS
INSERT INTO date_table VALUES (2,'2020-10-21');
SUCCESS
INSERT INTO date_table VALUES (3,'2020-1-01');
SUCCESS
INSERT INTO date_table VALUES (4,'2020-01-1');
SUCCESS
INSERT INTO date_table VALUES (5,'2019-12-21');
SUCCESS
INSERT INTO date_table VALUES (6,'2016-2-29');
SUCCESS
INSERT INTO date_table VALUES (7,'1970-1-1');
SUCCESS
INSERT INTO date_table VALUES (8,'2000-01-01');
SUCCESS
INSERT INTO date_table VALUES (9,'2038-1-19');
SUCCESS
2. COMPARE DATE DATA
SELECT * FROM date_table WHERE u_date>'2020-1-20';
1 | 2020-01-21
2 | 2020-10-21
9 | 2038-01-19
ID | U_DATE
SELECT * FROM date_table WHERE u_date<'2019-12-31';
5 | 2019-12-21
6 | 2016-02-29
7 | 1970-01-01
8 | 2000-01-01
ID | U_DATE
SELECT * FROM date_table WHERE u_date='2020-1-1';
3 | 2020-01-01
4 | 2020-01-01
ID | U_DATE
3. DELETE DATA
DELETE FROM date_table WHERE u_date>'2012-2-29';
SUCCESS
SELECT * FROM date_table;
7 | 1970-01-01
8 | 2000-01-01
ID | U_DATE
4. CHECK INVALID DATE DATA
SELECT * FROM date_table WHERE u_date='2017-2-29';
FAILURE
SELECT * FROM date_table WHERE u_date='2017-21-29';
FAILURE
SELECT * FROM date_table WHERE u_date='2017-12-32';
FAILURE
SELECT * FROM date_table WHERE u_date='2017-11-31';
FAILURE
INSERT INTO date_table VALUES (10,'2017-2-29');
FAILURE
INSERT INTO date_table VALUES (11,'2017-21-29');
FAILURE
INSERT INTO date_table VALUES (12,'2017-12-32');
FAILURE
INSERT INTO date_table VALUES (13,'2017-11-31');
FAILURE
1. DROP EMPTY TABLE
CREATE TABLE Drop_table_1(id int, t_name char);
SUCCESS
DROP TABLE Drop_table_1;
SUCCESS
2. DROP NON-EMPTY TABLE
CREATE TABLE Drop_table_2(id int, t_name char);
SUCCESS
INSERT INTO Drop_table_2 VALUES (1,'OB');
SUCCESS
DROP TABLE Drop_table_2;
SUCCESS
3. CHECK THE ACCURACY OF DROPPING TABLE
CREATE TABLE Drop_table_3(id int, t_name char);
SUCCESS
INSERT INTO Drop_table_3 VALUES (1,'OB');
SUCCESS
SELECT * FROM Drop_table_3;
1 | OB
ID | T_NAME
DROP TABLE Drop_table_3;
SUCCESS
INSERT INTO Drop_table_3 VALUES (1,'OB');
FAILURE
SELECT * FROM Drop_table_3;
FAILURE
DELETE FROM Drop_table_3 WHERE id = 3;
FAILURE
CREATE TABLE Drop_table_3(id int, t_name char);
SUCCESS
SELECT * FROM Drop_table_3;
ID | T_NAME
4. DROP NON-EXISTENT TABLE
CREATE TABLE Drop_table_4(id int, t_name char);
SUCCESS
DROP TABLE Drop_table_4;
SUCCESS
DROP TABLE Drop_table_4;
FAILURE
DROP TABLE Drop_table_4_1;
FAILURE
5. CREATE A TABLE WHICH HAS DROPPED
CREATE TABLE Drop_table_5(id int, t_name char);
SUCCESS
DROP TABLE Drop_table_5;
SUCCESS
CREATE TABLE Drop_table_5(id int, t_name char);
SUCCESS
SELECT * FROM Drop_table_5;
ID | T_NAME
6. DROP A TABLE WITH INDEX
CREATE TABLE Drop_table_6(id int, t_name char);
SUCCESS
CREATE INDEX index_id on Drop_table_6(id);
SUCCESS
INSERT INTO Drop_table_6 VALUES (1,'OB');
SUCCESS
SELECT * FROM Drop_table_6;
1 | OB
ID | T_NAME
DROP TABLE Drop_table_6;
SUCCESS
SELECT * FROM Drop_table_6;
FAILURE
INITIALIZATION
create table exp_table(id int, col1 int, col2 int, col3 float, col4 float);
SUCCESS
insert into exp_table VALUES (1, 1, 1, 1.0, 1.5);
SUCCESS
insert into exp_table VALUES (2, 2, -2, 5.5, 1.0);
SUCCESS
insert into exp_table VALUES (3, 3, 4, 5.0, 4.0);
SUCCESS
1. SELECT
select * from exp_table where 1 = 5/4;
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where col1-2 > 0;
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 2+col2 < 1;
2 | 2 | -2 | 5.5 | 1
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where col1*col2 < 0;
2 | 2 | -2 | 5.5 | 1
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 5/4 = 1;
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 0 < col1-2;
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 1.0 > 2+col2;
2 | 2 | -2 | 5.5 | 1
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where -0 < col1-col2;
2 | 2 | -2 | 5.5 | 1
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 0 < -2+col1;
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 1+1 = 2*1.0;
1 | 1 | 1 | 1 | 1.5
2 | 2 | -2 | 5.5 | 1
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 5/4*8 < 4+col2*col3/2;
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select * from exp_table where 5/4*8 < (4+col2)*col3/2;
3 | 3 | 4 | 5 | 4
ID | COL1 | COL2 | COL3 | COL4
select id,-(col2*(-1)+1)+(col4+2)*(col1+col3*2),(4+col2)*col3/2 from exp_table where -(col2*(-1)+1)+(col4+2)*(col1+col3*2) > (4+col2)*col3/2;
1 | 10.5 | 2.5
2 | 36 | 5.5
3 | 81 | 20
ID | -(COL2*(-1)+1)+(COL4+2)*(COL1+COL3*2) | (4+COL2)*COL3/2
select id,col1,col2,col3,col4,6-(col2*(1+col1))+(col4+2)/(1+col1*4+col3*2) from exp_table where 6-(col2*(1+col1))+(col4+2)/(1+col1*4+col3*2) > 5;
2 | 2 | -2 | 5.5 | 1 | 12.15
ID | COL1 | COL2 | COL3 | COL4 | 6-(COL2*(1+COL1))+(COL4+2)/(1+COL1*4+COL3*2)
select id,col1,col2,col3,col4,3*col1/(col2+2) from exp_table where 3*col1/(col2+2) > 1;
3 | 3 | 4 | 5 | 4 | 1.5
ID | COL1 | COL2 | COL3 | COL4 | 3*COL1/(COL2+2)
select id,3*col1/(col2+2) from exp_table where 3*col1/(col2+2)+1/0 > 1;
ID | 3*COL1/(COL2+2)
select * from exp_table where 1/0 = 1/0;
ID | COL1 | COL2 | COL3 | COL4
2. EXPRESSION ABOUT MANY TABLES
create table exp_table2(id int, col1 int);
SUCCESS
insert into exp_table2 VALUES (1, 1);
SUCCESS
insert into exp_table2 VALUES (2, 3);
SUCCESS
select exp_table.id,3*exp_table2.col1/(exp_table.col2+2) from exp_table,exp_table2 where 3*exp_table2.col1/(exp_table.col2+2)>1;
1 | 3
3 | 1.5
exp_table.ID | 3*EXP_TABLE2.COL1/(EXP_TABLE.COL2+2)
1. CREATE TABLE
create table t_group_by (id int, score float, name char);
SUCCESS
create table t_group_by_2 (id int, age int);
SUCCESS
2. INSERT RECORDS
insert into t_group_by values(3, 1.0, 'a');
SUCCESS
insert into t_group_by values(1, 2.0, 'b');
SUCCESS
insert into t_group_by values(4, 3.0, 'c');
SUCCESS
insert into t_group_by values(3, 2.0, 'c');
SUCCESS
insert into t_group_by values(3, 4.0, 'c');
SUCCESS
insert into t_group_by values(3, 3.0, 'd');
SUCCESS
insert into t_group_by values(3, 2.0, 'f');
SUCCESS
insert into t_group_by_2 values(1, 10);
SUCCESS
insert into t_group_by_2 values(2, 20);
SUCCESS
insert into t_group_by_2 values(3, 10);
SUCCESS
insert into t_group_by_2 values(3, 20);
SUCCESS
insert into t_group_by_2 values(3, 40);
SUCCESS
insert into t_group_by_2 values(4, 20);
SUCCESS
3. PRIMARY GROUP BY
select id, avg(score) from t_group_by group by id;
1 | 2
3 | 2.4
4 | 3
ID | AVG(SCORE)
select name, min(id), max(score) from t_group_by group by name;
A | 3 | 1
B | 1 | 2
C | 3 | 4
D | 3 | 3
F | 3 | 2
NAME | MIN(ID) | MAX(SCORE)
select id, name, avg(score) from t_group_by group by id, name;
1 | B | 2
3 | A | 1
3 | C | 3
3 | D | 3
3 | F | 2
4 | C | 3
ID | NAME | AVG(SCORE)
4. WITH WHERE CONDITION
select id, avg(score) from t_group_by where id>2 group by id;
3 | 2.4
4 | 3
ID | AVG(SCORE)
select name, count(id), max(score) from t_group_by where name > 'a' and id>=0 group by name;
B | 1 | 2
C | 3 | 4
D | 1 | 3
F | 1 | 2
NAME | COUNT(ID) | MAX(SCORE)
5. MULTI TABLE
select t_group_by.id, t_group_by.name, avg(t_group_by.score), avg(t_group_by_2.age) from t_group_by, t_group_by_2 where t_group_by.id=t_group_by_2.id group by t_group_by.id, t_group_by.name;
1 | B | 2 | 10
3 | A | 1 | 23.33
3 | C | 3 | 23.33
3 | D | 3 | 23.33
3 | F | 2 | 23.33
4 | C | 3 | 20
T_GROUP_BY.ID | T_GROUP_BY.NAME | AVG(T_GROUP_BY.SCORE) | AVG(T_GROUP_BY_2.AGE)
INITIALIZATION
CREATE TABLE insert_table(id int, t_name char, col1 int, col2 int);
SUCCESS
1. INSERT
INSERT INTO insert_table VALUES (1,'N1',1,1);
SUCCESS
INSERT INTO insert_table VALUES (2,'N2',1,1),(3,'N3',2,1);
SUCCESS
2. ERROR
INSERT INTO insert_table VALUES (4,'N4',1,1),(1,1,1);
FAILURE
INSERT INTO insert_table VALUES (4,'N4',1,1),(1,1,1,1);
FAILURE
3. SELECT
SELECT * FROM insert_table;
1 | N1 | 1 | 1
2 | N2 | 1 | 1
3 | N3 | 2 | 1
ID | T_NAME | COL1 | COL2
此差异已折叠。
1. MULTI INDEX OF EMPTY TABLE
CREATE TABLE multi_index(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
SUCCESS
CREATE INDEX i_1_12 ON multi_index(col1,col2);
SUCCESS
CREATE INDEX i_1_345 ON multi_index(col3, col4, col5);
SUCCESS
CREATE INDEX i_1_56 ON multi_index(col5, col6);
SUCCESS
CREATE INDEX i_1_456 ON multi_index(col4, col5, col6);
SUCCESS
SELECT * FROM multi_index;
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
2. MULTI INDEX OF NON-EMPTY TABLE
CREATE TABLE multi_index2(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
SUCCESS
INSERT INTO multi_index2 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
SUCCESS
INSERT INTO multi_index2 VALUES (2, 1, 16.2, 'x', '2021-01-02', 1, 61);
SUCCESS
INSERT INTO multi_index2 VALUES (3, 1, 11.6, 'h', '2023-01-02', 10, 17);
SUCCESS
CREATE INDEX i_2_12 ON multi_index2(col1,col2);
SUCCESS
CREATE INDEX i_2_345 ON multi_index2(col3, col4, col5);
SUCCESS
CREATE INDEX i_2_56 ON multi_index2(col5, col6);
SUCCESS
CREATE INDEX i_2_456 ON multi_index2(col4, col5, col6);
SUCCESS
SELECT * FROM multi_index2;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
2 | 1 | 16.2 | X | 2021-01-02 | 1 | 61
3 | 1 | 11.6 | H | 2023-01-02 | 10 | 17
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
3. INFLUENCE OF INSERTING
CREATE TABLE multi_index3(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
SUCCESS
CREATE INDEX i_3_i1 ON multi_index3(id,col1);
SUCCESS
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
SUCCESS
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
SUCCESS
SELECT * FROM multi_index3;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
CREATE INDEX i_3_14 ON multi_index3(col1,col4);
SUCCESS
INSERT INTO multi_index3 VALUES (2, 1, 16.2, 'x', '2021-01-02', 1, 61);
SUCCESS
INSERT INTO multi_index3 VALUES (3, 1, 11.6, 'h', '2023-01-02', 10, 17);
SUCCESS
INSERT INTO multi_index3 VALUES (4, 2, 12.2, 'e', '2022-01-04', 13, 10);
SUCCESS
INSERT INTO multi_index3 VALUES (5, 3, 14.2, 'd', '2020-04-02', 12, 2);
SUCCESS
SELECT * FROM multi_index3;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
2 | 1 | 16.2 | X | 2021-01-02 | 1 | 61
3 | 1 | 11.6 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
4. QUERY WITH INDEXS
SELECT * FROM multi_index3 WHERE id = 1;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
SELECT * FROM multi_index3 WHERE col1 > 1 and col4 = '2021-01-02';
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
SELECT * FROM multi_index3 WHERE col1 <> 1 and col4 >= '2021-01-02';
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
SELECT * FROM multi_index3 WHERE col2 < 15.0 and col4 <> '2021-01-02';
3 | 1 | 11.6 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
5. INFLUENCE OF DELETING
DELETE FROM multi_index3 WHERE id = 1;
SUCCESS
DELETE FROM multi_index3 WHERE id = 61;
SUCCESS
SELECT * FROM multi_index3;
2 | 1 | 16.2 | X | 2021-01-02 | 1 | 61
3 | 1 | 11.6 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
DELETE FROM multi_index3 WHERE col3 = 'x';
SUCCESS
SELECT * FROM multi_index3;
3 | 1 | 11.6 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
DELETE FROM multi_index3 WHERE id = 4 and col1 = 1;
SUCCESS
DELETE FROM multi_index3 WHERE id = 90 and col1 = 13;
SUCCESS
DELETE FROM multi_index3 WHERE id = 90 and col1 = 1;
SUCCESS
DELETE FROM multi_index3 WHERE id = 4 and col1 = 13;
SUCCESS
DELETE FROM multi_index3 WHERE id = 3 and col1 = 1;
SUCCESS
DELETE FROM multi_index3 WHERE id = 3 and col1 = 1;
SUCCESS
SELECT * FROM multi_index3;
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
SUCCESS
INSERT INTO multi_index3 VALUES (2, 1, 11.2, 'x', '2021-01-02', 1, 61);
SUCCESS
INSERT INTO multi_index3 VALUES (3, 1, 11.2, 'h', '2023-01-02', 10, 17);
SUCCESS
SELECT * FROM multi_index3;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
2 | 1 | 11.2 | X | 2021-01-02 | 1 | 61
3 | 1 | 11.2 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
6. INFLUENCE OF UPDATING
UPDATE multi_index3 SET col6=49 where id=2;
SUCCESS
UPDATE multi_index3 SET col4='1999-02-01' where id=2;
SUCCESS
UPDATE multi_index3 SET col1=2 where id=2;
SUCCESS
UPDATE multi_index3 SET col1=5 where col6=49;
SUCCESS
SELECT * FROM multi_index3;
1 | 1 | 11.2 | A | 2021-01-02 | 1 | 1
2 | 5 | 11.2 | X | 1999-02-01 | 1 | 49
3 | 1 | 11.2 | H | 2023-01-02 | 10 | 17
4 | 2 | 12.2 | E | 2022-01-04 | 13 | 10
5 | 3 | 14.2 | D | 2020-04-02 | 12 | 2
ID | COL1 | COL2 | COL3 | COL4 | COL5 | COL6
7. INFLUENCE OF DROPPING TABLE
DROP table multi_index;
SUCCESS
8. ERROR
CREATE TABLE multi_index4(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
SUCCESS
CREATE INDEX i_4_i7 ON multi_index4(id,col7);
FAILURE
CREATE INDEX i_4_78 ON multi_index4(col7,col8);
FAILURE
CREATE INDEX i_4_i78 ON multi_index4(id,col7,col8);
FAILURE
INITIALIZATION
CREATE TABLE null_table(id int, num int nullable, price float not null, birthday date nullable);
SUCCESS
CREATE TABLE null_table2(id int, num int nullable, price float not null, birthday date nullable);
SUCCESS
CREATE INDEX index_num on null_table(num);
SUCCESS
1. INSERT
INSERT INTO null_table VALUES (1, 18, 10.0, '2020-01-01');
SUCCESS
INSERT INTO null_table VALUES (2, null, 20.0, '2010-01-11');
SUCCESS
INSERT INTO null_table VALUES (3, 12, 30.0, null);
SUCCESS
INSERT INTO null_table VALUES (4, 15, 30.0, '2021-01-31');
SUCCESS
INSERT INTO null_table2 VALUES (1, 18, 30.0, '2021-01-31');
SUCCESS
INSERT INTO null_table2 VALUES (2, null, 40.0, null);
SUCCESS
INSERT INTO null_table VALUES (5, 15, null, '2021-01-31');
FAILURE
INSERT INTO null_table VALUES (null, 15, 30.0, '2021-01-31');
FAILURE
2. SELECT
SELECT * FROM null_table;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
3. SELECT WITH CONSTANT
SELECT * FROM null_table where 1 is null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 1 is not null;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where null=1;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 1=null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 1<>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 1<null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 1>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where null is null;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where null is not null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null=null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null<>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null<null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 'a' is null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where 'a' is not null;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null='a';
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE 'a'=null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE 'a'<>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE 'a'>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE 'a'<null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where '2021-01-31' is null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where '2021-01-31' is not null;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE null='2021-01-31';
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE '2021-01-31'=null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE '2021-01-31'>null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table WHERE '2021-01-31'<null;
ID | NUM | PRICE | BIRTHDAY
4. SELECT WITH COLUMN
SELECT * FROM null_table where birthday is not null;
1 | 18 | 10 | 2020-01-01
2 | NULL | 20 | 2010-01-11
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where birthday is null;
3 | 12 | 30 | NULL
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where birthday = null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where null = birthday;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where birthday <> null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where birthday > null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where birthday < null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num is not null;
1 | 18 | 10 | 2020-01-01
3 | 12 | 30 | NULL
4 | 15 | 30 | 2021-01-31
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num is null;
2 | NULL | 20 | 2010-01-11
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num = null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where null = num;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num <> null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num > null;
ID | NUM | PRICE | BIRTHDAY
SELECT * FROM null_table where num < null;
ID | NUM | PRICE | BIRTHDAY
SELECT null_table.num,null_table2.num,null_table.birthday FROM null_table,null_table2 where null_table.num=null_table2.num;
18 | 18 | 2020-01-01
NULL_TABLE.NUM | NULL_TABLE2.NUM | NULL_TABLE.BIRTHDAY
5. AGGREGATION
SELECT count(*) FROM null_table;
COUNT(*)
4
SELECT count(price) FROM null_table;
COUNT(PRICE)
4
SELECT count(birthday) FROM null_table;
COUNT(BIRTHDAY)
3
SELECT avg(num) FROM null_table;
AVG(NUM)
15
6. AGGREGATION WITH NULL COLUMNS
CREATE TABLE null_table3(id int, num int nullable);
SUCCESS
INSERT INTO null_table3 VALUES (1, null);
SUCCESS
INSERT INTO null_table3 VALUES (2, null);
SUCCESS
SELECT count(num) FROM null_table3;
COUNT(NUM)
0
SELECT min(num) FROM null_table3;
MIN(NUM)
NULL
SELECT max(num) FROM null_table3;
MAX(NUM)
NULL
SELECT avg(num) FROM null_table3;
AVG(NUM)
NULL
1. CREATE TABLE
create table t_order_by(id int, score float, name char);
SUCCESS
create table t_order_by_2(id int, age int);
SUCCESS
2. INSERT RECORDS
insert into t_order_by values(3, 1.0, 'a');
SUCCESS
insert into t_order_by values(1, 2.0, 'b');
SUCCESS
insert into t_order_by values(4, 3.0, 'c');
SUCCESS
insert into t_order_by values(3, 2.0, 'c');
SUCCESS
insert into t_order_by values(3, 4.0, 'c');
SUCCESS
insert into t_order_by values(3, 3.0, 'd');
SUCCESS
insert into t_order_by values(3, 2.0, 'f');
SUCCESS
insert into t_order_by_2 values(1, 10);
SUCCESS
insert into t_order_by_2 values(2, 20);
SUCCESS
insert into t_order_by_2 values(3, 10);
SUCCESS
insert into t_order_by_2 values(3, 20);
SUCCESS
insert into t_order_by_2 values(3, 40);
SUCCESS
insert into t_order_by_2 values(4, 20);
SUCCESS
3. PRIMARY ORDER BY
select * from t_order_by order by id;
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
ID | SCORE | NAME
select * from t_order_by order by id asc;
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
ID | SCORE | NAME
select * from t_order_by order by id desc;
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
ID | SCORE | NAME
select * from t_order_by order by score desc;
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
ID | SCORE | NAME
select * from t_order_by order by name desc;
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
ID | SCORE | NAME
4. ORDER BY MORE THAN ONE FIELDS
select * from t_order_by order by id, score, name;
ID | SCORE | NAME
1 | 2 | B
3 | 1 | A
3 | 2 | C
3 | 2 | F
3 | 3 | D
3 | 4 | C
4 | 3 | C
select * from t_order_by order by id desc, score asc, name desc;
ID | SCORE | NAME
4 | 3 | C
3 | 1 | A
3 | 2 | F
3 | 2 | C
3 | 3 | D
3 | 4 | C
1 | 2 | B
5. ORDER BY ASSOCIATE WITH WHERE CONDITION
select * from t_order_by where id=3 and name>='a' order by score desc, name;
ID | SCORE | NAME
3 | 4 | C
3 | 3 | D
3 | 2 | C
3 | 2 | F
3 | 1 | A
6. MULTI-TABLE ORDER BY
select * from t_order_by,t_order_by_2 order by t_order_by.id,t_order_by.score,t_order_by.name,t_order_by_2.id,t_order_by_2.age;
T_ORDER_BY.ID | T_ORDER_BY.SCORE | T_ORDER_BY.NAME | T_ORDER_BY_2.ID | T_ORDER_BY_2.AGE
1 | 2 | B | 1 | 10
1 | 2 | B | 2 | 20
1 | 2 | B | 3 | 10
1 | 2 | B | 3 | 20
1 | 2 | B | 3 | 40
1 | 2 | B | 4 | 20
3 | 1 | A | 1 | 10
3 | 1 | A | 2 | 20
3 | 1 | A | 3 | 10
3 | 1 | A | 3 | 20
3 | 1 | A | 3 | 40
3 | 1 | A | 4 | 20
3 | 2 | C | 1 | 10
3 | 2 | C | 2 | 20
3 | 2 | C | 3 | 10
3 | 2 | C | 3 | 20
3 | 2 | C | 3 | 40
3 | 2 | C | 4 | 20
3 | 2 | F | 1 | 10
3 | 2 | F | 2 | 20
3 | 2 | F | 3 | 10
3 | 2 | F | 3 | 20
3 | 2 | F | 3 | 40
3 | 2 | F | 4 | 20
3 | 3 | D | 1 | 10
3 | 3 | D | 2 | 20
3 | 3 | D | 3 | 10
3 | 3 | D | 3 | 20
3 | 3 | D | 3 | 40
3 | 3 | D | 4 | 20
3 | 4 | C | 1 | 10
3 | 4 | C | 2 | 20
3 | 4 | C | 3 | 10
3 | 4 | C | 3 | 20
3 | 4 | C | 3 | 40
3 | 4 | C | 4 | 20
4 | 3 | C | 1 | 10
4 | 3 | C | 2 | 20
4 | 3 | C | 3 | 10
4 | 3 | C | 3 | 20
4 | 3 | C | 3 | 40
4 | 3 | C | 4 | 20
select * from t_order_by, t_order_by_2 where t_order_by.id=t_order_by_2.id order by t_order_by.score desc, t_order_by_2.age asc, t_order_by.id asc, t_order_by.name;
T_ORDER_BY.ID | T_ORDER_BY.SCORE | T_ORDER_BY.NAME | T_ORDER_BY_2.ID | T_ORDER_BY_2.AGE
3 | 4 | C | 3 | 10
3 | 4 | C | 3 | 20
3 | 4 | C | 3 | 40
3 | 3 | D | 3 | 10
3 | 3 | D | 3 | 20
4 | 3 | C | 4 | 20
3 | 3 | D | 3 | 40
1 | 2 | B | 1 | 10
3 | 2 | C | 3 | 10
3 | 2 | F | 3 | 10
3 | 2 | C | 3 | 20
3 | 2 | F | 3 | 20
3 | 2 | C | 3 | 40
3 | 2 | F | 3 | 40
3 | 1 | A | 3 | 10
3 | 1 | A | 3 | 20
3 | 1 | A | 3 | 40
INITIALIZATION
CREATE TABLE Select_meta(id int, age int);
SUCCESS
1. SELECT FROM A NON-EXISTENT TABLE
select * from no_table;
FAILURE
2. SELECT FROM A NON-EXISTENT COLUMN
select home from Select_meta;
FAILURE
select * from Select_meta where home='001';
FAILURE
INITIALIZATION
CREATE TABLE Select_tables_1(id int, age int, u_name char);
SUCCESS
CREATE TABLE Select_tables_2(id int, age int, u_name char);
SUCCESS
CREATE TABLE Select_tables_3(id int, res int, u_name char);
SUCCESS
CREATE TABLE Select_tables_4(id int, age int, u_name char);
SUCCESS
CREATE TABLE Select_tables_5(id int, res int, u_name char);
SUCCESS
INSERT INTO Select_tables_1 VALUES (1,18,'a');
SUCCESS
INSERT INTO Select_tables_1 VALUES (2,15,'b');
SUCCESS
INSERT INTO Select_tables_2 VALUES (1,20,'a');
SUCCESS
INSERT INTO Select_tables_2 VALUES (2,21,'c');
SUCCESS
INSERT INTO Select_tables_3 VALUES (1,35,'a');
SUCCESS
INSERT INTO Select_tables_3 VALUES (2,37,'a');
SUCCESS
INSERT DATA INTO SELECT_TABLES_4 AND SELECT_TABLES_5
INSERT INTO Select_tables_4 VALUES (1, 2, 'a');
SUCCESS
INSERT INTO Select_tables_4 VALUES (1, 3, 'b');
SUCCESS
INSERT INTO Select_tables_4 VALUES (2, 2, 'c');
SUCCESS
INSERT INTO Select_tables_4 VALUES (2, 4, 'd');
SUCCESS
INSERT INTO Select_tables_5 VALUES (1, 10, 'g');
SUCCESS
INSERT INTO Select_tables_5 VALUES (1, 11, 'f');
SUCCESS
INSERT INTO Select_tables_5 VALUES (2, 12, 'c');
SUCCESS
1. MULTI-TABLE QUERY
SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3;
1 | 18 | A | 1 | 20 | A | 1 | 35 | A
1 | 18 | A | 1 | 20 | A | 2 | 37 | A
1 | 18 | A | 2 | 21 | C | 1 | 35 | A
1 | 18 | A | 2 | 21 | C | 2 | 37 | A
2 | 15 | B | 1 | 20 | A | 1 | 35 | A
2 | 15 | B | 1 | 20 | A | 2 | 37 | A
2 | 15 | B | 2 | 21 | C | 1 | 35 | A
2 | 15 | B | 2 | 21 | C | 2 | 37 | A
SELECT_TABLES_1.ID | SELECT_TABLES_1.AGE | SELECT_TABLES_1.U_NAME | SELECT_TABLES_2.ID | SELECT_TABLES_2.AGE | SELECT_TABLES_2.U_NAME | SELECT_TABLES_3.ID | SELECT_TABLES_3.RES | SELECT_TABLES_3.U_NAME
SELECT Select_tables_1.id,Select_tables_2.u_name,Select_tables_3.res FROM Select_tables_1,Select_tables_2,Select_tables_3;
1 | A | 35
1 | A | 37
1 | C | 35
1 | C | 37
2 | A | 35
2 | A | 37
2 | C | 35
2 | C | 37
SELECT_TABLES_1.ID | SELECT_TABLES_2.U_NAME | SELECT_TABLES_3.RES
Select Select_tables_1.res FROM Select_tables_1,Select_tables_2,Select_tables_3;
FAILURE
2. CONDITIONAL QUERY
SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.u_name=Select_tables_2.u_name AND Select_tables_2.u_name=Select_tables_3.u_name;
1 | 18 | A | 1 | 20 | A | 1 | 35 | A
1 | 18 | A | 1 | 20 | A | 2 | 37 | A
SELECT_TABLES_1.ID | SELECT_TABLES_1.AGE | SELECT_TABLES_1.U_NAME | SELECT_TABLES_2.ID | SELECT_TABLES_2.AGE | SELECT_TABLES_2.U_NAME | SELECT_TABLES_3.ID | SELECT_TABLES_3.RES | SELECT_TABLES_3.U_NAME
SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.id=Select_tables_2.id AND Select_tables_3.res=35;
1 | 18 | A | 1 | 20 | A | 1 | 35 | A
2 | 15 | B | 2 | 21 | C | 1 | 35 | A
SELECT_TABLES_1.ID | SELECT_TABLES_1.AGE | SELECT_TABLES_1.U_NAME | SELECT_TABLES_2.ID | SELECT_TABLES_2.AGE | SELECT_TABLES_2.U_NAME | SELECT_TABLES_3.ID | SELECT_TABLES_3.RES | SELECT_TABLES_3.U_NAME
SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.age<18 AND Select_tables_2.u_name='c' AND Select_tables_3.res=35 AND Select_tables_1.id=Select_tables_2.id AND Select_tables_2.id=Select_tables_3.id;
SELECT_TABLES_1.ID | SELECT_TABLES_1.AGE | SELECT_TABLES_1.U_NAME | SELECT_TABLES_2.ID | SELECT_TABLES_2.AGE | SELECT_TABLES_2.U_NAME | SELECT_TABLES_3.ID | SELECT_TABLES_3.RES | SELECT_TABLES_3.U_NAME
SELECT Select_tables_2.age FROM Select_tables_1,Select_tables_2 WHERE Select_tables_1.age<18 AND Select_tables_2.u_name='c' AND Select_tables_1.id=Select_tables_2.id;
21
SELECT_TABLES_2.AGE
3. DUPLICATE KEY QUERY
SELECT * from Select_tables_4, Select_tables_5 where Select_tables_4.id=Select_tables_5.id;
1 | 2 | A | 1 | 10 | G
1 | 2 | A | 1 | 11 | F
1 | 3 | B | 1 | 10 | G
1 | 3 | B | 1 | 11 | F
2 | 2 | C | 2 | 12 | C
2 | 4 | D | 2 | 12 | C
SELECT_TABLES_4.ID | SELECT_TABLES_4.AGE | SELECT_TABLES_4.U_NAME | SELECT_TABLES_5.ID | SELECT_TABLES_5.RES | SELECT_TABLES_5.U_NAME
select * from Select_tables_4, Select_tables_5 where Select_tables_4.id >= Select_tables_5.id;
1 | 2 | A | 1 | 10 | G
1 | 2 | A | 1 | 11 | F
1 | 3 | B | 1 | 10 | G
1 | 3 | B | 1 | 11 | F
2 | 2 | C | 1 | 10 | G
2 | 2 | C | 1 | 11 | F
2 | 2 | C | 2 | 12 | C
2 | 4 | D | 1 | 10 | G
2 | 4 | D | 1 | 11 | F
2 | 4 | D | 2 | 12 | C
SELECT_TABLES_4.ID | SELECT_TABLES_4.AGE | SELECT_TABLES_4.U_NAME | SELECT_TABLES_5.ID | SELECT_TABLES_5.RES | SELECT_TABLES_5.U_NAME
4. JOIN EMPTY TABLE
CREATE TABLE Select_tables_6(id int, res int);
SUCCESS
SELECT Select_tables_1.id,Select_tables_6.id from Select_tables_1, Select_tables_6 where Select_tables_1.id=Select_tables_6.id;
SELECT_TABLES_1.ID | SELECT_TABLES_6.ID
INITIALIZATION
CREATE TABLE ssq_1(id int, col1 int, feat1 float);
SUCCESS
CREATE TABLE ssq_2(id int, col2 int, feat2 float);
SUCCESS
CREATE TABLE ssq_3(id int, col3 int, feat3 float);
SUCCESS
INSERT INTO ssq_1 VALUES (1, 4, 11.2);
SUCCESS
INSERT INTO ssq_1 VALUES (2, 2, 12.0);
SUCCESS
INSERT INTO ssq_1 VALUES (3, 3, 13.5);
SUCCESS
INSERT INTO ssq_2 VALUES (1, 2, 13.0);
SUCCESS
INSERT INTO ssq_2 VALUES (2, 7, 10.5);
SUCCESS
INSERT INTO ssq_2 VALUES (5, 3, 12.6);
SUCCESS
1. SELECT
select * from ssq_1 where id in (select ssq_2.id from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from ssq_1 where col1 not in (select ssq_2.col2 from ssq_2);
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from ssq_1 where col1 = (select avg(ssq_2.col2) from ssq_2);
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from ssq_1 where (select avg(ssq_2.col2) from ssq_2) = col1;
1 | 4 | 11.2
ID | COL1 | FEAT1
select * from ssq_1 where feat1 >= (select min(ssq_2.feat2) from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from ssq_1 where (select min(ssq_2.feat2) from ssq_2) <= feat1;
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from ssq_1 where feat1 <= (select max(ssq_2.feat2) from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from ssq_1 where (select max(ssq_2.feat2) from ssq_2) >= feat1;
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from ssq_1 where feat1 > (select min(ssq_2.feat2) from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from ssq_1 where (select min(ssq_2.feat2) from ssq_2) < feat1;
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from ssq_1 where feat1 < (select max(ssq_2.feat2) from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from ssq_1 where (select max(ssq_2.feat2) from ssq_2) > feat1;
1 | 4 | 11.2
2 | 2 | 12
ID | COL1 | FEAT1
select * from ssq_1 where feat1 <> (select avg(ssq_2.feat2) from ssq_2);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
2. SELECT WITH EMPTY TABLE
select * from ssq_1 where feat1 < (select max(ssq_2.feat2) from ssq_2 where 1=0);
ID | COL1 | FEAT1
select * from ssq_1 where id in (select ssq_2.id from ssq_2 where 1=0);
ID | COL1 | FEAT1
select * from ssq_1 where id not in (select ssq_2.id from ssq_2 where 1=0);
1 | 4 | 11.2
2 | 2 | 12
3 | 3 | 13.5
ID | COL1 | FEAT1
select * from ssq_3 where feat3 < (select max(ssq_2.feat2) from ssq_2);
ID | COL3 | FEAT3
select * from ssq_3 where id in (select ssq_2.id from ssq_2);
ID | COL3 | FEAT3
select * from ssq_3 where id not in (select ssq_2.id from ssq_2);
ID | COL3 | FEAT3
3. ERROR
select * from ssq_1 where col1 = (select ssq_2.col2 from ssq_2);
FAILURE
select * from ssq_1 where col1 = (select * from ssq_2);
FAILURE
select * from ssq_1 where col1 in (select * from ssq_2);
FAILURE
select * from ssq_1 where col1 not in (select * from ssq_2);
FAILURE
此差异已折叠。
INITIALIZATION
CREATE TABLE unique_table(id int, col1 int, col2 int);
SUCCESS
INSERT INTO unique_table VALUES (1,1,1);
SUCCESS
1. UNIQUE TEST
CREATE UNIQUE INDEX index_id on unique_table(id);
SUCCESS
INSERT INTO unique_table VALUES (2,1,1);
SUCCESS
CREATE UNIQUE INDEX index_id on unique_table(id);
FAILURE
INSERT INTO unique_table VALUES (3,2,1);
SUCCESS
INSERT INTO unique_table VALUES (1,2,1);
FAILURE
2. SELECT
SELECT * FROM unique_table;
1 | 1 | 1
2 | 1 | 1
3 | 2 | 1
ID | COL1 | COL2
INITIALIZATION
CREATE TABLE Update_table_1(id int, t_name char, col1 int, col2 int);
SUCCESS
CREATE INDEX index_id on Update_table_1(id);
SUCCESS
INSERT INTO Update_table_1 VALUES (1,'N1',1,1);
SUCCESS
INSERT INTO Update_table_1 VALUES (2,'N2',1,1);
SUCCESS
INSERT INTO Update_table_1 VALUES (3,'N3',2,1);
SUCCESS
1. UPDATE A ROW
UPDATE Update_table_1 SET t_name='N01' WHERE id=1;
SUCCESS
SELECT * FROM Update_table_1;
1 | N01 | 1 | 1
2 | N2 | 1 | 1
3 | N3 | 2 | 1
ID | T_NAME | COL1 | COL2
2. UPDATE ROWS
UPDATE Update_table_1 SET col2=0 WHERE col1=1;
SUCCESS
SELECT * FROM Update_table_1;
1 | N01 | 1 | 0
2 | N2 | 1 | 0
3 | N3 | 2 | 1
ID | T_NAME | COL1 | COL2
3. UPDATE A INDEX COLUMN
UPDATE Update_table_1 SET id=4 WHERE t_name='N3';
SUCCESS
SELECT * FROM Update_table_1;
1 | N01 | 1 | 0
2 | N2 | 1 | 0
4 | N3 | 2 | 1
ID | T_NAME | COL1 | COL2
4. UPDATE WITHOUT CONDITIONS
UPDATE Update_table_1 SET col1=0;
SUCCESS
SELECT * FROM Update_table_1;
1 | N01 | 0 | 0
2 | N2 | 0 | 0
4 | N3 | 0 | 1
ID | T_NAME | COL1 | COL2
5. UPDATE WITH CONDITIONS
UPDATE Update_table_1 SET t_name='N02' WHERE col1=0 AND col2=0;
SUCCESS
SELECT * FROM Update_table_1;
1 | N02 | 0 | 0
2 | N02 | 0 | 0
4 | N3 | 0 | 1
ID | T_NAME | COL1 | COL2
6. UPDATE NON-EXISTENT TABLE
UPDATE Update_table_2 SET t_name='N01' WHERE id=1;
FAILURE
7. UPDATE NON-EXISTENT COLUMN
UPDATE Update_table_1 SET t_name_false='N01' WHERE id=1;
FAILURE
8. UPDATE WITH INVALID CONDITION
UPDATE Update_table_1 SET t_name='N01' WHERE id_false=1;
FAILURE
9. UPDATE IN VAIN
UPDATE Update_table_1 SET t_name='N01' WHERE id=100;
SUCCESS
SELECT * FROM Update_table_1;
1 | N02 | 0 | 0
2 | N02 | 0 | 0
4 | N3 | 0 | 1
ID | T_NAME | COL1 | COL2
10. UPDATE WITH INVALID VALUE
UPDATE Update_table_1 SET col1='N01' WHERE id=1;
FAILURE
-- echo basic insert
create table t_basic(id int, age int, name char, score float);
insert into t_basic values(1,1, 'a', 1.0);
insert into t_basic values(2,2, 'b', 2.0);
insert into t_basic values(4,4, 'c', 3.0);
insert into t_basic values(3,3, 'd', 4.0);
insert into t_basic values(5,5, 'e', 5.5);
insert into t_basic values(6,6, 'f', 6.6);
insert into t_basic values(7,7, 'g', 7.7);
--sort select * from t_basic;
-- echo basic delete
delete from t_basic where id=3;
-- sort select * from t_basic;
-- echo basic select
select * from t_basic where id=1;
-- sort select * from t_basic where id>=5;
select * from t_basic where age>1 and age<3;
select * from t_basic where t_basic.id=1 and t_basic.age=1;
select * from t_basic where id=1 and age=1;
-- sort select id, age, name, score from t_basic;
-- sort select t_basic.id, t_basic.age, t_basic.name, t_basic.score from t_basic;
-- sort select t_basic.id, t_basic.age, name from t_basic;
-- echo create index
create index i_id on t_basic (id);
-- sort select * from t_basic;
-- echo initialization
CREATE TABLE aggregation_func(id int, num int, price float, addr char, birthday date);
INSERT INTO aggregation_func VALUES (1, 18, 10.0, 'abc', '2020-01-01');
INSERT INTO aggregation_func VALUES (2, 15, 20.0, 'abc', '2010-01-11');
INSERT INTO aggregation_func VALUES (3, 12, 30.0, 'def', '2021-01-21');
INSERT INTO aggregation_func VALUES (4, 15, 30.0, 'dei', '2021-01-31');
-- echo 1. count
SELECT count(*) FROM aggregation_func;
SELECT count(num) FROM aggregation_func;
-- echo 2. min
SELECT min(num) FROM aggregation_func;
SELECT min(price) FROM aggregation_func;
SELECT min(addr) FROM aggregation_func;
-- echo 3. max
SELECT max(num) FROM aggregation_func;
SELECT max(price) FROM aggregation_func;
SELECT max(addr) FROM aggregation_func;
-- echo 4. avg
SELECT avg(num) FROM aggregation_func;
SELECT avg(price) FROM aggregation_func;
-- echo 5. error with *
SELECT min(*) FROM aggregation_func;
SELECT max(*) FROM aggregation_func;
SELECT avg(*) FROM aggregation_func;
-- echo 6. error with redundant columns
SELECT count(*,num) FROM aggregation_func;
SELECT min(num,price) FROM aggregation_func;
SELECT max(num,price) FROM aggregation_func;
SELECT avg(num,price) FROM aggregation_func;
-- echo 7. error with empty columns
SELECT count() FROM aggregation_func;
SELECT min() FROM aggregation_func;
SELECT max() FROM aggregation_func;
SELECT avg() FROM aggregation_func;
-- echo 8. error with non-existent columns
SELECT count(id2) FROM aggregation_func;
SELECT min(id2) FROM aggregation_func;
SELECT max(id2) FROM aggregation_func;
SELECT avg(id2) FROM aggregation_func;
-- echo 9. select many aggregation
SELECT min(num),max(num),avg(num) FROM aggregation_func;
-- echo initialization
CREATE TABLE csq_1(id int, col1 int, feat1 float);
CREATE TABLE csq_2(id int, col2 int, feat2 float);
CREATE TABLE csq_3(id int, col3 int, feat3 float);
CREATE TABLE csq_4(id int, col4 int, feat4 float);
INSERT INTO csq_1 VALUES (1, 4, 11.2);
INSERT INTO csq_1 VALUES (2, 2, 12.0);
INSERT INTO csq_1 VALUES (3, 3, 13.5);
INSERT INTO csq_2 VALUES (1, 2, 13.0);
INSERT INTO csq_2 VALUES (2, 7, 10.5);
INSERT INTO csq_2 VALUES (5, 3, 12.6);
INSERT INTO csq_3 VALUES (1, 2, 11.0);
INSERT INTO csq_3 VALUES (3, 6, 16.5);
INSERT INTO csq_3 VALUES (5, 5, 14.6);
-- echo 1. Select
-- sort select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3));
-- sort select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id not in (select csq_3.id from csq_3));
-- sort select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3));
-- sort select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id in (select csq_3.id from csq_3));
-- sort select * from csq_1 where col1 > (select avg(csq_2.col2) from csq_2 where csq_2.feat2 >= (select min(csq_3.feat3) from csq_3));
-- sort select * from csq_1 where (select avg(csq_2.col2) from csq_2 where csq_2.feat2 > (select min(csq_3.feat3) from csq_3)) = col1;
-- sort select * from csq_1 where (select avg(csq_2.col2) from csq_2) <> (select avg(csq_3.col3) from csq_3);
-- sort select * from csq_1 where feat1 > (select min(csq_2.feat2) from csq_2) and col1 <= (select min(csq_3.col3) from csq_3);
-- sort select * from csq_1 where (select max(csq_2.feat2) from csq_2) > feat1 and col1 > (select min(csq_3.col3) from csq_3);
-- sort select * from csq_1 where (select max(csq_2.feat2) from csq_2) > feat1 and (select min(csq_3.col3) from csq_3) < col1;
-- sort select * from csq_1 where feat1 <> (select avg(csq_2.feat2) from csq_2 where csq_2.feat2 > csq_1.feat1);
-- sort select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id in (select csq_3.id from csq_3 where csq_1.id = csq_3.id));
-- echo 2. Select with empty table
-- sort select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3 where 1=0));
-- sort select * from csq_1 where id in (select csq_2.id from csq_2 where csq_2.id in (select csq_3.id from csq_3 where 1=0) and 1=0);
-- sort select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3 where 1=0));
-- sort select * from csq_1 where col1 not in (select csq_2.col2 from csq_2 where csq_2.id not in (select csq_3.id from csq_3) and 1=0);
-- sort select * from csq_3 where feat3 < (select max(csq_2.feat2) from csq_2 where csq_2.id not in (select csq_3.id from csq_3 where 1=0));
-- sort select * from csq_3 where feat3 < (select max(csq_2.feat2) from csq_2 where csq_2.id not in (select csq_3.id from csq_3 ) and 1=0);
--echo 3. error
select * from csq_1 where col1 = (select csq_2.col2 from csq_2);
select * from csq_1 where col1 = (select * from csq_2);
select * from csq_1 where col1 in (select * from csq_2);
select * from csq_1 where col1 not in (select * from csq_2);
-- echo initialization
CREATE TABLE date_table(id int, u_date date);
CREATE INDEX index_id on date_table(u_date);
-- echo 1. insert normal date data
INSERT INTO date_table VALUES (1,'2020-01-21');
INSERT INTO date_table VALUES (2,'2020-10-21');
INSERT INTO date_table VALUES (3,'2020-1-01');
INSERT INTO date_table VALUES (4,'2020-01-1');
INSERT INTO date_table VALUES (5,'2019-12-21');
INSERT INTO date_table VALUES (6,'2016-2-29');
INSERT INTO date_table VALUES (7,'1970-1-1');
INSERT INTO date_table VALUES (8,'2000-01-01');
INSERT INTO date_table VALUES (9,'2038-1-19');
-- echo 2. compare date data
-- sort SELECT * FROM date_table WHERE u_date>'2020-1-20';
-- sort SELECT * FROM date_table WHERE u_date<'2019-12-31';
-- sort SELECT * FROM date_table WHERE u_date='2020-1-1';
-- echo 3. delete data
DELETE FROM date_table WHERE u_date>'2012-2-29';
-- sort SELECT * FROM date_table;
-- echo 4. check invalid date data
SELECT * FROM date_table WHERE u_date='2017-2-29';
SELECT * FROM date_table WHERE u_date='2017-21-29';
SELECT * FROM date_table WHERE u_date='2017-12-32';
SELECT * FROM date_table WHERE u_date='2017-11-31';
INSERT INTO date_table VALUES (10,'2017-2-29');
INSERT INTO date_table VALUES (11,'2017-21-29');
INSERT INTO date_table VALUES (12,'2017-12-32');
INSERT INTO date_table VALUES (13,'2017-11-31');
-- echo 1. Drop empty table
CREATE TABLE Drop_table_1(id int, t_name char);
DROP TABLE Drop_table_1;
-- echo 2. Drop non-empty table
CREATE TABLE Drop_table_2(id int, t_name char);
INSERT INTO Drop_table_2 VALUES (1,'OB');
DROP TABLE Drop_table_2;
-- echo 3. Check the accuracy of dropping table
CREATE TABLE Drop_table_3(id int, t_name char);
INSERT INTO Drop_table_3 VALUES (1,'OB');
-- sort SELECT * FROM Drop_table_3;
DROP TABLE Drop_table_3;
INSERT INTO Drop_table_3 VALUES (1,'OB');
SELECT * FROM Drop_table_3;
DELETE FROM Drop_table_3 WHERE id = 3;
CREATE TABLE Drop_table_3(id int, t_name char);
-- sort SELECT * FROM Drop_table_3;
-- echo 4. Drop non-existent table
CREATE TABLE Drop_table_4(id int, t_name char);
DROP TABLE Drop_table_4;
DROP TABLE Drop_table_4;
DROP TABLE Drop_table_4_1;
-- echo 5. Create a table which has dropped
CREATE TABLE Drop_table_5(id int, t_name char);
DROP TABLE Drop_table_5;
CREATE TABLE Drop_table_5(id int, t_name char);
SELECT * FROM Drop_table_5;
-- echo 6. Drop a table with index
CREATE TABLE Drop_table_6(id int, t_name char);
CREATE INDEX index_id on Drop_table_6(id);
INSERT INTO Drop_table_6 VALUES (1,'OB');
-- sort SELECT * FROM Drop_table_6;
DROP TABLE Drop_table_6;
SELECT * FROM Drop_table_6;
-- echo initialization
create table exp_table(id int, col1 int, col2 int, col3 float, col4 float);
insert into exp_table VALUES (1, 1, 1, 1.0, 1.5);
insert into exp_table VALUES (2, 2, -2, 5.5, 1.0);
insert into exp_table VALUES (3, 3, 4, 5.0, 4.0);
-- echo 1. select
-- sort select * from exp_table where 1 = 5/4;
-- sort select * from exp_table where col1-2 > 0;
-- sort select * from exp_table where 2+col2 < 1;
-- sort select * from exp_table where col1*col2 < 0;
-- sort select * from exp_table where 5/4 = 1;
-- sort select * from exp_table where 0 < col1-2;
-- sort select * from exp_table where 1.0 > 2+col2;
-- sort select * from exp_table where -0 < col1-col2;
-- sort select * from exp_table where 0 < -2+col1;
-- sort select * from exp_table where 1+1 = 2*1.0;
-- sort select * from exp_table where 5/4*8 < 4+col2*col3/2;
-- sort select * from exp_table where 5/4*8 < (4+col2)*col3/2;
-- sort select id,-(col2*(-1)+1)+(col4+2)*(col1+col3*2),(4+col2)*col3/2 from exp_table where -(col2*(-1)+1)+(col4+2)*(col1+col3*2) > (4+col2)*col3/2;
-- sort select id,col1,col2,col3,col4,6-(col2*(1+col1))+(col4+2)/(1+col1*4+col3*2) from exp_table where 6-(col2*(1+col1))+(col4+2)/(1+col1*4+col3*2) > 5;
-- sort select id,col1,col2,col3,col4,3*col1/(col2+2) from exp_table where 3*col1/(col2+2) > 1;
-- sort select id,3*col1/(col2+2) from exp_table where 3*col1/(col2+2)+1/0 > 1;
-- sort select * from exp_table where 1/0 = 1/0;
-- echo 2. expression about many tables
create table exp_table2(id int, col1 int);
insert into exp_table2 VALUES (1, 1);
insert into exp_table2 VALUES (2, 3);
-- sort select exp_table.id,3*exp_table2.col1/(exp_table.col2+2) from exp_table,exp_table2 where 3*exp_table2.col1/(exp_table.col2+2)>1;
\ No newline at end of file
-- echo 1. create table
create table t_group_by (id int, score float, name char);
create table t_group_by_2 (id int, age int);
-- echo 2. insert records
insert into t_group_by values(3, 1.0, 'a');
insert into t_group_by values(1, 2.0, 'b');
insert into t_group_by values(4, 3.0, 'c');
insert into t_group_by values(3, 2.0, 'c');
insert into t_group_by values(3, 4.0, 'c');
insert into t_group_by values(3, 3.0, 'd');
insert into t_group_by values(3, 2.0, 'f');
insert into t_group_by_2 values(1, 10);
insert into t_group_by_2 values(2, 20);
insert into t_group_by_2 values(3, 10);
insert into t_group_by_2 values(3, 20);
insert into t_group_by_2 values(3, 40);
insert into t_group_by_2 values(4, 20);
-- echo 3. primary group by
-- sort select id, avg(score) from t_group_by group by id;
-- sort select name, min(id), max(score) from t_group_by group by name;
-- sort select id, name, avg(score) from t_group_by group by id, name;
-- echo 4. with where condition
-- sort select id, avg(score) from t_group_by where id>2 group by id;
-- sort select name, count(id), max(score) from t_group_by where name > 'a' and id>=0 group by name;
-- echo 5. multi table
-- sort select t_group_by.id, t_group_by.name, avg(t_group_by.score), avg(t_group_by_2.age) from t_group_by, t_group_by_2 where t_group_by.id=t_group_by_2.id group by t_group_by.id, t_group_by.name;
\ No newline at end of file
-- echo initialization
CREATE TABLE insert_table(id int, t_name char, col1 int, col2 int);
-- echo 1. insert
INSERT INTO insert_table VALUES (1,'N1',1,1);
INSERT INTO insert_table VALUES (2,'N2',1,1),(3,'N3',2,1);
-- echo 2. error
INSERT INTO insert_table VALUES (4,'N4',1,1),(1,1,1);
INSERT INTO insert_table VALUES (4,'N4',1,1),(1,1,1,1);
-- echo 3. select
-- sort SELECT * FROM insert_table;
\ No newline at end of file
此差异已折叠。
-- echo 1. multi index of empty table
CREATE TABLE multi_index(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
CREATE INDEX i_1_12 ON multi_index(col1,col2);
CREATE INDEX i_1_345 ON multi_index(col3, col4, col5);
CREATE INDEX i_1_56 ON multi_index(col5, col6);
CREATE INDEX i_1_456 ON multi_index(col4, col5, col6);
-- sort SELECT * FROM multi_index;
-- echo 2. multi index of non-empty table
CREATE TABLE multi_index2(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
INSERT INTO multi_index2 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
INSERT INTO multi_index2 VALUES (2, 1, 16.2, 'x', '2021-01-02', 1, 61);
INSERT INTO multi_index2 VALUES (3, 1, 11.6, 'h', '2023-01-02', 10, 17);
CREATE INDEX i_2_12 ON multi_index2(col1,col2);
CREATE INDEX i_2_345 ON multi_index2(col3, col4, col5);
CREATE INDEX i_2_56 ON multi_index2(col5, col6);
CREATE INDEX i_2_456 ON multi_index2(col4, col5, col6);
-- sort SELECT * FROM multi_index2;
-- echo 3. influence of inserting
CREATE TABLE multi_index3(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
CREATE INDEX i_3_i1 ON multi_index3(id,col1);
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
-- sort SELECT * FROM multi_index3;
CREATE INDEX i_3_14 ON multi_index3(col1,col4);
INSERT INTO multi_index3 VALUES (2, 1, 16.2, 'x', '2021-01-02', 1, 61);
INSERT INTO multi_index3 VALUES (3, 1, 11.6, 'h', '2023-01-02', 10, 17);
INSERT INTO multi_index3 VALUES (4, 2, 12.2, 'e', '2022-01-04', 13, 10);
INSERT INTO multi_index3 VALUES (5, 3, 14.2, 'd', '2020-04-02', 12, 2);
-- sort SELECT * FROM multi_index3;
-- echo 4. query with indexs
-- sort SELECT * FROM multi_index3 WHERE id = 1;
-- sort SELECT * FROM multi_index3 WHERE col1 > 1 and col4 = '2021-01-02';
-- sort SELECT * FROM multi_index3 WHERE col1 <> 1 and col4 >= '2021-01-02';
-- sort SELECT * FROM multi_index3 WHERE col2 < 15.0 and col4 <> '2021-01-02';
-- echo 5. influence of deleting
DELETE FROM multi_index3 WHERE id = 1;
DELETE FROM multi_index3 WHERE id = 61;
-- sort SELECT * FROM multi_index3;
DELETE FROM multi_index3 WHERE col3 = 'x';
-- sort SELECT * FROM multi_index3;
DELETE FROM multi_index3 WHERE id = 4 and col1 = 1;
DELETE FROM multi_index3 WHERE id = 90 and col1 = 13;
DELETE FROM multi_index3 WHERE id = 90 and col1 = 1;
DELETE FROM multi_index3 WHERE id = 4 and col1 = 13;
DELETE FROM multi_index3 WHERE id = 3 and col1 = 1;
DELETE FROM multi_index3 WHERE id = 3 and col1 = 1;
-- sort SELECT * FROM multi_index3;
INSERT INTO multi_index3 VALUES (1, 1, 11.2, 'a', '2021-01-02', 1, 1);
INSERT INTO multi_index3 VALUES (2, 1, 11.2, 'x', '2021-01-02', 1, 61);
INSERT INTO multi_index3 VALUES (3, 1, 11.2, 'h', '2023-01-02', 10, 17);
-- sort SELECT * FROM multi_index3;
-- echo 6. influence of updating
UPDATE multi_index3 SET col6=49 where id=2;
UPDATE multi_index3 SET col4='1999-02-01' where id=2;
UPDATE multi_index3 SET col1=2 where id=2;
UPDATE multi_index3 SET col1=5 where col6=49;
-- sort SELECT * FROM multi_index3;
-- echo 7. influence of dropping table
DROP table multi_index;
-- echo 8. error
CREATE TABLE multi_index4(id int, col1 int, col2 float, col3 char, col4 date, col5 int, col6 int);
CREATE INDEX i_4_i7 ON multi_index4(id,col7);
CREATE INDEX i_4_78 ON multi_index4(col7,col8);
CREATE INDEX i_4_i78 ON multi_index4(id,col7,col8);
-- echo initialization
CREATE TABLE null_table(id int, num int nullable, price float not null, birthday date nullable);
CREATE TABLE null_table2(id int, num int nullable, price float not null, birthday date nullable);
CREATE INDEX index_num on null_table(num);
-- echo 1. insert
INSERT INTO null_table VALUES (1, 18, 10.0, '2020-01-01');
INSERT INTO null_table VALUES (2, null, 20.0, '2010-01-11');
INSERT INTO null_table VALUES (3, 12, 30.0, null);
INSERT INTO null_table VALUES (4, 15, 30.0, '2021-01-31');
INSERT INTO null_table2 VALUES (1, 18, 30.0, '2021-01-31');
INSERT INTO null_table2 VALUES (2, null, 40.0, null);
INSERT INTO null_table VALUES (5, 15, null, '2021-01-31');
INSERT INTO null_table VALUES (null, 15, 30.0, '2021-01-31');
-- echo 2. SELECT
-- sort SELECT * FROM null_table;
-- echo 3. SELECT WITH CONSTANT
-- sort SELECT * FROM null_table where 1 is null;
-- sort SELECT * FROM null_table where 1 is not null;
-- sort SELECT * FROM null_table where null=1;
-- sort SELECT * FROM null_table where 1=null;
-- sort SELECT * FROM null_table where 1<>null;
-- sort SELECT * FROM null_table where 1<null;
-- sort SELECT * FROM null_table where 1>null;
-- sort SELECT * FROM null_table where null is null;
-- sort SELECT * FROM null_table where null is not null;
-- sort SELECT * FROM null_table WHERE null=null;
-- sort SELECT * FROM null_table WHERE null<>null;
-- sort SELECT * FROM null_table WHERE null>null;
-- sort SELECT * FROM null_table WHERE null<null;
-- sort SELECT * FROM null_table where 'a' is null;
-- sort SELECT * FROM null_table where 'a' is not null;
-- sort SELECT * FROM null_table WHERE null='a';
-- sort SELECT * FROM null_table WHERE 'a'=null;
-- sort SELECT * FROM null_table WHERE 'a'<>null;
-- sort SELECT * FROM null_table WHERE 'a'>null;
-- sort SELECT * FROM null_table WHERE 'a'<null;
-- sort SELECT * FROM null_table where '2021-01-31' is null;
-- sort SELECT * FROM null_table where '2021-01-31' is not null;
-- sort SELECT * FROM null_table WHERE null='2021-01-31';
-- sort SELECT * FROM null_table WHERE '2021-01-31'=null;
-- sort SELECT * FROM null_table WHERE '2021-01-31'>null;
-- sort SELECT * FROM null_table WHERE '2021-01-31'<null;
-- echo 4. SELECT WITH COLUMN
-- sort SELECT * FROM null_table where birthday is not null;
-- sort SELECT * FROM null_table where birthday is null;
-- sort SELECT * FROM null_table where birthday = null;
-- sort SELECT * FROM null_table where null = birthday;
-- sort SELECT * FROM null_table where birthday <> null;
-- sort SELECT * FROM null_table where birthday > null;
-- sort SELECT * FROM null_table where birthday < null;
-- sort SELECT * FROM null_table where num is not null;
-- sort SELECT * FROM null_table where num is null;
-- sort SELECT * FROM null_table where num = null;
-- sort SELECT * FROM null_table where null = num;
-- sort SELECT * FROM null_table where num <> null;
-- sort SELECT * FROM null_table where num > null;
-- sort SELECT * FROM null_table where num < null;
-- sort SELECT null_table.num,null_table2.num,null_table.birthday FROM null_table,null_table2 where null_table.num=null_table2.num;
-- echo 5. aggregation
SELECT count(*) FROM null_table;
SELECT count(price) FROM null_table;
SELECT count(birthday) FROM null_table;
SELECT avg(num) FROM null_table;
-- echo 6. aggregation with null columns
CREATE TABLE null_table3(id int, num int nullable);
INSERT INTO null_table3 VALUES (1, null);
INSERT INTO null_table3 VALUES (2, null);
SELECT count(num) FROM null_table3;
SELECT min(num) FROM null_table3;
SELECT max(num) FROM null_table3;
SELECT avg(num) FROM null_table3;
-- echo 1. create table
create table t_order_by(id int, score float, name char);
create table t_order_by_2(id int, age int);
-- echo 2. insert records
insert into t_order_by values(3, 1.0, 'a');
insert into t_order_by values(1, 2.0, 'b');
insert into t_order_by values(4, 3.0, 'c');
insert into t_order_by values(3, 2.0, 'c');
insert into t_order_by values(3, 4.0, 'c');
insert into t_order_by values(3, 3.0, 'd');
insert into t_order_by values(3, 2.0, 'f');
insert into t_order_by_2 values(1, 10);
insert into t_order_by_2 values(2, 20);
insert into t_order_by_2 values(3, 10);
insert into t_order_by_2 values(3, 20);
insert into t_order_by_2 values(3, 40);
insert into t_order_by_2 values(4, 20);
-- echo 3. primary order by
-- sort select * from t_order_by order by id;
-- sort select * from t_order_by order by id asc;
-- sort select * from t_order_by order by id desc;
-- sort select * from t_order_by order by score desc;
-- sort select * from t_order_by order by name desc;
-- echo 4. order by more than one fields
select * from t_order_by order by id, score, name;
select * from t_order_by order by id desc, score asc, name desc;
-- echo 5. order by associate with where condition
select * from t_order_by where id=3 and name>='a' order by score desc, name;
-- echo 6. multi-table order by
select * from t_order_by,t_order_by_2 order by t_order_by.id,t_order_by.score,t_order_by.name,t_order_by_2.id,t_order_by_2.age;
select * from t_order_by, t_order_by_2 where t_order_by.id=t_order_by_2.id order by t_order_by.score desc, t_order_by_2.age asc, t_order_by.id asc, t_order_by.name;
-- echo initialization
CREATE TABLE Select_meta(id int, age int);
-- echo 1. select from a non-existent table
select * from no_table;
-- echo 2. select from a non-existent column
select home from Select_meta;
select * from Select_meta where home='001';
-- echo initialization
CREATE TABLE Select_tables_1(id int, age int, u_name char);
CREATE TABLE Select_tables_2(id int, age int, u_name char);
CREATE TABLE Select_tables_3(id int, res int, u_name char);
CREATE TABLE Select_tables_4(id int, age int, u_name char);
CREATE TABLE Select_tables_5(id int, res int, u_name char);
INSERT INTO Select_tables_1 VALUES (1,18,'a');
INSERT INTO Select_tables_1 VALUES (2,15,'b');
INSERT INTO Select_tables_2 VALUES (1,20,'a');
INSERT INTO Select_tables_2 VALUES (2,21,'c');
INSERT INTO Select_tables_3 VALUES (1,35,'a');
INSERT INTO Select_tables_3 VALUES (2,37,'a');
-- echo insert data into select_tables_4 and select_tables_5
INSERT INTO Select_tables_4 VALUES (1, 2, 'a');
INSERT INTO Select_tables_4 VALUES (1, 3, 'b');
INSERT INTO Select_tables_4 VALUES (2, 2, 'c');
INSERT INTO Select_tables_4 VALUES (2, 4, 'd');
INSERT INTO Select_tables_5 VALUES (1, 10, 'g');
INSERT INTO Select_tables_5 VALUES (1, 11, 'f');
INSERT INTO Select_tables_5 VALUES (2, 12, 'c');
-- echo 1. multi-table query
-- sort SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3;
-- sort SELECT Select_tables_1.id,Select_tables_2.u_name,Select_tables_3.res FROM Select_tables_1,Select_tables_2,Select_tables_3;
Select Select_tables_1.res FROM Select_tables_1,Select_tables_2,Select_tables_3;
-- echo 2. conditional query
-- sort SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.u_name=Select_tables_2.u_name AND Select_tables_2.u_name=Select_tables_3.u_name;
-- sort SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.id=Select_tables_2.id AND Select_tables_3.res=35;
-- sort SELECT * FROM Select_tables_1,Select_tables_2,Select_tables_3 WHERE Select_tables_1.age<18 AND Select_tables_2.u_name='c' AND Select_tables_3.res=35 AND Select_tables_1.id=Select_tables_2.id AND Select_tables_2.id=Select_tables_3.id;
-- sort SELECT Select_tables_2.age FROM Select_tables_1,Select_tables_2 WHERE Select_tables_1.age<18 AND Select_tables_2.u_name='c' AND Select_tables_1.id=Select_tables_2.id;
-- echo 3. duplicate key query
-- sort SELECT * from Select_tables_4, Select_tables_5 where Select_tables_4.id=Select_tables_5.id;
-- sort select * from Select_tables_4, Select_tables_5 where Select_tables_4.id >= Select_tables_5.id;
-- echo 4. join empty table
CREATE TABLE Select_tables_6(id int, res int);
-- sort SELECT Select_tables_1.id,Select_tables_6.id from Select_tables_1, Select_tables_6 where Select_tables_1.id=Select_tables_6.id;
-- echo initialization
CREATE TABLE ssq_1(id int, col1 int, feat1 float);
CREATE TABLE ssq_2(id int, col2 int, feat2 float);
CREATE TABLE ssq_3(id int, col3 int, feat3 float);
INSERT INTO ssq_1 VALUES (1, 4, 11.2);
INSERT INTO ssq_1 VALUES (2, 2, 12.0);
INSERT INTO ssq_1 VALUES (3, 3, 13.5);
INSERT INTO ssq_2 VALUES (1, 2, 13.0);
INSERT INTO ssq_2 VALUES (2, 7, 10.5);
INSERT INTO ssq_2 VALUES (5, 3, 12.6);
-- echo 1. Select
-- sort select * from ssq_1 where id in (select ssq_2.id from ssq_2);
-- sort select * from ssq_1 where col1 not in (select ssq_2.col2 from ssq_2);
-- sort select * from ssq_1 where col1 = (select avg(ssq_2.col2) from ssq_2);
-- sort select * from ssq_1 where (select avg(ssq_2.col2) from ssq_2) = col1;
-- sort select * from ssq_1 where feat1 >= (select min(ssq_2.feat2) from ssq_2);
-- sort select * from ssq_1 where (select min(ssq_2.feat2) from ssq_2) <= feat1;
-- sort select * from ssq_1 where feat1 <= (select max(ssq_2.feat2) from ssq_2);
-- sort select * from ssq_1 where (select max(ssq_2.feat2) from ssq_2) >= feat1;
-- sort select * from ssq_1 where feat1 > (select min(ssq_2.feat2) from ssq_2);
-- sort select * from ssq_1 where (select min(ssq_2.feat2) from ssq_2) < feat1;
-- sort select * from ssq_1 where feat1 < (select max(ssq_2.feat2) from ssq_2);
-- sort select * from ssq_1 where (select max(ssq_2.feat2) from ssq_2) > feat1;
-- sort select * from ssq_1 where feat1 <> (select avg(ssq_2.feat2) from ssq_2);
-- echo 2. Select with empty table
-- sort select * from ssq_1 where feat1 < (select max(ssq_2.feat2) from ssq_2 where 1=0);
-- sort select * from ssq_1 where id in (select ssq_2.id from ssq_2 where 1=0);
-- sort select * from ssq_1 where id not in (select ssq_2.id from ssq_2 where 1=0);
-- sort select * from ssq_3 where feat3 < (select max(ssq_2.feat2) from ssq_2);
-- sort select * from ssq_3 where id in (select ssq_2.id from ssq_2);
-- sort select * from ssq_3 where id not in (select ssq_2.id from ssq_2);
--echo 3. error
select * from ssq_1 where col1 = (select ssq_2.col2 from ssq_2);
select * from ssq_1 where col1 = (select * from ssq_2);
select * from ssq_1 where col1 in (select * from ssq_2);
select * from ssq_1 where col1 not in (select * from ssq_2);
\ No newline at end of file
-- echo initialization
create table text_table(id int, info text);
-- echo 1. insert
insert into text_table values (1,'this is a very very long string');
insert into text_table values (2,'this is a very very long string2');
insert into text_table values (3,'this is a very very long string3');
-- sort select * from text_table;
-- echo 2. condition
delete from text_table where id=1;
-- sort select * from text_table;
-- echo 3. update
UPDATE text_table set info='a tmp data' where id = 2;
-- sort select * from text_table;
-- echo 4. boundary test with length 4096
insert into text_table values (4,'this is a very very long string pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad1');
-- sort select * from text_table;
insert into text_table values (5,'this is a very very long string pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad pad1 pad pad pad pad');
-- sort select * from text_table;
-- echo initialization
CREATE TABLE unique_table(id int, col1 int, col2 int);
INSERT INTO unique_table VALUES (1,1,1);
-- echo 1. unique test
CREATE UNIQUE INDEX index_id on unique_table(id);
INSERT INTO unique_table VALUES (2,1,1);
CREATE UNIQUE INDEX index_id on unique_table(id);
INSERT INTO unique_table VALUES (3,2,1);
INSERT INTO unique_table VALUES (1,2,1);
-- echo 2. select
-- sort SELECT * FROM unique_table;
\ No newline at end of file
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册