쌓고 쌓다

오라클 중심의 SQL 배움터 13장, 16장 연습문제 풀이 본문

프로그래밍/SQL

오라클 중심의 SQL 배움터 13장, 16장 연습문제 풀이

승민아 2022. 12. 15. 19:36

13장

-- (1)
-- SQL명령문의 처리 속도를 향상 시키기 위해 필요하며 랜덤 액세스하여 저장된 데이터를 찾는다.

-- (2)
-- 고유 인덱스, 비고유 인덱스, 단일 인덱스, 결합 인덱스, DESCENDING INDEX, 함수 기반 인덱스

-- (3-1)
CREATE INDEX idx_regdate
ON member(regdate);

-- (3-2)
CREATE INDEX idx_userid
ON board(userid);

-- (3-3)
CREATE INDEX idx_interest_username
ON member(interest, username);

-- (3-4)
CREATE INDEX idx_userid_upper
ON member(UPPER(userid));

-- (4)
ALTER INDEX idx_name REBUILD;

-- (6)
DROP INDEX idx_name;

 

14장

-- (1)
/* 
RANK 함수는 1등이 2명인 경우 다음 순위는 3등으로 부여하지만
DENSE_RANK 함수는 다음 순위를 2등으로 부여한다.
*/

-- (2)
SELECT name, grade, birthdate,
       RANK() OVER(PARTITION BY grade
                   ORDER BY birthdate DESC) AS birthdate_rank
FROM student;

-- (3)
SELECT deptno, name, birthdate, birthdate_rank
FROM (SELECT deptno, name, birthdate,
      RANK() OVER(PARTITION BY deptno
                  ORDER BY birthdate DESC) birthdate_rank
      FROM student)
WHERE birthdate_rank <= 2;

-- (4)
SELECT deptno, name, weight, height, weight_rank
FROM (SELECT deptno, name, weight, height,
      RANK() OVER(PARTITION BY deptno
                  ORDER BY weight DESC) weight_rank
      FROM student)
WHERE weight_rank <= 2;

-- (5)
SELECT name, weight,
       DECODE(NTILE(3) OVER (ORDER BY weight DESC), 1, 'heavy_weight', 2, 'normal_weight', 'light_weight') weight_group,
       NTILE(3) OVER (ORDER BY weight DESC) weight_ntile
FROM student;

-- (6)
SELECT s.name, d.dname
FROM student s, (SELECT deptno, dname
                 FROM department
                 START WITH dname = '공과대학'
                 CONNECT BY PRIOR deptno=college) d
WHERE s.deptno=d.deptno
ORDER BY d.dname DESC;

-- (8)
SELECT name, sal,
       SUM(sal) OVER (ORDER BY sal
                      ROWS 1 PRECEDING) sum_sal
FROM professor;

-- (9)
SELECT deptno, dname, college, loc
FROM department
START WITH dname='공과대학'
CONNECT BY PRIOR deptno=college;

-- (10)
SELECT profno, name, hiredate, sal,
       LAG(sal, 1) OVER (ORDER BY sal DESC) - sal margin
FROM professor;

'프로그래밍 > SQL' 카테고리의 다른 글

[MySQL] Count(*), Count(1), Count(Column)  (1) 2024.02.12
[MySQL] TEXT VARCHAR 차이?  (0) 2023.12.27
오라클 중심의 SQL 배움터 12장 연습문제 풀이  (0) 2022.12.12
[Oracle] 계층적 쿼리  (0) 2022.12.11
[Oracle] 분석 함수  (0) 2022.12.10
Comments