SQL 8

[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

[Error] PostgreSql 한글 정렬 관련 문제

🗂️ 한글정렬시 제대로 정렬이 안되는 문제1️⃣ 원인데이터베이스 내에 문자열 데이터 정렬순서를 지정해주는 datcollate 가 en_US.UTF-8로 default 설정이 되어있음2️⃣ 해결ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 TYPE 컬럼타입 COLLATE "ko_KR.utf8"; 으로 설정 변경3️⃣ 또다른 해결방법SELECT 조회시 ORDER BY 뒤에 COLLATE "ko_KR.utf8" 붙여서 조회 ex) ORDER BY 컬럼명 COLLATE "ko_KR.utf8" DESC NULLS LAST

오류 2025.07.01

[Error] 제로 너비 공간

1. 제로 너비 공간 (ZWSP)눈에 보이지 않지만 텍스트에 영향을 줄 수 있는 특수 문자주로 텍스트 편집이나 디지털 문서에서 보이지 않게 문자를 분리하거나, 줄바꿈을 제어하는 데 사용 2. 문제점1. WHERE 조건이 예상대로 동작하지 않음// a‍d‍m‍i‍n (a + U+200B + d + U+200B + ...) 이런 식으로 매칭 실패함SELECT * FROM users WHERE username = 'admin'; 2. 데이터 중복 처리 실패// 나중에 'a‍b‍c'를 넣으면 똑같아 보이지만 실제로는 다른 값이라서 중복 체크가 안되고 insert됨INSERT INTO table (value) VALUES ('abc'); 3. 보안 문제 (SQL Injection 우회)// UNION 차단에 걸리..

오류 2025.04.26

[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