메모장

JOIN 과 순위함수 본문

DB/개념정리

JOIN 과 순위함수

Itchild 2024. 4. 10. 22:40
728x90
반응형

 

2개 이상의 테이블을 묶는것을 JOIN이라고 한다.

SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이고, 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것입니다. 즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 JOIN입니다.

예를들어 배송정보 라고 하면 고객의 정보와 상품 수량등 두개를 합쳐서 만들어야 하기 때문에 JOIN을 사용하여 결합을 시키게 된다.

 

inner join

보편적인 JOIN 으로

join 만 써있으면 조인, 내부조인 등으로 생각 할 수 있다.

 

일대 다 관계

PK,FK관계 라고도 함 ---> INNER JOIN 내부조인의 특징

 

대학생이 수강신청 / 학생이 여러 과목을 수강한다.

학생 / 강의 테이블

학생 한명이 여러 강의를 듣는다

 

INNER JOIN의 기본형

SELECT <열 목록> FROM <기준 테이블>

INNER JOIN<참조할 테이블>

ON <조인 조건> [WHERE 검색조건] ---> where은 생략 할 수도 있다.

JOIN의 기본형식 중 on 조건은 꼭 넣어야 한다. where조건은 생략 가능
어떤 테이블의 멤버 id인지 적어주면 구별 할수 있다 this 같은 개념
 

내부조인은 구매한 사람들만 나오고 어떤 한 가수가 구매를 안한사람들은 안나오게 된다 .


 

OUTER JOIN은 INNER JOIN 과는 다르게 한쪽 테이블에만 내용이 있어도 결과가 검색됩니다.

자주 사용되지는 않지만 가끔 유용하게 사용되는 방식이다.

OUTER JOIN의 기본형

SELECT <열 목록> FROM <첫 번째 테이블(LEFT)>

<LEFT | RIGHT | FULL> [OUTER] JOIN <두 번째 테이블(RIGHT)>

ON <조인 조건> [WHERE 검색조건]

 

 

외부조인에서 LEFT 조인을 제일 많이씀

Member 테이블에서 -> Buy 로 구매한 상품이 없는 멤버도 나올수 있다.
Buy -> Member 로 안팔린 상품이 나올수 있다.

 

한쪽 테이블의 행 하나당 다른 쪽 테이블의 모든 행을 하나씩 모든 행들을 각각 조인한다.

즉, A 테이블의 1번 행을 B 테이블의 1번 행에 조인 시키고,

다음은 A 테이블의 1번 행을 B 테이블의 2번 행에 JOIN 시키고,

...생략...

이를 모든 A 테이블의 행에 각각 모든 B 테이블의 행들에 조인한다.

CROSS JOIN의 결과 핵의 개수는 [A 테이블행의 개수 X B 테이블행의 개수]가 된다.

CROSS JOIN의 기본형

SELECT <열 목록> FROM <기준 테이블>

CROSS JOIN <참조할 테이블> [WHERE 검색조건]

*INNER과 OUTER JOIN과 달리 ON 구문은 사용하지 않는다.


 

SELF JOIN은 자신에게 조인하는 것입니다.

같은 테이블에 두 번 참조해야 하는 경우도 있습니다.

SELF JOIN 의 기본형

SELECT <조회할 열> FROM <테이블 >

A INNER JOIN <테이블 > B -- 연결 할 테이블

ON <A.공통 열> = <B.공통 열>; -- 연결고리

SELF JOIN - 회사 조직도 직원 테이블 직원의 직속상관을 알고 싶다 그랬을때

 


순위함수

순위 함수는 결과에 순위를 부여하는 함수를 말한다. 순위 함수의 종류는 다양하며 각 함수마다 순위를 처리하는 방식이 조금씩 다르다. 순위 함수는 전체 데이터에 순위를 부여할 수 있고, PARTITION 옵션을 함께 사용해 사용자가 지정한 그룹에 따라 그룹 내 순위를 부여할 수도 있습니다.

 

1. RANK()

ROW_NUMBER 함수와 비슷하지만 같은 순위를 처리하는 방법은 다릅니다. RANK 함수는 같은 순위일 때 같은 값을 부여합니다. 또한 같은 순위를 처리한 다음 순위의 값은 같은 순위를 처리한 개수를 이용해 매깁니다.

RANK 함수의 기본 형식

RANK() OVER ([partition_by_clause] order_by_clause)

--EX) SELECT RANK() OVER (ORDER BY height DESC) "키 순", mem_name, height

FROM member;

 

 

2.DENSE_RANK()

RANK 함수와 거의 같지만, 같은 순위 개수를 무시한다는 점이 다릅니다.

DENSE_RANK 함수의 기본 형식

DENSE_RANK() OVER ([partition_by_clause] order_by_clause) --EX) SELECT DENSE_RANK() OVER (ORDER BY height DESC) "키 순", mem_name, height FROM member;

 

 

3.ROW_NUMBER()

모든 행에 유일 값으로 순위를 부여합니다. 다시 말해 함수 실행 결과에는 같은 순위가 없을 것이며, 같은 순위의 경우 정렬 순서에 따라 순위를 부여합니다.

ROW_NUMBER 함수의 기본 형식

ROW_NUMBER() OVER ([PARTITION BY, .... [N]] ORDER BY)

--EX) SELECT ROW_NUMBER() addr, OVER (PARTITION BY addr

ORDER BY height DESC,mem_name ASC) "지역별 키 큰 순위", mem_name, height

FROM member;

 

4.NTILE()

인자로 지정한 값만큼 데이어 행을 그룹화해 그룹별 순위를 부여합니다. 각 그룹은 1부터 순위가 매겨지며 순위는 각 행의 순위가 아닌 행이 속한 그룹의 순위입니다.

NTILE 함수의 기본 형식

NTILE (integer_expression) OVER ([partition_by_clause] order_by_clause)

--EX) SELECT NTILE(5) OVER (ORDER BY height DESC) "반 번호", mem_name, height

FROM member;

PARTITION BY : 동일 그룹으로 묶어줄 칼럼 명 지정할때 쓰임

 

 

728x90
반응형

'DB > 개념정리' 카테고리의 다른 글

Oracle DBMS ' NVL '  (0) 2024.04.10
WHERE 1=1  (0) 2024.04.10
데이터 그룹화 GROUP BY,HAVING,그룹함수  (0) 2024.04.10
JDBC - 임시 멤버 변수 구현  (0) 2024.04.10
JDBC PrepareStatement  (0) 2024.04.10