--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');
인증은 사용자가 누구인지 확인하는 절차다. 회원가입, 로그인 과정이 인증의 대표적인 예시다.
인가는 사용자가 요청하는 요청(Request)을 실행할 수 있는 권한 여부를 확인하는 절차다.
'블로그 포스팅 글쓴이'와 '포스팅을 읽는 사용자'들을 예시로 하여 쉽게 접근해보자.
사용자들은 여러 블로그 포스팅을 참조할 수 있지만,
해당 내용을 수정할 수 있는 권한은 글을 직접 게시한 글쓴이만 가능하다.
이것이 바로 인가의 모든 것(?)이다.
권한 설정은 2가지 방식을 통해 가능하다.
1. 선언적 방식
URL : http.antMatchers("/users/**").hasRole("USER")
method : @PreAuthorize("hasRole('USER')")
2. 동적 방식
DB에 연동하여 URL이나 Method로 권한을 설정한다.