| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Java
- jointpoint
- gradle
- Model
- @ResponseBody
- application.properties
- SpringBoot
- @RequestMapping
- 비즈니스레이어
- @RequestParam
- c:if
- .xml
- 서비스레이어
- 의존주입
- springmvc
- produces
- @
- PointCut
- 스프링
- MVC
- 유효성검사
- 생성자주입
- 어노테이션
- frontController
- after-throwing
- AOP
- 바인딩변수
- spring
- @Valid
- springjdbc
- Today
- Total
메모장
JOIN 과 순위함수 본문
2개 이상의 테이블을 묶는것을 JOIN이라고 한다.
SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이고, 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것입니다. 즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 JOIN입니다.
예를들어 배송정보 라고 하면 고객의 정보와 상품 수량등 두개를 합쳐서 만들어야 하기 때문에 JOIN을 사용하여 결합을 시키게 된다.

보편적인 JOIN 으로
join 만 써있으면 조인, 내부조인 등으로 생각 할 수 있다.
일대 다 관계
PK,FK관계 라고도 함 ---> INNER JOIN 내부조인의 특징
대학생이 수강신청 / 학생이 여러 과목을 수강한다.
학생 / 강의 테이블
학생 한명이 여러 강의를 듣는다
INNER JOIN의 기본형
SELECT <열 목록> FROM <기준 테이블>
INNER JOIN<참조할 테이블>
ON <조인 조건> [WHERE 검색조건] ---> where은 생략 할 수도 있다.



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

OUTER JOIN은 INNER JOIN 과는 다르게 한쪽 테이블에만 내용이 있어도 결과가 검색됩니다.
자주 사용되지는 않지만 가끔 유용하게 사용되는 방식이다.
OUTER JOIN의 기본형
SELECT <열 목록> FROM <첫 번째 테이블(LEFT)>
<LEFT | RIGHT | FULL> [OUTER] JOIN <두 번째 테이블(RIGHT)>
ON <조인 조건> [WHERE 검색조건]
외부조인에서 LEFT 조인을 제일 많이씀




한쪽 테이블의 행 하나당 다른 쪽 테이블의 모든 행을 하나씩 모든 행들을 각각 조인한다.
즉, 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 : 동일 그룹으로 묶어줄 칼럼 명 지정할때 쓰임
'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 |