본문 바로가기
코딩일기

[MariaDB] 윈도우 함수 및 JOIN

by 증즌주 2024. 5. 23.

 

 

 

 

이번에 작성할 것은

JOIN과 서브쿼리에 대한 내용이다.

함수에 대한 내용도 조금 있다.

 

 

 

 

 

 

CONCAT() : 문자열을 이어주는 함수

 

 

 

 

CONCAT_WS() : 구분자와 함께 문자열을 이어준다.

 

 

 

 

 

CONCAT()과 CONCAT_WS()의 예시다.

CONCAT_WS 예시

 

 

CONCAT 예시

 

 

 

 

CONCAT()과 FORMAT()함수를 사용해

___님의 급여는 ___입니다.

에서 급여의 가격에 ,가 표현될 수 있도록 하였다.

 

 

 

 

 

 

ELT(위치, 문자열1, 문자열2) : 위치 번째에 해당하는 문자열을 반환한다.


FIELD(찾을 문자열, 문자열1, 문자열2) : 찾을 문자열의 위치를 찾아서 반환한다. 매치되는 문자열이 없다면 0을 반환한다.


FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열을 문자열 리스트에서 찾아서 위치를 반환한다. 문자열 리스트는 콤마(,)로 구분되어 있어야 하며 공백은 없다.


INSTR(기존문자열, 부분문자열) : 기존 문자열에서 부분 문자열을 찾아서 그 시작 위치를 반환한다.


LOCATE(부분문자열, 기존문자열) : INSTR()함수와 동일하지만 파라미터의 순서가 반대로 되어있다. LOCATE()함수와 POSITION()함수는 동일한 함수이다.

 

 

이메일의 @위치를 찾을 때 유용하게 사용할 수 있다.

INSTR 예시

 

 

 

 

 

INSERT(기준 문자열, 위치, 길이, 삽입할 문자열) : 

기준 문자열의 위치부터 길이만큼 지우고 삽일할 문자열을 끼워 넣는다.

INSERT 예시

 

 

 

LEFT(문자열, 길이) : 왼쪽에서 문자열의 길이만큼 반환한다.
RIGHT(문자열, 길이) : 오른쪽에서 문자열의 길이만큼 반환한다.

 

 

 

UPPER(문자열) : 소문자를 대문자로 변경하는 함수이다.
LOWER(문자열) : 대문자를 소문자로 변경하는 함수이다.

 

 

LEFT(), INSTR()을 사용

문자열을 찾는데 왼쪽부터 찾는다.

 

 

 

 

 

LPAD(문자열, 길이, 채울 문자열) : 

문자열 길이만큼 왼쪽을 늘린 후에, 빈 곳을 채울 문자열로 채운다.


RPAD(문자열, 길이, 채울 문자열) : 

문자열 길이만큼 오른쪽을 늘린 후에, 빈 곳을 채울 문자열로 채운다.

 

 

 

 

 

LTRIM(문자열) : 문자열의 왼쪽 공백을 제거함. 중간의 공백은 제거되지 않음.


RTRIM(문자열) : 문자열의 오른쪽 공백을 제거함. 중간의 공백은 제거되지 않음.


TRIM(문자열) : 문자열의 앞/뒤 공백을 모두 제거함.

 

 

 

 

 

 

TRIM(방향 자를 문자열 from 문자열) : 방향을 지정해서 자를 문자열을 제거할 수 있음. 

방향은 LEADING(앞), TRAILING(뒤), BOTH(양쪽)

 

 

 

 

 

 

REVERSE(문자열) : 문자열의 순서를 거꾸로 만듬.
REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복함.

 

 

 

 

REPLACE(문자열, 원래 문자열, 바꿀문자열) : 

문자열에서 원래 문자열을 찾아서 바꿀 문자열로 바꿔준다.

 

 

REPLACE()를 사용해 @ 뒤를 바꿀수도, 없앨수도 있다.

 

 

 

SUBSTRING(문자열, 시작위치, 길이) : 

