본문 바로가기

CS/Database19

[MySQL] `NOT IN` vs `NOT EXISTS` 비교 및 권장 방식 ✅ NOT IN vs NOT EXISTS 실무 정리: 차이점, 주의사항, 권장 방식SQL에서 "어떤 데이터가 다른 테이블에 존재하지 않을 때" 사용하는 대표적인 방법은 다음 두 가지입니다:NOT INNOT EXISTS하지만 이 두 구문은 겉보기엔 비슷해도, NULL 처리 방식과 실무 안전성 측면에서 큰 차이가 있습니다.✅ 1. 기본 사용법 비교🔹 NOT INSELECT *FROM membersWHERE id NOT IN (SELECT member_id FROM ads);id 컬럼 값이 ads.member_id 리스트에 없을 경우만 선택비교 대상 컬럼이 반드시 필요함 (컬럼 NOT IN (리스트) 형태)🔹 NOT EXISTSSELECT *FROM members mWHERE NOT EXISTS ( .. 2025. 5. 4.
[MySQL] Query Cost가 높아지는 조건과 성능 개선 포인트 ✅ Query Cost가 높아지는 조건과 성능 개선 포인트✅ 1. 쿼리 비용(Query Cost)이란?MySQL 옵티마이저(optimizer)가 계산한 논리적 실행 비용EXPLAIN 또는 EXPLAIN ANALYZE에서 cost=0.15..23.80 이런 식으로 나타남크다고 해서 항상 "나쁘다"는 뜻은 아님 → 상대적 판단 기준주로 다음 요소가 반영됨:디스크 I/O 비용 (풀 테이블 스캔, 정렬, 임시 테이블)읽는 행 수인덱스 사용 여부조인 순서반복 루프 횟수✅ 2. 쿼리 비용이 높아지는 주요 조건 + 개선 방향조건성능 저하 원인개선 포인트1. type: ALL테이블 전체 스캔 (풀스캔)인덱스 추가, WHERE 조건 개선2. key: NULL인덱스 미사용적절한 인덱스 생성3. WHERE 절에 함수 사용인.. 2025. 4. 13.
[MySQL] UNION / UNION ALL 결과의 고급 활용 예제 UNION 또는 UNION ALL로 만든 결과를👉 다시 조인하거나,👉 집계(GROUP BY, SUM 등) 하거나,👉 조건 필터링(WHERE, HAVING) 하는 고급 실무형 쿼리 예제.이건 리포트, 로그 통합, 활동 분석 등에서 아주 자주 등장하는 패턴.✅ UNION / UNION ALL 결과의 고급 활용 예제🎯 시나리오: 활동 기록 통합 + 분석다음과 같은 3개의 로그 테이블이 있다고 가정하자:테이블설명logins(user_id, login_time)로그인 로그orders(user_id, order_date, amount)주문 로그inquiries(user_id, inquiry_time)고객 문의 로그✅ 1. UNION ALL로 활동 로그 통합SELECT user_id, login_time AS.. 2025. 4. 13.
[MySQL] UNION / UNION ALL ✅ UNION / UNION ALL 완전 정복🧠 1. 기본 개념연산자설명UNION중복 제거하면서 두 SELECT 결과를 수직으로 합침UNION ALL중복 포함한 채로 두 SELECT 결과를 수직으로 합침🔻 공통점:SELECT 결과의 컬럼 수와 순서, 타입이 같아야 함✅ 2. 기본 사용 예시📍 예시 테이블-- 테이블 1: 고객 문의SELECT '문의' AS type, user_id, created_at FROM inquiries-- 테이블 2: 고객 불만 접수SELECT '불만' AS type, user_id, created_at FROM complaints✅ UNIONSELECT '문의' AS type, user_id, created_at FROM inquiriesUNIONSELECT '불만' AS.. 2025. 4. 13.
[MySQL] MySQL의 JOIN 완전 정복 + FULL OUTER JOIN 대체 방법 ✅ MySQL의 JOIN 완전 정복 + FULL OUTER JOIN 대체 방법까지🧠 1. JOIN이란?두 개 이상의 테이블을 공통된 컬럼을 기준으로 연결해 하나의 결과 집합을 만드는 방식실무에서 매우 흔하게 사용됨: 사용자 + 주문, 제품 + 카테고리, 회원 + 주소 등✅ 2. JOIN 종류 요약JOIN 종류설명MySQL 지원 여부INNER JOIN두 테이블 모두에 존재하는 교집합✅ 지원LEFT OUTER JOIN (LEFT JOIN)왼쪽 테이블은 모두 표시, 오른쪽은 일치하는 것만✅ 지원RIGHT OUTER JOIN (RIGHT JOIN)오른쪽 테이블은 모두 표시, 왼쪽은 일치하는 것만✅ 지원FULL OUTER JOIN양쪽 모두 표시 (합집합)❌ MySQL은 직접 지원 안 함CROSS JOIN모든 조.. 2025. 4. 13.
[MySQL] SubQuery 사용 📌 서브쿼리가 사용될 수 있는 위치위치사용 예시SELECT 절컬럼처럼 사용FROM 절인라인 뷰처럼 사용WHERE 절조건 필터로 사용HAVING 절그룹 결과 필터링IN, EXISTS, =, , > 등 조건 내부값 비교📘 서브쿼리란?SELECT문 내부에 포함된 또 다른 SELECT문단일 값, 다중 값, 테이블처럼 사용 가능복잡한 조건을 처리하거나, 결과 비교, 동적 조건 처리에 유용✅ 1. WHERE 절에서 서브쿼리 사용✅ 1-1. 단일 값 반환 서브쿼리 (=, , >, !=, 등)SELECT name, salaryFROM employeesWHERE salary > ( SELECT AVG(salary) FROM employees);📌 설명:salary > 평균 급여 조건을 위해, AVG 결과값을.. 2025. 4. 13.