본문 바로가기

나 취준생/SQL

(54)
SQL - 직접 시행을 통해 확률 구하기 예제 :주사위를 10만번 던져서 주사위의 눈이 6이 나올 확률 구하기 select count(*) /100000 as "주사위가 6이 나올 확률" from ( select round ( dbms_random.value(0.5,6.5) ) as 주사위 from dual connect by level
SQL - 삼각형 출력하기 rpad와 lpad를 사용해서 삼각형을 만들 수 있다. 원리는 한계점을 먼저 정해놓고,level을 이용해서 level의 수만큼 별을,한계점까지 나머지는 공백으로 채워넣는 식으로 하면 된다. 예제 : 직각 삼각형 출력하기 select rpad('★',level,'★') from dual where level
SQL - 데이터 분석 함수를 이용한 튜닝 SQL을 완전히 다른 SQL로 변경해서 튜닝하는 방법 예제 : 부서별 월급 합, 총 월급을 출력하기 select /*+ gather_plan_statistics */ deptno, sum(sal) from emp group by deptnounion allselect null as deptno, sum(sal) from emp order by deptno asc; SELECT * FROM TABLE(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); 버퍼의 수 : 12개 * rollup을 활용한 튜닝 select /*+ gather_plan_statistics */ deptno, sum(sal) from emp group by rollup(deptno); S..
SQL - 서브 쿼리문 튜닝 서브 쿼리문 튜닝하기 서브 쿼리문 튜닝의 기술은 크게 2가지만 알면 된다. 1. 순수하게 서브 쿼리문으로 수행되게 하는 방법 : 힌트 추가 ( no_unnest )2. 서브 쿼리를 조인으로 변경해서 수행되게 하는 방법 : 힌트 추가 ( unnest ) * nest : 감싸다 unnest : 감싸지 않다 no_unnest : 감싸라 예제 : DALLAS에서 근무하는 사원들의 이름과 월급을 출력하기 select ename, sal from emp where deptno in ( select deptnofrom deptwhere loc = 'DALLAS'); 예제 2 : 위의 서브 쿼리문을 조인으로 수행해서 출력하기 select e.ename, e.sal from emp e, dept d where e.dep..
SQL - 고급 조인 문장 튜닝 * 고급 조인 문장 튜닝 뷰 안의 조인 문장의 조인 순서를 변경하고자 할 때 사용하는 튜닝 방법 예제 : 사원 번호, 이름, 월급, 부서 번호, 부서 위치를 담은 emp_dept라는 view를 만들기 create view emp_dept as select e.empno, e.ename, e.sal, e.deptno, d.loc from emp e, dept d where e.deptno=d.deptno; 근데 컬럼명을 자세히보면 e.empno, e.ename이 아닌 empno, ename 이다.나머지도 마찬가지. 예제 : 방금 만든 emp_dept view와 salgrade 테이블을 서로 조인해서 이름과 월급과 부서 위치와 급여 등급을 출력하기 select v.ename, v.sal, v.loc, s.g..
SQL - 서브 쿼리를 활용한 튜닝 SELECT 절 중 서브 쿼리를 쓸 수 있는 절 SELECT --> O ( 스칼라 서브쿼리 ) FROM --> O ( 인 라인 뷰 ) WHERE --> O GROUP BY --> X HAVING --> O ORDER BY --> O ( 스칼라 서브쿼리 ) 예제 : 이름, 월급, 사원 테이블에서의 최대 월급 출력하기 ( 스칼라 서브 쿼리 ) select /*+ gather_plan_statistics */ ename, sal, (select max(sal) from emp) from emp; SELECT * FROM TABLE(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); 튜닝 : select /*+ gather_plan_statistics */ enam..
SQL - OUTER JOIN 튜닝 OUTER JOIN 의 튜닝 방법 * outer join의 조인 순서는outer join sign이 없는 쪽에서 있는 쪽으로 순서가 고정이 된다. 그러다보니 조인 순서를 변경하기가 어려워서 튜닝이 힘든데, 이를 개선할 수 있는 힌트가 있다. 일단 outer join을 연습하기 위해서, deptno가 deptno 테이블에는 없는, 특이한 사원을 하나 넣어보자 insert into emp ( empno, ename, sal, deptno )values ( 2921, 'JACK', 4500, 70 ) ; 예제 : deptno로 아우터 조인을 해보자 select /*+ gather_plan_statistics */ e.ename, d.loc from emp e, dept d where e.deptno=d.dep..
SQL - HASH JOIN, SORT MERGE JOIN OLTP 서버 : 실시간 조회 처리를 위한 데이터가 저장되어 있는 곳 ( 변화에 민감한 정보, 금융 ) DW 서버 : 대용량 데이터가 저장되어 있는 곳 ( 우리나라 전 국민의 모든 의료 기록 ) 10년 정보, 20년 정보가 저장되어 있음 OLTP 서버 -> nested loop 조인을 주로 사용 [해쉬 조인, 병렬 처리하면 큰일난다! 왜? 메모리를 잡아먹어서 다른 사람들에게 피해를 준다] DW 서버 -> 해쉬 조인, merge 조인, 데이터 분석함수를 주로 사용, 파티션 테이블, 병렬 처리 * HASH JOIN ( 해쉬 조인 ) nested loop 조인은 한 행씩 모든 행을 조인하기 때문에작은 데이터에서는 효과적이지만, 데이터의 양이 커지면 성능이 아주 안 좋아진다. 데이터의 양이 클 때는 nested..