LG CNS 부트캠프 학습일지 21일차
학습 내용
OVER()윈도우 함수GROUP BY,HAVING구문JOIN구문
연습 문제를 풀면서 깨달은 것
SELECT 는 결국 쿼리 결과로 보여지는 열(column)을 선택하는 것이다. 이미 존재하는 열이라면 그 이름을 명시하면 된다. 하지만 주어진 데이터로부터 새로운 열을 만들고 싶다면 표현식을 작성하면 된다. 그리고 이 때 표현식에 사용하는 열의 이름은 행 단위로 나누었을 때 해당 열에 존재하는 데이터를 가리킨다.
OVER() 윈도우 함수
SUM() 이나 AVG() 같은 복수행 함수들은 하나의 열의 복수행 데이터를 인수로 받아서 하나의 값을 반환한다. 하지만 때로는 복수행 함수의 결과를 덧붙이고 싶을 때가 있다.
1
2
3
4
SELECT EMP_ID,
SALARY,
SUM(SALARY) as TOTAL
FROM employees;
1
2
3
EMP_ID SALARY TOTAL
---------------------
001 100 600
하지만 OVER()을 사용하면 다음과 같이 나온다.
1
2
3
4
SELECT EMP_ID,
SALARY,
SUM(SALARY) OVER() as TOTAL
FROM employees;
1
2
3
4
5
EMP_ID SALARY TOTAL
---------------------
001 100 600
002 200 600
003 300 600
GROUP BY, HAVING 구문
SUM() 이나 AVG() 같은 복수행 함수들은 하나의 열의 복수행 데이터를 인수로 받아서 하나의 값을 반환한다. 하지만 때로는 열의 데이터를 그룹으로 나눠서 복수행 함수 연산을 하고 싶을 때가 있다. 예를 들어 사원의 정보를 부서별로 나눠서 통계를 내고 싶은 경우가 이에 해당이 된다.
1
2
3
4
SELECT DEPT_ID,
SUM(SALARY) as TOTAL
FROM employees
GROUP BY DEPT_ID;
1
2
3
4
5
DEPT_ID TOTAL
-------------
001 300
002 400
003 500
만약 GROUP BY 의 결과로 얻은 값을 필터링하고 싶다면 HAVING을 사용하면 된다. 정보처리기사 기출문제로 기억한다.
1
2
3
4
5
SELECT DEPT_ID,
SUM(SALARY) as TOTAL
FROM employees
GROUP BY DEPT_ID
HAVING TOTAL >= 400;
1
2
3
4
DEPT_ID TOTAL
-------------
002 400
003 500
GROUP BY는 두 개의 열을 그룹 조건으로 사용할 수도 있다.
1
2
3
4
SELECT DEPT_ID,
SUM(SALARY) as TOTAL
FROM employees
GROUP BY DEPT_ID, GENDER;
WITH ROLLUP
GROUP BY로 구분한 데이터의 총합을 계산해준다. 상황에 따라 유용하긴한데, 범용적이진 않을 것 같다.
JOIN 구문
여러 테이블의 데이터를 조회하고 싶을 때는 어떻게 해야할까. 예를 들어 employee 테이블에는 사원의 소속 부서 아이디에 대한 정보가 있지만, 소속 부서의 이름은 department 테이블에 있다고 가정해보자. 그렇다면 사원의 이름과 소속부터의 이름을 연결하기 위해서는 JOIN을 사용해야 한다.
JOIN을 사용하지 않고 두 테이블을 연결한다.
1
2
3
SELECT E.EMP_NAME, D.DEPT_NAME
FROM employee E, department D
WHERE E.DEPT_ID = D.DEPT_ID;
JOIN - USING을 사용하는 것은 공통된 열이 있을 때 가능하다.
1
2
3
SELECT E.EMP_NAME, D.DEPT_NAME
FROM employee E
JOIN department D USING(DEPT_ID);
JOIN - ON은 공통된 열이 존재하지 않을 때 사용할 수 있다.
1
2
3
SELECT E.EMP_NAME, D.DEPT_NAME
FROM employee E
JOIN department D ON(E.DEPT_ID = D.DEPARTMENT_ID);
결론
수업을 듣고 따라가는건 문제가 없는데, 며칠 뒤에 연습문제를 풀어보면 풀지 못할 것 같아서 걱정이 들었다. 수업 끝나고 그리고 주말에 다시 풀어서 숙달해보자.
Comments powered by Disqus.