SQL 7

[SQL] 쿼리 튜닝 정리

📌 참고사항Postgresql 위주로 작성쿼리 튜닝을 하게된 이유마이그레이션 작업중 급격하게 늘어난 데이터로 인해 시스템 목록 조회할때 많은 시간이 소요되는 현상발견 원인1. 과도한 JOIN 으로 인한 원인2. WHERE 절에 LIKE문을 앞뒤로 % 붙여 사용으로 인한 원인3. 특정 조건절에서만 사용하는 불필요한 테이블 JOIN으로 인한 원인4. 과도한 집계함수 사용으로 인한 원인 해결1. WITH절 사용하여 인덱스 적용되는 실행 우선순위별로 쪼개서 해결≫ 원본SELECT *FROM A a JOIN B b ON a.id = b.id JOIN C c ON a.id = c.id ...WHERE a.id = 'A' ...LIMIT 10 OFFSET 0≫ 수정본WITH withA AS ( SELECT a.i..

SQL 2025.10.17

[SQL] Oracle Flashback Query 정리

📌 참고사항최소 Oracle 9i 버전 이상부터 사용가능MySQL / MariaDB은 innoDB에서만 사용가능한 비슷한 기능 있음SQL Server는 유사한 기능 있음1. 사용방법--2025년 10월 17일 09시 데이터 조회SELECT *FROM table_nameAS OF TIMESTAMP (TO_DATE('2025-10-17 09:00:00', 'YYYY-MM-DD HH24:MI:SS'))... 2. Flashback Table Oracle 10g 부터 사용 가능한 Flashback Table 기능이 있는데 Flashback Query는 특정 시점에서의 데이터 상태를 조회할 수 있는 기능이지만 Flashback Table 기능은 테이블 단위로 데이터를 이전 시점으로 복구하는 기능--2025년..

SQL 2025.10.14

[SQLD] 오답정리

1과목1. 데이터 모델링 유의점더보기≫ 중복성, 유연성, 비일관성 2. 데이터 스키마 구조 단계 - 외부, 개념, 내부더보기≫ View 단계는 여러 사용자 관점으로 구성하는 외부 스키마에 해당≫ 논리적인 데이터 독립성을 고려하는 단계는 외부, 개념적 단계≫ 물리적인 저장구조를 표현하는 스키마는 내부스키마≫ 통합된 모든 사용자의 관점은 개념스키마와 관련있음 3. 엔티티 특징더보기≫ 영속적으로 존재하는 인스턴스의 집합이어야함≫ 발생시점에 따라 구분할수있는건 행위, 중심, 기본 엔티티≫ 엔티티에 이름을 부여할때 가능하면 약어를 사용안함 4. 속성의 특징더보기≫ 인스턴스에서 관리하고자 하는 의미상 더이상 분리 되지않은 최소 데이터 단위≫ 하나의 인스턴스에서 각각의 속성은 한개의 속성값을 가짐≫ 이름을 부여할때 ..

SQL 2025.05.30

[SQL] 자주 쓰는 MSSQL 함수 정리

1. IF EXISTS-- 해당 테이블이 존재하면 실행되는 조건문IF EXISTS (SELECT ID FROM TEST WHERE ID ='홍길동' ) --조건 설정 BEGIN --조건 결과 값이 있을 때 실행문 ENDELSE BEGIN --조건 결과 값이 없을 때 실행문 END-- 해당 테이블이 존재하지 않으면 실행되는 조건문IF NOT EXISTS 2. WITH (NOLOCK)-- MSSQL 은 기본적으로 SELECT 시 공유잠금이 걸림-- 작업중인 테이블 에 SELECT 할 경우 해당 작업이 끝나야 SELECT 할 수 있음-- 그렇게되면 DB의 성능은 떨어지고 데드락이 발생될수있음, 이를 방지하기 위해 사용함SELECT * FROM TEST WITH(N..

SQL 2025.03.27

[SQL] 자주 쓰는 PostgreSql 함수 정리

📌 기본 문법-- 데이터베이스 확인 --SELECT * FROM pg_catalog.pg_namespace;-- 스키마 확인 --SELECT * FROM pg_catalog.pg_tables;-- 테이블명 변경 --ALTER TABLE "test2222" rename to test;-- 컬럼명 변경 --ALTER TABLE test rename column asd1 to asd; 1. Croess Join-- test x test2 --SELECT * FROM test CROSS JOIN test2 2. Using--- 두 테이블의 컬럼명이 같을때 사용 ---SELECT * FROM test1 INNER JOIN test2 ON test1.name = test2.name;SELECT * FROM tes..

SQL 2022.09.02

[SQL] 자주 쓰는 Mysql 함수 정리

1. NOW오라클의 SYSDATE 와 같은 현재 날짜를 조회SELECT NOW() (FROM MEMBER) 생략 가능 2. DATE_FORMAT오라클의 TO_CHAR 와 같이 날짜를 받아와 데이터 포맷에 맞춰 문자열로 반환DATE_FORMAT(NOW(),'%Y-%m-%d') 3. LIMIT오라클의 ROWNUM 과 같이 페이징 처리할때 사용, 첫 번째 인자는 시작 번호, 두번째 인자는 조회할 개수LIMIT 1 , 10 4. REPLACE, REPLACE INTOINSERT 처럼 사용시 : 삽입하려는 내용중 key 값이 없으면 INSERT, 있으면 해당 ROW 삭제후 INSERTUPDATE 처럼 사용시 : SET 부분에 key 값이 없으면 INSERT, 있으면 UPDATE작성하지 않은 컬럼값은 default..

SQL 2021.08.27

[SQL] 자주 쓰는 Oracle 함수 정리

1. DECODEif, else와 비슷한 기능DECODE(NAME, NULL, '',#{name})-- DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, ..., else 결과) 2. UPPER, LOWER, INITCAP대문자, 소문자, 첫번째 문자 대문자로 변환UPPER(NAME) -- abc → ABCLOWER(NAME) -- ABC → abcINITCAP(NAME) -- abc → Abc 3. LISTAGG컬럼의 데이터들을 하나로 합치는 기능ex) LISTAGG(컬럼, LISTAGG 구분자) WITHIN GROUP (ORDER BY 컬럼)-- 사용방법 -- SELECT LISTAGG(NAME,',') WITHIN GROUP (ORDER BY NAME) AS NAMES FROM DATA-- 예..

SQL 2021.03.12