Teradata-조인
조인은 둘 이상의 테이블에서 레코드를 결합하는 데 사용됩니다. 테이블은 이러한 테이블의 공통 열 / 값을 기반으로 조인됩니다.
다양한 유형의 조인을 사용할 수 있습니다.
- 내부 조인
- 왼쪽 외부 결합
- 오른쪽 외부 결합
- 전체 외부 결합
- 셀프 조인
- 교차 결합
- 데카르트 생산 결합
내부 조인
내부 조인은 여러 테이블의 레코드를 결합하고 두 테이블에있는 값을 반환합니다.
통사론
다음은 INNER JOIN 문의 구문입니다.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
예
다음 직원 테이블 및 급여 테이블을 고려하십시오.
직원 아니요 | 이름 | 성 | JoinedDate | 부서 번호 | 생일 |
---|---|---|---|---|---|
101 | 마이크 | 제임스 | 2005 년 3 월 27 일 | 1 | 1980 년 1 월 5 일 |
102 | 로버트 | 윌리엄스 | 2007 년 4 월 25 일 | 2 | 1983 년 3 월 5 일 |
103 | 베드로 | 폴 | 2007 년 3 월 21 일 | 2 | 1983 년 4 월 1 일 |
104 | 알렉스 | 스튜어트 | 2008 년 2 월 1 일 | 2 | 1984 년 11 월 6 일 |
105 | 로버트 | 제임스 | 2008 년 1 월 4 일 | 삼 | 1984 년 12 월 1 일 |
직원 아니요 | 심한 | 공제 | 순이익 |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
다음 쿼리는 EmployeeNo 공통 열에서 Employee 테이블과 Salary 테이블을 조인합니다. 각 테이블에는 별칭 A와 B가 할당되고 열은 올바른 별칭으로 참조됩니다.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
위 쿼리를 실행하면 다음과 같은 레코드를 반환합니다. 직원 105는 Salary 테이블에 일치하는 레코드가 없기 때문에 결과에 포함되지 않습니다.
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
외부 조인
LEFT OUTER JOIN 및 RIGHT OUTER JOIN도 여러 테이블의 결과를 결합합니다.
LEFT OUTER JOIN 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드 만 반환합니다.
RIGHT OUTER JOIN 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 행만 반환합니다.
FULL OUTER JOINLEFT OUTER 및 RIGHT OUTER JOINS의 결과를 결합합니다. 조인 된 테이블에서 일치하는 행과 일치하지 않는 행을 모두 반환합니다.
통사론
다음은 OUTER JOIN 문의 구문입니다. LEFT OUTER JOIN, RIGHT OUTER JOIN 또는 FULL OUTER JOIN의 옵션 중 하나를 사용해야합니다.
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
예
LEFT OUTER JOIN 쿼리의 다음 예를 고려하십시오. Employee 테이블의 모든 레코드와 Salary 테이블의 일치하는 레코드를 반환합니다.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
위 쿼리가 실행되면 다음과 같은 출력이 생성됩니다. 직원 105의 경우 NetPay 값은 Salary 테이블에 일치하는 레코드가 없기 때문에 NULL입니다.
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
크로스 조인
교차 조인은 왼쪽 테이블의 모든 행을 오른쪽 테이블의 모든 행에 조인합니다.
통사론
다음은 CROSS JOIN 문의 구문입니다.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay
FROM
Employee A
CROSS JOIN
Salary B
WHERE A.EmployeeNo = 101
ORDER BY B.EmployeeNo;
위 쿼리가 실행되면 다음과 같은 출력이 생성됩니다. Employee 테이블의 EmployeeNo 101은 Salary Table의 모든 레코드와 결합됩니다.
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000