오라클 쿼리문에서 문자열에서 특정 문자열의 위치를 찾을 때는 INSTR 함수와 오라클 10g부터 사용할 수 있는 REGEXP_INSTR 정규식 함수를 사용할 수 있다. INSTR 함수를 사용하여 문자열의 위치를 찾을때 동일한 문자열이 여러 개 존재해도 첫 번째 찾은 문자열의 위치를 반환하고 검색을 중지한다. 목차문자열 앞에서 부터 찾기 (INSTR 함수)문자열 찾은 횟수에 따른 위치 (INSTR 함수)문자열 뒤에서 부터 찾기 (INSTR 함수)정규식 함수로 문자열 위치 찾기 (REGEXP_INSTR 함수) 문자열 앞에서 부터 찾기 (INSTR 함수)SELECT INSTR('Oracle Database 21c Release', 'as') FROM dual INSTR("대상 문자열", "찾을 문자열")..
오라클 쿼리문에서 CASE 표현식을 사용할 때 조건절에 서브쿼리(Subquery)를 사용하여 조건을 부여할 수 있다. CASE WHEN 안에서 SELECT 문을 사용할 수 있으며, 조건절에서 서브쿼리를 사용할 때는 EXISTS 연산자, IN 연산자, 집계함수와 부등호 연산자를 주로 많이 사용한다. 목차 EXISTS 연산자와 서브쿼리 사용법 IN 연산자와 서브쿼리 사용법 집계함수와 서브쿼리 사용법 CASE WHEN~THEN 서브쿼리 사용법 EXISTS 연산자와 서브쿼리 사용법 SELECT a.empno , a.ename , a.deptno , a.mgr , CASE WHEN EXISTS(SELECT 1 FROM emp aa WHERE aa.empno = a.mgr AND aa.deptno = a.deptn..
오라클 쿼리문에서 CASE WHEN 표현식의 조건을 여러개 부여하기 위해서는 WHEN~THEN을 반복해서 사용할 수 있으며, 다중 조건을 부여할 수 있다. 하나의 조건절(WHEN~THEN)에서 여러개 칼럼을 조건으로 부여하기 위해서는 AND, OR 연산자를 사용하면 된다. 목차 CASE WHEN 조건 여러개 부여 (다중 조건) CASE WHEN 여러개 칼럼 조건 부여 (다중 칼럼) CASE WHEN 조건 여러개 부여 (다중 조건) SELECT ename , job , CASE WHEN job = 'ANALYST' THEN 'CASE 1' WHEN job = 'MANAGER' THEN 'CASE 2' WHEN job = 'SALESMAN' THEN 'CASE 3' END AS case_result FROM..
오라클 쿼리에서 월별 합계(월별 통계)를 구하기 위해서는 날짜 칼럼을 TO_CHAR 함수를 사용하여 년월까지만 잘라서 집계를 하면 쉽게 구할 수 있다. 월별 가로 합계를 구하기 위해서는 DECODE 함수를 사용하면 쉽게 구할 수 있지만, DECODE 함수 외에도 CASE 표현식이나 PIVOT 함수를 사용할 수도 있다. 목차 월별 합계 구하기 (가로 합계) 월별 합계 구하기 (세로 합계) 월별 합계 구하기 (가로 합계) SELECT SUM(DECODE(TO_CHAR(hiredate, 'MM'), '01', sal)) AS "01월" , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '02', sal)) AS "02월" , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '..
오라클 쿼리에서 가로 합계를 구하기 위해서는, 합계를 구할 각 칼럼을 SUM 함수를 사용하여 합산 후 모두 더하면 가로 합계가 계산된다. 오라클은 NULL과 수치 값을 더할 수 없기 때문에 가로 합계를 구할 때 계산 오류가 발생할 수 있으므로 아래의 주의 사항도 꼭 확인하기 바란다. 세로의 총합계를 구하기 위해서는 ROLLUP 함수를 사용하면 구할 수 있다. 목차 가로 합계 구하기 가로 합계 구할 때 주의 사항 GROUP BY 절과 가로 합계 구하기 가로 합계 구하기 WITH temp AS ( SELECT 150 AS col1, 80 AS col2, 200 AS col3 FROM dual UNION ALL SELECT 100 AS col1, NULL AS col2, 250 AS col3 FROM dual..
오라클 쿼리문에서 소수점 앞에 "0"을 표시하거나 소수점 자릿수를 고정하기 위해서는 TO_CHAR 함수를 사용하여 문자로 변환하면 된다. 오라클에서 숫자형식은 소수점 앞에 값이 없을 경우 "0"을 표시하지 않지만, 숫자를 문자 형식으로 변경하여 원하는 형태의 값을 만들 수 있다. 그러나 수치 값을 문자로 변환하는 과정에서 형식이 일치하지 않으면 오류가 발생할 수 있으니 아래의 주의사항을 꼭 확인하기 바란다. RTRIM(TO_CHAR("수치 값", "포맷"), '.') 예) RTRIM(TO_CHAR(123.456, 'FM9990.99'), '.') 목차 소수점 앞 0 표시 방법 소수점 자릿수 고정 방법 (2자리) 소수점 이하의 값이 없을 경우 주의사항 수치 값이 클 경우 주의 사항 소수점 앞 0 표시 방법..
오라클 쿼리에서 하나의 칼럼에 여러 개의 값을 한 번에 입력하기 위해서는 IN 연산자를 사용하면 된다. IN 연산자는 OR 연산자를 여러 개 사용하여 쿼리문을 작성하는 것과 동일한 결과를 얻을 수 있다. 오라클에서는 다중칼럼 IN도 지원하기 때문에 아래의 예제를 참고하면 된다. 목차 IN 연산자 사용법 NOT IN 연산자 사용법 NOT IN 연산자 사용 시 주의사항 다중칼럼 IN 사용법 IN 연산자 사용법 SELECT * FROM emp WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN') job 칼럼에 IN 연산자에 입력된 직업(ANALYST, MANAGER, SALESMAN) 중 하나라도 일치하면 조회된다. IN 연산자는 1000개 값까지만 입력할 수 있으며, 그 이상..
오라클 쿼리에서 여러 행의 값을 하나의 열로 합치기 위해서 WM_CONCAT 함수를 사용할 수 있다. WM_CONCAT 함수는 사용법이 쉽고 중복제거도 되기 때문에 많이 사용했지만 오라클 11g R2부터는 해당 함수를 사용할 수 없으니 사용 시 유의해야 한다. 오라클 11g R2부터는 WM_CONCAT 함수 대신 LISTAGG 함수를 사용할 수 있다. 목차 WM_CONCAT 함수 사용법 LISTAGG 함수 사용법 (대체함수) WM_CONCAT 함수 사용법 SELECT job , WM_CONCAT(deptno) AS deptnos FROM emp WHERE job IN ('MANAGER', 'SALESMAN') GROUP BY job GROUP BY 절과 WM_CONCAT 함수를 사용하여 여러 행의 값을 ..
오라클에서 지난달(전달)의 첫날(1일)과 말일을 구하기 위해서는 TRUNC 함수와 ADD_MONTHS 함수를 사용하여 쿼리문을 복잡하게 작성하지 않아도 쉽게 구할 수 있다. 아래의 예제 외에도 해당 일자를 구할 수 있는 방법은 많이 있으며, 상황에 따라서 편리한 방법을 찾아서 사용하면 된다. 목차 이전달 첫날, 마지막날 구하기 이번달 첫날, 마지막날 구하기 이전달 첫날, 마지막날 구하기 SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd') AS "현재" , ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1) AS "이전달 첫날" , TRUNC(SYSDATE, 'mm') - 1 AS "이전달 말일" FROM dual TRUNC("날짜", "mm") 함수를 사용하여 해당 날짜의 ..
오라클에서 ROLLUP 함수를 사용하여 소계, 합계를 구할 수 있다. 그러나 소계를 제외하고 합계만 표시하고 싶을 때는 다양한 방법이 있겠지만, ROLLUP 칼럼을 괄호로 묶어서 합계를 구하는 방법과 GROUPING_ID 함수를 사용하여 필요한 행만 조회되도록 조건을 부여하는 방법을 사용하면 간단하게 소계를 제외할 수 있다. 목차 괄호( ( ) )를 사용하여 합계만 표시하는 방법 GROUPING_ID 함수를 사용하여 소계를 제외하는 방법 괄호( ( ) )를 사용하여 합계만 표시하는 방법 SELECT job , deptno , SUM(sal) FROM emp GROUP BY ROLLUP((job, deptno)) ROLLUP 칼럼 전체를 괄호로 한 번 더 묶으면 총합계만 표시된다. 그룹 칼럼이 많을 경우 ..