더보기

포함 하는 조건을 설정할 때

  • WHERE age in (15, 21, 31)
  • cuisine_type in ('Korean', 'Japanese')

범위 조건을 설정할 때 

더보기

where age between 10 and 20

  •  

완전히 똑같지는 않지만, 비슷한 값을 조건으로 설정할 때

더보기
  • name like '김%' // 김’ 으로 시작하는 이름
  • name like '%임' //‘임’ 으로 끝나는 이름
  • restaurant_name like '%Next%' //식당 이름에 ‘Next’ 를 포함하는 경우

기본 연산, 합계와 평균 구하기

더보기

select sum(food_preparation_time) as total_food_preparation_time,
            avg(delivery_time) avg_food_delivery_time
from food_orders

데이터의 갯수 구하기

더보기

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

데이터를 그룹화하기

- 같은 값을 가진 행들을 하나의 그룹으로 묶어서 연산할 수 있다. 

더보기

select restaurant_name,
            max(price) "최대 주문금액"
from food_orders
group by restaurant_name

데이터 정렬하기

더보기

select restaurant_name,
            max(price) "최대 주문금액"
from food_orders
group by restaurant_name
order by max(price) desc

// desc를 생략하면 오름차순, 추가하면 내림차순 정렬

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

더보기

select addr "원래 주소",
       replace(addr, '문곡리', '문가리') "바뀐 주소"
from food_orders
where addr like '%문곡리%'

원하는 문자만 남기기

더보기

select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

 

여러 컬럼의 문자를 합치기

더보기

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

 

If문 예시

더보기

select addr "원래 주소",
       if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'

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

더보기

select case when cuisine_type='Korean' then '한식'
           when cuisine_type in ('Japanese', 'Chinese') then '아시아'
           else '기타' end "음식 타입",
           cuisine_type 
from food_orders

 

📌 [학습 목표] SQL 기초 연습


📝 학습 내용

SELECT 기본 문법

  • 테이블에서 필요한 컬럼만 선택
    SELECT name, position
    FROM sparta_employees;

DISTINCT 사용법

  • 특정 컬럼의 중복 데이터 제거
  • DISTINCT는 컬럼 이름 바로 앞에 사용, *와 함께 사용 불가
SELECT DISTINCT position FROM sparta\_employees;

조건문

  • 범위 조건 → BETWEEN 사용 시 가독성 향상
WHERE salary BETWEEN 40000 AND 60000
  • 날짜·문자열 비교 → ' ' 작은따옴표 필수
    WHERE hire\_date < '2023-01-01'

패턴 검색 (LIKE)

  • % → 0개 이상의 임의 문자
  • _ → 1개의 임의 문자
    WHERE product\_name LIKE '%프로%' \-- '프로' 포함 검색 WHERE product\_name LIKE '갤%' \-- '갤'로 시작 검색

집계 함수 (SUM)

  • 합계 계산
    SELECT SUM(price) AS total\_price FROM products;

정렬 (ORDER BY)

  • 오름차순 ASC / 내림차순 DESC
  • WHERE 뒤 또는 단독 사용 가능
    ORDER BY shipping\_fee DESC

🚫 오늘의 오답 & 수정 포인트

  1. DISTINCT와 * 같이 사용 → 문법 오류
  2. 날짜 값 ' ' 누락 → SQL이 날짜로 인식 못 함
  3. 불필요한 SUBSTRING → LIKE로 간단 처리 가능
  4. WHERE ORDER BY 잘못된 문법 순서 → WHERE 조건 후 ORDER BY 정렬

💡 느낀 점

  • 세부 문법 하나 빠져도 실행이 안 되므로, 쿼리 작성 시 체크리스트 필요
  • 오답을 고치면서 문법이 확실히 머리에 남음

+ Recent posts