본문 바로가기

데이터베이스

ROWNUM

 

[요구 - 1] 변경

가장 top-n , bottom-n 을 통해 가장 월급을 많이 받은 사람 3명, 가장 월급을 적게 받은 사람 3명을 나오게 하시오

가장 실적이 좋은 영업 사원 3명, 실적 나쁜 영업 사원 3명을 뽑아 보고 싶죠?

이러한 것을 하기 위해 주로 함.

 

 

[요구 -2] 수도 컬럼 예제, 설명 

 

 

 

 

7번의 경우

연산자 우선순위 누가 높죠 ? and 와 or 중에

괄호를 통해 우선순위를 명확하게 해주어야 함

오라클의 optimizer 라면 왜 and를 먼저 처리하고 싶죠? 

AND를 먼저 처리를 하면 데이터의 양이 줄어 든다. 그러므로 옵티마이저는 AND를 OR 보다 선호함.

OR 자체는 무거운 연산이기때문에 OR연산을 줄이는 연습이 필요하다

 

 

 

1번과 2번의 경우는 같음 

3번의 경우 안돼! -> 순서에 맞게 작성하기 

BETWEEN은 기계적으로 범위 연산자로 바꿈

 

4번의 경우는 되는데 소문자로 변환하면 안된다. 데이터 자체는 동일해야 한다. 대문자로 반드시

표기 해야하는 케이스가 있기 때문이다.

 

5번의 경우 '81/02/20' 문자열임 -> 암시적 형변환을 DBMS가 수행함

 

6번, 7번을 해보시고

왜 결과가 안나오지? YY 포맷과 RR 포맷이 다른점을 설명하시오.

 

 

 

IN은 리스트 연산자 

8번의 경우 사번이 7369 이거나 7521 이거나 7654 이거나 (OR)

,는 OR의 의미이다. AND의 의미가 아니다. 

 

8번과 9번의 경우는 같음. 이런 경우를 query transformation 이라고 함.

 

10번의 경우 sql 명령어는 대/소문자를 구분하지 않지만, 데이터는 대/소문자를 구분한다.

 

11번의 경우 서로 다른 데이터 타입이 충돌하면 암시적 데이터 변환이 이루어짐.

반드시 명시적으로 type을 변화해주는 방식이 좋은 방식이다.

 

12번 

(MANAGER,20) 에서 , 는 AND

('MANAGER',20),('CLERK',20) 여기서 ,는 OR

 

* 메인 쿼리와 서브쿼리 중에서 서브쿼리가 먼저 실행되고, 그리고 그 실행된 결과에 대해서 메인 쿼리가 동작하게 된다.

서브쿼리에 대해 조사해오시고, [요구] 부분이 제대로 동작하도로 코드를 수정해서 가져오시오.

 

 

 

 

 

7번의 경우 : A로 시작하는 모든 사람, 그냥 'A' 인 경우도 나옴. %가 0개 이상의 모든이라는 의미를 가지고 있음

8번의 경우 : '_A%' 이름의 두번째 글자가 A로 시작하는 모든 사람을 의미한다.

9번의 경우 : 이름에 L과 E가 들어간 사람

 

13번의 경우 날짜와 문자가 충돌하면 ? 어떤게 바뀌는 것이 효율적인가? 

14번의 경우 

연산자의 왼쪽 L value가 변환되면 성능이 큰일날 수 있음

예를 들어, L value에 to_char을 사용하면 성능이 급격히 저하된다.

그러므로 R value를 변형해야 함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'데이터베이스' 카테고리의 다른 글

오라클실습 (JOIN)  (0) 2019.05.07
오라클실습 (190507)  (0) 2019.05.07
널 (null), 디코드 (decode), 케이스 (case)  (0) 2019.05.03
group by, distinct, schema, 시분초  (0) 2019.05.03
csv 파일 추출법 - SQL  (0) 2019.05.03