Spring 8일차

MOZZI KIM·2022년 12월 15일
1

Spring

목록 보기
8/8
post-thumbnail

1. 아래의 쿼리를 완성하시오.

--44> 커미션을 받는 사원과 급여가 일치하는 사원의 이름,부서번호,급여를 출력하라.
--45> Dallas에서 근무하는 사원과 직업이 일치하는 사원의 이름,부서이름, 및 급여를 출력하시오
--46> Scott과 동일한 급여 및 커미션을 받는 모든 사원의 이름, 입사일 및 급여를 출력하시오
--47> 직업이 Clerk 인 사원들보다 더 많은 급여를 받는 사원의 사원번호, 이름, 급여를 출력하되,
결과를 급여가 높은 순으로 정렬하라
--48> 이름에 A가 들어가는 사원과 같은 직업을 가진 사원의 이름과 월급, 부서번호를 출력하라.
--49> New York 에서 근무하는 사원과 급여 및 커미션이 같은 사원의 사원이름과 부서명을 출력하라.
--50> Dallas에서 근무하는 사원과 직업 및 관리자가 같은 사원의 사원번호,사원이름,
직업,월급,부서명,커미션을 출력하되 커미션이 책정되지 않은 사원은 NoCommission으로 표시하고,
커미션의 컬럼명은 Comm으로 나오게 출력하시오. (단, 최고월급부터 출력되게 하시오)

--44> 커미션을 받는 사원과 급여가 일치하는 사원의 이름,부서번호,급여를 출력하라.
SELECT ENAME, DEPTNO, SAL FROM EMP
WHERE SAL IN(SELECT SAL FROM EMP WHERE COMM IS NOT NULL)    
-- (서브쿼리 연산자가 여러개면, ANY, OR, NOT IN)
 
 --45> DALLAS에서 근무하는 사원과 직업이 일치하는 사원의 이름, 부서이름, 및 급여를 출력하시오.
SELECT E.ENAME, D.DNAME, E.SAL FROM EMP E, DEPT D 
WHERE E.DEPTNO = D.DEPTNO AND E.JOB 
IN (SELECT E.JOB FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.LOC = 'DALLAS');

--46> Scott과 동일한 급여 및 커미션을 받는 모든 사원의 이름, 입사일 및 급여를 출력하시오
SELECT ENAME, HIREDATE, SAL
FROM EMP
WHERE SAL=(SELECT SAL FROM EMP WHERE ENAME='SCOTT')
AND NVL(COMM,0)=(SELECT NVL(COMM,0) FROM EMP WHERE ENAME='SCOTT');
  
--47> 직업이 Clerk 인 사원들보다 더 많은 급여를 받는 사원의 사원번호, 이름, 급여를 출력하되, 
결과를 급여가 높은 순으로 정렬하라.
SELECT EMPNO, ENAME, SAL FROM EMP
WHERE SAL>ALL(SELECT SAL FROM EMP WHERE JOB='CLERK') --결국 최대값과 비교 any 최소값과 비교
ORDER BY SAL DESC;

--48> 이름에 A가 들어가는 사원과 같은 직업을 가진 사원의 이름과 월급, 부서번호를 출력하라.
SELECT ENAME, SAL, DEPTNO FROM EMP 
WHERE JOB IN(SELECT JOB FROM EMP WHERE ENAME LIKE '%A%')
 
--49> New  York 에서 근무하는 사원과 급여 및 커미션이 같은 사원의 사원이름과 부서명을 출력하라.
SELECT E.ENAME, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO
AND E.SAL IN(SELECT E.SAL FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO AND LOC='NEW YORK')
AND NVL(COMM,0) IN(SELECT NVL(COMM,0) FROM EMP E, DEPT D 
WHERE E.DEPTNO=D.DEPTNO AND LOC='NEW YORK');
 
--50> Dallas에서 근무하는 사원과 직업 및 관리자가 같은 사원의 
--사원번호,사원이름, 직업,월급,부서명,커미션을 출력하되
--커미션이 책정되지 않은 사원은 NoCommission으로 표시하고, 커미션의 컬럼명은 Comm으로 나오게 출력하시오. 
--(단, 최고월급부터 출력되게 하시오)
SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL, D.DNAME,
NVL((TO_CHAR(E.COMM)),'NoCommision') AS "COMM"
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND JOB IN(SELECT JOB FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO AND LOC='DALLAS')
AND MGR IN(SELECT MGR FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO AND LOC='DALLAS');

2. 아래의 용어에 대하여 설명하시오.

📌 인증(Authentication)

인증은 사용자가 누구인지 확인하는 절차다. 회원가입, 로그인 과정이 인증의 대표적인 예시다.

📌 인가(Authorization)

인가는 사용자가 요청하는 요청(Request)을 실행할 수 있는 권한 여부를 확인하는 절차다.
'블로그 포스팅 글쓴이'와 '포스팅을 읽는 사용자'들을 예시로 하여 쉽게 접근해보자.
사용자들은 여러 블로그 포스팅을 참조할 수 있지만,
해당 내용을 수정할 수 있는 권한은 글을 직접 게시한 글쓴이만 가능하다.
이것이 바로 인가의 모든 것(?)이다.


3.스프링 시큐리티에서 인증 및 권한 설정 방법을 설명하시오.

권한 설정 방식

권한 설정은 2가지 방식을 통해 가능하다.

1. 선언적 방식

URL : http.antMatchers("/users/**").hasRole("USER")
method : @PreAuthorize("hasRole('USER')")

2. 동적 방식
DB에 연동하여 URL이나 Method로 권한을 설정한다.

profile
코린이

0개의 댓글