Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Log 로그 테이블, volatile 휘발성 테이블, lookup 참조 테이블과 meta 메타 테이블은 join하여 검색할 수 있다.

Example

...

Code Block
languagesql
SELECT c.name FROM m$sys_tables t, m$sys_columns c WHERE t.id = c.table_id AND t.name = 'T1'
AND c.id NOT IN(0, 65534) ORDER BY c.name;

c.name                                   
--------------------------------------------
ADDR
ISTYPE
SRCIP                         
[3] row(s) selected.


GROUP BY, ORDER BY 와 AGGREGATION FUNCTION도 집계 함수도 사용 가능하다.

Example

Code Block
languagesql
Mach> SELECT t.name, COUNT(c.name) FROM m$sys_columns c, m$sys_tables t WHERE t.id = c.table_id GROUP BY t.name ORDER BY t.name;
t.name                                    count(c.name)
------------------------------------------------------------------
COMMON_TABLE                              5
DURATIONT                                 3
[2] row(s) selected.

...

JOIN 조건절이 없는 join 질의는 에러를 발생시킨다. 로그 테이블에 너무나 많은 데이터가 있기 때문에, join 조건절이 없는 질의의 속도는 예측할 수 없을 정도로 느리기 때문이다.

또한, 두개의 log 로그 테이블 join 은 join은 매우 성능이 느릴 수 있다. 그래서 데이터베이스를 설계할 때, de-normalization 을 역정규화(denormalization)를 고려하여 join이 발생하지 않도록 설계하는 것이 좋다.

...

Code Block
languagesql
Mach> CREATE TABLE log_table1(i1 INTEGER);
Created successfully.
Mach> INSERT INTO log_table1 VALUES(1);
1 row(s) inserted.
Mach> INSERT INTO log_table1 VALUES(20);
1 row(s) inserted.
Mach> INSERT INTO log_table1 VALUES(30);
1 row(s) inserted.


Mach>CREATE TABLE log_table2(i1 INTEGER);
Created successfully.
Mach> INSERT INTO log_table2 VALUES(1);
1 row(s) inserted.
Mach> INSERT INTO log_table2 VALUES(30);
1 row(s) inserted.
Mach> INSERT INTO log_table2 VALUES(50);
1 row(s) inserted.

Mach> SELECT log_table1.i1 FROM log_table1, log_table2;
[ERR-02101 : Error in joining tables. Cannot join without join predicate.]

Mach> SELECT log_table1.i1 FROM log_table1, log_table2 where log_table1.i1 = 1;
[ERR-02101 : Error in joining tables. Cannot join without join predicate.]

Mach> SELECT log_table1.i1 from log_table1, log_table2 WHERE log_table1.i1 = log_table2.i1;
i1
--------------
30
1
[2] row(s) selected.


Inner join

...

outer join

ANSI 타입의 INNER, LEFT OUTER, RIGHT OUTER join을 사용할 수 있으나 FULL OUTER JOIN은 사용할 수 없다.

...

Code Block
languagesql
SELECT t1.i1 t2.i1 FROM t1 LEFT OUTER JOIN t2 ON (t1.i1 = t2.i1) WHERE t2.i2 = 1;

위 질의는 where절의 t2.i2 = 1조건에  1 조건에 의해서 inner join 으로 변경되어 실행된다.