교육 (Today I Learned)/SeSAC

SeSAC 4일차 / SQL 기본(SQL 문-3)

Bay Im 2023. 7. 21. 01:09
SeSAC 4일차(2023-07-20)
SQL 기본(SQL 문-3)


그룹 함수를 사용한 집계 데이터 보고

 

- 그룹 함수

행 집합 연산을 수행하여 그룹 별로 하나의 결과 산출

SELECT 절에서 사용, NULL 값 무시

 

AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE

 

ex)

SELECT COUNT(column_name)

=> Null이 아닌 값을 가진 행의 수 반환

 

SELECT COUNT(*)

=> 중복, null 포함한 행의 수 반환

 

SELECT COUNT(DISTINCT column_name)

=> Null이 아닌 unique 값의 수 반환

 

 

 

 

 

GROUP BY 절, HAVING 절

 

- GROUP BY

테이블의 행을 더 작은 그룹으로 나눌 수 있다.

HAVING 절로 조건을 줄 수 있다.

그룹 함수가 아닌 SELECT 절의 모든 열은 GROUP BY 절에 있어야 한다.

GROUP BY 절에 지정된 열은 SELECT 절에 지정하지 않아도 된다.

 

기본 형태)

GROUP BY group_by_expression

HAVING group_condition

 

ex)

GROUP BY column_name1, column_name2

HAVING MAX(column_name3) > 10000

 

 

 

 

 

조인을 사용하여 여러 테이블의 데이터 표시

 

INNER JOIN

 

- NATURAL JOIN

두 테이블에서 데이터 유형과 이름이 일치하는 모든 열을 기반으로 테이블을 조인

 

기본 형태)

SELECT table1.column_name, table2.column_name

FROM table1

NATURAL JOIN table2;

 

 

 

- USING 절로 Join 생성

두 테이블에서 여러 열의 이름은 같지만 데이터 유형이 다를 경우 USING 절 사용하여 Equijoin에 대한 열을 지정 가능

USING 절로 두 개 이상의 열이 일치하는 경우 하나의 열만 일치하도록 할 수 있다.

 

기본 형태)

SELECT column_name1, column_name2

FROM table1 JOIN table2

USING (column_name2);

 

 

 

- ON 절로 Join 생성

ON 절을 사용하여 임의 조건을 지정하거나 조인할 열을 지정할 수 있다.

 

기본 형태)

SELECT a.column_name1, b.column_name2

FROM table1 a JOIN table2 b

ON (a.column_name3 = b.column_name3);

 

ex) 3개 테이블 조인

SELECT a.column_name1, c.column_name2, b.column_name3

FROM table1 a

JOIN table2 b

ON b.column_name4 = a.column_name4

JOIN table3 c

ON b.column_name5 = c.column_name5;

 

 

 

- 테이블 자체 조인(Self Join)

 

ex)

SELECT a.column_name1, b.column_name2

FROM table1 a JOIN table b

ON (a.column_name3 = b.column_name4);

 

 

 

- Nonequijoin

등호(=) 연산자 외의 다른 연산자를 포함하는 조인 조건

 

ex)

SELECT a.column_name1, a.column_name2, b.column_name3

FROM table1 a JOIN table2 b

ON a.column_name2

BETWEEN b.column_name4 AND b.column_name5;

 

 

 

 

 

OUTER JOIN

 

- LEFT OUTER JOIN, RIGHT OUTER JOIN

INNER JOIN의 결과와 왼쪽 또는 오른쪽 테이블의 일치하지 않는 행도 반환하는 두 테이블 간의 조인

 

ex 1)

SELECT a.column1, a.column2, b.column3

FROM table1 a LEFT OUTER JOIN table2 b

ON (a.column2 = b.column2);

 

ex 2)

SELECT a.column1, b.column2, b.column3

FROM table1 a RIGHT OUTER JOIN table2 b

ON (a.column2 = b.column2);

 

 

 

- FULL OUTER JOIN

INNER JOIN의 결과와 LEFT RIGHT OUTER JOIN의 결과 모두를 반환하는 두 테이블 간의 조인

 

ex)

SELECT a.column1, b.column2, b.column3

FROM table1 a FULL OUTER JOIN table2 b

ON (a.column2 = b.column2);

 

 

 

- Cartesian Product

조인 조건이 생략된 경우

조인 조건이 잘못된 경우

첫번째 테이블의 모든 행이 두번째 테이블의 모든 행에 조인되는 경우(CROSS JOIN)

위 경우에 Cartesian Product가 생성된다.

 

Cartesian Product가 생성되지 않게 하려면 반드시 유효한 조인 조건을 포함해야 한다.