본문 바로가기
2021 02 16 - SQL과 반복문 인접리스트 모델과 재귀쿼리 우편번호를 키로 삼아서 데이터를 줄줄이 연결한것을 포인터 체인이라고 한다. 계층구조를 표현하는 고전적인 방법임 예를들어 이를 절차지향 언어에서 찾는다면, 현재 주소의 레코드부터 출발해서 이전 주소가 없을때 까지 처리를 반복하면 가장 오래된 주소를 찾을 수 있다. SQL에서 계층구조를 찾는 방법중 하나는 재귀공통 테이블식을 사용하는 방법이다. WITH RECURSIVE Explosion (name, pcode, new_pcode, depth) AS ( SELECT name, pcode, new_pcode, 1 FROM PostalHistory WHERE name = 'A' AND new_pcode IS NULL-- 검색 시작 UNION SELECT Child.name, Child.. 2021. 2. 16.
2021 02 16 - CASE, CASE, CASE 집계와 조건분기 -UNION을 사용한 방법 SELECT prefecture, SUM(pop_men) AS pop_men, SUM(pop_won) AS pop_wom FROM( SELECT prefecture, pop AS pop_men, null AS pop_wom FROM Population WHERE gender = '1' --남성 UNION SELECT prefecture, pop AS pop_wom, null AS pop_men FROM Population WHERE gender = '2') TMP--여성 GROUP BY prefecture; -CASE를 사용한 방법 CASE 식을 집계함수 안에 사용하면 필터를 만들 수 있다. 또한 Seq San으로 테이블 풀스캔이 1회로 감소한다. SELECT .. 2021. 2. 16.
2021 02 08 *DBMS의 쿼리 처리 흐름 1) 쿼리를 파싱한다 /* 옵티마이저 (최적화의 영역이다)*/ 2) 파싱된 쿼리를 가지고 실행계획을 작성한다. 3) 비용을 연산하고 가장 낮은 비용의 계획을 선택한다. /* 옵티마이저 (최적화의 영역이다)*/ 4) 카탈로그 매니저(통계정보) - 옵티마이저가 실행계획을 세울때 중요한 정보를 제공하는것. DBMS의 내부정보를 모아놓은 테이블들. 5) 플랜 평가 - 옵티마이저로부터 실행계획을 받아서 최적의 실행 결과를 선택하는것. 곧바로 DBMS가 실행할 수 있는 형태의 코드가 아니기 때문에 수정방안 등을 고려할 수 있다. *옵티마이저와 통계정보 하지만 옵티마이저도 만능은 아니다. 통계정보는 데이터베이스 엔지니어가 관리해줘야 한다. 통계정보가 부족한 경우 옵티마이저가 실패하는 경우.. 2021. 2. 8.
2021 02 08 - sql 소소한 정리 스칼라 서브쿼리 SELECT에 컬럼으로 오는 서브쿼리. 1행만 올수있다. (2행이상 오면 too many 컬럼 에러남) Over 함수 Oracle 지원. -- Over함수를 사용하면, 서브쿼리, Group by를 사용했을때 생기는 번거로움이 사라진다! RANK() OVER(ORDER BY ITEM.PRIORITY DESC) ITEM_PRIORITY_RANK COUNT(*)OVER() -- 전체행을 카운트 COUNT(*)OVER(PARTITION BY 컬럼) -- 컬럼을 Group By하여 카운트한다. WITH AS Oracle 9버전 이후에서 사용 가능한, 쉽게 말하면 이름이 부여된 서브쿼리. 뷰처럼 다른점은 쿼리가 끝나면 사라진다는것. 2021. 2. 8.
2021 02 04 - Email Template 수정 메일 템플릿 수정건 설명 ASIS 코드는 템플릿을 문자열로 통째로 만들어놓고, 조건에 따라 replace하는 구조다. 코드에 마크업이 섞여있어서 로직을 파악하기 어렵고 유지보수가 거의 불가능한 구조였다. // AS-IS의 코드.. String mailTemplateBase = "" + "MEMBER_NAME" + "MEMBER_AGE" + "MEMBER_GENDER" ""; if(isNotEmpty(memberName)){ mailTemplateBase.replace("MEMBER_NAME", "소희");// 마크업 코드가 박혀있음.. }else{ mailTemplateBase.replace("MEMBER_NAME", "");// 데이터가 없으면 일일히 빈 문자열로 대체해줘야 했다. 때문에 쓸데없이 가독.. 2021. 2. 4.
2021 02 03 - 검색시스템 검색 검색엔진이란 시스템에 저장된 정보를 찾아주는것을 도와주도록 설계된 정보검색 시스템 검색엔진 구동요소 수집: 검색 엔진의 목적에 따라 사용자가 필요로 하는 정보들을 모은다. 예)Log 데이터.. 웹은 크롤링 데이터.. 색인: 수집된 정보를 분석하여 찾기 쉬운형태로 저장한다. 형태소를 분석(의미를 가지는 최소 단위로 분리)하여 의미있는 단어를 추출한다. 역색인 방식 검색: 정보에 대한 요구가 발생할때 해당 정보를 찾아서 제공한다. 사용자로부터 검색 요청을 받아서 검색 결과를 반환한다. 검색 최상의 결과를 위해 랭킹 알고리즘이 중요 TF: 특정 단어가 문서 내에 얼마나 자주 등장하는지 IDF 특정 단어가 전체 문서에서 얼마나 자주 등장하는지수집 쇼핑몰을 예로 들면 상품정보가 데이터가 될 수 있다. (실제.. 2021. 2. 3.