이번에 작성할 것은
JOIN과 서브쿼리에 대한 내용이다.
함수에 대한 내용도 조금 있다.

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

CONCAT_WS() : 구분자와 함께 문자열을 이어준다.
CONCAT()과 CONCAT_WS()의 예시다.


CONCAT()과 FORMAT()함수를 사용해
___님의 급여는 ___입니다.
에서 급여의 가격에 ,가 표현될 수 있도록 하였다.

ELT(위치, 문자열1, 문자열2) : 위치 번째에 해당하는 문자열을 반환한다.
FIELD(찾을 문자열, 문자열1, 문자열2) : 찾을 문자열의 위치를 찾아서 반환한다. 매치되는 문자열이 없다면 0을 반환한다.
FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열을 문자열 리스트에서 찾아서 위치를 반환한다. 문자열 리스트는 콤마(,)로 구분되어 있어야 하며 공백은 없다.
INSTR(기존문자열, 부분문자열) : 기존 문자열에서 부분 문자열을 찾아서 그 시작 위치를 반환한다.
LOCATE(부분문자열, 기존문자열) : INSTR()함수와 동일하지만 파라미터의 순서가 반대로 되어있다. LOCATE()함수와 POSITION()함수는 동일한 함수이다.

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

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 |