TIL

내일배움캠프 본캠프 4일차 - 엑셀보다 쉽고 빠른 SQL 1-1 ~ 3-3

수현조 2024. 11. 14. 20:57

어찌어찌 열심히 강의를 듣고 따라 쓰고 설명도 들었지만

너무 한꺼번에 많은 정보를 소화하기엔..난 너무 나약했다

다시 내가 했던 것들을 되짚어 봤는데도 이상하게 이해가 안되는 것들도 많았고

기억도 안났고

그래서...

챗 GPT에게 쉽게 설명해달라고 했다..

중복되는 내용이 있어도 참아주시길... 여러 번 보고 익혀야 해서..

참고로 쉽게, 더 쉽게 설명해 달라고 부탁함..

 


1. SELECT

데이터를 조회할 때 사용하는 명령어로, 테이블에서 특정 컬럼이나 전체 데이터를 선택해 가져옵니다.
"가져와!"라고 생각하면 돼요. 원하는 데이터를 테이블에서 뽑아내는 역할이에요.

예시: SELECT 이름 FROM 학생; → 학생 테이블에서 이름을 가져와!



2. FROM

데이터를 가져올 테이블을 지정하는 명령어입니다.
데이터를 어디서 가져올지 알려주는 거예요. "어디에서?"라고 묻는 거랑 비슷하죠.

예시: SELECT * FROM 학생; → 학생 테이블에서 다 가져와!



3. WHERE

조건을 걸어주는 거예요. "이 조건에 맞는 것만!"이라고 제한하는 거죠.

예시: SELECT * FROM 학생 WHERE 나이 > 20; → 나이가 20살 넘는 학생만 가져와!


4. GROUP BY

데이터를 묶어주는 거예요. "같은 항목끼리 묶어서 보여줘!"라고 생각하면 쉬워요.

예시: SELECT 학과, COUNT(*) FROM 학생 GROUP BY 학과; → 학과별로 학생 수를 세어줘!
                                   ㄴ이 예시에서 뇌 정지됨(후술하겠음)


5. HAVING

GROUP BY로 묶은 결과에 조건을 걸어주는 거예요. "묶은 그룹 중에서 조건에 맞는 것만!"이에요.

예시: SELECT 학과, COUNT(*) FROM 학생 GROUP BY 학과 HAVING COUNT(*) > 10; → 학생이 10명 넘는 학과만 보여줘!

 

 


6. ORDER BY

정렬하는 거예요. "순서대로 보여줘!" 같은 느낌이죠.

예시: SELECT * FROM 학생 ORDER BY 나이 DESC; → 나이 순으로 학생을 내려가며 보여줘!



7. JOIN

두 테이블을 합쳐서 보여줄 때 쓰는 거예요. "둘이 연결해!" 같은 개념이죠.

예시: SELECT * FROM 학생 INNER JOIN 수업 ON 학생.학번 = 수업.학생학번; → 학생과 수업 테이블을 학번 기준으로 연결해 보여줘!




8. UNION

두 검색 결과를 이어 붙여주는 거예요. "두 개를 합쳐서 보여줘!"에 가까워요.

예시: SELECT 이름 FROM 학생 UNION SELECT 이름 FROM 선생님; → 학생과 선생님 이름을 하나로 합쳐 보여줘!


9. LIMIT

가져오는 데이터 개수를 제한하는 거예요. "처음부터 몇 개만!" 같은 개념이죠.

예시: SELECT * FROM 학생 LIMIT 5; → 학생 5명만 보여줘!



10. DISTINCT

중복된 걸 없애고 "중복 없이!" 하나씩만 가져오게 해요.

예시: SELECT DISTINCT 학과 FROM 학생; → 중복 없이 학과 목록만 보여줘!



11. AS

이름을 간단하게 바꿔서 보여주는 거예요. "별명 붙이기!" 같은 거예요.

예시: SELECT 이름 AS 학생이름 FROM 학생; → 학생의 이름을 '학생이름'으로 보여줘!


 

위 목록에서 내가 강의에서 배운 것들은 UNION, LIMIT, JOIN, HAVING 빼고는 다 나왔는데

