* Youtube Link - https://www.youtube.com/watch?v=y_fKHQHon7k&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=16
7.2 조인(Join)
조인: 두개의 테이블을 서로 연관해서 조회하는 것
조인을 위해서는 두 개의 테이블이 필요하다.
일대다의 관계가 가장 일반적이다.
PK는 1 밖에 없다.
FK는 여러개일 수도 있다.
조인의 종류
7.2.1 INNER JOIN(내부 조인)
INNER JOIN을 통해서 두 테이블이 서로 연관이 된다.
ON하고 이렇게 조인될 조건을 적어주는 것이다. <조인될 조건>
그리고 연관된 테이블에서 WHERE 조건을 쓸 수 있다. [검색 조건]
위 그림은 INNER조인의 형식이다.
사용자 테이블과 구매 테이블
이 연관된 두 개의 테이블을 조인해서 결과를 낸 상태이다.
userID의 열이 어떤 테이블의 userID인지 알 수가 없다.
두 테이블의 연관된 테이블의 컬럼을 지정해서 조회시
만일 두 컬럼이 같은 컬럼 예를 들어 PK, FK와 같은 경우
컬럼의 테이블을 지정해주어야 한다.
테이블을 지정해서 컬럼을 조회한 조인 결과이다.
Alias를 통해서 코드를 줄일 수 있다.
INNER JOIN은 조인된 행만 조회한다.
결합이 되는 것만 조회가 된다.
편리한 부분이 있다.
구매한 회원만 조회를 할 것이다.
다대다 관계의 테이블 조인
그림을 보고 테이블을 설계한다.
학생_동아리 테이블의 PK는 일련번호이므로
CREATE SEQUENCE stdclubSEQ; 명령어를 통해서 학생_동아리 테이블의 시퀀스를 생성해준다.
이렇게 3개의 테이블을 조인을 해서
다대다 관계의 테이블인 학생과 동아리를 조인한 결과를 볼 수 있다.
열들이 조금 많아지더라도 기본 구조는 가지고 가니까 잘 이해하시길 바랍니다.
외부 조인
LEFT OUTTER JOIN하면 왼쪽이 다 나온다.
RIGHT OUTTER JOIN하면 오른쪽이 다 나온다.
PRODNAME이 null인 행은 구매를 하지 않은 회원들을 의미한다.
RIGHT OUTTER JOIN을 하고 테이블의 위치를 서로 바꾸어도
같은 결과가 나온다.
OUTTER JOIN으로
다음과 같이 B.prodName IS NULL인 경우
회원은 회원이지만 구매를 한 적이 한 번도 없는
유령 회원을 조회할 수 있다.
3개의 테이블 외부 조인
INNER JOIN으로는 조회되지 않았던
동아리에 들지 않은 학생들이 모두 조회가 된다.
다음과 같이 성시경은 동아리에 들지 않았음을 알 수 있다.
RIGHT OUTTER JOIN을 하면 이번에는
동아리 테이블을 기준으로 RIGHT OUTTER JOIN을 한 결과이다.
성시경이라는 이름과 주소가 각 각 null로 나오는 것을 볼 수 있다.
하지만 아무도 가입하지 않은 수영 동아리도 조회되는 것을 볼 수 있다.
이 두개의 결과를 모두 보고 싶다면
UNION을 사용하면 된다.
아무런 동아리도 가입하지 않은 성시경과
아무도 가입하지 않은 동아리인 수영 동아리도 같이 조회가 되는 것을 볼 수 있다.
CLUBNAME IS NULL 인 경우가 전자이고
STDNAME IS NULL 인 경우가 후자이다.
상호 조인
조인이라기 보다도 대량의 데이터를 만들 때 자주 사용된다.
이렇게 120개의 행이 출력되었다.
무작위로 대용량의 샘플 데이터를 만들 때 종종 사용할 수 있다.
100만건의 데이터를 갖고 금방 1조건의 데이터를 만들 수 있다.
SELF JOIN(자체 조인)
예를 들어 부서를 통해서 부하직원과 직속상관이 서로 연관된다면
자기 자신의 컬럼들을 기준으로
자체 조인을 할 수가 있다.
이렇게 부하직원과 직속 상관 그리고 직속상관부서를 구할 수 있다.
실제로는 이러한 데이터를 조회한 결과이다.
이러한 데이터를 가공해서 만들었다.
자체 조인이 가능한 테이블이다.
UNION
UNION 을 통해서
테이블들의 결과를 결합해서 보여줄 수 있다.
중복된 결과를 갖고 있으면 조회가 불가능하다.
UNION ALL을 통해서 중복된 결과도 조회가 가능하다.
UNION을 하려면 컬럼의 갯수가 같고, 데이터 타입이 같거나 서로 호환이 되어야 한다.
이렇게 테이블을 합치는 것이 가능하다.
서브쿼리를 통해서 NOT IN이 가능하다.
핸드폰이 있는 회원의 이름과 전화번호를 조회하였다.
감사합니다.
'Oracle' 카테고리의 다른 글
[이것이 오라클이다] 08장 1교시: [Oracle] 테이블 생성 (SQL Developer 및 SQL문) (3) | 2024.11.05 |
---|---|
[이것이 오라클이다] 07장 4교시: [Oracle] PL/SQL 프로그래밍, 예외 처리, 동적 SQL (2) | 2024.11.04 |
[이것이 오라클이다] 07장 1교시: [Oracle] 데이터 형식, 변수, 형 변환 (2) | 2024.11.04 |
[이것이 오라클이다] [Oracle] WITH절, INSERT, UPDATE, DELETE, MERGE (3) | 2024.11.03 |
[이것이 오라클이다] 06장 2교시: [Oracle] WHERE절, GROUP BY절, HAVING절 (0) | 2024.11.03 |