내일배움캠프

2025.02.07. 내일배움캠프(사전캠프) 5일차

jjaio8986 2025. 2. 7. 22:53

목차

  • SQL 2주차 강의 개인 정리
  • 주간 핵심 정리

  • SQL 2주차 강의 개인 정리

[주제] SQL 기본구조를 활용한 데이터 조회 및 숫자 계산, 정렬

1. 데이터 조회 및 엑셀 함수 적용

 - 일반적으로 엑셀에서 적용되는 함수를 SQL에도 적용하여 계산 및 조회가 가능하다.

 1.1 숫자 연산기호

  - 특정 테이블 내의 컬럼끼리 연산이 필요한 경우에 사용.

  - 종류)

연산자 설명
+ 더하기
- 빼기
* 곱하기
/ 나누기

형식) 컬럼1 '+' or '-' or '*' or '/' 컬럼2

[SELECT  컬럼1 + 컬럼2

FROM 테이블]

"테이블 내의 컬럼1과 2의 값을 합쳐 연산하여 그 데이터 값을 조회한다."

 

 1.2. 기본 연산 함수

  - 태이블 내의 특정 컬럼의 합계와 평균을 구하기 위해 함수 명령어를 사용해 연산하여 그 값을 조회를 해 볼 수 있다.

  - 함수 종류 : "칼럼의 합계" = [SUM(칼럼1)], "칼럼1의 평균값" = [AVG(칼럼1)]

ex) "food_orders 테이블에서 ‘음식준비시간 칼럼의 총 합계를 계산한다. 그리고 그것을 ‘총 음식준비시간’으로 별칭 부여, ‘음식배달시간 칼럼의 평균을 계산한다. 그것을 ‘평균음식준비시간’으로 별칭 부여 후 각각의 결과물을 조회한다."

[select sum(food_preparation_time) total_food_preparation_time,

avg(delivery_time) avg_delivery_time

from food_orders]

 

 1.3. 전체 데이터의 개수

  - 현재 테이블이 몇 개의 '데이터' 혹은 '값'을 가지고 있는지를 구할 수 있다.

  - 함수 종류 : "데이터 개수" = [COUNT(컬럼명)]  // cf) 컬럼명 대신 '1'이나 '*'을 사용할 수 있다.

                      "몇 개의 값을 가지고 있는지 구할 때" = [DISTINCT] 

 

'distinct' 명령어는 "컬럼 내의 중복되지 않는 값이 몇 개 있는지 구한다" 라는 의미이고 'count' 함수는 "중복 유무와 상관없이 컬럼 내부의 모든 값이 몇 개 있는지 구한다"라는 의미이다.

ex) "food_orders 테이블의 모든 데이터는 몇 개 있는지 구하고 그걸 주문수로 별칭 부여, 고객 아이디 모든 데이터는 몇 개 있는지 구하고 그것을 고객수로 별칭 부여하여 결과 조회한다."

[SELECT count(1) count_of_orders,

count(distinct customer_id) count_of_customers)

FROM food_orders;]

 

 1.4. 데이터의 최솟값, 최댓값 구하기

  - 조회하고자 하는 컬럼내의 데이터의 범위와 최솟값, 최댓값을 지정하거나 구할 수 있다.

  - 함수 종류 : "최솟값" [MIN(칼럼)], "최댓값"[MAX(컬럼)]

ex) "food_orders 테이블의 가격 컬럼의 최솟값을 구하고 그걸 가격 최솟값으로 별칭 부여, 가격 컬럼의 최댓값을 구하고 그것을 가격 최댓값으로 별칭 부여하여 결과 조회한다."

[select min(price) min_price,

max(price) max_price

from food_orders]

 

☆ 특정 컬럼 혹은 컬럼들 끼리의 데이터를 연산하거나 특정한 값이 필요할 때 SELECT 뒤에 '사칙연산기호', 'SUM', 'AVG', 'COUNT', 'DISTINCT', 'MAX', 'MIN' 과 같은 명령어들을 통해 연산하여 조회할 수 있다.

 

2. GROUP BY로 범주별 연산 한 번에 끝내기

 - 하나의 테이블 혹은 칼럼엔 여러 데이터 타입이 있는데 그것을 일일이 지정하여 쿼리문을 작성하지 않고 GROUP BY를 이용하여 구하고자 하는 연산값을 구할 수 있다.

 2.1. 카테고리별 숫자 연산

  - '원하는 단위(ex. 음식 종류, 식당 이름, 주소)' 즉, '카테고리별'로 여러번의 쿼리 없이 카테고리를 지정해 수식 함수로 연산이 가능하다.

  - 기본 형태

