프로그래밍/SQL 문제풀이

02_OracleDB_SQL : JOIN 연습 문제

pupu91 2022. 7. 19. 20:35
반응형

 

 

1. 이름에 '형'자가 들어가는 직원들의 사번, 사원명, 직급명을 조회하세요.

SELECT 
       EMP_ID
     , EMP_NAME
     , JOB_NAME
  FROM EMPLOYEE 
  JOIN JOB USING(JOB_CODE)
 WHERE EMP_NAME LIKE '%형%';

1) SELECT 절에 필요한 컬럼명 작성

2) FORM절에 메인 테이블명과 JOIN할 테이블명 작성 후 컬럼명 작성(같은 컬럼명은 USING)

3) '형'자가 들어간 직원들만 조회하기 위해 WHERE절에 LIKE연산자 사용

 

 

 

 

 

 

 

2. 보너스포인트를 받는 직원들의 사원명, 보너스포인트, 부서명, 근무지역명을 조회하세요.

 

SELECT 
       EMP_NAME
     , BONUS
     , DEPT_TITLE
     , LOCAL_NAME
  FROM EMPLOYEE
  JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
  JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
 WHERE BONUS IS NOT NULL;

 

1) 필요한 컬럼명을 SELECT절에 작성

2) FROM절에 메인테이블과 조인할 테이블명 작성 후 컬럼명 조인

3) 보너스포인트를 받는 직원들을 조회하기 위해 NULL값을 제외한 행을 가져오도록 작성

 

 

 

 

 

 

 

 

3. 주민번호가 70년대 생이면서 성별이 여자이고, 성이 전씨인 직원들의 사원명, 주민번호, 부서명, 직급명을 조회하세요.

 

SELECT 
       EMP_NAME
     , EMP_NO
     , DEPT_TITLE
     , JOB_NAME
  FROM EMPLOYEE 
  JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
  JOIN JOB USING(JOB_CODE)
 WHERE SUBSTR(EMP_NO, 1, 2) >= 70 
   AND SUBSTR(EMP_NO, 1, 2) < 80
   AND SUBSTR(EMP_NO, 8, 1) = 2
   AND EMP_NAME LIKE '전%';

 

 

 

 

 

반응형

4. 부서코드가 D2인 직원들의 사원명, 직급명, 부서명, 근무지역명을 조회하세요.

 

SELECT 
       EMP_NAME
     , JOB_NAME
     , DEPT_TITLE
     , LOCAL_NAME
  FROM EMPLOYEE 
  JOIN JOB USING(JOB_CODE) 
  JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
  JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
 WHERE DEPT_CODE = 'D2';

=> 부서코드가 D2인 직원들만 조회하기 위해 WHERE절에 조건 작성

 

 

 

 

 

 

 

 

5. 해외영업팀에 근무하는 사원명, 직급명, 부서코드, 부서명을 조회하세요.

 

SELECT 
       EMP_NAME
     , JOB_NAME
     , DEPT_CODE
     , DEPT_TITLE
  FROM EMPLOYEE 
  JOIN JOB USING(JOB_CODE)
  JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
 WHERE DEPT_TITLE LIKE '해외영업%';

 

 = > WHERE절에 LIKE연산자 사용하여 해외영업팀만 조회하기

 

 

 

 

 

 

 

6.한국과 일본에 근무하는 직원들의 사원명, 부서명, 지역명, 국가명을 조회하세요.

SELECT 
       E.EMP_NAME
     , D.DEPT_TITLE
     , L.LOCAL_NAME
     , N.NATIONAL_NAME
  FROM EMPLOYEE E
  JOIN DEPARTMENT D ON(E.DEPT_CODE = D.DEPT_ID)
  JOIN LOCATION L ON(D.LOCATION_ID = L.LOCAL_CODE)
  JOIN NATIONAL N ON(L.NATIONAL_CODE = N.NATIONAL_CODE)
   WHERE N.NATIONAL_NAME IN('한국', '일본');

 

= > WHERE절에 IN연산자 사용하여 한국과 일본 직원들만 조회

 

 

 

 

 

 

7. 본인 급여 등급의 최소급여(MIN_SAL)를 초과하여 급여를 받는 직원들의 사원명, 직급명, 급여, 보너스포함 연봉을 조회하세요. 연봉에 보너스포인트를 적용한다

 

SELECT 
       E.EMP_NAME
     , J.JOB_NAME
     , E.SALARY
     , (E.SALARY + (E.SALARY * NVL(E.BONUS, 0))) * 12
  FROM EMPLOYEE E
  JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE)
  JOIN SAL_GRADE S ON(E.SAL_LEVEL = S.SAL_LEVEL)
 WHERE E.SALARY > S.MIN_SAL;

=> 연봉에 보너스를 포함 시키기 위해 (E.SALARY + (E.SALARY * NVL(E.BONUS, 0))) * 12 작성 

     WHERE절에 최소급여를 초과하는 조건 작성

 

반응형