| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- DL
- Studying
- Python
- Design
- docker
- Kotlin
- OS
- spring boot
- CS
- java
- 배포
- architecture
- Network
- VUE
- Database
- Android
- cloud
- Spring
- inflearn
- TypeScript
- frontend
- DB
- SQL
- AI
- http
- blockchain
- Algorithm
- react
- springboot
- GCP
- Today
- Total
목록SQL (8)
소소한 지식 저장소
문제 1. 고객 등급별 할인율 계산함수 정의:CREATE OR REPLACE FUNCTION proc_lab.fn_grade_discount_rate(p_grade text)RETURNS numericLANGUAGE sqlIMMUTABLESTRICTPARALLEL SAFEAS $function$ SELECT CASE upper(trim(p_grade)) WHEN 'VIP' THEN 0.15 WHEN 'GOLD' THEN 0.10 WHEN 'SILVER' THEN 0.05 ELSE 0 END;$function$;단독 검증:SELECT proc_lab.fn_grade_disco..
Stored Procedure vs 함수 (Function / UDF) 비교두 객체는 모두 DB에 저장된 로직이지만, 목적과 사용 맥락이 다름.구분Stored Procedure함수 (Function, UDF)역할여러 SQL문을 묶어 한 번에 실행하는 작업 절차계산 결과값을 반환하는 연산 도구리턴값있어도 되고 없어도 됨반드시 1개 이상 결과 반환호출 방법CALL 또는 EXECSELECT fn_함수() 형태로 호출주 사용처데이터 변경, 트랜잭션, 배치 작업SELECT 안에서 계산·데이터 변환트랜잭션 제어가능 (BEGIN / COMMIT / ROLLBACK)불가능 (DML 금지)부작용 (DML)INSERT, UPDATE, DELETE 가능대부분 읽기 전용, 변경 불가핵심 비유작업 단위 (batch 작업 중심)..
ERD[GROUP BY 1]-- [GROUP BY 1] 부서별 사원 수-- 문제: HR 데이터를 활용하여 '부서별 사원 수' 결과를 조회하는 SQL을 작성하십시오.-- 조건: GROUP BY와 필요한 집계 함수를 사용하십시오. department_id가 같은 사원을 그룹화하여 인원수를 계산합니다. 부서 미배정 사원은 '부서 미배정'으로 표시합니다.SELECT COALESCE(d.department_name, '부서 미배정') AS "부서명(department_name)", COUNT(*) AS "부서별 사원 수"FROM employees eLEFT JOIN departments d ON d.department_id = e.department_idGROUP BY e.department_id, d..
공통 실행 환경측정 명령: EXPLAIN (ANALYZE, BUFFERS, TIMING OFF) (문제 1은 VERBOSE 추가)측정 기준: Execution Time · Buffers · actual/estimated rows · loops목표: 특정 밀리초가 아니라 실행 계획과 읽은 블록 수의 변화 해석문제 1. 기본 키 검색의 실행 계획 읽기 (튜닝 불필요 증명)문제 / 개선 목표사원번호 100 검색. 이미 빠른 쿼리도 튜닝 대상인지 판단. 목표는 빠르게 만드는 것이 아니라 튜닝 불필요를 증명하기.EXPLAIN (ANALYZE, BUFFERS, VERBOSE, TIMING OFF)SELECT *FROM employeesWHERE employee_id = 100;개선 전 QUERY PLANIndex ..
인덱스 개념 및 트레이드오프인덱스는 특정 컬럼 값을 기준으로 데이터 위치를 빠르게 찾도록 돕는 보조 구조임. 인덱스 유무에 따라 조회 방식과 성능이 크게 달라짐.인덱스가 없을 때는 Table Full Scan 방식으로 전체 행을 순차 검사하므로 시간 복잡도가 O(N)임.인덱스를 생성하면 B-Tree 탐색을 통해 O(log N)으로 조회 가능함. 수백만 행 규모에서는 수십 ms 수준의 차이로 이어짐.핵심 트레이드오프읽기 성능 향상: 자주 쓰는 필드(WHERE / JOIN / ORDER BY)에 대한 조회가 빨라짐쓰기 비용 증가: INSERT / UPDATE / DELETE 시 인덱스 재정렬 비용이 발생함저장 공간 증가: 인덱스 자체가 디스크 공간을 추가로 소모함인덱스 설계 원칙WHERE 조건에 자주 등장하..
DBMS vs Data Warehouse vs Data Mining데이터를 다루는 세 계층을 목적과 처리 방식으로 구분한 비교임. DBMS는 실시간 트랜잭션, Data Warehouse는 축적된 데이터 분석, Data Mining은 그 데이터에서 패턴·지식을 뽑아내는 단계로 이어짐.구분DBMSData WarehouseData Mining목적일상 트랜잭션 처리(OLTP)분석·의사결정 지원(OLAP)숨겨진 패턴·지식 발견데이터 특성현재 데이터, 정규화, 실시간이력 데이터, 비정규화, 주기적 적재대용량 데이터, 통계/ML 모델쿼리 유형단순 CRUD, 짧은 트랜잭션복잡한 집계, 다차원 분석분류·군집·연관·예측 분석예시 시스템MySQL, PostgreSQL, OracleBigQuery, Snowflake, Red..
실습 개요 항목 내용 실습명PostgreSQL 기반 학사관리시스템 종합 실습작성자임채현사용 DBMSPostgreSQL 17사용 도구DBeaver (쿼리 실행 및 결과 확인), ERDCloud (ERD 설계)실습 목적학사관리시스템을 주제로 데이터베이스 환경 구성부터 ERD 설계, 제약조건을 포함한 테이블 생성(DDL), 샘플 데이터 입력(DML), 기초 조회 및 함수 활용까지의 전 과정을 직접 수행한다.실습 범위PostgreSQL 접속 확인DATABASE / SCHEMA 생성ERD 설계CREATEPostgreSQL 접속 확인 (DBeaver)CREATE DATABASE / CREATE SCHEMA 실행ERD 설계3.1 학사관리시스템 요구사항 (설계 방향)3.2 ERD 그림3.3 범례 (설명문)3.4 테이..
📌 1. 전체 흐름 요약[EAGER (즉시 로딩)] -> 예측 불가능한 조인으로 성능 폭탄 발생 (실무 사용 금지) ↓[LAZY (지연 로딩)] -> 필요한 순간에만 조회하여 안전하지만, 루프를 돌 때 N+1 문제 발생 ↓[N+1 문제 해결책 선택] ├── 페이징 필요 X --> [Fetch Join] 사용 (SQL JOIN으로 한 방에 조회, 쿼리 1번) └── 페이징 필요 O --> [Batch Size (IN 절)] 사용 (SQL IN으로 묶어서 조회, 쿼리 2번)💻 2. 실무 기본 세팅: 엔티티 설계 (LAZY)실무의 대원칙은 모든 연관 관계를 LAZY(지연 로딩)로 설정하는 것입니다. 1:N 관계인 게시글(Post)과 댓글(Comment) 엔티티를 예시로 구..
