TIL

8/7 TIL - SQL 1~3주차 수강

nbcssw 2024. 8. 7. 20:31

SQL 1주차

SQL

데이터베이스와 대화를 하기 위한 언어

tip) SQL이란 언어를 이용하여 데이터베이스에 요청을 하는 질의를 'Query'라고 함

 

SQL 데이터 조회하기

SELECT / FROM 문

select *
from food_orders

select: 데이터를 가져오는 기본 명령어로, 데이터를 조회하는 모든 query에 사용됨

from: 데이터를 가져올 테이블을 특정하는 명령어

*: 모든 컬럼(column)을 가져온다는 의미

 

필요한 항목만 뽑아서 사용하기

1) 원하는 컬럼을 선택하기

select order_id, restaurant_name
from food_orders

food_orders 테이블에서 order_id, restaurant_name 컬럼만 조회

 

2) 컬럼에 별명 지정

select order_id as ord_no,
       restaurant_name "식당 이름"
from food_orders

order_id 는 ord_no로, restaurant_name은 식당 이름으로 표시된다

 

● 별명 지을 때 유의사항

 

 

조건에 맞는 데이터로 필터링하기 (WHERE 절)

WHERE: 조건에 맞는 데이터만 조회하기 위해 사용

select *
from customers
where age=21

customers 테이블에서 age가 21인 사람들만 필터링해서 조회

 

select *
from customers
where age<21

= 이외에도 <> (같지 않다), >, < 등의 비교연산자 사용 가능

 

BETWEEN: a와 b 사이

select *
from customers
where age between 10 and 20

age가 10과 20 사이인 사람들만 조회

 

IN: 포함하는 조건

select *
from customers
age in (15, 21, 31)

age가 15, 21, 31인 사람들만 조회

 

LIKE: 완전히 똑같지는 않지만, 비슷한 값을 조건으로 주기

select *
from customers
where name like '김%'

'김'으로 시작하는 이름만 조회

'%김%' 은 이름에 '김'을 포함하는 경우,

'%김' 은 이름이 '김'으로 끝나는 경우를 뜻함

 

여러 개의 조건으로 필터링하기 (논리연산)

논리연산의 종류

 

 

SQL 2주차

SQL로 한번에 계산하기 (SUM, AVERAGE, COUNT, MIN, MAX)

SUM, AVERAGE

SUM: 총합, AVERAGE: 평균

select sum(food_preparation_time) total_food_preparation_time,
       avg(delivery_time) avg_food_preparation_time
from food_orders

sum(food_preparation_time): food_preaparation의 합

avg(delivery_time): delivery_time의 평균

 

COUNT

데이터의 개수 혹은 값의 종류를 조회

select count(1) count_of_orders,
       count(distinct customer_id) count_of_customers
from food_orders

count(1): 전체 데이터의 개수 (전체 주문 수)

count(distinct cumtomer_id): customer_id 값의 개수 (customer_id 종류 수, 주문한 고객 수)

 

MIN, MAX

MIN: 최솟값, MAX: 최댓값

select min(price) min_price,
       max(price) max_price
from food_orders

min(price): price의 최솟값

max(price): price의 최댓값

 

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

GROUP BY: 카테고리별로 데이터를 나누기 위해 사용

select cuisine_type,
       sum(price) sum_of_price
from food_orders
group by cuisine_type

음식 종류별 주문 금액 총합을 조회하는 코드

 

Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)

ORDER BY: Query의 결과를 원하는 순서대로 정렬하기 위해 사용

select cuisine_type,
       sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price)

음식 종류별 주문 금액 총합을 조회하는 코드에 ORDER BY를 추가하여 가격 오름차순으로 정렬

내림차순으로 보고 싶다면, order by sum(price) desc를 추가해주면 된다

 

 

SQL 3주차

업무 필요한 문자 포맷이 다를 때, SQL로 가공하기 (REPLACE, SUBSTRING, CONCAT)

데이터를 조회하던 중 Query 결과를 그대로 이용하지 못하는 경우의 해결 방법들

ex) 나는 서울특별시를 서울이라고 줄여 쓰고 싶은데, 조회한 결과에는 서울특별시라고 나올 때

 

REPLACE

특정 문자를 다른 문자로 바꾸기

replace(바꿀 컬럼, 현재 값, 바꿀 값)
select restaurant_name "원래 상점명",
       replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%'

식당 명의 ‘Blue Ribbon’ 을 ‘Pink Ribbon’ 으로 바꾸기

 

 

SUBSTRING

문자에서 원하는 부분만 고르기

substr(조회 할 컬럼, 시작 위치, 글자 수)
select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

서울 음식점들의 주소를 전체가 아닌 '시도'만 나오도록 수정

 

CONCAT

여러 문자를 합치기

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
select restaurant_name "원래 이름",   
       addr "원래 주소",
       concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'

서울시에 있는 음식점은 ‘[서울] 음식점명’ 이라고 수정

 

조건에 따라 포맷을 다르게 변경해야한다면 (IF, CASE)

IF

조건에 따라 다른 방법을 적용하고 싶을 때

if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
select restaurant_name,
       cuisine_type "원래 음식 타입",
       if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders

음식 타입을 ‘Korean’ 일 때는 ‘한식’, ‘Korean’ 이 아닌 경우에는 ‘기타’ 라고 지정

 

Case

조건을 여러가지 지정하고 싶을 때

case when 조건1 then 값(수식)1
     when 조건2 then 값(수식)2
     else 값(수식)3
end
select order_id,
       price,
       quantity,
       case when quantity=1 then price
            when quantity>=2 then price/quantity end "음식 단가"
from food_orders

음식 단가를 주문 수량이 1일 때는 음식 가격, 주문 수량이 2개 이상일 때는 음식가격/주문수량 으로 지정

 

 

오늘의 comment

원래는 오늘 git 특강 복습도 하고 SQL 강의를 5주차까지 끝내기로 다짐했는데 집중이 하나도 안되는 바람에 목표를 달성하지 못했다..

 

내일 목표: git 특강 복습, SQL 5주차까지 끝내기, 다음주에 공부할 javascript 문법 예습하기

'TIL' 카테고리의 다른 글

8/9 TIL - 코드카타, JavaScript 문법 종합반 조금  (0) 2024.08.09
8/8 TIL - SQL 4,5주차 수강  (0) 2024.08.08
8/6 TIL  (0) 2024.08.06
8/5 TIL  (0) 2024.08.05
스타터 노트 작성  (0) 2024.08.02