시작위치부터 길이만큼 문자를 반환함. 길이가 생략되면 문자열의 끝까지 반환함.

 

 

 

 

SUBSTRING()을 이용해 성별이 남자인지 여자인지를 표시하였다.

 

 

 

SUBSTRING_INDEX(문자열, 구분자, 횟수) : 

문자열에서 구분자가 왼쪽부터 횟수번째 나오면 

그 이후의 오른쪽은 버림. 횟수가 음수이면 오른쪽부터 세고 왼쪽을 버림. 

 

 

 

SUBSTRING_INDEX(문자열, 구분자, 횟수)라는 함수를 이용하여

employee 테이블에서 @전에 오는 아이디를 조회해보았다.

 

 

 

 

 

 

 

ROUND() : 소수점을 기준으로 반올림한다.

 

 

 

MOD() : 나머지 값을 구한다.

 

 

 

 

ADDDATE(날짜, 차이) : 날짜를 기준으로 차이를 더한 날짜를 반환함.

 

 

 

 

SUBDATE() : 날짜를 기준으로 차이를 뺀 날짜를 반환함.

 

 

 

ADDDATE()함수를 이용하여 입사일에 3개월을 더해보았다.

 

 

 

DATE말고 TIME도 있다.

ADDTIME() : 날짜/시간을 기준으로 시간으로 더한 결과를 반환함.
SUBTIME() : 날짜/시간을 기준으로 시간을 뺀 결과를 반환함.

 

 

 

 

YEAR(날짜): 날짜 또는 시간에서 연 구하기
MONTH(날짜): 날짜 또는 시간에서 월 구하기
DAY(날짜):날짜 또는 시간에서 일 구하기
HOUR(시간): 날짜 또는 시간에서 시 구하기
MINUTE(시간): 날짜 또는 시간에서 분 구하기
SECOND(시간): 날짜 또는 시간에서 초 구하기
MICROSECOND(시간): 날짜 또는 시간에서 밀리초 구하기

 

 

CURDATE()는 현재를 나타내준다.

 

 

 

 

 

 

 

TIMEDIFF(시간 1, 시간 2) : 시간 1 - 시간 2의 차이 결과를 반환함.

 

 

DATEDIFF(날짜 1, 날짜 2): 날짜 1 - 날짜 2의 일수 결과를 반환함

고용일로부터 현재까지 근무한 근무 일수를 조회할 때 유용하다.

 

 

 

 

 

요일을 구하기 위한 쿼리문이다.

1은 일요일 7은 토요일이다.

 

 

employee 테이블에서 매달 마지막 날인 급여일을 조회하는 쿼리문이다.

 

 

 

 

그 밖에도

MAKEDATE(연도, 정수) : 연도에서 정수만큼 지난 날짜를 구함.
MAKETIME(정수, 정수, 정수) : 시,분,초를 이용해서 TIME형식을 만듬.

PERIOD_ADD(연월, 개월 수) : 연월에서 개월만큼 개월이 지난 연월을 구함.
PERIOD_ADD(연월 1, 연월 2) : 연월 1 - 연월 2의 개월 수를 구함.

 

이런 함수들도 있다.

알아두자!

 

 

 

 

 

 

 

 

다음은 윈도우 함수 중에 순위함수이다.

 

ROW_NUMBER(): 행 번호 매기기 1,2,3,4/ 동일한 순위가 없다.

RANK():순위 매기기 1,2,2,4 키값이 같으면 동순위로 표시해줌 (중복 없)
DENSE_RANK(): 순위 매기기 1,2,2,3
NTILE(): 파트별로 쪼개기/ 등분해주기

 

이 파트는 SQLD 시험에도 자주 출제되는 함수들이다.

각 함수의 특징을 잘 기억해두자.

 

 

 

 

다음은 분석함수이다.

LEAD() : 다음 행 참조
LAG() : 이전 행 참조 
FIRST_VALUE(): 첫번째 값 가져오기
LAST_VALUE(): 마지막 값 가져오기

 


 

 

 

 

 

