2024.06.14 TIL - SQL 강의 (조건 필터링 where절(between, in, like), 숫자 연산(sum, avg, count, min, max), group by, order by)

Innes·2024년 6월 14일
0

TIL(Today I Learned)

목록 보기
134/147
post-thumbnail

컬럼 지정, 별명주기

  • 모든 컬럼이 아닌 특정 컬럼 지정하여 가져오기
SELECT 컬럼1, 컬럼2
from 테이블명
  • 컬럼 이름 바꾸기 (= 컬럼에 별명 주기)
SELECT restaurant_name as "음식점", addr address
from food_orders 
  • 컬럼에 별명 주는 방법

    • 컬럼1 as 별명1
    • 컬럼2 별명2
  • 한글, 특수문자인 경우 큰따옴표 ("") 필수
    (영문은 안붙여도 됨)


조건 필터링 : where절

  • 원하는 데이터만 불러오기 (엑셀에서의 필터기능) : where
    ex) customers 테이블에서 age컬럼 중 21살만 가져오기
SELECT *
FROM customers 
WHERE age=21
  • where절에 사용할 수 있는 필터링 조건들

    • 비교 연산자
      - WHERE 테이블명>=21 등 비교 연산자 사용 가능
      - '같지 않다' : <>

      SELECT *
      from customers
      WHERE gender <> 'male'
    • between : 값1 ~ 값2 사이에 있는 값 추출하기 (값1, 값2도 포함됨)

      SELECT *
      from customers // 테이블명 
      WHERE age BETWEEN 21 and 23 // 컬럼명, 값1 ~ 값2 사이
    • in : 컬럼 값 중 특정 값을 지정하여 추출하기
      - '포함'하는 조건 추가하기

      // ex) customers 테이블의 age 컬럼 값이 21, 25, 27인 행만 가져오기
      
      SELECT *
      from customers
      WHERE age in (21, 25, 27)
    • like : 비슷한 값 불러오기

      // ex) name 컬럼에서 김씨 성인 이름들만 가져오기
      
      SELECT *
      from customers
      WHERE name like '김%'
      
      // 가운데 글자를 지정하려면 : %정%

  • where절에 여러가지 조건을 한번에 필터링하는 방법

    • and, or, not

      // ex) customers 테이블에서 age가 21이상이고, gender가 male인 행 추출하기
      // 'and' 사용하기
      
      SELECT *
      from customers 
      WHERE age >= 21 
      and gender = 'male'
      
      // not은 <>사용과 같음

숫자 연산하기

  • 두 컬럼 값을 더해서 조회하기
select food_preparation_time,
       delivery_time,
       food_preparation_time + delivery_time as total_time
from food_orders

  • sum 함수 : 컬럼값 모두 더하기
  • avg 함수 : 컬럼값의 평균 구하기
select sum(food_preparation_time) total_food_preparation_time,
       avg(delivery_time) avg_delivery_time
from food_orders

  • count 함수 : 개수 구하기
(ex 1) 

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

// count(1) : 테이블의 모든 행의 개수 구해줘! ( * 또는 1 )
// 그 개수를 count_of_orders 라는 이름의 컬럼으로 보여줘

// distict : 테이블의 모든 행의 개수가 아니라, customer_id 컬럼에 몇개의 행이 있는지 구해줘
// ex) 주문 개수는 10개인데, 주문자는 5명이라면 -> 주문자의 수가 궁금한 것
(ex 2)

SELECT count(DISTINCT pay_type) as total_pay_type 
from payments 

// pay_type이 cash, card 2종류이기 때문에 테이블에 많은 행이 있어도 pay_type의 값은 2개라고 나옴
  • min, max 함수: 최소값, 최대값 구하기
select min(price) min_price,
       max(price) max_price
from food_orders

// price컬럼 중 최소값을 min_price이라는 이름의 컬럼으로 보여줘

범주별 연산하기 : Group by

  • ex) 한국음식점의 음식값 평균 구하기 -> 중국집, 타이집 등도 음식값 평균 구하고싶을때?

    • 하나씩 평균값 구하면 너무 비효율적!
    • 그래서 사용하는게 Group by
    • 같은 것끼리 묶어서 뭔가 처리하고싶을 때 사용한다 생각하면 될 듯!
    select cuisine_type,
         sum(price) sum_of_price
    from food_orders
    group by cuisine_type
    
    // select에 범주 별로 나누고 싶은 컬럼 적어주기
    // group by에도 select에 적었던 컬럼 그대로 적어주기


결과값 정렬하기 : Order by

  • 기본은 오름차순 정렬
  • 내림차순 정렬은 desc
select cuisine_type,
       sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price)

// 가져온 결과값을 sum(price) 기준으로 오름차순 정렬해줘
//  내림차순 정렬 하고싶으면 order by sum(price) 뒤에 desc 붙이면 됨
SELECT *
from customers
order by gender, name

// 고객테이블에서 성별 기준 오름차순 정렬 후 -> 성별 안에서 이름 기준 오름차순으로 정렬
profile
무서운 속도로 흡수하는 스폰지 개발자 🧽

0개의 댓글