본문 바로가기

Study/class note

sql중급 / 계층형 질의문1,2

089 계층형 질의문으로 서열을 주고 데이터 출력하기 1

계층형 질의문은 서열이 있는 데이터에서 서열을 출력하는 SQL문법

사원 테이블에는 서열이 존재 > 숨어있는 서열을 화면에 표시하는 것

서열에 관련된 컬럼은 mgr > mgr을 이용해서 서열을 출력

-- 사원번호, 이름, 관리자번호 출력
select empno, ename, mgr
 from emp;
 
-- 사원이름, 서열, 월급, 직업을 출력하세요
select ename, level, sal, job
 from emp
 start with ename = 'KING'          -- 보고 싶은 서열1위에 해당하는 사원
 connect by prior empno = mgr;      -- empno 가 mgr인 사원 > ... > empno가 mgr인 사원 으로 엮어서 서열을 부여

문제466.CLARK을 시작점으로 두고 서열 순서를 출력하시오

           사원번호, 이름, 서열, 월급, 직업을 출력하시오

select empno, ename, level, job, sal
 from emp
 start with  ename = 'CLARK'
 connect by prior empno = mgr;

문제467. KING을 시작점으로 두고 서열순서로 사원테이블의 컬럼을 출력하는데 이름, 서열, 직업, 월급을 출력하는데 월급이 2400이상인 사원들만 출력하시오

select ename, level, job, sal
 from emp
 where sal >= 2400
 start with ename = 'KING'
 connect by prior empno = mgr;

문제468. ppt예제처럼 level만큼 앞에 공백을 채워 넣어서 이름,서열,직업,월급이 출력되게 하시오

select rpad(' ',level*3) || ename as employee, level, job, sal
 from emp
 start with ename = 'KING'
 connect by prior empno = mgr;

예전에 배울때는 rpad(sal,10,'*')와 같이 출력함. 월급을 출력하는데 전체 10자리 잡고 나머지 공간에 *을 채워넣어라는 뜻 > 하지만 현재 rpad(' ',12)와 같이 인자 2개만 사용함. 공백(' ')을 12개 채워넣어라 라는 뜻

 

 

090 계층형 질의문으로 서열을 주고 데이터 출력하기 2

문제469. 위의 결과에서 BLAKE는 제외하고 출력하시오

select rpad(' ',level*3) || ename as employee, level, job, sal
 from emp
 where ename != 'BLAKE'
 start with ename = 'KING'
 connect by prior empno = mgr;

계층형 질의문 결과에서 특정행만 제외하려면 where절에 제외시킬 검색조건을 적어줘야함.

 

문제470. 이번에는 BLAKE뿐만 아니라 BLAKE의 팀원들가지 제외시켜서 출력하시오

select rpad(' ',level*3) || ename as employee, level, job, sal
 from emp
 start with ename = 'KING'
 connect by prior empno = mgr and ename != 'BLAKE';

팀장뿐만 아니라 팀원들까지 같이 출력해서 제외시키고 싶다면 where절이 아니라 connect by절에 제외시킬 팀장을 기술하면 됨

 

문제471. 이번에는 BLAKE와 BLAKE의 팀원들 뿐만 아니라 CLARK과 CLARK의 팀원들도 출력에서 제외시키시오

select rpad(' ',level*3) || ename as employee, level, job, sal
 from emp
 start with ename = 'KING'
 connect by prior empno = mgr and ename not in ('BLAKE','CLARK');

문제472. 숫자를 1부터 10까지 출력하시오

select level
 from dual
 connect by level <= 10;
 
--connect by절에 기술한 숫자만큼 1번부터 해당숫자까지 출력이 되어짐.

 

문제473. (오늘의 마지막 문제) 1부터 100까지의 숫자의 합은 얼마인가 ?

select sum(level)
 from dual
 connect by level <= 100;

 

반응형