전체 글 98

[DB Optimization#1] DB 성능 최적화란?

개인 프로젝트나 토이 프로젝트를 할 때는 데이터베이스(DB)의 성능 문제를 거의 느끼지 못합니다.하지만 실제 현업에서는 DB 성능 저하 문제를 한 번쯤 반드시 겪게 됩니다.페이지 로딩이 느려지거나, 조회 결과가 오래 걸리는 문제 말이죠.이런 성능 저하 문제는 단순한 불편함을 넘어서, 실제 사용자 이탈과 회사의 손실로 이어질 수 있습니다. DB 성능 저하, 왜 발생할까?동시 사용자 수의 증가→ 많은 사용자가 한 번에 접속하면 DB가 처리할 양도 급증합니다.데이터 양의 증가→ 수십만, 수백만 건의 데이터가 쌓이면 조회 속도가 점점 느려질 수 있습니다.비효율적인 SQL문 작성→ 가장 흔하면서도, 놓치기 쉬운 원인입니다. SQL이 느리면 어떤 구조든 느려집니다. DB 성능을 개선하는 대표적인 방법 방법 설명 ..

SQL 2025.04.16

[SQL#12] UNION / UNION ALL

SQL에서 UNION과 UNION ALL은 두 개 이상의 SELECT 결과를 수직으로 합치는 데 사용하는 문법입니다. 테이블 간의 관계가 없어도, 동일한 형식의 데이터를 한 번에 보여주고 싶을 때 유용합니다. 예시 테이블online_customers 테이블 id name 1Alice2Bob offline_customers 테이블idname3Charlie4Bob 1. UNIONSELECT name FROM online_customersUNIONSELECT name FROM offline_customers; name AliceBobCharlie→ Bob은 두 테이블에 모두 있지만, 한 번만 표시됩니다. 2. UNION ALLSELECT name FROM online_customersUNION ALLSE..

SQL 2025.04.16

[SQL#11] JOIN

SQL의 JOIN은 두 개 이상의 테이블을 연결해 하나의 결과로 보여주는 기능입니다.여러 테이블에서 관련 데이터를 가져올 때 필수적으로 사용되며, 특히 INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN은 관계형 데이터베이스의 핵심입니다. 예시 테이블customers 테이블 customer_id name 1Alice2Bob3Charlieorders 테이블 order_id customer_id product 1011Keyboard1021Mouse1032Monitor1044Headset 1. INNER JOIN교집합과 같이 양쪽 테이블에서 조건이 일치하는 행만 조회합니다.SELECT *FROM customersINNER JOIN orders ON customers.cust..

SQL 2025.04.16

[SQL#10] CASE

SQL에서 CASE는 조건에 따라 다른 값을 반환하는 조건문입니다.프로그래밍 언어의 if-else나 switch처럼 사용할 수 있으며,데이터를 가공하거나 집계 값을 가로 방향으로 펼치는 피벗(pivot) 작업에도 자주 활용됩니다. CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 기본값END WHEN과 THEN을 반복하여 여러 조건을 나열할 수 있습니다.ELSE는 생략 가능하며, 해당 조건이 없을 경우 기본값을 반환합니다.예시예시 테이블: sales id name region quarter amount 1AliceEastQ110002AliceEastQ215003BobWestQ120004BobWestQ225005CharlieEastQ1NULL6Charl..

SQL 2025.04.16

[SQL#9] GROUP BY / HAVING

SQL에서 데이터를 그룹 단위로 요약하거나 조건을 걸고 싶을 때 사용하는 문법이 GROUP BY와 HAVING입니다.특히 COUNT, SUM, AVG 등의 집계 함수와 함께 쓰일 때 강력한 기능을 발휘합니다. 1. GROUP BYGROUP BY 함수는 컬럼 내 공통된 값을 기준으로 데이터를 그룹화합니다.SELECT 그룹기준컬럼, 집계함수FROM 테이블명GROUP BY 그룹기준컬럼; SELECT department, COUNT(*) AS countFROM employeesGROUP BY department;→ 부서별로 몇 명의 직원이 있는지 집계departmentcountSales5HR2IT3 2. HAVINGHAVING 함수는 그룹화된 결과에 조건을 적용할 때 사용됩니다.SELECT 그룹기준컬럼, 집..

SQL 2025.04.16

[SQL#8] COUNT / SUM / AVG / MIN / MAX

SQL에서 데이터를 요약하고 분석할 때 가장 많이 쓰는 것이 집계 함수(aggregate function)입니다.대표적으로 COUNT, SUM, AVG, MIN, MAX가 있으며, 이 함수들은 여러 행을 하나의 값으로 요약할 때 사용됩니다. 이번 글에서는 집계 함수의 기본 사용법과 함께, NULL 처리 방식까지 함께 정리합니다. 1. COUNTCOUNT 함수는 컬럼별로 몇 개의 행이 존재하는지 세는 함수입니다.SELECT COUNT(컬럼명) FROM 테이블명; COUNT(*): 전체 행 개수 (NULL 포함)COUNT(컬럼명): 해당 컬럼이 NULL이 아닌 행만 집계SELECT COUNT(*) FROM users; -- 전체 회원 수SELECT COUNT(email) FROM users; ..

SQL 2025.04.16

[SQL#7] ROUND / CEIL / FLOOR

1. ROUNDROUND 함수는 숫자를 반올림할 때 사용하는 함수입니다.소수점 이하를 원하는 자리수까지 반올림하거나, 정수 단위로 반올림할 수 있습니다.ROUND(숫자, 소수점_자리수) 숫자: 반올림할 대상 숫자소수점_자리수: (선택) 소수점 아래 몇 번째 자리까지 남길지생략하면 정수로 반올림됨SELECT ROUND(3.14159, 1); → 결과: 3.1SELECT ROUND(3.6);→ 결과: 4 2. CEIL / FLOORCEIL 함수는 숫자를 올림할 때 사용하는 함수입니다.CEIL(숫자)→ 입력된 값보다 크거나 같은 가장 작은 정수 반환SELECT CEIL(3.2); -- 4SELECT CEIL(-1.3); -- -1 FLOOR 함수는 숫자를 내림할 때 사용하는 함수입니다.FLOOR(숫자..

SQL 2025.04.16

[SQL#6] SUBSTR

SUBSTR 함수는 문자열에서 일부만 잘라내는 함수입니다. 특정 위치부터 원하는 길이만큼 잘라서 새로운 문자열을 반환할 수 있습니다. SUBSTR(문자열, 시작위치, 길이)문자열: 자르고 싶은 대상 문자열시작위치: 자르기를 시작할 위치 (1부터 시작)길이 (선택): 자를 문자 수 (생략하면 끝까지)※ SUBSTRING()이라는 이름도 동일하게 사용 가능 SELECT SUBSTR('HelloWorld', 1, 5);→ 결과: 'Hello'→ 문자열의 1번째부터 5글자 추출 SELECT SUBSTR('HelloWorld', 6);→ 결과: 'World'→ 6번째부터 끝까지 추출 SELECT SUBSTR(phone_number, 1, 3) AS area_codeFROM users;→ phone_number의 ..

SQL 2025.04.16

[SQL#5] ORDER BY

ORDER BY는 SQL에서 조회한 데이터를 정렬할 때 사용하는 문법입니다. 데이터를 오름차순(ASC) 또는 내림차순(DESC) 으로 정렬할 수 있습니다. SELECT name, ageFROM usersORDER BY age;→ age 기준으로 낮은 나이부터 높은 나이 순으로 정렬 SELECT name, ageFROM usersORDER BY age DESC;→ age 기준으로 높은 나이부터 낮은 나이 순으로 정렬 SELECT name, city, ageFROM usersORDER BY city ASC, age DESC;→ city를 기준으로 오름차순 정렬,→ 같은 도시 내에서는 age를 기준으로 내림차순 정렬 ※ 숫자, 문자열, 날짜 정렬 숫자 → 크기 순으로 정렬문자열 → 알파벳 순서 또는 가나다순 ..

SQL 2025.04.16

[SQL#4] DISTINCT

SQL에서 데이터를 조회할 때, 중복된 결과를 제거하고 고유한 값만 보고 싶을 때 사용하는 것이 DISTINCT입니다. SELECT DISTINCT 컬럼명FROM 테이블명;→ 지정한 컬럼의 중복을 제거한 고유한 값들만 조회합니다. SELECT DISTINCT cityFROM users;→ users 테이블에서 중복되지 않은 도시 이름만 조회합니다. DISTINCT는 선택한 모든 컬럼의 조합이 동일할 때만 중복으로 간주합니다.SELECT DISTINCT city, ageFROM users;→ city, age의 쌍이 완전히 같은 경우에만 중복으로 처리됨 고유한 값의 개수를 셀 때도 DISTINCT를 사용합니다.SELECT COUNT(DISTINCT city)FROM users;→ 중복되지 않은 도시의 개수..

SQL 2025.04.16