Programming/Database 16

(Oracle) MERGE INTO 구문 사용 방법 및 예시

오라클 MERGE INTO 구문 사용 방법 및 예시 정리 시스템 상의 여러 로직에서는 데이터 처리 시 다음과 같이 데이터를 처리해야 하는 경우가 다수 있습니다. 1. 해당 데이터가 있는지 확인 'SELECT' 2-1. 데이터가 있는 경우 'UPDATE' 2-2. 데이터가 없는 경우 'INSERT' 이럴 때 오라클의 'MERGE INTO' 구문을 사용하면 조건에 따라 테이블에 데이터를 삽입하거나 업데이트하는 것을 한 번에 처리할 수 있는데요. 이어지는 내용을 통해 'MERGE INTO 구문의 사용 방법과 예시'에 대해서 살펴보겠습니다. MERGE INTO 구문 사용 방법 MERGE INTO [TABLE / VIEW] -- UPDATE 또는 INSERT 할 대상 테이블 또는 뷰 USING [TABLE / V..

(Oracle) 계층형 쿼리 START WITH CONNECT BY PRIOR

Oracle 계층형 쿼리 START WITH CONNECT BY PRIOR 오라클 쿼리 분석 과정에서 'START WITH ~ CONNECT BY PRIOR (+ ORDER SIBLINGS BY)'라는 계층형 쿼리 구문을 발견하여 관련 내용을 정리해 보았습니다. 계층형 쿼리란? 데이터베이스에서 계층적인 구조를 가진 데이터를 조회하거나 조작하기 위해 사용되는 쿼리입니다. 대표적으로 '기업의 조직도', '제품 카테고리', '게시글 및 댓글' 같은 데이터 유형이 계층 구조를 가질 수 있으며, 이러한 데이터를 효율적으로 다루기 위해 계층형 쿼리를 사용합니다. START WITH ~ CONNECT BY PRIOR 'START WITH ~ CONNECT BY PRIOR' 구문은 오라클에서 계층형 쿼리를 위해 지원되..

MySQL CTE란? (+ WITH RECURSIVE CTE)

MySQL CTE(Common Table Expression)란? 최근 SQL 문에서 'WITH RECURSIVE CTE'라는 구문이 사용되는 것을 보고 공식 문서를 참고하여 관련된 기본적인 내용을 정리하게 되었습니다. CTE란? 'CTE(Common Table Expression)'는 하나의 쿼리문 범위 내에서만 존재하며 여러 번 참조될 수 있는 이름이 지정된 일회성 테이블(정확하게는 결과 데이터)입니다. CTE에는 '비재귀적(Non-Recursive) CTE'와 '재귀적(Recursive) CTE' 두 가지가 있으며, 아래 내용을 통해 각각에 대해 예시를 포함하여 자세하게 살펴보도록 하겠습니다. * CTE는 MySQL 8.0.1 버전에서 도입되었으며, ANSI-SQL99 표준에서부터 나온 것이기 때문..

Oracle ROWNUM, ROW_NUMBER() 사용하기 (MySQL LIMIT와 차이점)

Oracle ROWNUM, ROW_NUMBER() 사용하기 MySQL에서는 SELECT 문에서 'LIMIT'를 통해 조회할 데이터 결과 값의 로우를 제한할 수 있습니다. 반면 Oracle에서는 'LIMIT'가 없기 때문에 결과 값의 로우를 제한하기 위해 'ROWNUM' 또는 'ROW_NUMBER()'를 사용하는데요. 해당 포스팅은 Oracle에서 'ROWNUM' 및 'ROW_NUMBER()'를 사용하는 방법과 MySQL(및 PostgreSQL)의 'LIMIT'와의 차이점을 살펴보겠습니다. MySQL LIMIT, Oracle ROWNUM 사용 방법 비교 id (BIGINT or NUMBER) name (VARCHAR) state (VARCHAR) 1 김학생 NORMAL 2 이학생 NORMAL 3 최학생 W..

(Oracle) TO_CHAR, TO_NUMBER, TO_DATE 함수 정리

오라클(Oracle) TO_CHAR, TO_NUMBER, TO_DATE 함수 정리 최근에 오라클을 조금 사용해 보게 되면서 그 과정에서 알게 된 'TO_CHAR', 'TO_NUMBER', 'TO_DATE' 함수에 대해 정리한 내용입니다. TO_CHAR 먼저 'TO_CHAR' 함수는 날짜, 숫자 등의 값을 문자열로 변환하는 함수입니다. 해당 함수의 다양한 변환 방법의 예시는 아래와 같습니다. 1. 날짜 관련 -- 날짜 포맷 변경1 SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') -- 20231216 , TO_CHAR(SYSDATE, 'YYYY/MM/DD') -- 2023/12/16 , TO_CHAR(SYSDATE, 'YYYY-MM-DD') -- 2023-12-16 , TO_CHAR(SYSD..

데이터 웨어하우스, 데이터 레이크 개념 및 차이점 정리(Data Warehouse, Data Lake)

데이터 웨어하우스(Data Warehouse), 데이터 레이크(Data Lake) 개념 및 차이점 데이터 웨어하우스란? 데이터 웨어하우스(Data Warehouse)란 정보(data)와 창고(warehouse)의 의미가 합성되어 만들어진 어휘로, 조직 전체의 여러 소스들(ERP, CRM, 데이터베이스, IoT, 파트너 시스템 등)로부터 데이터를 저장하고 처리하여 비즈니스 인텔리전스(BI) 활동, 특히 분석을 활성화 및 지원하기 위해 설계된 데이터 관리 시스템의 한 유형입니다. 쉽게 사용자의 의사 결정에 도움을 주기 위하여 정보들이 분석 가능한 형태로 저장되어 있는 중앙 저장소이며, 때문에 '의사결정 지원 시스템'이라고도 하는데요. 데이터 웨어하우스는 기존의 정보를 활용해 더 나은 정보를 제공하고, 데이터..

Java Enum 타입 데이터베이스 저장 형식은 뭐가 좋을까? (enum, varchar, tinyint)

Java Enum Type 데이터 DB 저장 형식 (enum, varchar, tinyint) 해당 내용은 데이터베이스 설계 과정에서 Java Enum 타입의 데이터는 어떤 형식으로 저장되는 것이 좋은가에 대해 고민하며 정리한 내용입니다. 실제로는 'varchar'와 'tinyint' 사이에서 고민했으나, mysql의 경우에는 'enum' 타입도 존재하기 때문에 mysql enum 타입에 대해서도 함께 비교하였습니다. enum을 함께 비교하기는 하였지만 mysql의 enum 타입은 여러 이유로 인해 많이 쓰이지는 않는데요. 아래 내용에서는 mysql enum 타입의 특징과 쓰이지 않는 이유에 대해 간단하게 살펴보고 이어서 enum, varchar, tinyint 각각의 타입에 대해 실제 데이터를 넣고 조..

MariaDB 가상 필드를 통한 JSON 인덱싱 방법(Generated Columns)

Indexing a Generated Column to Provide a JSON Column Index. 저장되는 데이터들이 많아지고, 또 그 데이터들의 형태가 복잡 + 다양하게 활용되고 있는데요. 때문에 관계형 데이터베이스(Relational Database)에서도 json 타입을 지원하고, 또 사용자들에게도 많이 사용되는 추세입니다. 'mysql'의 경우 MySQL 8.0.13부터 json 데이터 타입 필드의 인덱싱을 지원하는 반면, 'mariadb'의 경우 아직까지 json 타입의 필드에 대한 인덱싱이 지원되지 않고 있는데요. 아래 내용을 통해 'mariadb에서 가상 필드를 통한 json 타입 필드의 Indexing 방법'을 살펴보겠습니다. (해당 방법은 MySQL에서도 적용될 수 있습니다.) ..

(MySQL) IN, NOT IN, EXISTS, NOT EXISTS 동작 방식 정리

해당 내용은 IN / NOT IN / EXISTS / NOT EXISTS 동작 방식을 정리한 내용으로 MySQL을 기준으로 실행하고 작성된 내용이지만 MSSQL, Oracle 등에서도 적용되는 내용입니다. (예시에 사용될 orders table, customers table입니다.) (예시에 사용될 orders table의 data입니다.) (예시에 사용될 customers table의 data입니다.) IN SELECT * FROM orders o WHERE o.customer_id IN (1, 2); -- or 연산자로 변환된 쿼리 SELECT * FROM orders o WHERE (o.customer_id = 1 OR o.customer_id = 2); in 구문의 경우 in 구문에 입력된 값들 ..

데이터 타입 CHAR, VARCHAR의 차이점, 무엇을 써야할까?

대표적인 문자열 데이터 타입에는 CHAR, VARCHAR가 있습니다. 이 두 가지의 차이점은 무엇인지, 각각의 특징은 무엇인지에 대해서 살펴보겠습니다. 먼저 데이터 타입(DataType)에 대해서 알아보면, 컴퓨터 시스템과 프로그래밍 언어의 측면에서 보는 데이터 타입(자료형)은 실수, 소수, 정수, 문자열, 날짜 및 시간 타입 등, 여러 종류의 데이터를 식별하는 타입을 말하는데요. 자료형에 대해 가능한 값, 수행할 수 있는 명령어, 데이터의 형태 및 의미, 크기, 해당 자료형의 값이 저장되는 방식을 이야기합니다. 데이터베이스의 측면에서 보는 데이터 타입 역시 비슷한데요. 테이블을 정의할 때는 컬럼 별로 저장할 수 있는 타입까지 명시해야 하는데, 컬럼에 들어갈 수 있는 데이터 유형은 일반적으로 숫자형, 문..