SQL의 모든 것/SQL의 실무 10

오라클 DISTINCT(중복 제거)

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. 오라클에서는 로우 중복을 제거하기 위하여 DISTINCT 함수를 사용한다.하지만, 개인적인 경험으로 실제 개발되는 결과 테이블에 DISTINCT 함수를 사용한다기 보다는 검증을 위한 단계에서여러 데이터들을 조합하는 과정 중에 사용하는 빈도수가 가장 많았다. 사용법은 간단하다.SELECT DISTINCT  중복 제거할 컬럼 FROM 테이블;SELECT DISTINCT *FROM TABLE;실제 로직을 반영하여 MART테이블을 생성하는 경우라면 사용하는 것을 추천하지 않는다. GROUP BY - COUNT를 통해 UNIQUE한 조건을 찾아내어 데이터 정합성을 보다 정확하게 맞추는 것이 좋다. 추가 문의사항 혹은 해당 과정을 더 쉽게 진행..

오라클 PIVOT 함수

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. 프로젝트를 진행하다 보면 행과 열을 바꿔 표현해야 하는 경우들이 있다. 분명 데이터의 한계는 BI툴로 극복할 수 있다. 하지만 모든 경우가 그런 것은 아니다. BI툴로도 해결하지 못하는 부분들을 쿼리로 해결할 수 있는 경우도 있다. 오늘 포스팅 주제는 PIVOT 함수이지만, 이론보다 실무 중심으로 예시를 들어보려 한다. 1. 피벗할 쿼리문에서 미리 기준을 정하고 집계한다. 2. 피벗 쿼리문에서 기준을 FOR에 집계값을 PIVOT에 위치시킨다. 3. 피벗된 컬럼은 기준 + 집계컬럼으로 문자열이 합쳐지기 때문에 따로 별칭을 부여한다. 물론 해당 예시는 이해를 돕기 위한 아주 간단하고도 용도가 없는 데이터지만 해당 방식으로 PIVOT 함수..

오라클 RANK OVER()

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. 사이트마다 어떤 데이터를 가공하느냐에 따라 다르겠지만, 검증용으로 순위를 매겨야 할 때도 있다.물론 BI툴을 활용해 해당 부분을 해결할 수도 있겠지만, 데이터로만 논의를 거쳐야 한다면 아래와 같은 예시로 들어볼 수 있다. "현재 인구가 가장 많은 도시에 번호를 매겨서 확인하고 싶어."SELECT CITY, SUM(PPTI) PPTI, CASE WHEN SUM(PPTI) IS NULL THEN 0 ELSE RANK() OVER (ORDER BY NVL(SUM(PPTI),0) DESC) END AS PPTI_RANKFROM COUNTRYGROUP BY CITY; 인구수 합계에 따른 내림차순으로 순위를 매긴다. 다만..

오라클 컬럼 순서 바꾸기

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다.  오라클 컬럼 순서를 바꾸고 싶을 땐 테이블 재생성 없이 ALTER 문으로 해결할 수 있다. 위 그림처럼 SALARY 컬럼과 GRADE 컬럼의 순서를 바꾼다고 가정해보자.ALTER TABLE MASTER.EMP MODIFY SALARY INVISIBLE;ALTER TABLE MASTER.EMP MODIFY GRADE INVISIBLE;ALTER TABLE MASTER.EMP MODIFY EXEC_DT INVISIBLE;ALTER TABLE MASTER.EMP MODIFY UPD_DT INVISIBLE;ALTER TABLE MASTER.EMP MODIFY USRNM INVISIBLE; ALTER TABLE 테이블명 MODIFY 컬럼명 ..