세상에, 내가 4번 GROUP BY 예시문에서 왜...? SELECT 문 뒤에 COUNT(*)가 오는거야...? 도대체 왜...?

도저히 모르겠어서

다시 챗 지피티한테 물어봤다.

 

아, 이해하기 쉽게 설명해볼게요! SELECT 뒤에 COUNT(*) 같은 집계 함수가 나오는 이유는 우리가 원하는 결과를 표현하기 위해서예요.

SQL문이 작동하는 순서 이해하기

1. FROM: 먼저 어떤 테이블에서 데이터를 가져올지 정해요.


2. WHERE: 필요한 조건이 있다면 이 단계에서 필터링해요.


3. GROUP BY: 이 단계에서 데이터를 그룹으로 묶어요.


4. SELECT: 여기서 묶인 그룹별 데이터를 실제로 보여주는 거예요.



왜 SELECT 뒤에 집계 함수가 오냐면,

GROUP BY로 묶은 후, 그 묶인 결과가 어떤 모습으로 나와야 할지를 SELECT에서 결정하기 때문이에요.

예를 들어, 학과별로 학생 수를 세고 싶으면 GROUP BY로 묶고 SELECT에서 학과와 COUNT(*)를 골라야 학과별로 몇 명이 있는지 보여줄 수 있어요.


실제 예를 통해 이해해보자(갑자기 반말하누)

SELECT 학과, COUNT(*) 
FROM 학생 
GROUP BY 학과;

FROM 학생 → 학생 테이블에서 데이터를 가져와요.

GROUP BY 학과 → 학과별로 데이터를 묶어요.

SELECT 학과, COUNT(*) → 각 학과별로 몇 명인지 세어(=COUNT(*)) 결과로 보여줘요.


쉽게 말해,

SELECT는 우리가 보고 싶은 것을 결정하는 거고,

COUNT(*)는 묶인 결과가 어떻게 표현되기를 원하는지 설명하는 거예요.


SELECT 안에 집계 함수가 들어가는 이유는 우리가 원하는 요약된 형태의 결과를 만들어서 출력하는 역할을 하기 때문이죠!

 

 

그래서 집계함수 AVG, SUM 등은.. 평균, 합계 구하고 싶을 때 SELECT뒤에 붙이면 되느냐 물으니...

 

맞아요! 정확히 이해하셨어요. (좀 기뻤음)

SELECT 뒤에 집계 함수를 붙여서 AVG(), SUM() 등을 사용하면 그룹별 평균이나 합계를 쉽게 구할 수 있어요. 

 

예제를 통해 더 설명해볼게요.

1. 평균을 보고 싶을 때: AVG()

AVG()는 그룹별 평균을 구할 때 사용해요.

예를 들어, 학과별로 평균 나이를 알고 싶다면 이렇게 작성해요:


SELECT 학과, AVG(나이) 
FROM 학생 
GROUP BY 학과;

이렇게 하면 학과별로 평균 나이가 계산돼서 결과로 나와요.

 

 

제가 따로 해석해보자면

학생 테이블에서 학과를 선택했고, 나이 평균을 알고싶다. 학과별로 묶어라!

이정도 인 것 같네요.. 왠지 간단한 걸 헷갈렸다는 생각에 조금 부끄럽기도 하네요 ㅎ

 

2. 합계를 보고 싶을 때: SUM()

SUM()는 그룹별 합계를 구할 때 사용해요.

예를 들어, 각 부서에서 일하는 직원들의 총 급여를 보고 싶다면:


SELECT 부서, SUM(급여) 
FROM 직원 
GROUP BY 부서;

이렇게 하면 부서별로 급여의 합계가 계산돼서 보여져요.

직원 테이블에서 부서를 선택했고, 급여 합계를 알고싶다. 부서별로 묶어라! 

 



이처럼 보고 싶은 값에 따라 COUNT(), AVG(), SUM() 같은 집계 함수를 SELECT에 붙여서 사용하면 됩니다.

 

이상 저와 챗 지피티의 대화였구요..

뭐 암튼... 빨리 익숙해지고 싶네요..

끄아악 감사합니다.