728x90
반응형

분류 전체보기 66

MySQL 인덱스 기본 개념 및 활용

📘 3-1. MySQL 인덱스 기본 개념 및 활용MySQL에서 인덱스는 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다. 인덱스는 데이터를 빠르게 검색할 수 있도록 돕는 데이터 구조로, 일반적으로 검색, 정렬, 그룹화 등의 작업을 빠르게 수행할 수 있게 합니다. 이번 포스팅에서는 MySQL 인덱스의 기본 개념과 활용 방법을 자세히 알아보겠습니다.📌 인덱스란?인덱스는 책의 목차처럼, 데이터베이스 테이블의 데이터를 빠르게 찾을 수 있도록 도와주는 자료구조입니다. 인덱스는 주로 B-Tree 또는 Hash 기반으로 구현되며, 테이블의 특정 열에 대해 빠른 검색을 가능하게 합니다.📌 인덱스의 역할검색 속도 향상: WHERE 절에서 조건을 만족하는 행을 빠르게 찾을 수 있도록 도와줍니다.정렬 속도 향상..

RANK, ROW_NUMBER를 활용한 순위 처리

📘 2-5. RANK, ROW_NUMBER를 활용한 순위 처리실무에서는 사용자 활동 순위, 인기 상품 TOP N, 최신 데이터 추출 등 순위 기반 데이터가 자주 필요합니다.이럴 때 윈도우 함수(Window Function) 중 RANK(), ROW_NUMBER(), DENSE_RANK() 등을 활용하면 효율적으로 처리할 수 있습니다.📌 기본 개념: ROW_NUMBER / RANK / DENSE_RANKROW_NUMBER(): 동일 값이 있어도 고유한 순번을 부여 (1, 2, 3...)RANK(): 동일 값은 같은 순위를 부여하고 건너뜀 (1, 1, 3...)DENSE_RANK(): 동일 값은 같은 순위를 부여하고 건너뛰지 않음 (1, 1, 2...)✅ 예제 1: 사용자별 총 구매액 순위SELECT ..

조건 만족 누적합 (Cumulative SUM)

📘 2-4. 조건 만족 누적합 (Cumulative SUM)데이터 분석이나 실무 통계에서는 특정 조건을 만족하는 값의 누적합(Cumulative SUM)을 구해야 할 때가 많습니다.예를 들어, 일자별 매출 누계, 유저 가입자 누적 수 등을 구할 때 사용됩니다.📌 기본 개념: 윈도우 함수 (Window Function)MySQL 8.0 이상에서는 OVER() 윈도우 함수를 이용해 누적합을 쉽게 계산할 수 있습니다.SELECT sale_date, amount, SUM(amount) OVER (ORDER BY sale_date) AS cumulative_salesFROM sales;📌 의미: 날짜 기준으로 amount 값을 누적해서 더한 컬럼을 생성합니다.✅ 예제 1: 일자별 매출 누적합SELEC..

GROUP BY와 CASE WHEN을 활용한 조건부 집계

📘 2-3. GROUP BY와 CASE WHEN을 활용한 조건부 집계실무에서는 하나의 쿼리에서 여러 조건별로 데이터를 집계해야 하는 경우가 많습니다.이럴 때 GROUP BY와 CASE WHEN을 함께 사용하면 조건별 카운트, 합계 등을 효율적으로 처리할 수 있습니다.📌 기본 개념CASE WHEN을 SUM 또는 COUNT와 함께 사용하여 조건에 맞는 데이터를 분기 처리합니다.SELECT user_id, SUM(CASE WHEN status = 'complete' THEN 1 ELSE 0 END) AS complete_count, SUM(CASE WHEN status = 'cancel' THEN 1 ELSE 0 END) AS cancel_countFROM ordersGROUP BY user_id;..

서브쿼리 vs JOIN 언제 어떻게 쓰나

📘 2-2. 서브쿼리 vs JOIN 언제 어떻게 쓰나MySQL에서 같은 데이터를 가져오더라도 서브쿼리와 JOIN 중 어떤 방식을 선택하느냐에 따라 성능과 가독성이 달라질 수 있습니다.이번 포스팅에서는 실무 상황에서 서브쿼리와 JOIN을 언제, 어떻게 써야 하는지 비교합니다.📌 기본 개념 요약서브쿼리 (Subquery): 쿼리 안에 또 다른 SELECT 쿼리를 사용하는 방식JOIN: 여러 테이블을 키를 기준으로 연결하여 한 번에 데이터를 가져오는 방식✅ 예제 1: 사용자별 총 주문 금액 구하기🔹 서브쿼리 방식SELECT u.id, u.name, (SELECT SUM(o.price) FROM orders o WHERE o.user_id = u.id) AS total_spentFROM users ..