오라클 DML(INSERT, DELETE, UPDATE)

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. DML : Data Manipulation Language(데이터 조작 언어) 1. INSERTINSERT INTO 스키마명.테이블명 (컬럼1, 컬럼2, 컬럼3..)SELECT 컬럼1, 컬럼2, 컬럼3..FROM 스키마명.테이블; 데이터를 적재할 테이블의 컬럼명을 나열하고 적재할 쿼리의 컬럼 개수를 INSERT할 컬럼 개수와 정확하게 일치시켜야 한다. INSERT INTO 스키마명.테이블명SELECT 컬럼1, 컬럼2, 컬럼3..FROM 스키마명.테이블명; 만약 INSERT할 테이블의 컬럼개수와 순서가 정확하게 일치한다면 INSERT 절에서 컬럼을 생략할 수 있다. INSERT INTO MASTER.EMP (COL1, COL2, COL..

오라클 CREATE TABLE [PARTITION BY]

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다.실제 프로젝트를 개발하다보면, 모델링 혹은 요구사항 등 다양한 상황들에 의해 또는 DB 성능 이슈로 인해 테이블들을 다량 파티션 해야하는 경우가 있다. 가장 좋은 경우는 설계 단계부터 데이터 양이 많은 주제 영역을 예측하여 파티션을 할당하는 게 가장 좋겠지만, 늘 그런 꽃다운 상황은 일어나지 않는 것 같다. 아래 코드는 파티션 테이블 생성 방법이다.CREATE TABLE 스키마명.테이블명 ( 컬럼명 데이터타입(길이) , 컬럼1 VARCHAR2(100) , 컬럼2 VARCHAR2(100) , 컬럼3 VARCHAR2(100) , 컬럼4 VARCHAR2(100) , 컬럼5 NUMBER NOT NULL, ..

오라클 CREATE TABLE [AS SELECT]

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다.CREATE TABLE 스키마명.테이블명 ( 컬럼명 데이터타입(길이) , 컬럼1 VARCHAR2(100) , 컬럼2 VARCHAR2(100) , 컬럼3 VARCHAR2(100) , 컬럼4 VARCHAR2(100) , 컬럼5 NUMBER NOT NULL, 컬럼6 DATE DEFAULT SYSDATE NOT NULL, CONSTRAINT PK명 PRIMARY KEY (PK컬럼1, PK컬럼2) ); COMMENT ON TABLE 스키마명.테이블명 IS '테이블_코멘트';COMMENT ON COLUMN 스키마명.테이블명.컬럼명 IS '컬럼_코멘트'; 위 코드블럭은 오라클에서 테이블을 ..

오라클 CASE WHEN 사용법

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. 쿼리를 개발하면서 WHERE절로도 표현이 안되는 경우가 있었다.개발하면서 정형, 비정형 상관없이 WHERE절로는 한계가 있던 경우가 많아 난감했었는데, 아마 자바 개발자에겐 IF라는 함수의 논리가 쉬울 수 있으나 처음 쿼리를 접하는 이들에겐 다소 헷갈릴 수도 있는 개념이라고 생각이 든다. 이미 익숙해져버린 함수지만 분명 처음엔 생소해서 당황했던 기억이..[  CASE WHEN [조건] THEN [조건이 참일 때 결과] ELSE [조건이 거짓일 때 결과] END AS [별칭]  ]그럼 CASE WHEN 절에 대해 실무영역에선 어떻게 쓰이는 지 경험을 빗대어 설명하겠다.해당 데이터를 직급 기준으로 GROUP BY를 했다고 가정해보자. 그..

오라클 LEFT JOIN, RIGHT JOIN

본 글은 oracle 12g 및 실무 영역 기준으로 작성되었음을 알려드립니다.※ 개발을 진행하면서 처음으로 대학교나 학원 및 자격증 공부블 하면서 배웠던 내용을 써먹겠구나! 했는데 사실 가장 헷갈렸던 부분이였다. 필자는 mysql 및 postgresql의 환경만 접했었고, 대규모 프로젝트 경험 또한 없었기 때문에 식은땀이 났던 경험이 생각났다.1. INNER JOIN: 개발을 하다보면 실무에서는 INNER JOIN과 LEFT OUTER JOIN을 가장 많이 쓰는 것을 경험할 것이다. 그렇다면 INNER JOIN은 정확히 어떻게 사용할까?SELECT A.COL1 FROM TABLE_1 A, TABLE_2 B WHERE A.PK = B.PK; 위 코드와 같이 테이블 2개를 조인시킬때, 각 테이블의..

오라클 SELECT의 기초, WITH부터 서브쿼리까지

ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다. 1. SELECT이란?: DB에서 테이블을 조회하기 위한 가장 기본적인 DML(Data Manipulation Language)SELECT * FROM TABLE;어떠한 테이블을 조회하고자 할 때 사용'*'은 테이블의 컬럼을 의미하며, 전체를 조회하겠다는 의미이다.FROM 뒤에는 조회할 테이블 및 쿼리를 기입한다.2. WITH절의 SELECT: WITH절은 성능 문제로 잘 사용하지 않았었다. 하지만 변수 역할로 사용되어, 쓰일 수 있으니 숙지하는 것이 좋다.WITH AS 별칭 (SELECT COL1 FROM TABLE)SELECT * FROM 별칭;**WITH절 2번 이상 사용 시**WITH AS 별칭 (SELECT COL1 FROM..