MySQL 합집합, 교집합, 차집합, 대칭차

(MySQL 차집합에서 넘어옴)
MySQL 집합 연산
MySQL 합집합, 교집합, 차집합, 대칭차
SQL 합집합, 교집합, 차집합, 대칭차

1 테스트 환경[ | ]

  • tableA의 원소는 A, B, C, D
  • tableB의 원소는 C, D, E, F
테이블 생성 및 데이터 입력
sql
Copy
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 합집합[ | ]

 

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

3 교집합[ | ]

 

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

4 차집합[ | ]

 

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

5 대칭차집합[ | ]

 

sql
Copy
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
sql
Copy
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 참고[ | ]

편집자 221.151.188.11 J Jmnote Jmnote bot 59.14.132.129 14.52.241.42
  • CentOS MySQL 설치
    RHEL5.x 버전에서 MySQL-5.5.45 버전 설치시, /usr/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data 와 같이 설정해 주지 않으면 정상 동작하지 않는 경우가 있었습니다. 확인 바랍니다.
  • MySQL BigDump
    'MySQL server has gone away'는 백업본 전체의 크기가 크다기 보다는, 특정 쿼리문 1개의 크기가 너무 커서 처리를 못하는 거라서, 이런 도구로 해결하기는 어려울 것 같습니다.J Jmnote
  • MySQL STRICT TRANS TABLES
    @Jmnote 감사합니다.~ John Jeong
  • MySQL 외래키 옵션 변경
    진짜 필요한 거였는데 이런걸 이제야 알다니 정말 감사합니다. 문태부
  • MySQL 컬럼명으로 테이블 찾기
    회사 가서 쓰기 좋은 코드 1추 Stly3466