[240912] SQL 사전 강의 (~3강)

JunichiK·2024년 9월 12일

SQL 스터디

목록 보기
5/21
post-thumbnail
  • [KDC] 엑셀보다 쉽고 빠른 SQL - 1주차
    • 04. 필요한 항목만 뽑아서 사용하기
      • 방법
        • 별명 지정 방법 : 컬럼 옆쪽에 별명을 적어줍니다. (아래 두 가지 방법 모두 가능합니다)
          - 방법1 : 컬럼1 as 별명1
          - 방법2 : 컬럼2 별명2
        • 별명 지을 때 유의사항
          구분영문, 언더바특수문자, 한글
          방법별명만 적음“별명” 으로, 큰 따옴표 안에 적어줌
          예시ord_no“ord no” / "주문번호"
      • 실습
        1. 주문 (food_orders) 테이블에서 order_id, price, quantity 를 가져와서 ord_no, 가격, 수량 으로 별명 지어주기

          select order_id ord_no, price "가격", quantity as "수량"
          from food_orders fo ;
        2. 고객 (customers) 테이블에서 name, email 을 가져와서 이름, e-mail 으로 별명 지어주기

          select name "이름", email as "e-mail"
          from customers c ;
      1. 필터링을 할 때 유용한 표현 알아보기 (비교연산, BETWEEN, IN, LIKE)
      • 4) [실습] WHERE 절에 다양한 조건을 적용하기
        1. 주문 (food_orders) 테이블에서 주문 금액이 20,000~30,000원 사이인 고객 조회하기

          select *
          from food_orders fo
          where price BETWEEN 20000 and 30000;
        2. 주문 (food_orders) 테이블에서 B 로 시작하는 상점의 주문 조회하기

          select *
          from food_orders fo 
          where restaurant_name like 'B%';
      1. 여러 개의 조건으로 필터링하기 (논리연산)
      • 2) [실습] 여러 조건을 적용하여 데이터 필터링하기
        1. 주문 (food_orders) 테이블에서 한국음식이면서, 가격이 30,000원 이상인 경우 조회

          select *
          from food_orders fo 
          where fo.cuisine_type = 'Korean' and price >= 30000;
        2. 결제 (payments) 테이블에서 카드로 결제했거나, vat 율이 0.2 이하인 경우 조회

          select *
          from payments p 
          where pay_type = 'Card' or vat <= 0.2;
  • HW. 1주차 숙제 해설
    💁‍♀️ 상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하기
    
    
     <select restaurant_name name, customer_id as customer
     from food_orders fo 
     where food_preparation_time BETWEEN 20 and 30
     and cuisine_type = 'Korean';
  • [KDC] 엑셀보다 쉽고 빠른 SQL - 2주차

      1. 엑셀 대신 SQL로 한번에 계산하기 (SUM, AVERAGE, COUNT, MIN, MAX)
      • 3) 전체 데이터의 갯수 구하기
        • 함수 종류
          • 데이터 갯수 : COUNT(컬럼)
          • 컬럼명 대신 1 혹은 * 사용 가능
          • 몇개의 값을 가지고 있는지 구할 때 : DISTINCT
        • 예시
          • 데이터 갯수 : 주문 테이블의 전체 주문은 몇건인가요?
          • 몇개의 값을 가지고 있는지 구할 때 : 주문을 한 고객은 몇명인가요?
        • 사용 예시 (주문건수와, 주문 한 고객 수 구하기)
          • [코드스니펫] 갯수 구하기
            select count(1) count_of_orders,
                   count(distinct customer_id) count_of_customers
            from food_orders
      1. [실습] WHERE 절로 원하는 데이터를 뽑고, 계산해보기
        1. 주문 금액이 30,000원 이상인 주문건의 갯수 구하기

          select COUNT(*)
          from food_orders fo 
          where price >= 30000;
        2. 한국 음식의 주문 당 평균 음식가격 구하기

          SELECT AVG(price)
          from food_orders fo 
          where cuisine_type = 'Korean';
      1. GROUP BY로 범주별 연산 한 번에 끝내기
      • 3) [실습] Group by 를 이용하여 카테고리별 연산해보기
        1. 음식점별 주문 금액 최댓값 조회하기

          select restaurant_name, MAX(price)
          from food_orders fo 
          group by restaurant_name;
        2. 결제 타입별 가장 최근 결제일 조회하기

          select pay_type, MAX(date)
          from payments p 
          group by pay_type ;
      1. Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)
      • [실습] Order by 를 이용하여 데이터를 정렬해보기
        1. 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬

          select restaurant_name, max(price)
          from food_orders fo 
          group by restaurant_name 
          order by MAX(price) desc;
        2. 고객을 이름 순으로 오름차순으로 정렬하기

          select *
          from customers c 
          order by name asc;
      1. Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)
      • 완성된 SQL 문의 기본 구조

             select
             from
             where
             group by
             order by
  • HW. 2주차 숙제 해설

    💁‍♀️ 음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기

    
     <select cuisine_type, MAX(price), MIN(price)
     from food_orders fo 
     group by cuisine_type 
     order by MIN(price) desc;
  • [KDC] 엑셀보다 쉽고 빠른 SQL - 3주차

      1. 업무 필요한 문자 포맷이 다를 때, SQL로 가공하기 (REPLACE, SUBSTRING, CONCAT)
      • 1) Query 결과를 바로 사용할 수 없는 경우
        • 함수 종류
          • 데이터 갯수 : COUNT(컬럼) 컬럼명 대신 1 혹은 사용 가능
          • 몇개의 값을 가지고 있는지 구할 때 : DISTINCT
        • 예시
          • 데이터 갯수 : 주문 테이블의 전체 주문은 몇건인가요?
          • 몇개의 값을 가지고 있는지 구할 때 : 주문을 한 고객은 몇명인가요?
        • 사용 예시 (주문건수와, 주문 한 고객 수 구하기)
          • [코드스니펫] 갯수 구하기
            select count(1) count_of_orders,
                   count(distinct customer_id) count_of_customers
            from food_orders
      • 2) 특정 문자를 다른 문자로 바꾸기 (실습 포함)
        • 함수명 : replace
        • 사용 방법
          replace(바꿀 컬럼, 현재 값, 바꿀 값)
        • [실습1]
          (식당 명의 ‘Blue Ribbon’ 을 ‘Pink Ribbon’ 으로 바꾸기)
          - [코드스니펫] Replace 예시
               select restaurant_name "원래 상점명",
                      replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
               from food_orders
               where restaurant_name like '%Blue Ribbon%'
        • [실습2]
          (주소의 ‘문곡리’ 를 ‘문가리’ 로 바꾸기)
                select addr "원래 주소",
                       replace(addr, '문곡리', '문가리') "바뀐 주소"
                from food_orders
                where addr like '%문곡리%'
      • 3) 원하는 문자만 남기기 (실습 포함)

        • SQL 에서는 특정 문자만 골라서 조회할 수 있는 기능을 제공합니다
        • 예시) 전체 주소에서 앞부분인 ‘시도’ 부분만 필요해요
        • 함수명 : substring (substr)
        • 사용 방법
          substr(조회 할 컬럼, 시작 위치, 글자 수)
        • [실습]
          (서울 음식점들의 주소를 전체가 아닌 ‘시도’ 만 나오도록 수정)
                  select addr "원래 주소",
                         substr(addr, 1, 2) "시도"
                  from food_orders
                  where addr like '%서울특별시%'
          
      • 4) 여러 컬럼의 문자를 합치기 (실습 포함)

        • SQL 에서는 여러 컬럼의 값을 하나로 합칠 수 있는 기능을 제공합니다.

        • 예시) 서울시에 있는 음식점은 ‘[서울] 음식점명’ 이라고 수정하고 싶어요

        • 함수명 : concat

        • 사용 방법

        • 붙일 수 있는 문자의 종류

          • 컬럼
          • 한글
          • 영어
          • 숫자
          • 기타 특수문자
        • [실습]
          (서울시에 있는 음식점은 ‘[서울] 음식점명’ 이라고 수정)

                 select restaurant_name "원래 이름",   
                        addr "원래 주소",
                        concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
                 from food_orders
                 where addr like '%서울%'
profile
represent ojeong-dong

0개의 댓글