1# 2002 May 24 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# This file implements regression tests for SQLite library. 12# 13# This file implements tests for joins, including outer joins. 14# 15# $Id: join.test,v 1.27 2009/07/01 16:12:08 danielk1977 Exp $ 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20do_test join-1.1 { 21 execsql { 22 CREATE TABLE t1(a,b,c); 23 INSERT INTO t1 VALUES(1,2,3); 24 INSERT INTO t1 VALUES(2,3,4); 25 INSERT INTO t1 VALUES(3,4,5); 26 SELECT * FROM t1; 27 } 28} {1 2 3 2 3 4 3 4 5} 29do_test join-1.2 { 30 execsql { 31 CREATE TABLE t2(b,c,d); 32 INSERT INTO t2 VALUES(1,2,3); 33 INSERT INTO t2 VALUES(2,3,4); 34 INSERT INTO t2 VALUES(3,4,5); 35 SELECT * FROM t2; 36 } 37} {1 2 3 2 3 4 3 4 5} 38 39do_test join-1.3 { 40 execsql2 { 41 SELECT * FROM t1 NATURAL JOIN t2; 42 } 43} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 44do_test join-1.3.1 { 45 execsql2 { 46 SELECT * FROM t2 NATURAL JOIN t1; 47 } 48} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2} 49do_test join-1.3.2 { 50 execsql2 { 51 SELECT * FROM t2 AS x NATURAL JOIN t1; 52 } 53} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2} 54do_test join-1.3.3 { 55 execsql2 { 56 SELECT * FROM t2 NATURAL JOIN t1 AS y; 57 } 58} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2} 59do_test join-1.3.4 { 60 execsql { 61 SELECT b FROM t1 NATURAL JOIN t2; 62 } 63} {2 3} 64 65# ticket #3522 66do_test join-1.3.5 { 67 execsql2 { 68 SELECT t2.* FROM t2 NATURAL JOIN t1 69 } 70} {b 2 c 3 d 4 b 3 c 4 d 5} 71do_test join-1.3.6 { 72 execsql2 { 73 SELECT xyzzy.* FROM t2 AS xyzzy NATURAL JOIN t1 74 } 75} {b 2 c 3 d 4 b 3 c 4 d 5} 76do_test join-1.3.7 { 77 execsql2 { 78 SELECT t1.* FROM t2 NATURAL JOIN t1 79 } 80} {a 1 b 2 c 3 a 2 b 3 c 4} 81do_test join-1.3.8 { 82 execsql2 { 83 SELECT xyzzy.* FROM t2 NATURAL JOIN t1 AS xyzzy 84 } 85} {a 1 b 2 c 3 a 2 b 3 c 4} 86do_test join-1.3.9 { 87 execsql2 { 88 SELECT aaa.*, bbb.* FROM t2 AS aaa NATURAL JOIN t1 AS bbb 89 } 90} {b 2 c 3 d 4 a 1 b 2 c 3 b 3 c 4 d 5 a 2 b 3 c 4} 91do_test join-1.3.10 { 92 execsql2 { 93 SELECT t1.*, t2.* FROM t2 NATURAL JOIN t1 94 } 95} {a 1 b 2 c 3 b 2 c 3 d 4 a 2 b 3 c 4 b 3 c 4 d 5} 96 97 98do_test join-1.4.1 { 99 execsql2 { 100 SELECT * FROM t1 INNER JOIN t2 USING(b,c); 101 } 102} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 103do_test join-1.4.2 { 104 execsql2 { 105 SELECT * FROM t1 AS x INNER JOIN t2 USING(b,c); 106 } 107} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 108do_test join-1.4.3 { 109 execsql2 { 110 SELECT * FROM t1 INNER JOIN t2 AS y USING(b,c); 111 } 112} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 113do_test join-1.4.4 { 114 execsql2 { 115 SELECT * FROM t1 AS x INNER JOIN t2 AS y USING(b,c); 116 } 117} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 118do_test join-1.4.5 { 119 execsql { 120 SELECT b FROM t1 JOIN t2 USING(b); 121 } 122} {2 3} 123 124# Ticket #3522 125do_test join-1.4.6 { 126 execsql2 { 127 SELECT t1.* FROM t1 JOIN t2 USING(b); 128 } 129} {a 1 b 2 c 3 a 2 b 3 c 4} 130do_test join-1.4.7 { 131 execsql2 { 132 SELECT t2.* FROM t1 JOIN t2 USING(b); 133 } 134} {b 2 c 3 d 4 b 3 c 4 d 5} 135 136do_test join-1.5 { 137 execsql2 { 138 SELECT * FROM t1 INNER JOIN t2 USING(b); 139 } 140} {a 1 b 2 c 3 c 3 d 4 a 2 b 3 c 4 c 4 d 5} 141do_test join-1.6 { 142 execsql2 { 143 SELECT * FROM t1 INNER JOIN t2 USING(c); 144 } 145} {a 1 b 2 c 3 b 2 d 4 a 2 b 3 c 4 b 3 d 5} 146do_test join-1.7 { 147 execsql2 { 148 SELECT * FROM t1 INNER JOIN t2 USING(c,b); 149 } 150} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} 151 152do_test join-1.8 { 153 execsql { 154 SELECT * FROM t1 NATURAL CROSS JOIN t2; 155 } 156} {1 2 3 4 2 3 4 5} 157do_test join-1.9 { 158 execsql { 159 SELECT * FROM t1 CROSS JOIN t2 USING(b,c); 160 } 161} {1 2 3 4 2 3 4 5} 162do_test join-1.10 { 163 execsql { 164 SELECT * FROM t1 NATURAL INNER JOIN t2; 165 } 166} {1 2 3 4 2 3 4 5} 167do_test join-1.11 { 168 execsql { 169 SELECT * FROM t1 INNER JOIN t2 USING(b,c); 170 } 171} {1 2 3 4 2 3 4 5} 172do_test join-1.12 { 173 execsql { 174 SELECT * FROM t1 natural inner join t2; 175 } 176} {1 2 3 4 2 3 4 5} 177 178ifcapable subquery { 179 do_test join-1.13 { 180 execsql2 { 181 SELECT * FROM t1 NATURAL JOIN 182 (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as t3 183 } 184 } {a 1 b 2 c 3 d 4 e 5} 185 do_test join-1.14 { 186 execsql2 { 187 SELECT * FROM (SELECT b as 'c', c as 'd', d as 'e' FROM t2) as 'tx' 188 NATURAL JOIN t1 189 } 190 } {c 3 d 4 e 5 a 1 b 2} 191} 192 193do_test join-1.15 { 194 execsql { 195 CREATE TABLE t3(c,d,e); 196 INSERT INTO t3 VALUES(2,3,4); 197 INSERT INTO t3 VALUES(3,4,5); 198 INSERT INTO t3 VALUES(4,5,6); 199 SELECT * FROM t3; 200 } 201} {2 3 4 3 4 5 4 5 6} 202do_test join-1.16 { 203 execsql { 204 SELECT * FROM t1 natural join t2 natural join t3; 205 } 206} {1 2 3 4 5 2 3 4 5 6} 207do_test join-1.17 { 208 execsql2 { 209 SELECT * FROM t1 natural join t2 natural join t3; 210 } 211} {a 1 b 2 c 3 d 4 e 5 a 2 b 3 c 4 d 5 e 6} 212do_test join-1.18 { 213 execsql { 214 CREATE TABLE t4(d,e,f); 215 INSERT INTO t4 VALUES(2,3,4); 216 INSERT INTO t4 VALUES(3,4,5); 217 INSERT INTO t4 VALUES(4,5,6); 218 SELECT * FROM t4; 219 } 220} {2 3 4 3 4 5 4 5 6} 221do_test join-1.19.1 { 222 execsql { 223 SELECT * FROM t1 natural join t2 natural join t4; 224 } 225} {1 2 3 4 5 6} 226do_test join-1.19.2 { 227 execsql2 { 228 SELECT * FROM t1 natural join t2 natural join t4; 229 } 230} {a 1 b 2 c 3 d 4 e 5 f 6} 231do_test join-1.20 { 232 execsql { 233 SELECT * FROM t1 natural join t2 natural join t3 WHERE t1.a=1 234 } 235} {1 2 3 4 5} 236 237do_test join-2.1 { 238 execsql { 239 SELECT * FROM t1 NATURAL LEFT JOIN t2; 240 } 241} {1 2 3 4 2 3 4 5 3 4 5 {}} 242 243# ticket #3522 244do_test join-2.1.1 { 245 execsql2 { 246 SELECT * FROM t1 NATURAL LEFT JOIN t2; 247 } 248} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5 a 3 b 4 c 5 d {}} 249do_test join-2.1.2 { 250 execsql2 { 251 SELECT t1.* FROM t1 NATURAL LEFT JOIN t2; 252 } 253} {a 1 b 2 c 3 a 2 b 3 c 4 a 3 b 4 c 5} 254do_test join-2.1.3 { 255 execsql2 { 256 SELECT t2.* FROM t1 NATURAL LEFT JOIN t2; 257 } 258} {b 2 c 3 d 4 b 3 c 4 d 5 b {} c {} d {}} 259 260do_test join-2.2 { 261 execsql { 262 SELECT * FROM t2 NATURAL LEFT OUTER JOIN t1; 263 } 264} {1 2 3 {} 2 3 4 1 3 4 5 2} 265do_test join-2.3 { 266 catchsql { 267 SELECT * FROM t1 NATURAL RIGHT OUTER JOIN t2; 268 } 269} {1 {RIGHT and FULL OUTER JOINs are not currently supported}} 270do_test join-2.4 { 271 execsql { 272 SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d 273 } 274} {1 2 3 {} {} {} 2 3 4 {} {} {} 3 4 5 1 2 3} 275do_test join-2.5 { 276 execsql { 277 SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t1.a>1 278 } 279} {2 3 4 {} {} {} 3 4 5 1 2 3} 280do_test join-2.6 { 281 execsql { 282 SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t2.b IS NULL OR t2.b>1 283 } 284} {1 2 3 {} {} {} 2 3 4 {} {} {}} 285 286do_test join-3.1 { 287 catchsql { 288 SELECT * FROM t1 NATURAL JOIN t2 ON t1.a=t2.b; 289 } 290} {1 {a NATURAL join may not have an ON or USING clause}} 291do_test join-3.2 { 292 catchsql { 293 SELECT * FROM t1 NATURAL JOIN t2 USING(b); 294 } 295} {1 {a NATURAL join may not have an ON or USING clause}} 296do_test join-3.3 { 297 catchsql { 298 SELECT * FROM t1 JOIN t2 ON t1.a=t2.b USING(b); 299 } 300} {1 {cannot have both ON and USING clauses in the same join}} 301do_test join-3.4.1 { 302 catchsql { 303 SELECT * FROM t1 JOIN t2 USING(a); 304 } 305} {1 {cannot join using column a - column not present in both tables}} 306do_test join-3.4.2 { 307 catchsql { 308 SELECT * FROM t1 JOIN t2 USING(d); 309 } 310} {1 {cannot join using column d - column not present in both tables}} 311do_test join-3.5 { 312 catchsql { SELECT * FROM t1 USING(a) } 313} {1 {a JOIN clause is required before USING}} 314do_test join-3.6 { 315 catchsql { 316 SELECT * FROM t1 JOIN t2 ON t3.a=t2.b; 317 } 318} {1 {no such column: t3.a}} 319do_test join-3.7 { 320 catchsql { 321 SELECT * FROM t1 INNER OUTER JOIN t2; 322 } 323} {1 {unknown or unsupported join type: INNER OUTER}} 324do_test join-3.8 { 325 catchsql { 326 SELECT * FROM t1 INNER OUTER CROSS JOIN t2; 327 } 328} {1 {unknown or unsupported join type: INNER OUTER CROSS}} 329do_test join-3.9 { 330 catchsql { 331 SELECT * FROM t1 OUTER NATURAL INNER JOIN t2; 332 } 333} {1 {unknown or unsupported join type: OUTER NATURAL INNER}} 334do_test join-3.10 { 335 catchsql { 336 SELECT * FROM t1 LEFT BOGUS JOIN t2; 337 } 338} {1 {unknown or unsupported join type: LEFT BOGUS}} 339do_test join-3.11 { 340 catchsql { 341 SELECT * FROM t1 INNER BOGUS CROSS JOIN t2; 342 } 343} {1 {unknown or unsupported join type: INNER BOGUS CROSS}} 344do_test join-3.12 { 345 catchsql { 346 SELECT * FROM t1 NATURAL AWK SED JOIN t2; 347 } 348} {1 {unknown or unsupported join type: NATURAL AWK SED}} 349 350do_test join-4.1 { 351 execsql { 352 BEGIN; 353 CREATE TABLE t5(a INTEGER PRIMARY KEY); 354 CREATE TABLE t6(a INTEGER); 355 INSERT INTO t6 VALUES(NULL); 356 INSERT INTO t6 VALUES(NULL); 357 INSERT INTO t6 SELECT * FROM t6; 358 INSERT INTO t6 SELECT * FROM t6; 359 INSERT INTO t6 SELECT * FROM t6; 360 INSERT INTO t6 SELECT * FROM t6; 361 INSERT INTO t6 SELECT * FROM t6; 362 INSERT INTO t6 SELECT * FROM t6; 363 COMMIT; 364 } 365 execsql { 366 SELECT * FROM t6 NATURAL JOIN t5; 367 } 368} {} 369do_test join-4.2 { 370 execsql { 371 SELECT * FROM t6, t5 WHERE t6.a<t5.a; 372 } 373} {} 374do_test join-4.3 { 375 execsql { 376 SELECT * FROM t6, t5 WHERE t6.a>t5.a; 377 } 378} {} 379do_test join-4.4 { 380 execsql { 381 UPDATE t6 SET a='xyz'; 382 SELECT * FROM t6 NATURAL JOIN t5; 383 } 384} {} 385do_test join-4.6 { 386 execsql { 387 SELECT * FROM t6, t5 WHERE t6.a<t5.a; 388 } 389} {} 390do_test join-4.7 { 391 execsql { 392 SELECT * FROM t6, t5 WHERE t6.a>t5.a; 393 } 394} {} 395do_test join-4.8 { 396 execsql { 397 UPDATE t6 SET a=1; 398 SELECT * FROM t6 NATURAL JOIN t5; 399 } 400} {} 401do_test join-4.9 { 402 execsql { 403 SELECT * FROM t6, t5 WHERE t6.a<t5.a; 404 } 405} {} 406do_test join-4.10 { 407 execsql { 408 SELECT * FROM t6, t5 WHERE t6.a>t5.a; 409 } 410} {} 411 412do_test join-5.1 { 413 execsql { 414 BEGIN; 415 create table centros (id integer primary key, centro); 416 INSERT INTO centros VALUES(1,'xxx'); 417 create table usuarios (id integer primary key, nombre, apellidos, 418 idcentro integer); 419 INSERT INTO usuarios VALUES(1,'a','aa',1); 420 INSERT INTO usuarios VALUES(2,'b','bb',1); 421 INSERT INTO usuarios VALUES(3,'c','cc',NULL); 422 create index idcentro on usuarios (idcentro); 423 END; 424 select usuarios.id, usuarios.nombre, centros.centro from 425 usuarios left outer join centros on usuarios.idcentro = centros.id; 426 } 427} {1 a xxx 2 b xxx 3 c {}} 428 429# A test for ticket #247. 430# 431do_test join-7.1 { 432 execsql { 433 CREATE TABLE t7 (x, y); 434 INSERT INTO t7 VALUES ("pa1", 1); 435 INSERT INTO t7 VALUES ("pa2", NULL); 436 INSERT INTO t7 VALUES ("pa3", NULL); 437 INSERT INTO t7 VALUES ("pa4", 2); 438 INSERT INTO t7 VALUES ("pa30", 131); 439 INSERT INTO t7 VALUES ("pa31", 130); 440 INSERT INTO t7 VALUES ("pa28", NULL); 441 442 CREATE TABLE t8 (a integer primary key, b); 443 INSERT INTO t8 VALUES (1, "pa1"); 444 INSERT INTO t8 VALUES (2, "pa4"); 445 INSERT INTO t8 VALUES (3, NULL); 446 INSERT INTO t8 VALUES (4, NULL); 447 INSERT INTO t8 VALUES (130, "pa31"); 448 INSERT INTO t8 VALUES (131, "pa30"); 449 450 SELECT coalesce(t8.a,999) from t7 LEFT JOIN t8 on y=a; 451 } 452} {1 999 999 2 131 130 999} 453 454# Make sure a left join where the right table is really a view that 455# is itself a join works right. Ticket #306. 456# 457ifcapable view { 458do_test join-8.1 { 459 execsql { 460 BEGIN; 461 CREATE TABLE t9(a INTEGER PRIMARY KEY, b); 462 INSERT INTO t9 VALUES(1,11); 463 INSERT INTO t9 VALUES(2,22); 464 CREATE TABLE t10(x INTEGER PRIMARY KEY, y); 465 INSERT INTO t10 VALUES(1,2); 466 INSERT INTO t10 VALUES(3,3); 467 CREATE TABLE t11(p INTEGER PRIMARY KEY, q); 468 INSERT INTO t11 VALUES(2,111); 469 INSERT INTO t11 VALUES(3,333); 470 CREATE VIEW v10_11 AS SELECT x, q FROM t10, t11 WHERE t10.y=t11.p; 471 COMMIT; 472 SELECT * FROM t9 LEFT JOIN v10_11 ON( a=x ); 473 } 474} {1 11 1 111 2 22 {} {}} 475ifcapable subquery { 476 do_test join-8.2 { 477 execsql { 478 SELECT * FROM t9 LEFT JOIN (SELECT x, q FROM t10, t11 WHERE t10.y=t11.p) 479 ON( a=x); 480 } 481 } {1 11 1 111 2 22 {} {}} 482} 483do_test join-8.3 { 484 execsql { 485 SELECT * FROM v10_11 LEFT JOIN t9 ON( a=x ); 486 } 487} {1 111 1 11 3 333 {} {}} 488ifcapable subquery { 489 # Constant expressions in a subquery that is the right element of a 490 # LEFT JOIN evaluate to NULL for rows where the LEFT JOIN does not 491 # match. Ticket #3300 492 do_test join-8.4 { 493 execsql { 494 SELECT * FROM t9 LEFT JOIN (SELECT 44, p, q FROM t11) AS sub1 ON p=a 495 } 496 } {1 11 {} {} {} 2 22 44 2 111} 497} 498} ;# ifcapable view 499 500# Ticket #350 describes a scenario where LEFT OUTER JOIN does not 501# function correctly if the right table in the join is really 502# subquery. 503# 504# To test the problem, we generate the same LEFT OUTER JOIN in two 505# separate selects but with on using a subquery and the other calling 506# the table directly. Then connect the two SELECTs using an EXCEPT. 507# Both queries should generate the same results so the answer should 508# be an empty set. 509# 510ifcapable compound { 511do_test join-9.1 { 512 execsql { 513 BEGIN; 514 CREATE TABLE t12(a,b); 515 INSERT INTO t12 VALUES(1,11); 516 INSERT INTO t12 VALUES(2,22); 517 CREATE TABLE t13(b,c); 518 INSERT INTO t13 VALUES(22,222); 519 COMMIT; 520 } 521} {} 522 523ifcapable subquery { 524 do_test join-9.1.1 { 525 execsql { 526 SELECT * FROM t12 NATURAL LEFT JOIN t13 527 EXCEPT 528 SELECT * FROM t12 NATURAL LEFT JOIN (SELECT * FROM t13 WHERE b>0); 529 } 530 } {} 531} 532ifcapable view { 533 do_test join-9.2 { 534 execsql { 535 CREATE VIEW v13 AS SELECT * FROM t13 WHERE b>0; 536 SELECT * FROM t12 NATURAL LEFT JOIN t13 537 EXCEPT 538 SELECT * FROM t12 NATURAL LEFT JOIN v13; 539 } 540 } {} 541} ;# ifcapable view 542} ;# ifcapable compound 543 544ifcapable subquery { 545 # Ticket #1697: Left Join WHERE clause terms that contain an 546 # aggregate subquery. 547 # 548 do_test join-10.1 { 549 execsql { 550 CREATE TABLE t21(a,b,c); 551 CREATE TABLE t22(p,q); 552 CREATE INDEX i22 ON t22(q); 553 SELECT a FROM t21 LEFT JOIN t22 ON b=p WHERE q= 554 (SELECT max(m.q) FROM t22 m JOIN t21 n ON n.b=m.p WHERE n.c=1); 555 } 556 } {} 557 558 # Test a LEFT JOIN when the right-hand side of hte join is an empty 559 # sub-query. Seems fine. 560 # 561 do_test join-10.2 { 562 execsql { 563 CREATE TABLE t23(a, b, c); 564 CREATE TABLE t24(a, b, c); 565 INSERT INTO t23 VALUES(1, 2, 3); 566 } 567 execsql { 568 SELECT * FROM t23 LEFT JOIN t24; 569 } 570 } {1 2 3 {} {} {}} 571 do_test join-10.3 { 572 execsql { 573 SELECT * FROM t23 LEFT JOIN (SELECT * FROM t24); 574 } 575 } {1 2 3 {} {} {}} 576 577} ;# ifcapable subquery 578 579#------------------------------------------------------------------------- 580# The following tests are to ensure that bug b73fb0bd64 is fixed. 581# 582do_test join-11.1 { 583 drop_all_tables 584 execsql { 585 CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); 586 CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); 587 INSERT INTO t1 VALUES(1,'abc'); 588 INSERT INTO t1 VALUES(2,'def'); 589 INSERT INTO t2 VALUES(1,'abc'); 590 INSERT INTO t2 VALUES(2,'def'); 591 SELECT * FROM t1 NATURAL JOIN t2; 592 } 593} {1 abc 2 def} 594 595do_test join-11.2 { 596 execsql { SELECT a FROM t1 JOIN t1 USING (a)} 597} {1 2} 598do_test join-11.3 { 599 execsql { SELECT a FROM t1 JOIN t1 AS t2 USING (a)} 600} {1 2} 601do_test join-11.3 { 602 execsql { SELECT * FROM t1 NATURAL JOIN t1 AS t2} 603} {1 abc 2 def} 604do_test join-11.4 { 605 execsql { SELECT * FROM t1 NATURAL JOIN t1 } 606} {1 abc 2 def} 607 608do_test join-11.5 { 609 drop_all_tables 610 execsql { 611 CREATE TABLE t1(a COLLATE nocase, b); 612 CREATE TABLE t2(a, b); 613 INSERT INTO t1 VALUES('ONE', 1); 614 INSERT INTO t1 VALUES('two', 2); 615 INSERT INTO t2 VALUES('one', 1); 616 INSERT INTO t2 VALUES('two', 2); 617 } 618} {} 619do_test join-11.6 { 620 execsql { SELECT * FROM t1 NATURAL JOIN t2 } 621} {ONE 1 two 2} 622do_test join-11.7 { 623 execsql { SELECT * FROM t2 NATURAL JOIN t1 } 624} {two 2} 625 626do_test join-11.8 { 627 drop_all_tables 628 execsql { 629 CREATE TABLE t1(a, b TEXT); 630 CREATE TABLE t2(b INTEGER, a); 631 INSERT INTO t1 VALUES('one', '1.0'); 632 INSERT INTO t1 VALUES('two', '2'); 633 INSERT INTO t2 VALUES(1, 'one'); 634 INSERT INTO t2 VALUES(2, 'two'); 635 } 636} {} 637do_test join-11.9 { 638 execsql { SELECT * FROM t1 NATURAL JOIN t2 } 639} {one 1.0 two 2} 640do_test join-11.10 { 641 execsql { SELECT * FROM t2 NATURAL JOIN t1 } 642} {1 one 2 two} 643 644finish_test 645