홈으로 | 무료회원가입 | 아이디/비번찾기
추천음악방송
[MySQL] Union 사용법. 여러 테이블의 같은 값을 한번 쿼리로 추출하기
10년 전
MySQL 등의 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재는 같은 성격의 값을 한번의 쿼리로 추출할 수 있도록 돕는다.


예를 들어 Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용하면 한번의 쿼리로 간단하게 정보를 추출할 수 있다.

Union을 사용할 때 주의할 점.

- 대응하는 필드의 이름이 같아야 한다. 같지 않다면 AS 를 사용하여 같게 만든다.
- 대응되는 각 필드의 타입이 같아야 한다.



■ 예제 테이블 정보
* Member 테이블
seq  u_name  u_email   etc  
1  개똥이  aa@aa.co.kr  ...
2  소똥이  bb@bb.co.kr  ...
3  말똥이  cc@cc.co.kr  ...

* Newsletter 테이블
letter_ seq  letter_name  letter_email   letter_etc  
1  홍길동  aa@aa.co.kr  ...
2  홍당무  dd@d.co.kr  ...
3  노찌롱  ee@ee.co.kr  ...

위의 2개 테이블에서 이메일을 추출해야 할 경우 union을 사용하면 간단하다.

이렇게 추출할 경우 중복되지 않은 유일한 정보 만을 추출하는 경우와 중복되더라도 모두 추출하는 경우가 있을 것이다.


■ 중복되지 않은 유일한 정보 만 추출하는 경우
Union 을 사용하는 경우 대응되는 각 필드의 이름을 같게 맞추어 쿼리를 한다.
( SELECT u_name, u_email FROM Member WHERE seq < 10 )
UNION
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newsletter WHERE letter_seq < 10 )

이렇게 쿼리를 하면 이름(user_name)과 이메일(user_email)이 같은 경우 하나의 값 만 추출하여 distinct 함수와 같은 효과를 준다.


■ 중복되더라도 모든 값을 추출하는 경우
만약 중복되더라도 모든 정보를 추출해야 한다면 Union ALL 연산자를 이용하면 된다.
( SELECT u_name, u_email FROM Member WHERE seq < 10 )
UNION ALL
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newsletter WHERE letter_seq < 10 )

UNION ALL 연산자를 이용하면 간단하게 처리가 가능하다.


UNION을 하면 결과가 테이블에 종속되는 것이 아니다. 그러므로 결과를 정렬을 해야 한다면 쿼리의 끝에 정렬을 추가하면 된다.
( SELECT u_name, u_email FROM Member WHERE seq < 10 )
UNION
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newsletter WHERE letter_seq < 10 )
ORDER BY u_email
추천추천 : 544 추천 목록
번호 제목
3,025
 윈도우10 시스템파일 손상 (초간단 오류 복구방법!!)
3,024
 PHP 파일 존재 여부 파악하기(로컬 파일 존재 및 원격지 파일 존재)
3,023
 [CSS] 박스 세로 가운데 중앙 정렬 6가지
3,022
 CSS Layout 수평 & 수직 정렬
3,021
 여러 도메인들 간 쿠키 공유하기
3,020
 태그 사이에 있는 텍스트를 추출
3,019
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,018
 쿠키 생성,가져오기,삭제
3,017
 사용자 함수 모음
3,016
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,015
 [HTML5] <video> - DOM으로 제어하기
3,014
 HTML5 video 태그에서 영상 좌우반전
3,013
 PHP - 특정 태그 및 문자열 추출, 제거
3,012
 [PHP] define과 defined의 차이
3,011
 우클릭 완벽차단 스크립트
3,010
 iframe 높이 100% 맞추기
3,009
 curl 함수를 이용한 HTTP REFERER 변경
3,008
 윈도우10 시스템 파일 및 Dism 검사
3,007
 텍스트 줄바꿈, 글자자르기 CSS
3,006
 jQuery Mobile에서 유용한 코드 10가지.
3,005
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,004
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,003
 [jQuery] jQuery Quick API
3,002
 [ transition ] 링크 hover 색상 변화 속도 조절
3,001
 PHP 5.3.0 에서 사라진 함수들 대체
목록
뮤직트로트 부산광역시 부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.