지금까지는 함수에 대해서 알아보았다!

이제는 조인에 대해 알아볼 차례이다.

 

 

 

 

 

조인이란 무엇일까?

조인(JOIN) : 두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것


*where절에서도 join은 사용 가능함. 

검색조건은 where절에 써줘야함.

 

 

그렇다면 조인의 종류에는 무엇이 있을까?

 

 

 

 

내부 조인 (INNER JOIN) : 조인 중 가장 많이 사용되는 조인으로

일반적으로 조인이라고 이야기하는 것이 내부 조인을 지칭하는 것이다.


* from절 다음에 INNER JOIN 구문을 통해 조인에 사용할 

테이블을 기술하고 ON절에 조인 조건을 작성한다.
* 별칭 사용 department d와 같이 d로 별칭을 만들어서 사용.

 

 

 

INNER JOIN을 통해 두 테이블의 공통 부분을 묶고 다른 테이블의 열을 불러왔다.

 

 

WHERE절을 추가하여

내가 원하는 조건에 맞는 결과를 출력할 수 있다.

단 WHERE절은 JOIN 다음에 쓰도록 하자.

 

 

 

 

 

 

 

 

실습문제들을 살펴보자.

 

 

 

 

WHERE 절에 IS NOT NULL을 사용하여

NULL이 올 수 없도록 지정해보자.

 

 

 

 

인사관리부가 아닌 부서명을 조회하려면

WHERE절에 !=를 사용해주어야 한다.

 

 

 

 

두 개의 테이블이 아닌 세 개의 테이블을 묶어주려면

아래의 사진과 같이 묶어주어야 한다.

단, 조인의 순서는 먼저 써준 조인부터 묶이게 된다.

순서에 따라 값이 달라지니 조심하도록 하자.

 

 

 

 

그 밖에도 다양한 JOIN이 존재한다.

 

1. NATURAL JOIN 사용( 같은 이름의 열이 있으면 조인될 우려가 있어서 잘 안씀)

 

2. 외부 조인 (OUTER JOIN) : 조인의 조건에 만족되지 않는 행까지도 조회하기 위한 조인

 

3. 상호 조인 (COROSS JOIN) : 한쪽테이블의 모든 행들과 다른쪽 테이블의 모든 행을 조인한다.

조인된 모든 행들을 맵핑하여 보고싶을때 사용 3*3=9
- 조건을 지정해주는 ON 구문이 없음.

 

4. 자체 조인 (SELF JOIN) : 동일한 테이블을 가지고 조인하여 데이터를 조회한다.

 

 

 

 

 

 

다음은 INNER JOIN을 이용한 OUTER JOIN 실습이다.

 

 

 

 

INNER JOIN으로 묶었던 쿼리를

LEFT OUTER JOIN으로 묶으면

JOIN 쿼리문을 기준으로 왼쪽의 열은

조건에 상관없이 다 출력된다.

 

왼쪽에 있는 열을 보고 싶을 땐 LEFT OUTER JOIN을 이용하자.

 

 

 

LEFT와 달리 RIGHT OUTER JOIN도 있다. 반대의 경우이다.

RIGHT OUTER JOIN은 오른쪽 테이블의 데이터를 모두 조회하려고 할 때 사용한다.

 

 

 

 

자체 조인 (SELF JOIN) : 동일한 테이블을 가지고 조인하여 데이터를 조회한다.
-- 자기 자신과 조인을 함. 같은 테이블이지만 별칭을 다르게 줌.

'코딩일기' 카테고리의 다른 글

[React] React 개인 프로젝트 생성  (1) 2024.12.17
[MariaDB] 서브 쿼리  (2) 2024.05.23
[MariaDB] MariaDB 사용2  (3) 2024.05.17
[MariaDB] MariaDB 사용  (3) 2024.05.17
[MariaDB] MariaDB 설치  (4) 2024.05.17