SQL 2일차

텁텁·2025년 3월 25일

SELECT / FROM 문

원하는 곳에서 데이터를 가져오는 기본 명령어

  • SELECT : 데이터를 가져오는 기본 명령어로, 데이터를 조회하는 모든 Query에 사용됨
  • FROM : 데이터를 가져올 테이블을 특정해주는 문법
  • * : 모든 컬럼을 가져온다는 의미

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

  1. WHERE 절에 여러 조건을 적용하기

    • 필터링 조건 여러개를 하나의 Query 문에 적용할 수 있다.
    • ex) '나이가 20세 이상', '여성고객' 두가지 조건 적용가능
    • 여러개의 조건을 적용할 때 사용되는 연산이 논리연산이다.
    • 논리연산의 종류
    논리연산자의미예시
    AND그리고age > 20 and gender='female'
    > 나이가 20세 이상이고, 여성
    OR또는age > 20 or gender='female'
    > 나이가 20세 이상이거나, 여성
    NOT아닌not gender='female'
    > 여성이 아닌
  2. 여러 조건을 적용하여 데이터 필터링 실습

    • food_orders 테이블에서 한국음식이면서, 가격이 30,000원 이상인 경우 조회
    select *
    from food_orders
    where cuisine_type='Korean' and price>=30000;

    • payments 테이블에서 카드로 결제했거나, vat 율이 0.2 이하인 경우 조회
    select *
    from payments
    where pay_type='card' or vat<=0.2;

복습하기

  1. SQL 문의 기본구조
    • SQL 문이란 : DB에서 데이터를 조회하기 위한 언어로,
      SQL 문법을 이용하여 DB에 명령을 내리는 것을 Query 라고 한다.
    • SQL 문의 기본 구조
    select # '데이터 조회' 의 명령어로 필수 구문
    from # '어디에서 데이터를 조회할까' 의 명령어로 필수 구문
    where # 조건을 지정해 주는 구문
    • 조건을 지정하는 방법
      • 비교연산자 : <, >, =, <>
      • 다양한 구문 : IN, BETWEEN, LIKE
      • 여러가지 조건의 적용 : AND, OR, NOT

1. 엑셀 대신 SQL로 한번에 계산하기(SUM, AVERAGE, COUNT, MIN, MAX)

  1. 숫자 연산 기호를 사용하기

    • 숫자 연산의 사용 예시(상품 준비시간과 배달시간의 합계)
    select food_preparation_time,
       delivery_time,
       food_preparation_time + delivery_time as total_time
    from food_orders;
    • 숫자 연산의 종류
    연산설명
    +더하기기
    -빼기
    *곱하기
    /나누기
  2. 기본연산, 합계와 평균 구하기

    • SQL 에서는 계산의 편의를 위해 함수를 제공한다.
      사용 방법은 엑셀과 유사하지만 계산할 '컬럼'이 들어간다는 점에서 차이가 있다.
    • 함수 종류
      • 합계 : SUM(컬럼)
      • 평균 : AVG(컬럼)
    • 사용 예시 (상품 준비시간의 합계와 평균 구하기)
    select sum(food_preparation_time) total_food_preparation_time,
       avg(delivery_time) avg_food_delivery_time
    from food_orders;
  3. 전체 데이터의 갯수 구하기

    • 함수 종류
      • 데이터 갯수 : COUNT(컬럼)
        • 컬럼명 대신 1, * 도 사용가능
      • 몇개의 값을 가지고 있는지 구할 때 : DISTINCT
      • 사용 예시
        select count(1) count_of_orders,
            count(distinct customer_id) count_of_customers
        from food_orders;
        // 주문건수와 주문한 고객 수 구하기기
  4. 데이터의 범위, 최솟값과 최댓값 구하기

    • 함수 종류
      • 최솟값 : MIN(컬럼)
      • 최댓값 : MAX(컬럼)
      • 사용 예시
        select min(price) min_price, max(price) max_price
        from food_orders;
  5. WHERE 절로 원하는 데이터를 뽑고 계산해보기

    • 주문 금액이 30,000원 이상인 주문건의 갯수 구하기
    select count(1)
    from food_orders
    where price>=30000;
    • 한국 음식의 주문 당 평균 음식가격 구하기
    select avg(price)
    from food_orders
    where cuisine_type='korean';

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

  1. 카테고리별로 숫자 연산을 간단하게 하기

    • GROUP BY 를 사용하면 여러번의 Query 없이, 카테고리를 지정하여 수식 함수로 연산할 수 있다.
  2. GROUP BY 의 기본 구조

    • GROUP BY 는 카테고리 컬럼 지정과 GROUP BY 를 적어주는 것으로 적용 가능하다.
    • 기본구조
    select 카테고리컬럼(원하는 컬럼 아무거나),
        sum(계산 컬럼)
    from #
    group by 카테고리컬럼(원하는 컬럼 아무거나)
    • 사용 예시 : 음식 종류별 주문 금액 합계
    select cuisine_type,
        sum(price) sum_of_price
    from food_orders
    group by cuisine_type;
  3. GROUP BY 를 이용한 카테고리별 연산 실습

    • 음식점별 주문 금액 최댓값 조회하기
    select restaurant_name,
        max(price)
    from food_orders
    group by restaurant_name;

    • 결제 타입별 가장 최근 결제일 조회하기
    select pay_type,
        max(date)
    from payments
    group by pay_type;

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

  1. Order by 의 기본구조

    • Order by는 카테고리 컬럼 지정과 Order by를 적어주는 것으로 적용 가능
    • 기본 구조
    select 카테고리컬럼(원하는 컬럼 아무거나),
        sum(계산컬럼)
    from #
    group by 카테고리컬럼
    order by 정렬을 원하는 컬럼 (카테고리컬럼, sum(계산컬럼) 둘 다 가능)
    • 사용예시 : 음식 종류별 주문 금액 합계를 '주문 금액 합계' 기준으로 오름차순 정렬
    select cuisine_type,
    sum(price) as "주문 금액 합계"
    from food_orders
    group by cuisine_type
    order by sum(price) asc; 
  2. Order by 를 이용한 데이터 정렬 실습

    • 음식점별 주문 금액 최댓값 조회하기 > 최댓값 기준 내림차순
    select restaurant_name,
    max(price) as price_of_max
    from food_orders
    group by restaurant_name
    order by max(price) desc;
    • 고객을 이름 순으로 오름차순으로 정렬하기
    select *
    from customers
    order by name asc;

profile
차근차근

0개의 댓글