728x90

💾DB 13

[ORACLE] LIMIT

MySQL을 사용해봤다면, Limit이라는 기능이 있는 것을 알고 있을 것이다!🤓 Limit은 가져오는 데이터 수에 원하는 만큼 제한을 둘 수 있는 기능인데, Oracle에서는 Limit과 같은 기능이 따로 없어 ROWNUM을 사용하여 MySQL의 Limit 처럼 사용이 가능하다. 아래와 같이 사용할 수 있다. ▶ 데이터를 5개만 가져오는 경우 -- MySQL SELECT * FROM DEMO_TABLE LIMIT 5; -- ORACLE SELECT * FROM DEMO_TABLE WHERE ROWNUM

💾DB 2023.11.13

[ORACLE] MERGE INTO

쿼리를 작성하다보면 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야 하는 경우가 있다. 이런 경우 MERGE 문을 사용하여 간단하게 쿼리를 작성할 수 있다. MERGE 문은 ORACLE 9i 부터 지원하고, MERGE문에 DELETE 절은 10g부터 지원한다. 단일테이블 단일테이블에 MERGE문을 사용하기 위해서는 USING 절에 테이블 대신 DUAL을 사용하면 된다. MERGE INTO EMP USING DUAL ON (A.EMPNO = 7788) WHEN MATCHED THEN UPDATE SET A.DEPTNO = 20 WHEN NOT MATCHED THEN INSERT (A.EMPNO, A.ENAME, A.DEPTNO) VALUES (7788, 'SCOTT', 20); JO..

💾DB 2023.07.13

[ORACLE] GROUP BY ROLLUP

GROUP BY 구문의 결과에 소계, 합계 정보를 같이 보고 싶을 때 어떻게 할까? 이번에 알아 볼 ROLLUP 함수를 사용하면 복잡한 과정 없이 간단한 구문만으로 쉽게 구할 수 있다. 실습은 https://livesql.oracle.com/ 에서 진행하였고, SCOTT 계정의 EMP 테이블을 사용하였다. 일반적으로 사용하는 GROUP BY 문으로 DEPTNO, JOB별 급여의 합을 구해봤다. 위의 GROUP BY 절에 ROLLUP을 추가하여 DEPTNO, JOB별 급여 합 뿐 아니라 전체 급여의 합과 부서별 급여의 합도 같이 구할 수 있다. 그러면, 여기서 전체 급여의 합 또는 부서별 급여의 합 중 하나만 보여 줄 수 있나요? 🙋‍♂️ 이게 되네...?🤔 자, 그러면 ROLLUP이 어떤 원리로 위의 예..

💾DB 2023.06.20

[ORACLE] NVL, NVL2, NULLIF, COALESCE

ORACLE의 NULL 관련 다양한 함수들을 알아보자! 🙋‍♂️ NVL NVL함수는 NULL 값을 다른 값으로 바꿀 때 사용 가능하며, 모든 데이터 타입에 적용 가능하다. SELECT DEPT_CODE , NVL(MGR_EMP_NO, 0) AS MGR_EMP_NO FROM DEPT DEPT_CODE MGR_EMP_NO --------- ---------- 110 230606011 120 0 130 220504092 NVL2 NVL2 함수는 NVL 함수와 DECODE 함수의 개념을 합쳤다고 볼 수 있다. VNL2(EXP, EXP1, EXP2) 형식으로 사용 가능하고 EXP의 값이 NULL이 아닌 경우 EXP1 반환하고, NULL인 경우 EXP2 를 반환한다. SELECT DEPT_CODE , NVL2(MG..

💾DB 2023.06.19

[ORACLE] DECODE와 CASE

ORACLE의 DECODE와 CASE에 대해 알아보자 🤓 DECODE와 CASE는 SQL에서 조건에 해당하는 값을 추출할 때 사용한다. DECODE 조건에 따라 데이터를 다른 값이나 컬럼 값으로 추출할 수 있으며, DECODE(VALUE, COND1, THEN1, COND2, THEN2, ...) 형태로 사용할 수 있다. VALUE == COND1 일 경우 THEN1 반환, VALUE == COND2 일 경우 THEN2 반환한다. DECODE 내에 DECODE를 중첩하여 사용 가능하고 일반적으로 아래와 같이 사용된다. SELECT DEPT_CODE , DECODE(DEPT_CODE , 10, 'SALES' , 20, 'ACCOUNTING' , 30, 'HR') AS DEPT_NAME FROM DEPT D..

💾DB 2023.06.19

[ORACLE] INDEX 타지 않는 경우 (feat. INDEX HINT)

시스템을 운영하다 보면 꼭 한번씩 DB상의 처리 속도가 늦어져 장애🤯로 이어질 뻔한 상황이 생기는데, 로직 상의 문제인 경우도 있지만, 내가 생각했던 INDEX를 타지 않거나 옵티마이저(OPTIMIZER)가 실행계획을 변경시켜 버리는 상황이 종종 발생하곤 했었다. 옵티마이저(OPTIMIZER)?? 그게 뭔데? 🙋‍♂️ 옵티마이저(OPTIMIZER)에 대해 간단히 설명하면, 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다. 먼저, INDEX를 타지 않는 경우에 대해 알아보고, 옵티마이저에 의존하지 않고 INDEX를 탈 수 있도록 HINT를 주는 방법에 대해 추가적으로 알아보자. INDEX를 타지 않는 경우 1) INDEX가 걸려있는 컬럼 절을 변형한 경우 - ..

