2021.12.08 TIL

서승원·2021년 12월 8일
0

TIL

목록 보기
33/68

GROUP BY , ORDER BY

각각 필드를 한 기준에 의해서 정리하여 통계를 내고, 필드의 크기를 기준으로 정렬할 때 사용한다. stId 로 GROUP BY 해서 score 필드의 AVG 통계 동작을 완료하고, ScoreT의 레코드들을 stId에 의해 ORDER BY 해서 정렬하는 코드다.

VIEW와 임시 테이블

가장 위의 코드는 ORACLE 의 방식으로 SELECT문을 그대로 TABLE 처럼 사용한다.inline view 라고 부른다.
2번째는 VIEW 로 지정해서 TABLE이 실제로 생성되지는 않았지만 Avg_V 라는 이름으로 표현할 수 있게 해준다.
임시 테이블을 만든 코드다 SELECT 문을 이용하여 ScoreT의 data를 이용해 score를 이용해 AVG라는 필드를, stId에 의해 GROUP BY 하여 통계내어 출력했다. 임시테이블은 view에 비해 동작속도가 빠르지만 원본 data의 변화에 반응하지않는다. VIEW는 그룹을 묶고, 통계처리 하는 과정이 포함되기 때문에 동작속도가 느리지만 원본 data에서의 변화가 바로바로 반영된다.

JOIN
JOIN은 레코드와 레코드를 짜매어서 한 결과로 볼 수있게 해준다.
1) cross join
StudentT와 SubjectT 를 함께 SELECT 해서 한 표에 출력한다. 학생 6명과 과목 3개가 모든 경우의 수를 고려해 합친 cross join 형태다.
2) self join

ScoreT 테이블 두개를 각각 A ,B 로 alias 하여 따로 SELECT 했다. 그리고 조건을 영어성적, A와 B가 가리키는 과목이 일치, A와B의 점수가 일치, A와 B의 학번이 다름. 으로 하나하나 추가해 나가서 영어과목에서 같은 점수를 득점한 사람 둘을 찾게된다. 조건을 하나하나 추가하다보면 쉽게 복잡한 코드를 만들어 낼 수 있다.
3) inner join
가장 많이 사용되는 형태로 PK-FK 사이에서 공통 데이터를 가지고 이용하는 경우가 많다.

inner join을 이용한 문제 해결 과정이다. 먼저 SubjectT / ScoreT를 JOIN 시키고 과목명이 같다는 조건을 추가해서 공통 데이터를 이용해 원하는 표를 얻어낸다.
그 후 가중치에 대한 조건을 입력하고, alias를 이용한 필드의 호출로 학번으로 GROUP BY 하여 학생별 가중치 3을 갖는 과목의 평균을 구해낸다. 그 후 having을 이용해 해당 평균이 70점 이하인 학생들의 학번을 얻어낼 수 있다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글