데이터베이스

데카르트곱(Descartes product) 또는 카티션 프로덕트(Cartesian product), CROSS JOIN

스윙스윙 2021. 8. 11. 13:17

■ 데카르트곱(Descartes product) 또는 카티션 프로덕트(Cartesian product), CROSS JOIN

 

데카르트곱 (Descartes product, Cartesian product)


임의의 두 집합 A와 B에 대해 x
A, yB인 모든 순서쌍 (x, y)로 이루어진 집합을 A와 B의 데카르트곱이라 하고, A×B로 표현한다
                 

              A × B = { (x, y) | xA, yB }


2013년 52번

정답 : 3번

차수 7, 카디날리티 9

 

-- SAMPLE SQL(오라클)

-- MY SQL 하고 문법이 달라요 ㅠㅠ

 

CREATE TABLE STU_52
(
  SNO CHAR(4)
, SNAME VARCHAR2(50) NOT NULL
, ADDR VARCHAR2(4)
, SCORE NUMBER
, DEPT CHAR(3)
)
;

ALTER TABLE STU_52
ADD CONSTRAINT STU_52_PK PRIMARY KEY (SNO);

INSERT INTO STU_52 VALUES ('9801', '홍길동', '서울', 80, '100');
INSERT INTO STU_52 VALUES ('9802', '김철수', '대전', 90, '200');
INSERT INTO STU_52 VALUES ('9803', '이순자', '강릉', 90, '100');
INSERT INTO STU_52 VALUES ('9805', '홍길동', '부산', 95, '200');
INSERT INTO STU_52 VALUES ('9806', '박남정', '서울', 65, '300');

COMMIT;

SELECT * FROM STU_52;

CREATE TABLE DEPT_52
(
  DNO CHAR(3)
, DNAME VARCHAR2(4) NOT NULL
)
;

ALTER TABLE DEPT_52
ADD CONSTRAINT DEPT_52_PK PRIMARY KEY (DNO);

INSERT INTO DEPT_52 VALUES ('100', '정통');
INSERT INTO DEPT_52 VALUES ('200', '전자');
INSERT INTO DEPT_52 VALUES ('300', '기계');

ALTER TABLE STU_52
ADD CONSTRAINT STU_52_FK FOREIGN KEY (DEPT) REFERENCES DEPT_52(DNO);

COMMIT;

SELECT * FROM DEPT_52;

SELECT * FROM STU_52 S, DEPT_52 D WHERE S.DEPT > '100';

 


2019년 68번

정답 : 4번

아무런 조인 조건이 없으므로 CROSS JOIN, 카티션 프로덕트(X)가 발생함

 

R의 카디날리티(튜플 수) 4와 S의 카디날리티 5가 곱하기 되어 COUNT(*)는 20이 됨