💾DB 2022.09.15

[PostgreSQL] LAG, LEAD 사용하기

LAG와 LEAD는 어떤 함수일까? 🤔 조회 결과 또는 결과 내 특정 집합 안에서 특정 컬럼의 이전 행의 값(LAG) 또는 다음 행의 값(LEAD)을 구하는 함수이다. 이전 또는 다음 행의 값을 구한다는 것은 알겠는데 어떤 경우에 사용되나요? 🙋‍♂️ 아주 자주 쓰이는 함수는 아니지만, 이전 행의 값과 현재 값을 비교하거나 계산할 때 복잡하게 만들어야 하는 쿼리를 LAG, LEAD 함수를 쓰면 한 줄로 간단하게 끝낼 수 있다. 아래의 예시를 보자. 위와 같은 데이터가 있고, 총무팀의 3일 전 비용과 현재 비용을 비교하여 값이 오른 행만을 추출하려 한다면 어떻게 해야 할까? 복잡하게 보이지만 LAG 함수를 사용하면 3일 전 비용을 가져오는 컬럼을 만들 수 있다. select *, lag(cost, 3) o..

💾DB 2022.07.08

[PostgreSQL] Extract 함수 (날짜 시간 추출)

Extract 함수는 PostgreSQL에서 날짜의 특정 부분을 추출하는 함수이다. 년도(year), 월(month), 일(day) 등을 추출할 수 있고, 사용 방법과 어떤 부분을 추출할 수 있는지는 아래에서 알아보자. 먼저 Extract는 아래와 같이 사용할 수 있다. EXTRACT(field from source) field는 year, month, day 등의 날짜 또는 시간의 데이터 요소를 뜻하고, source는 실제 timestamp값을 의미한다. 먼저 field로 사용할 수 있는 인자에 대해 알아보자. 여러 인자가 있지만, 실제 업무에서 많이 사용하는 것들 위주로 한번 정리해보았다. Field 설명 YEAR 년도 MONTH 월 ( 1 ~ 12 ) DAY 일 ( 1 ~ 31 ) DOW 요일 ( ..

💾DB 2022.07.06

[PostgreSQL] pgAgent

PostgreSQL에서 스케줄러를 통해 특정 쿼리 또는 프로시저를 실행시키고자 할 때, PostgreSQL의 pgAgent를 사용할 수 있다. pgAgent의 설치 방법과 사용법을 알아보자. 먼저 pgAgent를 설치하기 위해서는 당연히 PostgreSQL설치가 선행되어야 한다. PostgreSQL 설치 시 stackbuilder도 함께 설치하고, 설치가 완료되면 PostgreSQL 설치 폴더의 bin 파일 하위 stackbuilder를 실행한다. stackbuilder를 실행하여 다음과 같이 pgAgent를 선택하여 설치를 진행한다. 단계에 따라 설치하면 되고, 중간에 PostgreSQL 설치 시 지정했던 password와 window password를 입력하는 항목이 나오니 설치했던대로 입력하자! p..

💾DB 2022.06.10

[PostgreSQL] UPDATE/DELETE JOIN

PostgreSQL에서 UPDATE 시 다른 테이블의 내용을 참조하여야 할 때 다음과 같이 사용 가능하다. UPDATE product SET "Amount" = 1 FROM material m, worker w WHERE m.id = product."Material_id" AND w.id = product."Worker_id" AND m."Code" = 'test' AND w."Name" = '홍길동' INNER JOIN과 LEFT JOIN 구문 사용할 수 없고, 위와 같은 방식으로 from절에 테이블들을 나열하여 사용한다. UPDATE의 target이 되는 테이블은 from절에 들어가지 않는다는 것을 유의하자! DELETE문에서 JOIN을 사용해야 할 때, 다음과 같이 사용한다. DELETE FROM ..

💾DB 2022.01.24

[PostgreSQL] import csv file

개발을 하다 보면 엑셀로 정리된 데이터를 DB 테이블에 Insert 하여 작업하는 경우가 종종 있다. 이런 경우 엑셀 데이터를 Postgresql DB로 Import 하는 방법에 대해 알아보자. 예를 들어 다음과 같은 데이터가 있다고 생각해보자. 첫 번째 열부터 순서대로 이름, 나이, 주소를 나타내는 인적정보에 관한 데이터이다. 다음 데이터를 csv파일로 저장하게 되면 다음과 같은 형태로 저장되고, 기본적인 csv파일 저장 옵션은 ','(쉼표)로 구분이다. 이제 csv파일을 가지고 Postgresql DB에 Import 해보자. copy 테이블명(id, field1, field 2) from 'C:\test.csv' with delimiter ',' csv header; 위와 같은 명령어로 csv파일을 ..

💾DB 2021.08.25
728x90