기획자의 하드스킬모음

문과 직장인 자주 활용하는 sql 기초 문법 모음

yeahse09 2023. 8. 24. 23:43
728x90

sql('Structured Query Language')은 문과 직장인들 사이에서 되게 유명한(?)..
유명하다기보다는 다들 한번쯤은 들어보고 나도 해볼까? 하는 언어라고 알고 있다.

그래서 혹시 sql을 활용해보고 싶은데, 혹은 실무에서 활용하면 좋을 것 같은데 엄두가 안나는 사람이 있다면

이 글을 참고하면 기초적인건 알아갈 수 있을 것 같다.

 

❗️글을 읽기전..

* 쿼리란? 데이터를 뽑기 위해 작성한 코드라고 이해하면 됨.

* 이 글에서 한국어로 쓰는부분을 여러분들이 사용할 칼럼,테이블명 등으로 바꾸면 됨

 

1. Select

가장 기본적인 쿼리의 구조는  "select * from 테이블이름" 이라고 보면 된다.

이 쿼리를 쉽게 풀어서 말하자면  = 테이블에서 *(전체 칼럼)을 고른다. 라는 의미이다.

여러분이 테이블에 어떤 데이터들이 있는지 한번 확인해보고 싶다면 이 쿼리에서 테이블이름만 바꾸면 된다.

🚨 주의 🚨 여러분이 데이터를 뽑고자 하는 그 테이블은 무조건 어떤 '데이터 베이스' 에 담겨있으므로,

USE 데이터베이스명;
SELECT * FROM 테이블명;

이렇게 쓰던지, 아니면

SELECT * FROM 데이터베이스명.테이블명;

이런 식으로 내가 어떤 데이터베이스에서 테이블을 가져올건지를 명시해줘야 한다.

 

한번 슥 테이블을 확인했다면 특정 칼럼을 가져오고 싶을 것이다. 그럴 때는,

SELECT  칼럼A,칼럼B FROM 데이터베이스명.테이블명;

이런식으로 아까 그 * 자리에 원하는 칼럼명을 ,(콤마)로 연결해서 쓰면 된다.

 

2. Where

단순히 칼럼만 선택해서 가져오면 참 좋겠지만.. 실무에서 그럴일은 잘 없다.

예를 들어, 8월 한달의 데이터가 필요하다던지.. 성별이 여자에 해당하는 데이터만 뽑아야 한다던지 등등

여러 조건에 따라 데이터를 필터링 해서 봐야 하는 경우가 대부분이다.

그럴 때 필요한 것이 바로 where이다.

SELECT * FROM 데이터베이스명.테이블명 WHERE 조건;

 

🧐 첫번째,  "8월 한 달 동안의 사용자 데이터 전체를 뽑아주세요" 라는 요청이 들어온다고 가정해보자.

날짜 칼럼:  "log_Date"

SELECT * FROM 데이터베이스명.테이블명 WHERE log_Date BETWEEN "2023-08-01" AND "2023-08-31";

between이라는 문법은 데이터가 특정 범위안에 속할 수 있을 때 사용한다.

 

🧐 두번째,  "8월 한 달 동안의 데이터 중에서 성별은 여자이고, 회원가입 여부가 Y인 사용자 데이터를 뽑아주세요" 라는 요청이 들어온다고 가정해보자.

성별 칼럼 : "sex" -> male,female

회원가입 여부 칼럼: "Is_user" -> Y,N

SELECT * FROM 데이터베이스명.테이블명 WHERE log_Date BETWEEN "2023-08-01" AND "2023-08-31 AND sex = ''female" AND Is_user ="Y";

두번째 요청에서는 필요한 조건이 총 세개이다.

1) 8월 이라는 날짜 기간.  2) 성별은 여자  3) 회원가입 여부 = Y

그래서 where 절에서는 AND라는 문법을 사용해 해당 조건들을 연결했다.

 

3. Order by

order by는 말 그대로 order, 즉 데이터를 정렬해서 보기 위해 사용하는 문법이다.

숫자 데이터에 보통 많이 사용하고, 문자에도 쓸 수는 있다.

a,b,c. ㄱ,ㄴ,ㄷ  이런 오름차순(ASC)이 기본으로 적용되는데 order by 칼럼명 DESC 

이렇게 내림차순(DESC) 조건을 주면 c,b,a. ㄷ,ㄴ,ㄱ 순으로 정렬해서 볼 수 있다.

 

아까 썼던 쿼리에 적용해보자면, 

SELECT * FROM 데이터베이스명.테이블명 WHERE log_Date BETWEEN "2023-08-01" AND "2023-08-31 AND sex = ''female" AND Is_user ="Y" ORDER BY log_Date DESC;

여기서 쿼리의 결과는 날짜를 기준으로 내림차순 정렬되기 때문에, 8월 31일 > 8월 1일까지 역으로 데이터가 출력될 것이다.

order by는 쿼리 맨 마지막에 쓴다.

 

4. Group by

이거만 알면 진짜 다 알았다. (는 거짓말)

기본적인건 할 수 있다. group by는 데이터에 그룹을 지어서 보고 싶을 때 사용한다. 

 

🧐  "8월 한 달 동안의 데이터 중에서 성별에 따라 데이터 갯수가 얼마나 되는지 데이터를 뽑아주세요" 라는 요청이 들어온다고 가정해보자.

SELECT sex,count(*) AS total_count FROM 데이터베이스명.테이블명 WHERE log_Date BETWEEN "2023-08-01" AND "2023-08-31" GROUP BY sex;

GROUP BY뒤에 그룹을 지을 수 있는, 즉 카테고리가 만들어질 수 있는 칼럼명을 쓰고

sex와 count(*) 을 셀렉트했다.

 

??? count(*)이라는건 칼럼에 없는데???

 

가상의 칼럼이라고 생각하면 된다. group by를 사용함으로써, 생길 수 있었던 가상의 칼럼인건데

흠.. 진짜 칼럼이 테이블에 생기는건 아니고 데이터 추출 결과에만 나타나는 칼럼이다.

보이는 그대로 카운팅을 해주는 거다.

count(*) 뒤에 AS 라는 문법은 데이터에 별명을 지어주는 거다.

칼럼을 더 많이 뽑고 쿼리가 복잡해지면, 일일히 칼럼이름을 쓰기 귀찮기도 하고

이렇게 가상의 칼럼을 만들게 될때 해당 데이터가 무엇인지 쉽게 파악하기 위해 사용한다.

 

 

😈 흐흐.. 이건 시작에 불과해요

누군가가 이 글을 읽고 어? sql 짱 쉽네 라고 생각했다면 축하드린다.

sql을 당신도 어느 정도는 잘 활용할 가능성을 지녔다는 뜻이기 때문이다!

그치만 이건 시작에 불과하다..

다음에 시간 날때 좀 더 어려운 버전으로 활용도 높은 쿼리를 들고 올테니..

이 글이 유용했다면 공감을 눌러주세요ㅎㅎ ❤️

728x90