[STUDY] DB | 예제 풀이 통한 SQL 문법 전반 복습 ② (CASE문, ORDER BY, GROUP BY, SubQuery, INNER JOIN)

Nimgnos·2024년 3월 11일
0

👾 STUDY

목록 보기
32/40
post-thumbnail

📊 EMP TABLE(사원)의 데이터

📊 DEPT TABLE(부서)의 데이터

  • EMP, DEPT 테이블의 데이터를 활용
  • DB 시험 대비 예제 풀이


📌 CASE문 - 조건에 따른 값 반환

  • CASE 컬럼
    WHEN 조건1 THEN 값1
    WHEN 조건2 THEN 값2
    ELSE 값3
    END
  • 컬럼이 조건1 일때는 값1을, 조건2 일때는 값2를 반환하고, 조건에 맞지 않는 경우에는 값3 을 반환함.

Q6.

  • 사원의 사번, 이름, 부서번호, 부서명을 조회하시오. 부서명은 부서번호가 10일 때는 ‘인사부’, 20일 때는 ‘영업부’ 그 외의 값은 ‘생산부’로 조회되어야 합니다.
  • 'CASE 함수'를 사용하여 쿼리문을 작성하세요.
SELECT EMPNO
	, ENAME
	, DEPTNO AS "부서번호"
	,
CASE
	WHEN DEPTNO = 10 THEN '인사부' 
	WHEN DEPTNO = 20 THEN '영업부'
	ELSE '생산부'
END AS "부서명"
FROM EMP;

📌 ORDER BY - 데이터 정렬

  • ORDER BY 컬럼명 ASC : 오름차순(기본값)
    • 작은 것부터 커지는 형식(1 ~ 100)
    • Ascending 오름차순
  • ORDER BY 컬럼명 DESC : 내림차순
    • 큰 것부터 작아지는 형식(100 ~ 1)
    • Descending 내림차순
  • ORDER BY 절은 항상 SELECT 문의 맨 마지막에 위치함.

Q7.

  • 2007년에 입사한 모든 사원의 사번, 이름, 입사일, 커미션을 입사일 기준 오름차순으로 조회하는 쿼리문을 작성하세요.
SELECT EMPNO
	, ENAME
	, HIREDATE
	, COMM
FROM EMP
ORDER BY HIREDATE ASC;

📌 GROUP BY - 그룹별 조회

  • GROUP BY 그룹화할 컬럼명
  • GROUP BY 절은 특정 칼럼을 기준으로 집계 함수를 사용하여 건수(COUNT), 합계(SUM), 평균(AVG) 등 집 계성 데이터를 추출할 때 사용함.

Q8.

  • 직급별로 그룹지어서 직급별 급여의 합과 급여의 평균, 커미션의 평균을 조회하는 쿼리문을 작성하세요. 단, 조회는 직급 기준 오름차순으로 정렬하여 나타내세요.
SELECT JOB
	, SUM(SAL)
	, AVG(SAL)
	, AVG(COMM)
FROM EMP
GROUP BY JOB
ORDER BY JOB ASC;

📌 서브쿼리(SubQuery)

  • 하나의 쿼리 안에 또 다른 쿼리가 존재함.
  • 두 개 이상의 테이블에서 데이터를 조회할 때 사용함.

Q9.

  • 서브쿼리를 사용하여 지역이 ‘서울’인 사원의 사번, 이름, 입사일, 급여, 부서번호, 지역명을 조회하는 쿼리문을 작성하세요.
SELECT EMPNO
	, ENAME
	, HIREDATE
	, SAL
	, DEPTNO
	, (SELECT LOC
		FROM DEPT
		WHERE dept.DEPTNO = emp.DEPTNO) AS LOC
FROM emp
WHERE DEPTNO IN (
	SELECT DEPTNO
	FROM DEPT
	WHERE LOC = '서울'
);

❌ 오답 풀이

 SELECT EMPNO
 	, ENAME
 	, HIREDATE
 	, SAL
 	, DEPTNO
 	, (SELECT LOC
 		FROM DEPT
 		WHERE LOC = '서울') AS LOC
 FROM emp;
  • 위와 같이 작성하여 데이터가 조회되었으나, 조회한 모든 데이터의 LOC 컬럼이 '서울'로 변경되어 잘못 조회가 됨.
  • LOC은 EMP 테이블에 없으므로, DEPT 테이블과 조인하여 사원이 속한 위치를 가져와야 함.
    ➡️ DEPTNO를 조인키로 사용하여 DEPT 테이블의 위치를 가져옴
  • '서울'에 속한 부서 DEPTNO를 서브쿼리로 가져와 해당 부서 정보를 필터링, 해당 사원들의 부서의 LOC값 가져옴.

📌 JOIN - INNER JOIN

  • 조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말함.
  • INNER JOIN(내부 조인)
    • SELECT <열 목록>
      FROM <첫 번째 테이블>
      INNER JOIN <두 번째 테이블>
      ON <조인 조건>
      [WHERE 검색 조건]
    • 두 테이블을 연결할 때 가장 많이 사용함.

Q10.

  • 조인을 사용하여 지역이 ‘서울’인 사원의 사번, 이름, 입사일, 급여, 부서번호, 지역명을 조회하는 쿼리문을 작성하세요.
SELECT EMPNO
	, ENAME
	, HIREDATE
	, SAL
	, emp.DEPTNO
	, LOC
FROM emp
JOIN dept
ON emp.DEPTNO = dept.DEPTNO
WHERE DEPT.LOC = '서울';
profile
먹고 기도하고 코딩하라

0개의 댓글