"MySQL 합집합, 교집합, 차집합, 대칭차"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-<source +<syntaxhighlight , -</source> +</syntaxhighlight>))
 
(사용자 5명의 중간 판 10개는 보이지 않습니다)
8번째 줄: 8번째 줄:


;테이블 생성 및 데이터 입력
;테이블 생성 및 데이터 입력
<source lang='sql'>
<syntaxhighlight lang='sql'>
CREATE TABLE tableA (str varchar(8), PRIMARY KEY (str));
CREATE TABLE tableA (str varchar(8), PRIMARY KEY (str));
CREATE TABLE tableB (str varchar(8), PRIMARY KEY (str));
CREATE TABLE tableB (str varchar(8), PRIMARY KEY (str));
INSERT INTO tableA (str) VALUES ('A'), ('B'), ('C'), ('D');
INSERT INTO tableA (str) VALUES ('A'), ('B'), ('C'), ('D');
INSERT INTO tableB (str) VALUES ('C'), ('D'), ('E'), ('F');
INSERT INTO tableB (str) VALUES ('C'), ('D'), ('E'), ('F');
</source>
</syntaxhighlight>


==합집합==
==합집합==
https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Venn0111.svg/120px-Venn0111.svg.png
https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Venn0111.svg/120px-Venn0111.svg.png
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT str FROM tableA
SELECT str FROM tableA
UNION
UNION
27번째 줄: 27번째 줄:
-- E
-- E
-- F
-- F
</source>
</syntaxhighlight>
#넘겨주기 [[]]


==교집합==
==교집합==
https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Venn0001.svg/120px-Venn0001.svg.png
https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Venn0001.svg/120px-Venn0001.svg.png
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT a.str FROM tableA a, tableB b WHERE a.str = b.str;
SELECT a.str FROM tableA a, tableB b WHERE a.str = b.str;
-- C
-- C
-- D
-- D
</source>
</syntaxhighlight>


==[[차집합]]==
==[[차집합]]==
https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Venn0100.svg/120px-Venn0100.svg.png
https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Venn0100.svg/120px-Venn0100.svg.png
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT str FROM tableA WHERE str NOT IN (
SELECT str FROM tableA WHERE str NOT IN (
SELECT DISTINCT str FROM tableB
SELECT DISTINCT str FROM tableB
46번째 줄: 45번째 줄:
-- A
-- A
-- B
-- B
</source>
</syntaxhighlight>
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT a.str FROM tableA a LEFT JOIN tableB b ON a.str = b.str
SELECT a.str FROM tableA a LEFT JOIN tableB b ON a.str = b.str
WHERE b.str IS NULL;
WHERE b.str IS NULL;
-- A
-- A
-- B
-- B
</source>
</syntaxhighlight>


==[[대칭차집합]]==
==[[대칭차집합]]==
https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Venn0110.svg/120px-Venn0110.svg.png
https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Venn0110.svg/120px-Venn0110.svg.png
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT str FROM (
SELECT str FROM (
SELECT str FROM tableA
SELECT str FROM tableA
67번째 줄: 66번째 줄:
-- E
-- E
-- F
-- F
</source>
</syntaxhighlight>
<source lang='sql'>
<syntaxhighlight lang='sql'>
SELECT str FROM tableA WHERE str NOT IN ( SELECT DISTINCT str FROM tableB )
SELECT str FROM tableA WHERE str NOT IN ( SELECT DISTINCT str FROM tableB )
UNION ALL
UNION ALL
SELECT str FROM tableB WHERE str NOT IN ( SELECT DISTINCT str FROM tableA )
SELECT str FROM tableB WHERE str NOT IN ( SELECT DISTINCT str FROM tableA )
</source>
</syntaxhighlight>
 


==같이 보기==
==같이 보기==
*[[PHP 집합 연산]]
* [[PHP 집합 연산]]
*[[UNION, UNION ALL]] ★
* [[UNION, UNION ALL]] ★
*[[LEFT JOIN]]
* [[LEFT JOIN]]
*[[합집합, 교집합]]
* [[합집합, 교집합]]
*[[차집합]]
* [[차집합]]
*[[대칭차]]
* [[대칭차]]
*[[MySQL 곱집합]]
* [[MySQL 곱집합]]
* [[함수 합집합, 교집합, 차집합, 대칭차]]


==참고 자료==
==참고==
*http://phpschool.com/link/tipntech/42371
*http://phpschool.com/link/tipntech/42371


[[분류: MySQL]]
[[분류: MySQL]]
[[분류: 집합]]
[[분류: 집합]]

2021년 7월 14일 (수) 13:45 기준 최신판

MySQL 집합 연산
MySQL 합집합, 교집합, 차집합, 대칭차
SQL 합집합, 교집합, 차집합, 대칭차

1 테스트 환경[ | ]

  • tableA의 원소는 A, B, C, D
  • tableB의 원소는 C, D, E, F
테이블 생성 및 데이터 입력
CREATE TABLE tableA (str varchar(8), PRIMARY KEY (str));
CREATE TABLE tableB (str varchar(8), PRIMARY KEY (str));
INSERT INTO tableA (str) VALUES ('A'), ('B'), ('C'), ('D');
INSERT INTO tableB (str) VALUES ('C'), ('D'), ('E'), ('F');

2 합집합[ | ]

 

SELECT str FROM tableA
UNION
SELECT str FROM tableB;
-- A
-- B
-- C
-- D
-- E
-- F

3 교집합[ | ]

 

SELECT a.str FROM tableA a, tableB b WHERE a.str = b.str;
-- C
-- D

4 차집합[ | ]

 

SELECT str FROM tableA WHERE str NOT IN (
	SELECT DISTINCT str FROM tableB
); 
-- A
-- B
SELECT a.str FROM tableA a LEFT JOIN tableB b ON a.str = b.str
WHERE b.str IS NULL;
-- A
-- B

5 대칭차집합[ | ]

 

SELECT str FROM (
	SELECT str FROM tableA
	UNION ALL
	SELECT str FROM tableB
) AS tmp
GROUP BY str HAVING COUNT(*)=1
-- A
-- B
-- E
-- F
SELECT str FROM tableA WHERE str NOT IN ( SELECT DISTINCT str FROM tableB )
UNION ALL
SELECT str FROM tableB WHERE str NOT IN ( SELECT DISTINCT str FROM tableA )


6 같이 보기[ | ]

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}