dbms

소규모 프로젝트나 개인적으로 토이 프로젝트를 진행할 때는 굳이 DB를 나누지 않아도 괜찮지만, 대규모 프로젝트를 다루는 현업에서는 개발서버에서 테스트를 진행한 뒤 문제가 없음을 파악하고 운영서버에 반영해 사용자들에게 서비스하는게 일반적이다. 이럴 때 개발서버의 DB와 운영서버의 DB를 동기화 시키는 것이 중요한데, 대표적인 무료 DBMS 툴인 SqlDeveloper를 사용하면 각 DB의 차이점을 쉽게 비교가 가능하다. 1. 상단 메뉴 Tools(도구) → Database Diff(데이터베이스 차이) 2. Source Connection, Destination Connection에 각각 개발DB, 운영DB 지정 3. 비교가 필요한 Standard Object Types 선택 4. 비교 대상 상세 지정(미지..
GROUPING() 함수는 SELECT 절에서 사용하는 함수이다. GROUPING() 함수의 인자로 그룹핑 대상인 컬럼을 지정하면 해당 컬럼이 NULL일 때 1, NOT NULL일 때 2를 반환하는 함수이다. SELECT B.DNAME , A.JOB , SUM(A.SAL) , GROUPING(B.DNAME) AS GP1 , GROUPING(A.JOB) AS GP2 FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY ROLLUP(B.DNAME, A.JOB) ORDER BY 1,2 ; 이를 CASE-WHEN 절과 함께 활용하면 NULL 값을 소계, 총계 등으로 지정할 수 있다. SELECT CASE WHEN T.GP1 = 1 THEN '총계' ELSE T.DNA..
CUBE() 함수는 인자로 받는 컬럼으로 만들 수 있는 모든 조합으로 집계하여 추출하는 함수이다. 위와 같은 결과를 얻으려면, 다음과 같이 작성할 수 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY CUBE(B.DNAME) ORDER BY 1 ; 얼핏보면 ROLLUP() 함수와 다를 거 없는 함수처럼 보이지만, CUBE() 함수는 받는 인자가 많아질수록 조합이 다양해져 출력하는 결과가 훨씬 많아진다. SELECT B.DNAME , A.JOB , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY CUBE(B.DNAME, A.JOB) ..
GROUPING SETS() 함수는 이전 포스팅에서 다뤘던 ROLLUP()과 마찬가지로 GROUP BY 절에서 사용하는 함수이며, 인자로 받는 컬럼 별 집계함수 값을 리턴하는 함수이다. 위와 같은 결과를 얻고 싶을 때, GROUPING SETS 함수를 활용하면 다음과 같이 짤 수 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY GROUPING SETS(B.DNAME) ORDER BY 1 ; 근데 뭔가 이상하지 않은가? 위와 같은 결과를 더 쉽게 추출하는 방법을 우리는 알고 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B...
일상적인 업무에서 쿼리를 짜다 보면, 합계를 구하고 싶을 때가 정말 많다. 예시로 DEPT 테이블의 부서명 컬럼을 기준으로 해당 부서에 속한 사원들의 총 급여를 구하려면 쿼리를 어떻게 짜야할까? 확장 GROUP 함수를 모른다면, 다음과 같이 작성했을 것이다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY B.DNAME UNION ALL SELECT NULL , SUM(A.SAL) FROM EMP A ORDER BY 1 ; 위 방식이 틀렸다는 것은 아니다. 하지만 확장 GROUP 함수를 쓴다면 다음처럼 간략하게 표현 가능하다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEP..
좌측 그리드의 row를 클릭하면 오른쪽 그리드가 조회되는 화면을 만들었는데, 좌측 그리드의 값에 따라 조회하는 테이블이 각각 달라서 우측 그리드의 컬럼을 정적인 값으로 고정하기 힘들었다. 할 순 있었지만 애매한 단어 선택으로 사용자에게 혼란을 야기할 것이 분명했고, 이는 곧 수정 요청 사항으로 접수되기 마련이다(경험이다). 그래서 우측 그리드가 조회될 때마다 컬럼을 동적으로 세팅되도록 설계했다. 이 때 동적으로 세팅되는 컬럼 값을 조회해오는 컬럼 값 그대로 뿌려주니 전부 영어로 출력되어, 데이터를 알아보기 어려워서 각각의 테이블 컬럼 코드와 매핑된 컬럼 값을 가져와서 뿌려주기로 했다. SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '테이블명' OR SELECT ..
xoghks_h
'dbms' 태그의 글 목록