CS/데이터베이스

SQL 실습 (2)

hyomee2 2024. 7. 17. 16:29

* 실습은 앞의 SQL(2) 게시물에서 이용한 데이터베이스를 이용해 진행했다.

# 1번. 이름에 '형'자가 들어가는 직원들의 사번, 사원명, 부서명을 조회하시오.(1행)
SELECT 
       a.emp_id
     , a.emp_name
     , b.dept_title
  FROM employee a
  LEFT JOIN department b ON a.dept_code = b.dept_id
 WHERE a.emp_name LIKE '%형%';
  
# 2번. 해외영업팀에 근무하는 사원명, 직급명, 부서코드, 부서명을 조회하시오.(9행)
SELECT  
	   a.emp_name
	 , c.job_name 
	 , b.dept_id
	 , b.dept_title 
  FROM employee a
  JOIN department b ON a.dept_code = b.dept_id
  JOIN job c ON a.job_code= c.job_code
 WHERE b.dept_title LIKE "해외영업%";

#3번. 보너스포인트를 받는 직원들의 사원명, 보너스포인트, 부서명, 근무지역명을 조회하시오.(8행)(INNER JOIN 결과)
SELECT 
	   a.emp_name
	 , a.bonus
	 , b.dept_title
	 , c.local_name
  FROM employee a
  JOIN department b ON a.dept_code=b.dept_id
  JOIN location c ON b.location_id=c.local_code
 WHERE a.bonus IS NOT NULL;

# 4번. 부서코드가 D2인 직원들의 사원명, 직급명, 부서명, 근무지역명을 조회하시오.(3행)
SELECT 
	   a.emp_name
	 , d.job_name
	 , b.dept_title
	 , c.local_name
  FROM employee a
  JOIN department b ON a.dept_code=b.dept_id
  JOIN location c ON b.location_id=c.local_code
  JOIN job d ON a.job_code = d.job_code
 WHERE a.dept_code = "D2";

# 5번. 급여 테이블의 등급별 최소급여(MIN_SAL)보다 많이 받는 직원들의 사원명, 직급명, 급여, 연봉을 조회하시오. 연봉에 보너스포인트를 적용하시오.(20행)
SELECT 
	   a.emp_name
	 , b.job_name
	 , a.salary
	 , a.salary * 12 * (1+IFNULL(a.bonus, 0))   # oracle에서의 NVL()이 mariaDB에선 IFNULL()이다.
  FROM employee a
  JOIN job b ON a.job_code = b.job_code
  JOIN sal_grade c ON a.sal_level=c.sal_level
 WHERE a.salary > c.min_sal;

# 6번. 한국(KO)과 일본(JP)에 근무하는 직원들의 사원명, 부서명, 지역명, 국가명을 조회하시오.(15행)
SELECT 
	   a.emp_name
 	 , b.dept_title
 	 , c.local_name
     , d.national_name
  FROM employee a
  JOIN department b ON a.dept_code=b.dept_id
  JOIN location c ON b.location_id=c.local_code
  JOIN national d ON c.national_code=d.national_code
 WHERE d.national_name="한국" 
  OR d.national_name="일본";

# 7번. 보너스포인트가 없는 직원들 중에서 직급코드가 J4와 J7인 직원들의 사원명, 직급명, 급여를 조회하시오. 단, join과 IN 사용할 것(8행)
SELECT 
	   a.emp_name
 	 , b.job_name
     , a.salary
  FROM employee a
  JOIN job b ON a.job_code=b.job_code
 WHERE a.bonus IS NULL 
  AND a.job_code IN ("J4", "J7");

# 8번. 직급이 대리이면서 아시아 지역(ASIA1, ASIA2, ASIA3 모두 해당)에 근무하는 직원 조회(2행)
-- 사번(EMPLOYEE.EMP_ID), 이름(EMPLOYEE.EMP_NAME), 직급명(JOB.JOB_NAME), 부서명(DEPARTMENT.DEPT_TITLE),
-- 근무지역명(LOCATION.LOCAL_NAME), 급여(EMPLOYEE.SALARY)를 조회하시오
SELECT 
	   a.emp_id
	 , a.emp_name
	 , b.job_name
	 , c.dept_title
	 , d.local_name
	 , a.salary
  FROM employee a
  JOIN job b ON a.job_code=b.job_code
  JOIN department c ON a.dept_code = c.dept_id
  JOIN location d ON c.location_id=d.local_code
 WHERE b.job_name="대리" 
  AND d.local_name LIKE "asia%";

'CS > 데이터베이스' 카테고리의 다른 글

SQL (4) TRANSACTION  (0) 2024.07.17
SQL (3) DML  (0) 2024.07.17
SQL 실습(1)  (1) 2024.07.17
SQL(2) JOIN, GROUPING, ROLL UP, SUBQUERIES, SET OPERATORS  (0) 2024.07.16
SQL (1) SELECT, ORDER BY, WHERE, DISTINCT, LIMIT  (1) 2024.07.12