Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬 #python #enumerate
- 파이썬 #python #전역변수 #지역변수 #eval
- Git
- redis
- aws
- 파이썬 #python #docstring
- 파이썬 #python #lambda #람다
- 파이썬 #python #filter #map #reduce
- 파이썬 #python #file #i/o #input #output
- 파이썬 #python #모듈 #module #import #random #time #calendar #sys
- 파이썬 #python #예외처리 #exception
- 약수 수하기
- 파이썬 #python #지역함수
- EC2
- 파이썬기본문법 #파이썬 #python
- 파이썬 #python #함수 #function
- 파이썬 #python #os #os.path #glob
- 사용자정의예외
- spring boot
- 배포
- 연산자메서드
- PostgreSQL
- aw3
- 프로그래머스
- 민감 정보 관리
- jsonb
- docker
- 파이썬 #python #class #클래스 #상속
- 파이썬 #python #Comprehension
- 파이썬 #python #가변매개변수 #키워드가변매개변수 #args #kwargs
Archives
- Today
- Total
Yeonnnnny
[2과목] 2-8. 표준 조인 본문
■ 표준 조인
- ANSI 표준으로 작성되는 INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN을 말함
■ INNER JOIN
- 내부 조인이라고 하며, 조인 조건이 일치하는 행만 추출 (ORACLE 기본 조인)
- ANSI 표준의 경우 FROM 절에서 INNER JOIN 혹은 줄여서 JOIN을 명시
- ANSI 표준의 경우 USING 이나 ON 조건절을 필수적으로 사용
○ ON절
- 조인할 양 컬럼의 컬럼명이 서로 다르더라도 사용 가능
- ON 조건의 괄호는 옵션 (생략 가능)
- 컬럼명이 같을 경우 테이블 이름이나 별칭을 사용하여 명확하게 지정(테이블 출처 명확히)
- ON 조건절에서 조인조건 명시, WHERE 절에서는 일반 조건 명시 (WHERE 절과 ON절을 쓰임에 따라 명확히 함)
- ** 문법
select 테이블1.컬럼명, 테이블2.컬럼명
from 테이블1 inner join 테이블2
on 테이블1.조인컬럼 = 테이블2.조인컬럼;
예제) EMP 테이블과 DEPT테이블을 사용하여 각 직원의 이름과 부서명을 함께 출력(EQUI JOIN)
select emp.ename, dept.dname
from emp join dept
on emp.deptno = dept.deptno;
※ ORACLE 표준은 FROM 절에 테이블을 컴마(,)로 구분, WHERE 절에 조인 조건 나열
※ ORACLE은 INNER JOIN이 기본 조인 연산이므로 별도의 문법 존재하지 않음
○ USING 조건절
- 조인할 컬럼명이 같을 경우 사용
- Alias나 테이블 이름 같은 접두사 붙이기 불가
- 괄호 필수
- ** 문법
select 테이블1.컬럼명, 테이블2.컬럼명
from 테이블1 inner join 테이블2
using (동일컬럼명);
위의 ON 예시를 USING으로 바꾸면 아래와 같음 !
select emp.ename, dept.dname
from emp join dept
using (deptno);
■ NATURAL JOIN
- 두 테이블 간의 동일한 이름을 가지는 모든 컬럼들에 대해 EQUI JOIN을 수행
- USING, ON, WHERE 절에서 조건 정의 불가
- JOIN에 사용된 컬럼들은 데이터 유형이 동일해야 하며 접두사를 사용할 수 없음
- ** 문법
select 테이블1.컬럼명, 테이블2.컬럼명
from 테이블1 natural join 테이블2;
위의 INNER JOIN 예시를 NATURAL JOIN을 이용한 쿼리문으로 바꿔 보면 아래와 같음
select emp.ename, dept.dname
from emp natural join dept;
※ NATURAL JOIN 시 주의
- 동일한 이름의 모든 컬럼을 조인 컬럼으로 사용하므로 조인 컬럼의 값이 모두 같을 때만 결과가 리턴됨
- STUDENT와 PROFESSOR 테이블에 NAME 컬럼과 PROFNO컬럼이 컬럼명이 서로 동일하다면, 이 두 컬럼이 조인되고 이 두 컬럼만 조회가 가능함
■ CROSS JOIN
- 테이블 간 JOIN 조건이 없는 경우 생성 가능한 모든 데이터들의 조합
- Cartesian product (카타시안곱) 출력
- 양쪽 테이블 행의 수를 곱한 만큼의 데이터 조합이 발생함 (m*n)
- ** 문법
select 테이블1.컬럼명, 테이블2.컬럼명
from 테이블1 cross join 테이블2;
■ OUTER JOIN
- INNER JOIN과 대비되는 조인 방식
- JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
- 두 테이블 중 한쪽에 NULL을 가지면 EQUI JOIN 시 출력되지 않는데, 이를 출력하기 위해서는 OUTER JOIN을 사용하면 됨
- 테이블 기준 방향에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분
- LEFT OUTER JOIN
- FROM절에 나열된 왼쪽 테이블에 해당하는 데이터를 읽은 후, 우측 테이블에서 JOIN 대상 읽어옴
- 즉, 왼쪽 테이블이 기준이 되어 오른쪽 데이터를 채우는 방식
- 우측값에서 같은 값이 없는 경우 NULL 값으로 출력
- RIGHT OUTER JOIN
- LEFT OUTER JOIN의 반대
- 즉, 오른쪽 테이블 기준으로 왼쪽 데이터를 채우는 방식
- FROM 절에 테이블 순서를 변경하면 LEFT OUTER JOIN으로 수행
- FULL OUTER JOIN
- 두 테이블 전체 기준으로 결과를 생성하여 중복 데이터는 삭제 후 리턴
- LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과의 UNION 연산 리턴과 동일함
- ORACLE 표준에는 없음
※ ORACLE 표준은 WHERE 절에 조인 조건을 작성하므로 LEFT OUTER JOIN을 기술하지 않음
※ WHERE 절에서 기준이 되는 테이블의 반대 테이블 조건 컬럼 뒤에 (+)를 붙임
※ ANSI 표준에서는 조인 종류를 명시해야하고, 조인 조건을 바로 뒤 ON 절에 나열해야 함. 그리고 WHERE절을 ON절 밑에 전달 (순서 중요)
※ FULL OUTER JOIN은 성능적으로 좋지 않기 때문에 사용 시 주의 필요
'SQLD' 카테고리의 다른 글
[2과목] 2-10. 집합 연산자 (2) | 2024.03.06 |
---|---|
[2과목] 2-9. 서브쿼리 (0) | 2024.03.06 |
[2과목] 2-7. 조인 (0) | 2024.03.06 |
[2과목] 2-5. ORDER BY 절 (0) | 2024.03.06 |
[2과목] 2-5. GROUP BY 절 (0) | 2024.03.05 |