SQL

Sang Jun Lee·2020년 7월 17일
0

SQL

SQL은 Structured Query Language
SQL은 데이터베이스에 접근하여 조정할 수 있게 해줍니다.
SQL은 ANSI(America Naitonal Standards Institue)와 ISO(International Organization for standardization)의 표준입니다.

많이 사용되는 것은 MySQL, PostgreSQL, MariaDB, Oracle 등이 있습니다.

기본적인 구조는 아래와 같습니다.

SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE [조건]
GROUP BY [그룹화할 컬럼]
HAVING [그룹화한 뒤 조건]
LIMIT [제한할 개수]

SELECT / FROM

우선 가장 중심이 되는것은 SELECT와 FROM입니다!
예를 들면 “서랍에 있는 연필을 찾고 싶은” 경우 SQL문으로 변경하면 다음과 같습니다

SELECT 연필
FROM 서랍

SELECT 뒤에는 찾고싶은 목적 대상들(Column)을 나열하면 되고, FROM 뒤에는 찾을 대상이 있는 공간(Table)을 작성하면 됩니다

WHERE

만약 위의 예에서 조건을 추가해서 “서랍에 있는 연필 중 길이가 10cm 이상인 연필을 찾고 싶은” 경우를 SQL문으로 변경하면 다음과 같습니다

SELECT 연필
FROM 서랍
WHERE 길이 >= 10cm

조건을 주고싶은 경우엔 WHERE 뒤에 작성해주시면 됩니다. WHERE 절은 엑셀 함수에서 IF와 비슷한 느낌이라고 생각하시면 좋을 것 같습니다

조건을 늘려 “서랍에 있는 연필 중 길이가 10cm 이상이고 색상이 빨간색인 연필을 찾고 싶은 경우

SELECT 연필
FROM 서랍
WHERE 길이 >= 10 AND 색상 = "빨간색"

GROUP BY

여기서 나오는 개념은 GROUP BY 입니다! GROUP BY [컬럼 이름] 이런 방식으로 사용하는데, 직관적으로 설명하자면 컬럼들을 그룹화한다(aggregate)라고 생각해주세요

GROUP BY에 대한 이해를 돕기 위해 그림을 그려봤는데, 아래와 같은 과정을 통해 결과가 나타납니다

우선 GROUP BY하기 위해 같은 값들을 모아두고, 그 후에 연산(COUNT 혹은 SUM 같은 집계 함수)을 수행합니다

코드를 통해 보여드리겠습니다

SELECT user_id, event, event_date, COUNT(DISTINCT user_id) AS 'unique',
	   COUNT(user_id) AS 'total'
FROM user_log
WHERE user_id = '1'
GROUP BY user_id, event, event_date;

ORDER BY

ORDER BY [컬럼 이름] 으로 사용합니다. 기본 옵션은 오름차순이며 DESC을 붙여주면 내림차순으로 정렬됩니다. ORDER BY event_date DESC 이런 식으로 하면 최신 날짜부터 정렬됩니다

SELECT event, event_date, COUNT(DISTINCT user_id) AS 'unique',
  	   COUNT(user_id) AS 'total'
FROM user_log
GROUP BY event, event_date
ORDER BY event_date;

Join

Join은 2개 이상의 Table을 조합해 새로운 가상 Table처럼 만들어 결과로 보여줍니다. 여러 Table을 연결한다고 생각하면 좋을 것 같습니다

Join은 왜 필요할까?

데이터베이스에 대한 지식이 없을 땐, 모든 Data를 하나의 Table에 넣으면 Join이 필요없을텐데 왜 굳이 Table을 나눠서 저장할까?라는 의문을 가졌습니다. 조금 더 공부한 결과 관계형 데이터베이스는 정규화 과정을 거쳐 데이터 중복을 최소화해 데이터를 관리합니다.
이 정규화 과정을 거치면 Table끼리 관계(Relation)를 갖게 됩니다. 또한 저장 공간의 효율성과 확장성이 증가됩니다!

Table에 저장된 데이터를 효과적으로 검색하기 위해 Join을 사용합니다. 제 사례를 들자면, User의 상태 데이터는 user_state table에 저장하고 User의 로그 데이터는 user_log table에 저장했습니다. 그리고 다양한 행동 패턴을 분석할 때 (예를 들어, 블로그에 누적 글이 3개 이상인 유저들과 3개 미만인 유저들의 행동 패턴을 비교하고 싶을 경우) Join을 사용했습니다

Join의 종류

Inner Join
Cross Join
Self Join
Outer Join
Left Outer Join
Right Outer Join
Full Outer Join

Join 문법

SELECT
FROM TABLE_A as a
LEFT JOIN
(SELECT
FROM TABLE_B) as b
ON a.column1 = b.column1
profile
Live now and Dream better tomorrow

0개의 댓글