SQL (Structured Query Language) 에 대해서 정리해보겠습니다.
SQL은 관계형 데이터베이스 관리 시스템 (RDBMS)의 데이터 관리를 위한 프로그래밍 언어라고 머릿속에 한마디로 넣어두시면 될것 같고요..
다시말해서, DB를 다루는 언어다 라고 생각하시면 될것같습니다.
그럼, SQL 의 종류가 궁금하실텐데요...간단하게 정리하자면 아래와 같이 크게 3가지로 구분됩니다.
DML(Data Manipulation Language) : 테이블의 데이터를 조작하는 명령어
- INSERT (삽입) / DELETE (삭제) / SELECT (조회) / UPDATE (갱신)
DCL(Data Control Language): 데이터베이스, 테이블 접근권한, CRUD 권한정의하는 명령어
- GRANT (데이터베이스 객체 권한부여)
- REVOKE (부여된 객체권한 취소)
DDL(Data Definition Language) : 데이터베이스, 테이블 스키마 정의, 수정, 삭제 하는 명령어
- CREATE (데이터베이스 객체를 생성)
- DROP (데이터베이스 객체 삭제)
- ALTER (기존 데이터베이스 객체 재정의)
다시한번 말씀드리지만,
SQL 은 데이터베이스를 만드는 것은 물론, 만들어진 데이터베이스에 데이터를 입력및 변경,삭제하는 작업과 데이터베이스조회등등의 작업을 위해서 필수언어라고 보시면 됩니다.
그리고, 업무를 진행하다보면 대용량의 데이터를 분석하는일 이 많죠? 공감하시나요 ?
아무튼, 데이터를 분석하려면 가장 먼저 해야할 것이 바로 데이터를 찾고, 원하는 형태로 가공하는 전처리가 필요합니다.
(물론 DB를 구축하는 업무가 선행되어야하지만요!! ㅎㅎ)
요즘에는 DB를 구축할때 mysql 같은 경우는 docker 를 사용해서 금방 올릴 수 있게되어있는데요...
저는 DBA 는 아니기때문에 일반 데이터를 사용하는 유저로서 DB에서 제가 필요한 정보를 조회해서 가공후 들고오는데 사용하는 언어 중 하나인 SQL에 대해서 개인적으로 공부해본 내용을 공유하도록 하겠습니다.
그리고, 이번 블로그에서 설명드릴 내용은 위에서 간략하게 알아본 DML 중에 SELECT(조회) 구문에 대해서 정리해보려고 하는데요
SELECT 구문의 예를 보면 아래와 같습니다.
.
위의 쿼리에서는 아래 구문만있는데요..
SELECT (조회할 DATA 컬럼) / FROM (대상 DB 테이블명) / WHERE (조회할 데이터의 조건) / ORDER BY (데이터의 정렬 순서)
그외에도 제가 주로 사용하고 있는 구문은 아래와 같습니다.
GROUP BY (데이터 그룹핑 기준, 중복 데이터 제거 및 집계함수 활용 목적)
HAVING (집계함수에 대한 조회 조건 추가)
보통 그루핑할 데이터를 추출할때 사용하고 있죠~
우선, 쿼리를 작성할때 순서를 보시면요..
SELECT를 적고나서 테이블에서 호출할 컬럼을 선택하고 SELECT 옆에다가 적습니다.
SELECT에 *를 적으면, 모든 컬럼을 보여줘~라는것이죠~
불러오고자 하는 Column 이름을 작성하고요.
Column은 From에서 불러오는 테이블의 Column이름과 정확히 같아야 합니다.
다수의 Column을 불러올때는 사이사이 " , "로 구분해 주는 센스도!!
From에서 불러오는 테이블이 하나인경우는 생략해도 되지만,다수의 테이블을 불러온다면 테이블이름에 " . "을 붙인뒤 뒤에 Column을 작성해서 어디서의 Coulmn을 가져오는지 명시해줘야 에러가 나지 않습니다.
아래와 같이요..
t_user.id , t_category.category_nm
그리고, 아래와 같은 구문도 가능한데요..
SELECT t_user.user_id as id
다시말해서, Coulmn 뒤에 "as" 를 붙이면 뒤에 나오는 이름으로 Column 이름을 바꿔서 저장하는것도 가능합니다.
보통은 테이블에 있는 Coulmn이 직관적이지 못하다면 "as" 으로 바꿔서 더 직관적으로 사용가능합니다.
단 여기서 지정한 Coulmn 이름은 Where 절까지는 사용하지 못합니다.
조금더 응용버전으로 함수를 통해서 데이터를 가공하거나 합과같은 데이터를를 만들수도 있습니다.
아래는 제가 주로 사용하는 대표 함수들및 구문입니다. (참고하시면 될것 같고요..)
left(Coulmn,text수)
case when 조건 then 참결과 else 거짓결과 end
sum(DataTable.Coulmn)
이제 FROM로 넘어가볼까요?
FROM은 데이터를 불러올 테이블을 정해주는 곳입니다. 테이블명을 명확히 해주는것이 중요합니다.
아래는 예시입니다.
FROM t_user
FROM t_category
만약 다수 테이블을 호출한다면 " , "로 구분하면되고요, SELECT에서 호출하기 쉽게 as 붙여서 간단하게 명명해주면 좋습니다.
그리고, 명명해주는 이름은 나를 포함한 다른사람도 이해하기 쉽게 하는것이 중요합니다.
그럼, WHERE로 넘어가보죠..
WHERE는 테이블에서 불러오는 데이터에 대한 조건을 넣는곳입니다.
데이터중에서 특정 조건을 만족하는 데이터를 추출하거나, 두개이상의 테이블에서 key를 가지고 Matching(JOIN) 시키는 목적으로도 활용이 가능한 구문이고도 합니다.
주로 사용하는 구문에 ORDER BY도 있는데요..
출력되는 데이터의 정렬순서를 맞춰주기 위해 사용합니다.
이 순서를 활용해서 특정 데이터를 추출한다면 크게 의미가 있을 수도 있지만 순서에 큰 의미가 없는 데이터라면 크게 신경쓰지 않아도 되는 구문일 수 있습니다.
ORDER BY은 기본이 오름차순 정렬이고요..DESC를 추가해주면 내림차순으로 정렬해줍니다.
그외에도 저는 GROUP BY 구문을 잘 사용하는데요..
예를들면
결과는 아래와 같이 나옵니다.
GROUP BY는 중복되는 값들을 Grouping하여 정리하거나, 집계함수를 활용할때 사용하게 됩니다.
GROUP BY 뒤에는 집계함수에 사용되지 않은 SELECT의 항목들이 들어가야합니다.
제 개인적인 생각을 말씀드리자면요...
해당 구문은 정말로 자주 사용합니다. 잘 익혀둬야 하겠죠?
하지만, 쓰기가 가장 어렵고 구문에러가 가장 많이 나는곳이 바로 이 Group by 아닐까 싶습니다.
HAVING 은 WHERE절에서 조건을 다 주고 거르면 좋겠지만, WHERE절은 SELECT에서 명명한 새로운 이름의 Coulmn이나 집계함수 등을 활용하는게 불가한 부분들이 있습니다. 이런것들은 이제 맨뒤에 HAVING에 와서 조건을 다시 주어 정리를 하곤하죠..
제가 주로 활용하는 경우는 SELECT에서 Count로 특정 Column의 개수를 뽑아놓은것을 바탕으로, 일정개수 이하가 되는 예외 Case, Noise DATA를 한번더 거르는 목적으로 사용합니다.
만약 WHERE에서 다 해결했다면 불필요할 때도 있습니다.
HAVING count(DATA) >= 5 : DATA항목이 5개 Row 이상 있는 경우만 남긴다. 라는 말입니다.
여기까지가 테이블에서 필요한 데이터를 조회하기 위한 가장 기초적인 내용이자 제가 주로 사용하는 구문입니다.
오늘의 블로그는 여기까지고요..
항상 믿고 봐주셔서 감사합니다.