조건부 COUNT와 SUM 쓰는 법

📘 2-1. 조건부 COUNT와 SUM 쓰는 법MySQL에서 조건을 기준으로 집계를 할 때는 CASE WHEN 또는 IF 문을 COUNT나 SUM 함수 안에 사용하는 방식이 자주 활용됩니다.이 포스팅에서는 실무 예제를 통해 조건부 집계 쿼리를 정리합니다.📌 기본 개념: 조건부 COUNT & SUMSELECT COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count, SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_sumFROM users;→ status가 'active'인 사용자 수를 세고,gender가 'M'인 사용자 수를 합산합니다.COUNT는 NULL을 제외하고 세기 때문에 WHEN 조건을 ..

정렬(ORDER BY), 그룹화(GROUP BY), 집계 함수 정리

📘 1-6. 정렬(ORDER BY), 그룹화(GROUP BY), 집계 함수 정리SQL 쿼리에서 데이터를 원하는 순서로 정렬하거나 그룹화하여 통계를 내는 것은 데이터 분석과 통계 처리의 핵심입니다.이번 포스팅에서는 ORDER BY, GROUP BY, 그리고 자주 쓰는 집계 함수(AVG, COUNT, SUM, MAX, MIN)를 실무 중심으로 정리합니다.📌 ORDER BY – 정렬SELECT * FROM users ORDER BY created_at DESC;설명: 가입일(created_at) 기준으로 내림차순 정렬. 최신 데이터가 먼저 나옵니다.기본 정렬 방식은 오름차순(ASC), 내림차순은 DESC로 명시합니다.✅ 복수 조건 정렬SELECT * FROM products ORDER BY category..

WHERE 절과 연산자 정리

📘 1-5. WHERE 절과 연산자 정리WHERE 절은 데이터 조회 시 조건을 설정하는 필수 문법입니다.단순 조건부터 복잡한 논리 연산, 범위 필터링까지 다양하게 활용되며 SQL의 핵심 도구 중 하나입니다.🎯 기본 WHERE 문법SELECT * FROM users WHERE email = 'test@example.com';→ email이 'test@example.com'인 사용자만 조회합니다.⚙️ 자주 쓰이는 비교 연산자 연산자 의미 예시 = 같다 WHERE name = '홍길동' !=, 같지 않다 WHERE status != 'Y' >, >= ..

CREATE, INSERT, SELECT 문 기초

📘 1-4. CREATE, INSERT, SELECT 문 기초MySQL에서 가장 기본적이면서도 필수적인 SQL 문법인 CREATE, INSERT, SELECT에 대해 살펴보겠습니다.데이터베이스 설계부터 데이터 입력, 조회까지의 흐름을 이해하는 것이 핵심입니다.🧱 CREATE TABLE – 테이블 생성CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL, name VARCHAR(100), created_at DATETIME DEFAULT CURRENT_TIMESTAMP); AUTO_INCREMENT: 자동으로 1씩 증가 (주로 PK에 사용) PRIMARY KEY: 테이블 내 고유 식별자 DEFA..

기본 데이터 타입 정리 (INT, VARCHAR, DATE 등)

📘 1-3. 기본 데이터 타입 정리 (INT, VARCHAR, DATE 등)MySQL에서 테이블을 만들 때 가장 먼저 고민해야 할 것이 데이터 타입입니다.각 칼럼의 용도에 맞는 타입을 정확히 설정하면 저장 공간을 줄이고, 검색 속도도 높일 수 있습니다.🔢 정수형 (INT, TINYINT, BIGINT 등) 데이터 타입 범위 (SIGNED 기준) 사용 예시 TINYINT -128 ~ 127 1~100 이하 상태값 (예: 활성화 여부) SMALLINT -32,768 ~ 32,767 등급, 카운트 등 소규모 숫자 INT (INTEGER) -2,147..

728x90
반응형