mysql union comprehensive tutorial with union examples
이 자습서에서는 MySQL UNION 명령, 해당 유형, Union 대 Union All, 2 개 이상의 쿼리에서 데이터를 결합하는 예를 설명합니다.
MySQL UNION은 여러 SELECT 쿼리의 결과를 단일 결과 집합으로 결합하는 데 사용됩니다. SELECT 쿼리에 모든 복잡한 쿼리 / 작업을 포함하고 다른 SELECT 문과 UNION을 수행하여 결합 된 결과를 생성 할 수도 있습니다.
어려운 상황에 대처하는 방법
UNION 문의 기본 특성은 결과 행 집합에서 중복 항목 또는 행을 제거하는 것이지만 UNION ALL 절을 사용하여 중복 레코드를 가져 오는 방법도 제공합니다.
학습 내용 :
집합 이론을 통한 UNION 이해
UNION 운영은 SET 이론의 원리를 통해 매우 잘 이해할 수 있습니다.
아래 집합으로 표시된 테이블 A와 B가 있고 중복 데이터가 있다고 가정합니다 (또는 완전히 관련이 없을 수도 있음). UNION은 두 테이블의 데이터 조합을 포함합니다.
세트 A와 B에 몇 가지 공통 요소가있는 예를 살펴 보겠습니다. UNION에는 중복 값이 생략 된 세트 A 및 B의 모든 값이 포함됩니다.
이제 집합 A와 B가 서로 분리되어 있고 공통 요소를 포함하지 않으면 어떻게 될까요? 여기서도 UNION은 동일한 결과를 반환합니다.
집합 사이에 겹치는 요소가 있고 결과 집합에도 중복 값이 나타나도록하는 시나리오에 대해 설명하겠습니다.
MySQL은 아래 이미지와 같이 UNION ALL 옵션을 사용하여이를 수행하는 방법을 제공합니다.
MySQL UNION이 해결하는 문제
MySQL UNION은 2 개 이상의 테이블에 유사한 데이터가 있고 개별 테이블에 대해 SELECT 문을 실행하는 대신 두 테이블에 포함 된 데이터의 결합 된보기를 보려는 경우에 사용됩니다.
예를 들면 – 두 개의 테이블이 있다고 가정합니다. 종업원 과 학생. 그리고 당신은 모든 직원과 학생의 이름, 나이, 생년월일을 알고 싶어하는 사람 데이터베이스를 작업하고 있습니다.
UNION이 없으면 두 테이블에 대해 별도의 SELECT 쿼리를 실행 한 다음 얻은 결과 집합으로 원하는 계산을 수행해야합니다.
MySQL UNION 구문
아래 쿼리는 2 개 이상의 SELECT 문의 UNION을 반환합니다.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
구문의 다른 구성 요소를 살펴 보겠습니다.
- 결과 행 집합을 얻기 위해 여러 SELECT 쿼리를 UNION과 결합 할 수 있음을 알 수 있습니다.
- 열 이름 및 데이터 유형 : 결합하려는 열의 데이터 유형이 동일하거나 호환되어야한다는 점을 이해하는 것이 중요합니다. 예를 들면 : column1이 STRING 인 경우 column3도 STRING (또는 STRING 호환 가능)이어야합니다.
- 열 이름과 위치는 UNION 쿼리의 첫 번째 SELECT 문에서 결정됩니다. 예를 들어, 위의 구문에서 : column1 및 column2는 결과 집합의 헤더 열로 이름이 지정되고 column3 및 column4의 값은 각각 column1 및 column2에 매핑됩니다.
- UNION 쿼리의 결과는 기본적으로 중복 항목을 제거합니다. 예를 들면 이 경우 정확히 일치하고 column1 및 column2에 대해 동일한 값을 가진 중복 항목이있는 경우 해당 행은 결과 집합에서 생략됩니다.
중복이 필요한 경우 UNION과 함께 'ALL'옵션을 사용할 수 있습니다.
사용법 뚜렷한 기본적으로 내포되어 있습니다. 가독성을 높이기 위해 명시 적으로 지정할 수도 있습니다.
UNION 쿼리의 샘플 예를 살펴 보겠습니다.
직원과 학생이라는 두 개의 테이블이 각각 개인 정보를 가지고 있다고 가정합니다.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
이제 다음과 같이 두 테이블에 더미 데이터를 입력합니다.
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
위에서 볼 수 있듯이 이름, 나이 및 생년월일에 대해 동일한 속성을 가진 행을 의도적으로 추가했습니다.
이제 UNION 명령을 사용하여이 두 테이블의 데이터를 결합하는 방법을 살펴 보겠습니다. 두 테이블 모두에서 사용자 이름과 나이를 쿼리합니다.
단순 UNION
질문:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
결과에 9 개의 레코드가 표시됩니다 (위의 쿼리에서 중복 항목이 생략되었음을 의미 함).
산출:
이름 | 나이 |
---|---|
이안 | 26 |
대런 | 32 |
아비 섹 | 28 |
아밋 | 30 |
스티븐 | 40 |
Kartik | 이십 |
아카 쉬 | 22 |
셜리 | 19 |
조아나 | 이십 일 |
UNION ALL과 UNION
ALL 절과 함께 UNION을 사용하면 중복 항목도 표시됩니다.
질문:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
산출:
이름 | 나이 |
---|---|
이안 | 26 |
대런 | 32 |
아비 섹 | 28 |
아밋 | 30 |
스티븐 | 40 |
Kartik | 이십 |
아카 쉬 | 22 |
셜리 | 19 |
조아나 | 이십 일 |
Kartik | 이십 |
UNION With Condition
30 세 미만의 직원과 25 세 미만의 학생의 데이터를 원하는 SELECT 문에 조건을 추가해 보겠습니다.
질문:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
산출:
이름 | 나이 |
---|---|
아밋 | 30 |
아비 섹 | 28 |
Kartik | 이십 |
아카 쉬 | 22 |
셜리 | 19 |
조아나 | 이십 일 |
위에서 볼 수 있듯이 결과 집합에는 검증 된 개별 SELECT 조건과 결합 된 결과가 포함됩니다.
UNION 결과 주문
UNION 쿼리의 결과는 기본적으로 순서가 지정되지 않습니다.
결과 집합에 존재하는 열을 기준으로 정렬하기 위해 UNION 명령 끝에 ORDER BY 절을 지정할 수 있습니다.
동일한 직원 / 학생 데이터를 사용하고 UNION 결과를 연령별로 오름차순으로 정렬 해 보겠습니다.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
산출:
이름 | 나이 |
---|---|
셜리 | 19 |
Kartik | 이십 |
조아나 | 이십 일 |
아카 쉬 | 22 |
이안 | 26 |
아비 섹 | 28 |
대런 | 32 |
스티븐 | 40 |
위의 결과 집합은 나이 값에 따라 오름차순으로 정렬됩니다. 열 별칭을 사용하여 ORDER BY 절의 열을 참조 할 수도 있습니다.
예를 들면 : – 아래와 같은 쿼리도 동일한 결과를 생성합니다.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
열 이름 대신 열 위치 만 언급하여 ORDER BY 절을 사용하는 또 다른 방법이 있습니다.
예를 들면 : 위의 UNION 쿼리에서 이름과 나이를 선택하여 이러한 열이 각각 위치 1과 2에 있음을 의미합니다.
따라서 ORDER BY age를 사용하려면 실제 열 이름 대신 위치를 지정하면됩니다.
따라서 아래 쿼리도 동일한 결과를 생성합니다.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION 대 UNION ALL
MySQL은 UNION의 두 가지 변형을 제공합니다. UNION DISTINCT 과 UNION ALL
명시되지 않은 경우에도 DISTINCT는 기본적으로 내포되어 있습니다.
둘 다의 주요 차이점은 UNION ALL을 사용하면 중복 행을 결합하고 반환 할 수있는 반면 UNION은 중복을 제거하는 결합 된 행만 반환합니다.
아래 표는 세부 사항을 설명합니다.
매개 변수 | 노동 조합 | UNION ALL |
---|---|---|
정의 | UNION DISTINCT와 동일-결과를 반환하는 동안 데이터의 중복 행을 무시합니다. | 중복을 포함한 모든 행을 반환합니다. |
통사론 | {table1}에서 {columnList} 선택 노동 조합 {table2}에서 {columnList} 선택 | {table1}에서 {columnList} 선택 UNION ALL {table2}에서 {columnList} 선택 |
데이터 요구 사항 | 결합 된 데이터는 유사한 데이터 유형을 가져야하며 여러 테이블에서 가져올 때 동일한 순서로 가져와야합니다. | UNION과 동일 |
자주 묻는 질문
Q # 1) Union이 JOIN보다 빠르나요?
대답: UNION과 JOIN은 거의 두 가지 목적으로 사용됩니다.
기술적으로 말하면 UNION은 개별 SELECT 문에서 데이터 행을 연결하기 때문에 JOIN (특히 대규모 데이터 세트의 경우)보다 훨씬 빠릅니다.
Q # 2) UNION ALL 연산자는 무엇입니까?
대답: UNION과 유사하게 UNION ALL 연산자는 2 개의 SELECT 쿼리간에 UNION을 반환하지만 중복 된 행 / 항목도 포함된다는 차이점이 있습니다.
Q # 3) UNION과 JOIN의 차이점은 무엇인가요?
대답: UNION 및 JOIN은 둘 이상의 테이블에서 데이터를 결합하는 데 사용됩니다. 그러나 얻은 결과 집합과 데이터를 가져 오는 방식에는 큰 차이가 있습니다.
JOIN과 UNION의 유사점과 차이점은 아래 표에 나와 있습니다.
노동 조합 | 어울리다 |
---|---|
여러 테이블의 데이터 결합 | 여러 테이블의 데이터 결합 |
데이터를 조합하거나 결합하는 데 특별한 조건이 필요하지 않습니다. | JOIN은 결과 집합에 들어오는 데이터의 유효성을 검사하는 데 필요한 JOIN 조건에서 작동합니다. |
다른 테이블의 데이터는 결과 세트의 다른 행으로 간주됩니다. | 다른 테이블의 데이터는 단일 행으로 결합됩니다. 예를 들어 결과 집합의 행에는 JOIN 조건 및 SELECT 쿼리에 따라 table1의 2 개 열, 테이블 2의 3 개 열 등이 포함될 수 있습니다. |
UNION은 간단하고 간단합니다. | JOINS에는 복잡한 조건이 필요하며 필요에 따라 INNER / OUTER 등과 같은 여러 유형의 조인을 사용할 수 있습니다. |
결론
이 자습서에서는 MySQL UNION을 사용하여 2 개 이상의 SELECT 문의 데이터를 결합하는 방법을 배웠습니다.
UNION 문은 서로 다른 테이블의 큰 집합에서 유사한 데이터를 수집 한 다음 결합 된 데이터에 대한 분석을 실행하는 데 매우 유용합니다.
UNION 명령은 또한 중복 레코드를 가져올 수있는 ALL 절을 지원합니다.