SQL 구문 에서 JOIN 의 용법 장면 분석
SQL 최고 경계 쓰기:SELECT*FROM 표 이름.물론 자조 다.SQL 구문 에서 JOIN 의 용법 을 탐구 하고 이 장면 을 겪 을 때 까지 끝까지 검증 하고 싶 어 진다.
장면
관계 형 데이터베이스 A 에서 표 TESTTB 01 과 TESTTB 02 는 빅 데이터 플랫폼 M(MaxCompute 빅 데이터 플랫폼)으로 이전 한다.TEST_TB 01 표 1000 만 개 기록,TESTTB 02 표 80 만 건 기록.
관계 형 데이터베이스 에서 TESTTB 01 과 TESTTB 02 에는 메 인 키 제약 이 있 습 니 다.추가 업무 데이터 가 생 겼 을 때 중복 데이터 삽입 이 존재 하지 않 습 니 다.그러나 데이터 가 빅 데이터 플랫폼 으로 이전 되면 빅 데이터 플랫폼 에서 메 인 키 제약 기능 이 없 기 때문이다.신규 업무 데이터 생 성 시 TESTTB 01 과 TESTTB 02 는 모두 중복 데 이 터 를 삽입 했다.
하나의 계산 임무 에서 TESTTB 01 과 TESTTB 02 는 한 필드 의 JOIN 연결 에 따라 결과 데 이 터 를 계 산 했 고 데 이 터 는 사용자 의 관계 형 데이터베이스 C 로 전송 되 었 다.C 데이터베이스 에 대응 하 는 표 의 공간 이 폭발 하고 경 보 를 감시 하 게 만 들 었 다.
이유:TESTTB 01 과 TESTTB 02 는 중복 데이터 가 있어 JOIN 으로 연결 한 후 10 억+개의 데 이 터 를 생 성 해 총 200 G+데 이 터 를 C 데이터베이스 로 직접 전송 했다.
그 때 는 사려 깊 지 못 해 순간 멍 해 졌 고,SQL 문장 속 조인 이 낯 설 어 졌 다.그래서 탐구 해서 기록 하려 고 합 니 다.
건축 표
TEST_TB 01 탭 문:
create table TEST_TB01
(
sensor_id BIGINT,
part_id BIGINT
)
COMMENT ' ';
TEST_TB 02 탭 문:
create table TEST_TB02
(
part_id BIGINT,
elem_id BIGINT
)
COMMENT ' ';
3.SQL 구문 에서 JOIN 을 사용 하여 중복 되 지 않 는 데이터 상황SQL 구문 에서 JOIN 을 사용 하여 중복 되 지 않 은 데이터 상황,즉 TESTTB 01 과 TESTTB 02 표 에는 중복 데이터 상황 이 없습니다.각각 JOIN,INNER JOIN,LEFT JOIN,LEFT OUTER JOIN,Right JOIN,FULL JOIN 검증 을 사용한다.
TEST 에서TB 01 데이터 삽입:
insert into TEST_TB01 (sensor_id,part_id) values(2101,9911);
insert into TEST_TB01 (sensor_id,part_id) values(2102,9912);
insert into TEST_TB01 (sensor_id,part_id) values(2103,9913);
insert into TEST_TB01 (sensor_id,part_id) values(2104,9914);
insert into TEST_TB01 (sensor_id,part_id) values(2105,9915);
TEST 에서TB 02 데이터 삽입:
insert into TEST_TB02 (part_id,elem_id) values(9911,8901);
insert into TEST_TB02 (part_id,elem_id) values(9912,8902);
insert into TEST_TB02 (part_id,elem_id) values(9913,8903);
insert into TEST_TB02 (part_id,elem_id) values(9916,8906);
TEST 보기TB 01 데이터:![](https://s1.md5.ltd/image/6892d8a723915255a21ff6d0643260c9.png)
TEST 보기TB 02 데이터:
![](https://s1.md5.ltd/image/9d97c422eb42e0b14d7797ef86ac3e6a.png)
1.SQL 에 조인 사용
TEST_TB 01 과 TESTTB 02 partid JOIN 연결 을 사용 하여 시계 두 개 만 되 돌려 줍 니 다(TESTTB 01 과 TESTTB 02)에서 연결 필드 가 같은 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/78dba59e569adb87764be70951737715.png)
2.SQL 에서 INNER JOIN 사용
TEST_TB 01 과 TESTTB 02 partid INNER JOIN 연결 을 사용 하여 시계 두 개 만 되 돌려 줍 니 다(TESTTB 01 과 TESTTB 02)에서 연결 필드 가 같은 기록.인 너 존 과 존 효 과 는 등가 다.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
INNER JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/e54820086b7171e0fe726c91bdf9da10.png)
3.SQL 에서 LEFT JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 왼쪽 JOIN 으로 연결,왼쪽 연결,왼쪽 테이블 되 돌리 기(TESTTB 01)의 모든 기록 및 오른쪽 표(TESTTB 02)에서 연결 필드 가 같은 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
LEFT JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/55c301c0310562b3ba9532f81f5d8482.png)
4.SQL 에서 LEFT OUTER JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 왼쪽 OUTER JOIN 연결,왼쪽 외부 연결 을 사용 하여 왼쪽 테이블 로 돌아 가기(TESTTB 01)의 모든 기록 및 오른쪽 표(TESTTB 02)에서 연결 필드 가 같은 기록.LEFT OUTER JOIN
레프 트 존 과 등가.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
LEFT OUTER JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/d71ede8158b1ea5a9a49c1e81439332b.png)
5.SQL 에서 Right JOIN 사용 하기
TEST_TB 01 과 TESTTB 02 partid 오른쪽 JOIN 으로 연결,오른쪽 연결,오른쪽 테이블 되 돌리 기(TESTTB 02)의 모든 기록 및 왼쪽 표(TESTTB 01)에서 연결 필드 가 같은 기록
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
RIGHT JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/25fee4b6f3024ae8910b9c5234d41057.png)
6.SQL 에서 FULL JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 는 FULL JOIN 연결,외부 연결 을 사용 하여 두 표 의 줄 을 되 돌려 줍 니 다:LEFT JOIN+Right JOIN 모든 줄 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
FULL JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/8a5a3e7fd0181747dfa9c38926c5d33e.png)
4.SQL 구문 에서 JOIN 을 사용 하면 중복 데이터 상황 이 있 습 니 다.
SQL 구문 에서 JOIN 을 사용 하면 반복 되 는 데이터 가 있 습 니 다.즉,TEST 입 니 다.TB 01 과 TESTTB 02 표 에는 중복 데이터 상황 이 있 습 니 다.각각 JOIN,INNER JOIN,LEFT JOIN,LEFT OUTER JOIN,Right JOIN,FULL JOIN 검증 을 사용한다.
TEST 에서TB 01 데이터 삽입:
insert into TEST_TB01 (sensor_id,part_id) values(2101,9911);
insert into TEST_TB01 (sensor_id,part_id) values(2102,9912);
insert into TEST_TB01 (sensor_id,part_id) values(2103,9913);
insert into TEST_TB01 (sensor_id,part_id) values(2104,9914);
insert into TEST_TB01 (sensor_id,part_id) values(2105,9915);
--
insert into TEST_TB01 (sensor_id,part_id) values(2102,9912);
insert into TEST_TB01 (sensor_id,part_id) values(2103,9913);
TEST 에서TB 02 데이터 삽입:
insert into TEST_TB02 (part_id,elem_id) values(9911,8901);
insert into TEST_TB02 (part_id,elem_id) values(9912,8902);
insert into TEST_TB02 (part_id,elem_id) values(9913,8903);
insert into TEST_TB02 (part_id,elem_id) values(9916,8906);
--
insert into TEST_TB02 (part_id,elem_id) values(9912,8902);
insert into TEST_TB02 (part_id,elem_id) values(9913,8903);
TEST 보기TB 01 데이터:![](https://s1.md5.ltd/image/b0bc7f24d6ec97477bcff867c85818dd.png)
TEST 보기TB 02 데이터:
![](https://s1.md5.ltd/image/7af0f670f27ace9394f2998a83dc207d.png)
1.SQL 에 조인 사용
TEST_TB 01 과 TESTTB 02 partid JOIN 연결 을 사용 하여 시계 두 개 만 되 돌려 줍 니 다(TESTTB 01 과 TESTTB 02)에서 연결 필드 가 같은 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/167d925a5f20e64ffdbe47cfdc1894e8.png)
2.SQL 에서 INNER JOIN 사용
TEST_TB 01 과 TESTTB 02 partid INNER JOIN 연결 을 사용 하여 시계 두 개 만 되 돌려 줍 니 다(TESTTB 01 과 TESTTB 02)에서 연결 필드 가 같은 기록.인 너 존 과 존 효 과 는 등가 다.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
INNER JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/430c6d936b17caf5f0088910358c33af.png)
3.SQL 에서 LEFT JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 왼쪽 JOIN 으로 연결,왼쪽 연결,왼쪽 테이블 되 돌리 기(TESTTB 01)의 모든 기록 및 오른쪽 표(TESTTB 02)에서 연결 필드 가 같은 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
LEFT JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/0eeb5291bb9bc4025a38f6270620b73c.png)
4.SQL 에서 LEFT OUTER JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 왼쪽 OUTER JOIN 연결,왼쪽 외부 연결 을 사용 하여 왼쪽 테이블 로 돌아 가기(TESTTB 01)의 모든 기록 및 오른쪽 표(TESTTB 02)에서 연결 필드 가 같은 기록.LEFT OUTER JOIN
레프 트 존 과 등가.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
LEFT OUTER JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/84684ec8949dd0a66c20c66d9eafb110.png)
5.SQL 에서 Right JOIN 사용 하기
TEST_TB 01 과 TESTTB 02 partid 오른쪽 JOIN 으로 연결,오른쪽 연결,오른쪽 테이블 되 돌리 기(TESTTB 02)의 모든 기록 및 왼쪽 표(TESTTB 01)에서 연결 필드 가 같은 기록
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
RIGHT JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/6e2204c673c71ae803390a27b8c81d17.png)
6.SQL 에서 FULL JOIN 사용
TEST_TB 01 과 TESTTB 02 partid 는 FULL JOIN 연결,외부 연결 을 사용 하여 두 표 의 줄 을 되 돌려 줍 니 다:LEFT JOIN+Right JOIN 모든 줄 기록.
SQL 구문:
SELECT
*
FROM
TEST_TB01 aa
FULL JOIN TEST_TB02 bb
ON aa.part_id = bb.part_id
ORDER BY aa.sensor_id ASC;
실행 결과:![](https://s1.md5.ltd/image/76e1f6243dcec9f7499ec66d7dee0df0.png)
5.SQL 에서 JOIN 을 사용 하면 중복 과 중복 되 지 않 는 데이터 의 차이 가 있 습 니 다.
SQL 구문 에서 JOIN 을 사용 하면 중복 데이터 상황 이 있 고 JOIN 을 사용 하여 연결 필드 와 같은 기록 에 부합 하 는 결과 집합 은 피리 칼 적 이 며 첫 번 째 표 의 줄 수 는 두 번 째 표 의 줄 수 를 곱 합 니 다.
해결 방법
1.먼저 가서 다시 조인 으로 연결
업무 규칙 에 따라 TESTTB 01 과 TESTTB 02 는 각각 제 인 연결 을 다시 사용 합 니 다.
2.조인 으로 연결 하고 무 게 를 빼 기
업무 규칙 에 따라 TESTTB 01 과 TESTTB 02 는 JOIN 연결 을 사용 하여 결과 집합 을 만 들 고 결과 집합 을 다시 만 듭 니 다.
3.건의
생산 환경,특히 데 이 터 량 이 많은 장면 에 서 는 첫 번 째 방식 을 추천 합 니 다.먼저 시 계 를 하나하나 재 구성 한 다음 에 JOIN 연결 을 사용 합 니 다.
7.관계 형 데이터베이스 검증 표 구조
이 예 는 DataWorks 환경(즉,MaxCompute 빅 데이터 플랫폼)에서 검 증 된 것 이다.즉,관계 형 데이터 베이스 에서 표 구조 차 이 를 제외 하고 모두 같다.
ORACLE 데이터베이스 에 표 문 구 를 만 듭 니 다:
create table TEST_TB01
(
sensor_id NUMBER(16),
part_id NUMBER(16)
);
create table TEST_TB02
(
part_id NUMBER(16),
elem_id NUMBER(16)
);
MySQL 데이터베이스 에 표 문 구 를 만 듭 니 다:
CREATE TABLE TEST_TB01
(
sensor_id BIGINT,
part_id BIGINT
);
CREATE TABLE TEST_TB02
(
part_id BIGINT,
elem_id BIGINT
);
이상SQL 구문 에 있 는 JOIN 의 용법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SQL JOIN 의 용법 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.