오라클에서 동명이인을 찾기 위해서는 분석함수(OVER 절)를 사용하거나 GROUP BY ~ HAVING 절을 사용할 수 있다. 그 외에도 서브 쿼리 등을 활용할 수 있겠지만 분석함수를 사용하는 것이 가장 효율적인 듯하다. 동명이인은 동일한 이름이 여러 건 조회되었을 경우일 수도 있고, 동일한 이름이 여러 건 조회되고 동일한 이름 내에서 생년월일 등 추가로 식별할 수 있는 조건이 다를 경우 동명이인이라고 판단할 수 있다. 목차 이름만으로 동명이인 찾기 이름 + 생년월일로 동명이인 찾기 동명이인 여부를 Y, N으로 표시하기 GROUP BY ~ HAVING으로 동명이인 찾기 이름만으로 동명이인 찾기 WITH emp_t(ename, birthdate, job) AS ( SELECT '스미스', '1982-01-..
오라클에서 문자열 문자열을 나타낼 때 작은따옴표(홑 따옴표, 싱글 쿼터)를 사용하기 때문에 문자열 내부에 작은따옴표를 넣기 위해서는 추가적인 작업이 필요하다. 일반적인 프로그래밍 언어에서 이스케이프 문자를 표시할 때 백 슬래시(\)를 사용하여 작은따옴표를 ( \' ) 이렇게 처리하여 표시한다. 오라클에서는 백 슬래시 대신 작은따옴표를 한번 더 사용하여( '' ) 처리하면 된다. 이 방법 외에도 CHR() 함수를 사용하여 문자열을 합치는 방법도 있다. 목차 작은따옴표를 두 번 연속으로 입력하는 방법 CHR() 함수를 사용하는 방법 작은따옴표를 두 번 연속으로 입력 SELECT 'Oracle SQL Developer' AS str1 , 'Oracle ''SQL'' Developer' AS str2 FROM ..
오라클에서 쿼리문을 작성할 때 문자열의 마지막 콤마(쉼표)를 제거해야 하는 상황이 자주 발생한다. 문자열의 마지막 문자를 제거하는 방법은 딱 정해져 있지 않으며 상황에 따라서 다양한 방법을 사용할 수 있다. 아래는 마지막 문자를 조금 더 효율적으로 제거할 수 있는 방법이며, 아래의 기능을 이해한다면 다양하게 활용할 수 있을 것이다. 목차 RTRIM() 함수로 마지막 콤마 제거 REGEXP_REPLACE() 함수로 마지막 콤마 제거 SUBSTR() 함수로 마지막 콤마 제거 RTRIM() 함수로 마지막 콤마 제거 WITH emp_t(enames) AS ( SELECT 'BLAKE,CLARK,JONES,' FROM dual ) SELECT enames , RTRIM(enames, ',') AS enames2 ..
오라클에서 날짜의 월, 일 앞의 0을 제거하기 위해서는 TO_CHAR 함수와 "FM" 키워드를 사용하면 쉽게 해결할 수 있다. 날짜 포맷에 "FM" 키워드를 붙이면 해당 위치부터 수치 값의 앞에 0이 있을 경우 제거를 한다. 날짜뿐만 아니라 시간에서도 시, 분, 초 앞의 0을 제거할 수 있으니 아래를 참고하면 된다. 목차 날짜 0 제거 방법 "FM" 키워드 위치별 0 제거 다양한 날짜 포맷에서 0 제거 시간 0 제거 방법 날짜 0 제거 방법 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS date1 , TO_CHAR(SYSDATE, 'FMYYYY-MM-DD') AS date2 FROM dual 날짜 포맷에 "FM" 키워드를 붙이면 년, 월, 일 앞에 0이 있을 경우 제거하고 문자..
오라클에서 MINUS 연산자를 사용하면 서로 다른 쿼리문에서 차집합의 데이터를 구할 수 있다. MINUS 연산자는 다른 데이터베이스의 EXCEPT 연산자와 비슷한 기능을 하며, 중복 값이 제거된 차집합 데이터가 반환된다는 것을 숙지해야 한다. MINUS 연산자를 사용하여 쿼리문을 작성하면 직관성을 좋지만 성능에 이슈가 발생하는 경우가 많다. 성능 이슈가 발생하면 NOT EXISTS 연산자로 쿼리문을 변경하는 것도 성능 향상에 좋은 방법이다. 목차 MINUS 기본 사용법 MINUS를 여러 번 사용하는 방법 MINUS는 중복이 제거된 차집합을 반환 MINUS 기본 사용법 SELECT empno, ename, job, deptno FROM emp WHERE sal > 2500 MINUS SELECT empno..
오라클에서 서로 다른 쿼리문에서 중복 값이 제거된 교집합 데이터를 조회하기 위해서는 INTERSECT 연산자를 사용하면 된다. 자주 사용하는 UNION ALL과 사용법은 비슷하지만 UNION ALL은 합집합을 반환하는 반면 INTERSECT는 쿼리 문의 데이터가 서로 겹치는 교집합의 데이터가 반환된다. 목차 INTERSECT 기본 사용법 INTERSECT를 여러 번 사용하는 방법 INTERSECT는 중복이 제거된 교집합을 반환 INTERSECT 기본 사용법 SELECT empno, ename, job, deptno FROM emp WHERE sal > 2500 INTERSECT SELECT empno, ename, job, deptno FROM emp WHERE deptno = 20 INTERSECT 연..
오라클에서 시퀀스(Sequence)의 세부 정보 및 시퀀스 리스트를 조회하기 위해서는 시스템 테이블을 사용하면 쉽게 조회할 수 있다. 시퀀스 최댓값, 캐시 사용 여부, 마지막 채번 값 등을 확인할 수 있으며 아래의 3가지 시스템 테이블을 사용할 수 있다. all_sequences 사용자 계정이 접근 가능한 모든 시퀀스 조회 user_sequences 사용자 계정에 생성된 모든 시퀀스 조회 dba_sequences 관리자(DBA) 권한으로 모든 시퀀스 조회 시퀀스 조회 방법 시퀀스명으로 조회 (세부 정보) SELECT * FROM all_sequences WHERE sequence_name = 'EMP_SEQ' 시퀀스명으로 시퀀스의 세부 생성 정보 및 현재 마지막 채번 값을 확인할 수 있다. 유저명으로 조..
오라클에서 숫자, 금액 등 수치 값에 천 단위로 콤마(쉼표)를 추가하기 위해서는 TO_CHAR 함수를 많이 사용한다. TO_CHAR 함수는 수치 값의 최대 길이를 예측 가능한 경우 오류 없이 사용할 수 있으며, 수치 값의 최대 길이를 예측하기 힘든 경우 정규식 함수를 사용하여 천 단위로 콤마를 추가할 수 있다. 목차 TO_CHAR 함수를 사용하는 방법 정규식 함수를 사용하는 방법 TO_CHAR 함수를 사용하는 방법 SELECT TO_CHAR(1234567890, 'FM999,999,999,999') AS val FROM dual 수치 값에 천 단위 콤마를 추가하기 위해서는 TO_CHAR 함수를 많이 사용한다. TO_CHAR 함수를 사용할 때는 두 번째 인자에 수치 값의 길이에 맞게 패턴 값을 부여해야 한..
오라클에서 중복 데이터를 추출하거나 찾기 위해서는 GROUP BY 절과 집계 함수를 사용하거나, OVER 절과 분석함수를 사용하는 방법이 있다. GROUP BY 절을 사용할 경우 중복 칼럼에 대한 건수만 조회 가능하고, OVER 절을 사용하면 중복 칼럼을 포함하여 전체 칼럼을 조회할 수 있다. 목차 집계함수를 사용하는 방법 (GROUP BY 절) 분석함수를 사용하는 방법 (OVER 절) 아래의 예제는 job, deptno가 중복(2건 이상)되는 데이터를 찾는 예제이다. 집계함수를 사용하는 방법 (GROUP BY 절) SELECT job , deptno , COUNT(*) AS cnt FROM emp GROUP BY job, deptno HAVING COUNT(*) > 1 GROUP BY 절과 집계함수를 ..
오라클에서 소수점 값을 올리거나 내려서 정수를 변환하기 위해서는 CEIL, FLOOR 함수를 사용한다. CEIL 함수는 지정한 값에 소수점이 있는 경우 무조건 올려서 다음 정수 값을 반환한다. FLOOR 함수는 지정한 값에 소수점이 있는 경우 소수점 값을 내려서 정수 값을 반환한다. 소수점 값을 반올림하거나 버림을 하기 위해서는 ROUND, TRUNC 함수를 사용하면 된다. 목차 소수점 올림 (CEIL 함수) 소수점 내림 (FLOOR 함수) 소수점 반올림, 버림 (ROUND, TRUNC) 소수점 올림 (CEIL 함수) SELECT CEIL(0.5) , CEIL(1.2) , CEIL(1.5) , CEIL(1.8) , CEIL(2.5) FROM dual CEIL 함수는 소수점 값이 있는 경우 무조건 올려서 ..