관리 메뉴

프로그래밍 삽질 중

SQL 함수 설명 및 예제 본문

과거 프로그래밍 자료들/SQL(Oracle)

SQL 함수 설명 및 예제

평부 2021. 3. 17. 23:39

※ SQL 함수 설명

- CONCAT : 두 문자열 데이터를 합치는 함수

- || : 두 문자열 데이터를 합치는 함수

- LTRIM : 왼쪽에서 삭제할 문자열 지정 / RTRIM : 오른쪽에서 삭제할 문자열 지정

-ROUND : 반올림 하기

-TRUNC : 특정 위치에서 숫자 버리기(반올림)

- CEIL, FLOOR : 지정한 수와 가까운 정수를 찾는 것

- MOD : 숫자를 나눈 나머지 값

- SYSDATE : 별다른 데이터 없이 오라클 데이터베이스 서버의 현재 날짜와 시간정보 반환

- ADD_MONTHS() : 현재 날짜보다 몇 개월 이후 날짜(개월만 표현 가능 -> 10주년 : 12개월 * 10년)

- MONTHS_BETWEEN(날짜 1, 날짜2) : 두 날짜 간의 개월 수 차이를 구함

- NEXT_DAY() : 돌아오는 요일을 구함 / LAST_DAY() : 달의 마지막 날 구함

- ROUND, TRUNC : 날짜의 반올림, 버림 하는 함수

 

★ 자주 쓰임 1

- SUM : 데이터 합 반환

- COUNT : 데이터 개수 반환

- MAX / MIN : 데이터 중 최댓값 / 최솟값 반환

- AVG : 데이터 평균값 반환

 

★ 자주 쓰임 2

- TO_CHAR : 숫자 또는 날짜 데이터를 문자 데이터로 변환
- TO_NUMBER : 문자 데이터를 숫자로 변환
- TO_DATE : 문자 데이터를 날짜 데이터로 변환

- NVL :  (NULL인지 여부를 검사할 데이터 또는 열1)(앞 데이터가 NULL인 경우 반환할 데이터) 

- NVL2(NULL인지 여부 검사하는 열)(NULL이 아닐 경우 반환할 데이터)(NULL일경우 반환할 데이터)

- DECODE (자바의 IF나 SWITCH-CASE와 유사)

- CASE(DECODE와 유사)

 

★ 심화 : 그룹화 

- GROUP BY : 여러 데이터에서 의미 있는 하나의 결과를 특정 열 값 별로 묶어서 출력

- 다중행 삼수를 사용하지 않은 일반 열은 GROUP BY절에 명시하지 않으면 SELECT 절 사용 불가

- HAVING절 함께 사용할 수 있음

WHERE 절 HAVING절
출력 대상 행을 제한
GROUP BY, HAVING보다 먼저 사용됨
그룹화된 대상을 출력에서 제한

 

 

 

 

* 테이블 이름 : EMPLOYEES

 

[문제 1]

업무이름과 업무별로 동일한 업무를 하는 사원의 수를 출력하시오 

열 이름은 각각 '업무 번호'와 '업무별 사원수'로 출력

 

 

[문제1 답]

1
2
3
4
5
SELECT
COUNT(DISTINCT JOB_ID) AS "업무 번호",
COUNT(JOB_ID) AS "업무별 사원수"
FROM EMPLOYEES
GROUP BY JOB_ID; //업무별로 동일한 업무를 하는 사람 수가 나옴
cs

 

 

[문제 2]

 평균 급여가 가장 높은 부서의 번호를 출력

* 급여 : SALARY / 부서 : DEPARTMENT_ID

 

 

[문제 2 답]

1
2
3
4
5
6
SELECT 
ROUND(AVG(SALARY)) AS "AVG", DEPARTMENT_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY "AVG" DESC;
cs

 

 

[문제 3]

 현재 날짜 타입을 함수를 통해 확인하고, 1988년 03월 17일부터 1997년 03월 17일 사이에
고용된 사원들의 이름(FIRST_NAME)과 성(Name)으로 별칭, 입사일(HIRE_DATE)을 출력하라
단 입사일이 빠른 순으로 정렬하기

 

 

 

[문제 3 답]

1
2
3
4
5
6
7
SELECT 
CONCAT(FIRST_NAME, LAST_NAME) AS NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE BETWEEN TO_DATE('1998-03-17''YYYY-MM-DD') AND
TO_DATE('1997-03-17''YYYY-MM-DD')
ORDER BY HIRE_DATE;
cs

 

[문제 4]

 모든 사원의 연봉을 표시하는 보고서를 작성하려고 한다. 보고서의 사원의 이름과 성(Name으로 별칭), 급여, 수당여부에 따른 연봉을 포함하여 출력하시오

수당여부는 수당이 있으면 "SALARY + COMMISSION_PCT", 수당이 없으면 "SALARY ONLY'라고 표시하고

항목의 이름을 RESULT_SALARY라고 지정해라

또한 출력시 ABC 이름 순으로 정렬하시오

 

 

[문제 4 답]

1
2
3
4
5
6
SELECT
CONCAT(FIRST_NAME, LAST_NAME) AS NAME,
SALARY, COMMISSION_PCT,
NVL2(COMMISSION_PCT, TO_CHAR(SALARY + (SALARY*COMMISSION_PCT)), 'SALARY ONLY') AS RESULT_SALARY 
FROM EMPLOYEES
ORDER BY NAME ASC;
cs

 

 

[문제 5]

모든 사원의 이름, 입사일 그리고 입사일이 어떤 요일이었는지 출력하시오
이때 주(week)의 시작인 일요일부터 출력되도록 정렬하시오

 

 

[문제 5 답]

1
2
3
4
5
6
SELECT
FIRST_NAME, HIRE_DATE,
TO_CHAR(HIRE_DATE, 'DAY') AS 요일 --TO_CHAR : 숫자, 날짜를 문자형으로 바꿈
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE, 'D');
cs