목차
데이터 분석의 목적
데이터베이스에 아주 많이 쌓여있는 raw한 데이터들을,
특별한 의미를 갖는 정보로 재탄생시키는 것이다.
1. JOIN
두개 이상의 테이블의 공통된 정보를 기준으로 합친다.
그래서 하나의 테이블처럼 보는 것을 의미한다.
2. INNER JOIN
교집합이다.
아래의 SQL 문구를 해석해보면,
Order테이블의 OrderID 칼럼, OrderDetails 테이블의 ProductID칼럼과 Quantity 칼럼을 가져올 것이다.
어디서 가져오냐면
Orders테이블에 OrderDetails 테이블을 이너조인해서 가져올 것인데,
Orders 테이블의 OrderID와 OrderDetails 테이블의 OrderID 칼럼의 값이 정확히 같은(교집합) 경우만 가져온다.
3. FULL JOIN =FULL OUTER JOIN
외부 조인이라고도 불린다.
4. UNION, UNION ALL
두 개를 합치는 것이다.
단, 필드명이 같아야 한다!
UNION 은 중복을 제거한 값을 보여주고
UNION ALL 은 모든 값을 보여준다.
5. GROUP BY
Group by는 범주에 따라 통계치를 계산하는데 유용하다.
순서는 아래와 같다.
원하는 테이블에서
범주로 사용할 필드 안에 여러 그룹을 짓는다.
동일한 값을 갖는 데이터를 하나로 묶어서 그룹을 짓는 것이다.
한 필드 안에 여러 그룹이 나오는데, 그룹별로 특정 통계를 내준다.
통계를 내는데 도움이 되는 SQL 함수는 아래와 같다.
COUNT, MAX, MIN, SUM, AVG
따라서 GROUP BY를 사용할 때는
어떤 범주에서 그룹을 지어, 어떤 통계치를 쓸 것인가?
를 생각하자!
예시를 보자.
아래는 Suppliers table이다.
SELECT COUNT(Country), Country
FROM [Suppliers]
GROUP BY Country;
Country에서 그룹을 지어, count 함수를 사용하여 통계를 내서
Country에서 그룹으로 묶인 것의 이름과, 각 그룹별 개수를 select한다.
6. HAVING
where절은 데이터를 검색하기 위한 조건을 적을 때 사용한다.
having도 데이터를 검색하기 위한 조건을 적지만, aggregate function을 이용하여 group by 된 데이터를 filtering하는 데 ㅏ사용한다.
-참고:
Aggregation, aggregate function
데이터베이스에서 데이터를 하나로 합치고, 분석하는 작업을 의미한다.
대체로 Aggregate function(집계 함수)로 aggregation을 한다.
집계 함수는 sum, avg, count 함수를 이야기한다.
students table
| id | name | age | gender | class | score |
|----|---------|-----|--------|---------|-------|
| 1 | Alice | 20 | Female | A | 90 |
| 2 | Bob | 22 | Male | B | 80 |
| 3 | Charlie | 21 | Male | A | 85 |
| 4 | David | 19 | Male | C | 95 |
| 5 | Emma | 23 | Female | B | 75 |
| 6 | Frank | 20 | Male | A | 88 |
위와 같은 테이블이 있다고 하자.
1) WHERE 절로 성별이 여자인 학생들의 이름을 추출할 때
SELECT NAME
FROM TABLE
WHERE GENDER='female';
2) HAVING 절로 각 클래스별로 점수가 80점 이상인 학생들의 이름
students 테이블에서, class 칼럼에서 인스턴스들을 동일한 값으로 그룹을 짓는다.
그 다음 그룹된 각 클래스의 평균 점수를 구한다음, 그 평균 점수가 85 이상인 클래스들만
class와 avg 값을 select한다.
SELECT class, AVG(score) as average_score
FROM students
GROUP BY class
HAVING AVG(score) >= 85;
또 다른 예시
SELECT customer_id, SUM(total_amount) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) >= 5000;
orders 테이블에서 customer_id 칼럼에서 같은 값끼리 그룹을 짓는다.
각 그룹별로 total_amount를 합친 값이 5000이 넘는 경우에만
해당 customer_id와 합계값을 select 한다.
>> 출력값
7. Alias 별칭
쿼리가 길어지면 헷갈리는 일이 생길 수 있어서 별칭을 짓는다.
AS를 쓴다.