반응형

Programming/Database 17

동일한 테이블을 여러 번 조인하는 방법과 서브쿼리를 사용하는 방법의 차이

동일한 테이블을 여러 번 조인하는 방법과 서브쿼리를 사용하는 방법의 차이(서브 쿼리가 느린 이유) 해당 포스팅은 동일한 테이블을 여러 번 조인하는 쿼리를 보면서 다른 방법은 없는지? 성능적 이슈는 없는지? 하는 의문에서 시작하였으며, 조인을 사용하는 방식과 서브쿼리를 사용하는 방식 각각의 이론적* 장단점을 정리해 본 내용입니다. /*실무에서의 쿼리는 대부분 아래 예시의 쿼리보다 복잡할 뿐만 아니라 다양한 케이스가 존재할 수 있으며, 데이터 양이나 인덱스 등의 변수로 인해서도 쿼리의 성능이 다르게 나올 수 있기 때문에 어떤 것이 정답이다 라고는 할 수 없습니다.때문에 아래 내용은 이론에 기초한 장단점이며, 이론을 참고하되 성능적 부분은 실제 사용되는 쿼리의 실행 계획 등을 통해 확인할 필요가 있습니다.*/..

ROW_NUMBER OVER PARTITION BY 그룹 내 순위를 반환하는 함수

그룹 내 순위를 반환하는 함수 ROW_NUMBER OVER PARTITION BY /* PARTITION BY, ORDER BY 절 모두 여러 개의 컬럼을 기준으로 설정할 수 있습니다. */ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) 그룹 내 순위를 조회하는 함수 패턴인 'ROW_NUMBER OVER PARTITION BY'는 다음과 같은 문법으로 사용되는데요.문법의 각 부분에 대해서 살펴보면 다음과 같습니다.   ROW_NUMBER()먼저 'ROW_NUMBER()'는 윈도우 함수(ANSI/ISO SQL 표준 WINDOW FUNCTION) 중 순위를 반환하기 위해 사용되는 함수로 각 행에 고유한 번호를 부여합니다. (이때 번호는 1부터 시작하..

(SQLD) GROUPING SETS, ROLLUP, CUBE 내용 및 예시 정리

그룹화 확장 기능 GROUPING SETS, ROLLUP, CUBE 정리 해당 포스팅에서는 'GROUP BY' 절을 확장하여 다양한 방식으로 데이터를 그룹화할 수 있도록 해주는 기능인 'GROUPING SETS', 'ROLLUP', 'CUBE'에 대해서 살펴보겠습니다. 실무에서는 사용해 본 적이 없으나 이번에 SQLD 자격증 공부 과정에서 이러한 기능이 있다는 것을 알게 되었으며, 각 기능에 대한 설명과 예시를 통해 이해하기 쉽도록 정리해 보았습니다. GROUPING SETS 내용 및 예시SELECT EMP_NO, null, SUM(SAL) -- 사원번호(EMP_NO) 기준 그룹화된 급여 합계FROM SALARIESGROUP BY EMP_NOUNIONSELECT null, PAYMENT_MONTH, S..

테이블 백업이나 분석에 사용되는 CTAS (CREATE TABLE AS SELECT) 쿼리

테이블 백업, 분석에 사용되는 CTAS 쿼리 (CREATE TABLE AS SELECT) CTAS 쿼리란?CTAS(CREATE TABLE AS SELECT)는 선택(SELECT)된 데이터셋을 새로운 테이블로 생성할 때 사용되는 SQL 구문입니다.해당 구문은 기존 테이블의 데이터를 기반으로(원본 데이터를 훼손하지 않고) 새로운 테이블을 만들고자 할 때 유용하기 때문에 테이블 백업이나 데이터 분석용 테이블을 생성하는 데 주로 활용됩니다. CREATE TABLE new_table ASSELECT column1, column2, ...FROM existing_tableWHERE condition; CTAS는 기본적으로 다음과 같은 구문으로 사용되며, 전체 테이블을 복사하는 데 사용되거나 조건부 데이터를 복사, ..

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리'SELECT Query'는 데이터베이스에 저장된 데이터를 조회하는 쿼리로, SQL에서 가장 많이 사용되는 기본적이면서도 핵심적인 기능입니다.SELECT 쿼리는 일반적으로 작성하는 순서와 실행되는 순서가 다르다는 특징이 있는데요.쿼리가 실행되는 순서를 이해하는 것은 쿼리를 효율적으로 작성하고 또 최적화하는 데 중요한 역할을 한다고 생각합니다. 해당 포스팅에서는 'SELECT 쿼리의 실행 순서 및 처리 과정'을 정리하였습니다. SELECT 쿼리 실행 순서 및 처리 과정SELECT [DISTINCT] 필드명FROM 테이블명WHERE 조건GROUP BY 컬럼명HAVING 조건ORDER BY 컬럼명 [ASC || DESC](SELECT 쿼리 기본 구조)  '..

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 표준에서부터 나온 것이기 때문..

데이터 웨어하우스, 데이터 레이크 개념 및 차이점 정리(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 구문에 입력된 값들 ..

반응형