일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- jqgrid 개념
- 정보처리기사 필기
- extends
- ModelMap
- JVM Heap
- MariaDB
- HTML
- Javascript
- 어노테이션
- Where
- View
- mysql
- 트랜잭션
- HTTP
- 개발자 이직
- 정처기 합격
- Class
- ResponseBody
- java
- Model
- ModelAndView
- spring
- 스프링
- 정보처리기사 합격
- SQL
- implements
- jqGrid
- 자바
- JQuery
- 제이큐그리드
- Today
- Total
크리스의 개발일기
[SQL] 카테시안 곱(Cartesian Product)이란? 본문
카테시안 곱(Cartesian Product)이란?
=> union(교집합)/ interction(합집합)
- From절에 2개 이상의 Table이 있을때 두 Table 사이에 유효 join 조건을 적지 않았을때 해당 테이블에 대한 모든 데이터를 전부 결합하여 Table에 존재하는 행 갯수를 곱한 만큼의 결과값이 반환되는 것이다.
쿼리본문제공
CREATE TABLE COMP (
COMP_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
COMP_NM VARCHAR(200) NULL COLLATE 'utf8_general_ci',
COMP_ADDR VARCHAR(300) NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (COMP_ID)
)
;
CREATE TABLE FACTORY (
COMP_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
FACTO_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
FACTO_NM VARCHAR(200) NULL COLLATE 'utf8_general_ci',
FACTO_ADDR VARCHAR(300) NULL COLLATE 'utf8_general_ci',
FACTO_TEL VARCHAR(40) NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (FACTO_ID, COMP_ID)
)
;
CREATE TABLE BUILDING (
COMP_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
FACTO_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
BUILD_ID VARCHAR(10) NOT NULL COLLATE 'utf8_general_ci',
BUILD_TEL VARCHAR(40) NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (COMP_ID, FACTO_ID, BUILD_ID)
)
;
INSERT INTO comp (
COMP_ID,
COMP_NM,
COMP_ADDR
) VALUES (
'AAA',
'회사AAAA',
'구파발'
);
INSERT INTO comp (
COMP_ID,
COMP_NM,
COMP_ADDR
) VALUES (
'BBB',
'회사BBBB',
'노량진'
);
INSERT INTO comp (
COMP_ID,
COMP_NM,
COMP_ADDR
) VALUES (
'CCC',
'회사CCCC',
'영등포'
);
--FACTORY에 삽입하기
"AAA" "A1" "공장1" "신촌" \N
"AAA" "B1" "공장2" "혜화" \N
"BBB" "C1" "공장3" "청담" \N
TABLE COMP
COMP_ID | COMP_NM | COMP_ADDR | |
1 | AAA | 회사AAAA | 구파발 |
2 | BBB | 회사BBB | 노량진 |
3 | CCC | 회사CCCC' | 영등포 |
TABLE FACTORY
COMP_ID | FACTO_ID | FACTO_NM | FACTO_ADDR | FACTO_TEL | |
1 | AAA | A1 | 공장1 | 신촌 | \N |
2 | AAA | B1 | 공장2 | 혜화 | \N |
3 | BBB | C1' | 공장3 | 청담 | \N |
=> 3 X 3 = 9개의 결과 출력
SELECT *
FROM comp A LEFT OUTER JOIN
factory B ON 1 = 1
;
위 커리 실행시 =>
"AAA" "회사AAAA" "구파발" "AAA" "A1" "공장1" "신촌" \N
"BBB" "회사BBBB" "노량진" "AAA" "A1" "공장1" "신촌" \N
"CCC" "회사CCCC" "영등포" "AAA" "A1" "공장1" "신촌" \N
"AAA" "회사AAAA" "구파발" "AAA" "B1" "공장2" "혜화" \N
"BBB" "회사BBBB" "노량진" "AAA" "B1" "공장2" "혜화" \N
"CCC" "회사CCCC" "영등포" "AAA" "B1" "공장2" "혜화" \N
"AAA" "회사AAAA" "구파발" "BBB" "C1" "공장3" "청담" \N
"BBB" "회사BBBB" "노량진" "BBB" "C1" "공장3" "청담" \N
"CCC" "회사CCCC" "영등포" "BBB" "C1" "공장3" "청담" \N
=>위의 같은경우 카테시안 곱 현상이 발생한다.
- 즉, 카테시안 곱은 join 쿼리 중에 WHERE 절에 기술하는 join 조건이 잘못 기술되었거나 아예 없을 경우 발생하는 현상입니다.
출처:
'Database > SQL' 카테고리의 다른 글
[SQL] WHERE절 1=1, 1=0 의미 (0) | 2020.11.10 |
---|---|
[SQL] 더미 데이터(Dummy data)란 무엇인가? (+프로시저 추가) (0) | 2020.11.09 |
[SQL]GROUP BY절, HAVING절 (0) | 2020.11.09 |
[SQL] 그룹 함수이란? (0) | 2020.11.09 |
[SQL]스칼라 서브쿼리란? (0) | 2020.11.09 |