728x90

SQL 18

SQL: 윈도우 함수 문법 구조

※ SQL: Window Function Syntax Structure. 안녕하세요. 듀스트림입니다. 또다시 월요일입니다. 오늘 포스팅은 SQL을 다룬다면, 필수적으로 이해하고 있어야 하는 윈도우 함수의 문법 구조에 대해 알아보겠습니다.1. 윈도우 함수의 기본 문법 구조Window-function ( [expression] ) OVER ( [PARTITION BY ...] [ORDER BY ...] [ROWS | RANGE ...]) 한 줄로 표현하면 아래와 같은 구조로 되어있습니다.윈도우 함수 = 함수 + OVER(윈도우 정의)윈도우 함수 자체: SUM(), AVG(), ROW_NUMBER(), LAG(), LEAD() 등OVER() 안의 윈도우 정의: 어떤 범위(window..

SQL 2025.11.24

SQL: 행 스트림

※ SQL: Row Stream. 안녕하세요. 듀스트림입니다. 오늘은 SQL 엔진에서 하는 행 스트림 처리가 무엇인지에 대해 알아보겠습니다.카테고리를 DBMS에 넣을지 SQL에 넣을지 고민했지만, 그냥 SQL에 넣기로 했습니다.글을 작성하다 보면 내용보다는 의외로 이런 부분에서 로딩이 더 걸리는 것 같습니다. SQL 엔진에서 "행 스트림(row stream)" 이란 표현은 테이블의 모든 데이터를 한꺼번에 메모리에 올려놓지 않고, 한 행(row)씩(또는 일정한 묶음 단위로) 순차적으로 읽고 전달하는 처리 방식을 말합니다.즉, LATERAL이나 Nested Loop 같은 연산이 "행 스트림 기반(row stream based)"으로 동작한다는 건 아래처럼 이해하시면 됩니다.1. 행 스트림 처리?SQL의 실행..

SQL 2025.11.17

SQL: 상관관계(상관 서브쿼리)

※ SQL: Correlation. (Correlated subquery) 안녕하세요. 듀스트림입니다. 오늘 포스팅은 상관 서브쿼리에 관련된 내용입니다.SQL에서 상관관계(Correlation)란?주로 상관 서브쿼리(correlated subquery)를 의미하며,"서브쿼리가 실행될 때, 바깥 쿼리의 컬럼을 참조하는 관계"를 말합니다.즉, 서브쿼리가 독립적으로 실행되지 못하고,외부 쿼리의 각 행에 대해 내부 쿼리가 반복적으로 실행되는 구조를 의미합니다.1. 비상관 서브쿼리 (Non-correlated Subquery) 서브쿼리가 독립적으로 실행 가능합니다.SELECT emp_name, salaryFROM empWHERE salary > (SELECT AVG(salary) FROM emp);(SELECT ..

SQL 2025.10.27

SQL: 실행 순서

※ SQL: Order of Execution. 안녕하세요. 듀스트림입니다. 오늘은 초급 개발자분들이 보시면 많은 도움이 될 내용인 SQL 실행 순서에 대한 내용입니다.1. 우리가 코드로 작성할 때 사용하는 문법적 순서SELECT → FROM →JOIN→ON→WHERE → GROUP BY → HAVING → ORDER BY → LIMIT2. 실행 순서 (논리적 평가 순서)FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → (WINDOW) → DISTINCT → ORDER BY → LIMIT ※ LATERAL은 FROM 평가 중에 실행됩니다.3. 물리적 실행 순서(실행계획)옵티마이저가 실제로 선택한 방식(NL/Hash/Sort 등).→ 물리적 실행은 최적화를..

SQL 2025.10.24

SQL: EXISTS / NOT EXISTS

※ SQL: EXISTS / NOT EXISTS. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 predicate 구문인 EXISTS / NOT EXISTS에 대한 내용입니다.Predicate 구문?• SQL에서 TRUE / FALSE / UNKNOWN 중 하나로 평가되는 논리식(logical expression)을 뜻합니다.• WHERE, HAVING, ON 절 안에서 사용되어 어떤 행을 선택(필터링) 할지를 결정합니다.※ ON절은 문법적으로 가능은 하지만 의미적으로 맞지 않아 실제로 사용하지는 않습니다.1. EXISTS / NOT EXISTSEXISTS / NOT EXISTS는 "조건이 참인가?"를 판별하는 불리언 평가식(Boolean predicate)이고 데이터를 반환하지 않습니다. EXISTS:..

SQL 2025.10.15

SQL: ASC, DESC

※ SQL: ASC, DESC. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 반드시 꼭! 알아야 되는 정렬 순서에 대한 내용입니다. ASC와 DESC는 SQL에서 정렬 순서(ordering direction) 를 지정할 때 사용하는 키워드입니다.보통 ORDER BY 절과 함께 사용되며, 결과를 오름차순(ascending) 또는 내림차순(descending)으로 정렬합니다.1. ASC (Ascending Order)의미: 오름차순 정렬 (작은 값 → 큰 값)숫자: 1, 2, 3, 4 …문자: A, B, C …날짜: 오래된 날짜 → 최근 날짜기본값이므로 ASC는 생략해도 동일하게 동작합니다.SELECT name, ageFROM employeeORDER BY age ASC;-- 아래처럼 생략해도 동일한 의미입니..

SQL 2025.10.13

SQL: ROLLUP

※ SQL: ROLLUP. 안녕하세요. 듀스트림입니다. 오늘은 제가 애용하는 함수인 ROLLUP에 대한 내용입니다. 주로 수행 이력 건 수 체크, 오브젝트 집계, 유저 상태별 집계 등에 사용 중입니다.ROLLUP은 GROUP BY의 확장 기능으로, 계층적으로 집계 결과를 한 번에 구할 때 사용합니다.1. 기본 구문SELECT 컬럼1, 컬럼2, 집계함수FROM 테이블GROUP BY ROLLUP(컬럼1, 컬럼2); 먼저 컬럼1, 컬럼2 별 집계를 하고,그 다음 컬럼1 별 집계,마지막으로 전체 합계를 출력합니다.2. 매출 집계SELECT region, product, SUM(sales) AS total_salesFROM salesGROUP BY ROLLUP(region, product)ORDER BY regi..

SQL 2025.09.29

SQL: 인라인뷰

※ SQL: Inline view. 안녕하세요. 듀스트림입니다. 기본기도 중요하죠.그래서 하나씩 작성해보려고 합니다. 오늘 주제는 인라인뷰입니다.인라인뷰(inline view)는 FROM 절 안에 작성된 서브쿼리를 의미합니다.1. 기본 예시SELECT emp.emp_id, emp.emp_name, dept.dept_nameFROM ( SELECT employee_id AS emp_id, employee_name AS emp_name, department_id FROM employees WHERE salary > 5000) empJOIN departments dept ON emp.department_id = dept.department_id;employees 테이블에서 급여가 5000 이..

SQL 2025.09.26

SQL: 슬로우 쿼리 패턴

※ SQL: Slow Query Patterns. 안녕하세요. 듀스트림입니다. 요즘 그냥 순간순간이 퀘스트의 연속입니다.정보보호 심사 시즌도 시작해서 하루에 n개씩 처리해도 퀘스트가 계속 쌓이고 있습니다.그래도 일할 때는 바쁜 게 재밌습니다. (물론 휴식도 매우 중요합니다.) 오늘 포스팅에서는 어렵지 않지만, 꼭 알아야 하는 슬로우 쿼리 패턴에 대해 정리해 보겠습니다.1. 데이터 접근 패턴 관련풀 테이블 스캔 (Full Table Scan)인덱스를 활용하지 못하고 전체 데이터를 읽는 경우.(예: WHERE 조건에 함수 적용, 타입 불일치, 와일드카드 %값)비효율적인 조인 (Join)큰 테이블끼리의 Nested Loop Join조인 조건에 인덱스가 없어 Hash Join → Disk Spill 발생.다대다..

SQL 2025.09.24

SQL: CTE 튜닝

※ SQL: CTE Optimization from the Standard SQL Perspective. 안녕하세요. 듀스트림입니다. 튜닝 대상을 식별하다 보면 CTE(Common Table Expression)가 많은 쿼리가 항상 존재합니다. 이유는 간단합니다. CTE가 많으면 최적화가 제대로 이루어지지 않는 경우가 많기 때문입니다.그래서 CTE를 단계적으로 하나씩 살펴봐야 하며, 특히 다음과 같은 패턴에서 성능 저하가 자주 발생합니다.정렬과 집계가 많은 경우 CTE 내부에서 ORDER BY나 SUM, COUNT 등의 집계 연산이 반복되면, 불필요한 임시 테이블 생성과 디스크 I/O가 증가합니다.타입 캐스트나 복잡한 표현식 사용 CAST나 함수 기반 연산은 기존 인덱스를 활용하지 못해 풀 스캔(seq ..

SQL 2025.09.22
728x90