1. INSERT 직후 UPDATE 하는 '이중 작업'을 CASE 문으로 통합하기❌ 변경 전: 임시 테이블에 일단 데이터를 다 넣고(INSERT), 조건에 맞는 데이터만 다시 찾아서 수정(UPDATE)✅ 변경 후: 데이터를 삽입(INSERT)하는 과정에서 SELECT나 VALUES 절 내에 CASE 문을 사용하여 조건을 평가해 한 번에 처리💡 핵심: 디스크 I/O(읽고 쓰기)를 절반으로 줄이고, 대량 업데이트 시 발생하는 엄청난 양의 트랜잭션 로그 오버헤드를 방지하여 성능을 대폭 향상시킵니다.2. 인덱스 컬럼 가공하지 않기 (좌항 날 것 유지)❌ 변경 전: WHERE YEAR(JoinDate) = 2023 (인덱스가 걸린 컬럼 자체에 함수를 씌워버림)✅ 변경 후: WHERE JoinDate >= '20..
✅ 1. Scalar Subquery란?단 하나의 값(One Value) 만 반환하는 서브쿼리.결과가 1행 1열이어야 함어떤 위치든 값이 들어갈 수 있는 곳이면 쓸 수 있음→ SELECT, WHERE, CASE WHEN, INSERT VALUE, UPDATE SET 등반환값이 변수처럼 사용됨예시 SELECT name, (SELECT MAX(salary) FROM employee) AS max_salary FROM department; 위의 SELECT MAX(salary) FROM employee 부분이 스칼라 서브쿼리→ 딱 한 값만 나오니까 컬럼처럼 사용 가능함.✅ 2. Ordinary Subquery(일반 Subquery)는?스칼라가 아닌 나머지.예를 들어:▷ 단일 열이지만 여러 행 반환 SELECT..
Oracle Package란? Oracle Package는 관련된 Procedure, Function, 변수, 커서 등을 하나로 묶어놓은 모듈이다.
Android에서 sqlite3와 같은 로컬 DB를 사용해야하는 상황을 직면했다. 이 때, 보통 Spring에서 사용하는 Mybatis와 같은 서버측 ORM 프레임워크와 비슷하게 DB에 접근하여 ORM 역할을 학는 공식 라이브러리 중 최신 표준이라고 하는 Room Persistence Library가 존재하였다. Room Persistence Library는 현재 안드로이드 앱 개발에서 가장 권장되는 방법이자, MyBatis와 같은 ORM의 역할을 대신하는 공식 라이브러리라고한다. SQLite 위에 추상화 계층을 제공하여 SQL쿼리를 컴파일 시점에 검사하고, 복잡한 보일러 플레이코드를 줄여준다고한다. 1. Entity(테이블 정의)// InspectionItem.ktimport androidx.r..
1. WITH문의 필요성 이미 작성된 Mapper에 Query를 살펴보다보면 subquery를 남발하여 작성된 쿼리를 볼 수 있다. subquery를 조건식에 한두번씩 사용하는 것이 아니라, 남발하게되면 가독성이 떨어지고 재사용이 불가능하여 같은 쿼리임에도 불구하고 재사용할 수가 없어 동일한 쿼리를 또 작성해놓은 어지러운 쿼리가 탄생하게 된다. 이를 해결할 수 있는 좋은 방법으로 WITH문이 존재한다. WITH문은 SQL에서 임시 결과 집합, 보통 이를 공통 테이블식(CTE: Common table Expression)이라 부르는 것을 생성하여 다른 쿼리에서 사용 할 수 있게해주는 아주 유용한 녀석이다. 게다가 ANSI SQL 표준을 만족하는 문법이므로 거의 모든 DBMS에서 사용가능하다. 2. WITH..