[select 카테고리 컬럼(원하는 컬럼 아무거나), sum(계산 컬럼),

FROM 테이블

GROUP BY 카테고리 컬럼(원하는 컬럼 아무거나]

ex) "음식을 종류별로 구분하여 각각 주문 금액 합계를 구하기"

[select cuisine_type, sum(price) sum_of_price

from food_orders

group by cuisine_type]

 

3. 쿼리 결과를 정렬해 업무에 바로 사용하기

 - SQL로 조회한 결과는 그 자료가 추가되고 삭제됨에 따라 출력 순서가 변경될 수 있다. 따라서 SQL 결과를  원하는 값을 기준으로 하여 순서대로 정렬하는 방법이 'ORDER BY' 명령어이다.

 - 종류

종류 구문 예시
오름차순 생략 order by sum(price)
내림차순 desc order by sum(price) desc

 - 기본 구조

[select 카테고리 컬럼(원하는 컬럼), sum(계산 컬럼)

from 테이블 명

group by 카테고리 컬럼(원하는 컬럼)]

ex) "음식 종류별 주문 금액 합계를 주문 금액 합계기준으로 오름차순 정렬"

[select cuisine_type, sum(price) "주문 금액 합계"

from food_orders

group by cuisine_type

order by sum(price)]

- order by 절은 1가지 컬럼을 기준으로 정렬할 수 있지만 2가지 이상의 컬럼으로도 정리 할 수 있다. [이 경우 ‘,를 이용하며 order by 뒤에 먼저 적히는 컬럼 기준으로 정렬이 선행된다.]

ex) “고객의 이름과 성별 정보를 오름차순으로 정렬한다."

[select *

from customers

order by name, gender]

 

☆ 생각 정리 : SQL의 기본적인 조회를 위한 쿼리 작성법을 배웠다. 하지만 작성함에 있어 몇몇 오류들이 자주 등장하여 그것을 방지하기 위해 다음의 것들을 유념해야 할 것 같다.

 - 쿼리문을 작성할 시 select->from->where->group by->order by 순서를 따라서 작성해야 하며, 쿼리 작성 전 전체적인 흐름 구상 또한 이 순서를 따라 작성해야 시행착오가 적을 것 같다.

 - 쿼리 작성 전 흐름은 숙련되기 전까지 실습자료에 안내된 다음의 순서에 따라 연습해야겠다. 

  1. 어떤 테이블에서 데이터를 뽑을 것인가
  2. 어떤 컬럼을 이용할 것인가
  3. 어떤 조건을 지정해야 하는가
  4. 어떤 함수 (수식) 을 이용해야 하는가

  • 주간 활동 후기

☆ 5일간의 사전캠프 활동을 하며 2개의 아티클, 2주 분의 SQL강의 학습 및 실습을 했었다.

 아티클 팀 스터디에선 '데이터분석'과 '분석가로서 가져야 할 역량'에 대한 다소간의 이해 및 인상적인 인사이트(데이터 분석 외에도 추가적인 공부할 것들)를 얻었었고, 현 단계에서는 기르기 힘든 역량인 '도메인 이해를 통한 커뮤니케이션 능력'에 집중하기 보다는 기본적인 분석역량을 기르는 것을 목표로 해야겠다고 생각했다.

 SQL 강의를 수강하고 실습하는 과정 상에서 다양한 시행착오와 의문이 있었다. 가령 'SQL은 이미 데이터베이스에 정돈된 자료를 조작하여 조회하는 것인데 '데이터베이스에 살아있는 데이터를 어떻게 가공하여 넣을까?'. '살아있는 혹은 데이터베이스에 넣을 자료를 어디서 찾을까?''와 같은 의문이나, 'SQL 구문작성하면서 오류가 참 살인적으로 나는구나', '영타자 너무 느리다'같은 감상이 그에 해당할 것이다. 아직 사전캠프이고 겨우 5일밖에 안되었기 때문에 차차 해결될 부분이고, 강의를 듣거나 질문하면 해결될 일이기에 건설적이지 않은 생각에 심력을 쏟기보다 지금 배운 것을 잊지 않는것에 집중하는 것을 목표로 해야겠다고 생각했다.