오라클에서 동명이인을 찾기 위해서는 분석함수(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 연..
SQL Server에서는 비율, 백분율(%)을 구하기 위해서는 OVER 절을 사용하여 전체 합계를 구한다면 연산을 하면 쉽게 해당 값을 구할 수 있다. 오라클의 RATIO_TO_REPORT 함수와 같은 비율을 구하는 함수가 존재하지 않기 때문에 직접 연산식을 만들어야 한다. 아래의 예제를 충분히 이해하면 쉽게 문제를 해결할 수 있을 것이다. 목차 비율 구하기 백분율(%) 구하기 (활용 예제) 그룹별 백분율(%) 구하기 비율 구하기 SELECT ename , sal , CONVERT(float, sal) / SUM(sal) OVER() AS sal_ratio FROM emp WHERE job = 'SALESMAN' 비율 = 자신의 값 / 전체 합계 CONVER(float, sal) MSSQL에서는 정수(피..
SQL Server에서는 정수와 정수를 나누면 몫만 반환되고 소수점 이하의 값은 반환되지 않는다. 그리고 나머지를 구하기 위해서는 % (나머지) 연산자를 사용하면 되며 MOD 함수는 없다. 정수(피제수)와 정수(제수)를 나눴을 경우 소수점 이하의 값도 반환받길 원한다면 피제수 또는 제수를 실수로 형 변환을 하면 소수점 이하의 값도 반환받을 수 있다. 몫과 나머지 구하기 (정수) SELECT 10 / 3 AS quotient , 10 % 3 AS remainder 피제수(10)와 제수(3)가 모두 정수인 경우 나누기를 하면 몫만 반환된다. (소수점 이하의 값은 반환 안됨) %(나머지) 연산자를 사용하면 나머지 값만 반환할 수 있다. 정수를 나눌 때 소수점 표시하기 SELECT 10.0 / 3 AS resu..
SQL Server에서 평균값을 구하기 위해서는 AVG 함수를 사용하면 된다. AVG 함수를 사용하지 않고 SUM 함수와 COUNT 함수를 사용해도 동일한 평균값을 구할 수 있다. AVG 함수는 평균을 구할 칼럼의 값이 NULL인 경우 집계 대상에서 제외하는 특성이 있으니 이점을 유의하여 함수를 사용해야 한다. 목차 전체 평균 건수 구하기 그룹별 평균 구하기 (GROUP BY 절) 분석함수를 사용하여 평균 구하기 (OVER 절) 전체 평균 건수 구하기 평균 구하기 SELECT AVG(sal) FROM emp WHERE job = 'SALESMAN' 직업(job)이 "SALESMAN"에 해당하는 직원의 평균 급여를 구한다. ( 평균 급여 = 직원 총 급여 합계 / 직원수 ) 평균 구할 때 NULL이 있을 ..
SQL Server에서 데이터 건수를 집계하기 위해서는 COUNT, COUNT_BIG 함수를 사용하면 된다. 일반적으로는 COUNT 함수를 사용하며, 데이터 건수가 21억 건이 넘어간다면 COUNT_BIG 함수를 사용해야 한다. COUNT 함수 인자에 DISTINCT 연산자를 사용하면 해당 칼럼을 중복 제거하여 건수를 집계할 수 있다. COUNT(칼럼명)으로 사용할 경우 해당 칼럼의 값이 NULL인 경우 건수 집계에서 제외되니 주의해야 한다. 목차 전체 데이터 건수 구하기 그룹별 건수 구하기 (GROUP BY 절) 분석함수를 사용하여 건수 구하기 (OVER 절) 전체 데이터 건수 구하기 건수 구하기 SELECT COUNT(*) FROM emp WHERE job = 'SALESMAN' 직업(job)이 "S..