sql (8) 썸네일형 리스트형 복잡한 쿼리 효율적으로 작성하기 1. 최종적으로 조회되는 결과 항목을 정의한다. 2. 필요한 테이블과 컬럼을 파악한다. 3. 작은 단위로 분할해서 쿼리를 작성한다. 4. 분할한 단위의 쿼리를 하나로 합쳐 최종 결과를 산출한다. 5. 결과를 검증한다. 1) 출력항목 연도 최대매출사원명 최대매출액 2) 필요한 테이블 - 이탈리아 찾기 : countries - 이탈리아 고객 찾기 : consumers - 매출 : sales - 사원정보 : employees 3) 단위 분할 a) 연도, 사원별 이탈리아 매출액 구하기 SELECT SUBSTR(a.SALES_MONTH, 1, 4) AS years, a.EMPLOYEE_ID, sum(a.AMOUNT_SOLD) AS AMOUNT_SOLD FROM SALES a, CUSTOMERS b, COUNTRI.. 집계와 조건 분기 - 2. 집약결과로 조건 분기 2. 집약결과로 조건 분기 - UNIONSELECT EMP_NAME , MAX(TEAM) AS TEAM FROM Employees GROUP BY EMP_NAME HAVING COUNT(*) = 1 UNION SELECT EMP_NAME , '2개를 겸무' AS TEAM FROM Employees GROUP BY EMP_NAME HAVING COUNT(*) = 2 UNION SELECT EMP_NAME , '3개 이상을 겸무' AS TEAM FROM Employees GROUP BY EMP_NAME HAVING COUNT(*) >= 3 ; - CASE SELECT EMP_NAME, CASE WHEN COUNT(*) =1 THEN MAX(TEAM) WHEN COUNT(*) =2 THEN '2개를 겸무' W.. 집계와 조건 분기 - 1. 집계 대상으로 조건 분기 1. 집계 대상으로 조건 분기- UNION을 사용한 방법 SELECT PREFECTURE, SUM(POP_MEN) AS POP_MEN, SUM(POP_WOM) AS POP_WOM FROM( SELECT PREFECTURE, POP AS POP_MEN, NULL AS POP_WOM FROM POPULATION WHERE SEX = '1' UNION SELECT PREFECTURE, NULL AS POP_MEN, POP AS POP_WOM FROM POPULATION WHERE SEX = '2') tmp GROUP BY PREFECTURE; -> 실행계획을 보면 POPULATION 테이블에 풀 스캔이 2회 수행되는 것을 확인할 수 있다. - CASE식을 사용한 방법SELECT PREFECTURE, SUM(C.. Delete, Drop, Truncate의 차이점 [출처] DBA 커뮤니티 구루비 TABLE에서 행을 삭제하는 세 가지 OPTION의 비교 TABLE에서 모든 행을 삭제하는 방법에는 다음과 같은 세 가지 OPTION이 있다. 1. DELETE 명령어 사용 DELETE 명령어를 사용하여 TABLE의 행을 삭제할 수 있다. 예를 들어 EMP TABLE에서 모든 행을 삭제하는 명령문은 다음과 같다. SQL>DELETE FROM emp; ◈ DELETE 문을 사용할 때 TABLE이나 CLUSTER에 행이 많으면 행이 삭제 될 때마다 많은 SYSTEM 자원이 소모된다. 예를 들어 CPU 시간,REDO LOG 영역, TABLE이나 INDEX에 대한 ROLLBACK SEGMENT 영역 등의 자원이 필요하다. ◈ TRIGGER가 걸려있다면 각 행이 삭제될 때 실행된다.. 누계값 구하기 - 부등호 조인의 이용 데이터베이스를 관리하다 보면 COLUMN의 값과 함께 그 상위값들의 누계를 보고자 하는 경우가 발생한다.예를 들어 이런 식으로 말이다. 이러한 경우에는 쿼리문을 어떻게 작성해야 할까?여러가지 방법이 있겠지만, 오늘 소개하고자 하는 것은 부등호 조인을 이용하는 것이다.부등호 조인이란 말 그대로 테이블 간의 조인에 부등호를 사용하는 것이다. 위와 같이, 셀프 조인을 한 상태에서 부등호 조인을 조건으로 주면 다음과 같은 결과를 얻을 수 있다. [오라클] OPTIMIZER 개요 및 구조 1. 개요 및 구조 옵티마이저(Optimizer)는 SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진이다. 사용자가 구조화된 질의언어(SQL)로 결과집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Execution Plan)이라고 부른다. 옵티마이저의 SQL 최적화 과정을 요약하면 다음과 같다.- 사용자가 던진 쿼리수행을 위해, 후보군이 될만한 실행계획을 찾는다.- 데이터 딕셔너리(Data Dictionary)에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정한다.- 각 실행계획을 비교해서 최저비용을 갖는 .. CASE WHEN ~ THEN ~ ELSE END DECODE 문이 IF문이라면, CASE문은 SWITCH 문이다. [형식] CASE 컬럼명 | 표현식 WHEN 조건식1 THEN 결과1 WHEN 조건식2 THEN 결과2 ....... WHEN 조건식n THEN 결과n ELSE 결과 END [예제] SELECT CASE WHEN SALARY 70000000 THEN 'A' END AS SALARY, COUNT(*) AS CNTFROM TEMPGROUP BYCASE WHEN SALARY 70000000 THEN 'A' ENDORDER BY SALARY ASC ; VIEW - 테이블을 비추는 창 VIEW라는 것은 쉽게 생각하면 테이블을 보기 위한 창문 정도로 생각하면 된다. 테이블을 방으로 생각하고 뷰를 그 방을 보는 창문으로 생각해보자. 창문을 통해 방안을 보면 방안의 모든 내용을 볼 수 없지만, 내가 보려고 하는 물건이 정해져 있다면 그것만 창의 시야 안에 갖다 놓으면 다른 것은 볼 필요가 없을 것이다. 오히려 방에 들어가서 직접 보고자 하는 물건을 찾는 것보다 미리 내가 지정한 것만을 창 앞에 가져다 놓고 그것만을 본다면 더 편리할 것이다. 테이블과 뷰도 같은 경우이다. 창문을 통해 본다는 것은 창문이 물건을 가지고 잇는 것이 아니고 방에 있는 물건이 창을 통해 비치는 것 뿐이다. 내가 그 방안을 보고자 해서 창문을 두들기면 창문은 그 순간의 방안의 모습을 비춰놓고 창을 닫는다. 그걸 우리.. 이전 1 다음