(SQLD) ★OUTER JOIN★INNER JOIN★카테시안★

1. 외부 조인

CREATE TABLE 고객 (고객번호 NUMBER PRIMARY KEY  , 고객명 VARCHAR2(9));
CREATE TABLE 주문 (주문번호 NUMBER PRIMARY KEY  , 고객번호 VARCHAR2(9) , 주문금액 VARCHAR2(9));

==> VARCHAR2(9) ==> 한글당 3바이트

INSERT INTO 고객 (고객번호, 고객명) VALUES (1, '김대원');
INSERT INTO 고객 (고객번호, 고객명) VALUES (2, '노영미');
INSERT INTO 고객 (고객번호, 고객명) VALUES (3, '김경진');
INSERT INTO 고객 (고객번호, 고객명) VALUES (4, '박하연');

INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2001, 1 ,  40000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2002, 2 ,  15000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2003, 2 ,  7000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2004, 2 ,  8000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2005, 2 ,  20000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2006, 3 ,  5000);
INSERT INTO 주문 (주문번호, 고객번호, 주문금액) VALUES (2007, 3 ,  9000);
SELECT * FROM 고객;

SELECT * FROM 주문;


고객 테이블

주문 테이블

SELECT *
FROM 고객 A, 주문 B
WHERE B.고객번호(+) = A.고객번호
AND B.주문금액(+) > 10000;


외부 조인

비고객(+) 테이블을 기준으로 주문 테이블을 조인합니다.

SELECT *
FROM 고객 A, 주문 B
WHERE B.고객번호 = A.고객번호(+);


외부 조인

SELECT SUM(B.주문금액) / COUNT (DISTINCT A.고객번호) AS R1
FROM 고객 A, 주문 B
WHERE B.고객번호(+) = A.고객번호
AND B.주문금액(+) > 10000;


2. 데카르트

CREATE TABLE T1 (C1 VARCHAR2(2)  , C2 VARCHAR2(2) );
CREATE TABLE T2 (C1 VARCHAR2(2)  , C2 VARCHAR2(2) );


INSERT INTO T1 (C1 , C2) VALUES (1, 'A');
INSERT INTO T1 (C1 , C2) VALUES (2, 'B');
INSERT INTO T1 (C1 , C2) VALUES (3, 'C');
INSERT INTO T1 (C1 , C2) VALUES (4, 'D');

INSERT INTO T2 (C1 , C2) VALUES (1, 'A');
INSERT INTO T2 (C1 , C2) VALUES (1, 'B');
INSERT INTO T2 (C1 , C2) VALUES (2, 'A');
INSERT INTO T2 (C1 , C2) VALUES (3, 'B');
INSERT INTO T2 (C1 , C2) VALUES (3, 'C');


T1 테이블

T2 타지

SELECT *
FROM T1 A , T2 B
WHERE A.C1 >=2 AND B.C2 IN('A' , 'C')


데카르트 곱

==> 조인 조건이 없으면 데카르트 곱 집합이 생성됩니다.

3. 내부 연결

CREATE TABLE T1 (C1 VARCHAR2(2) , C2 VARCHAR2(2));
CREATE TABLE T2 (C1 VARCHAR2(2) , C2 VARCHAR2(2));

INSERT INTO T1 (C1, C2) VALUES (1 ,'A');
INSERT INTO T1 (C1, C2) VALUES (2 ,'B');
INSERT INTO T1 (C1, C2) VALUES (3 ,'C');

INSERT INTO T2 (C1, C2) VALUES (1 ,1);
INSERT INTO T2 (C1, C2) VALUES (2 ,1);
INSERT INTO T2 (C1, C2) VALUES (3 ,1);
INSERT INTO T2 (C1, C2) VALUES (3 ,2);
INSERT INTO T2 (C1, C2) VALUES (4 ,1);


T1

T2

SELECT * FROM T1 A INNER JOIN T2 B
ON B.C1 = A.C1 WHERE A.C1 >=2;


==> INNER JOIN은 ON 절의 조건을 설명합니다.

==> 공통점을 쓰세요.