SQL의 여러 구문들

석연걸·2024년 12월 27일

스파르타 코딩클럽

목록 보기
5/17


SQL : 데이터베이스와 대화를 하기 위한 언어
Query(쿼리) : SQL 언어를 이용해 데이터베이스에 요청을 하는 질의
테이블 : 엑셀과 유사한 구조로 데이터를 가진다(각 열을 '컬럼'이라고 부른다)


※SQL 구문
◆조회

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

  • FROM : 데이터를 가져올 테이블을 특정해주는 문법

  • : 모든 컬럼을 가져와준다는 뜻
    (Ex : SELECT * FROM test (test에 있는 모든 컬럼을 조회함))
  • * 대신 컬럼을 필요한 컬럼을 적으면 그 컬럼만 가져옴

  • 컬럼 이름 뒤에 "별명" 붙이면 (한글, 특수문자) 별명을 적기 가능

  • 예시 :

SELECT restaurant_name "음식점", addr address 
FROM food_orders

◆조건

  • WHERE : 조건문 (Ex. where age = 20 )

    • <> : 같지 않다(Not)

    • BETWEEN : A와 B 사이의 범위 조건
      (Ex. WHERE age BETWEEN 10 AND 20 --> 10에서 20 사이)

    • IN : '포함'하는 조건 주기
      (Ex. WHERE name IN ('홍길동', '김첨지') )

    • LIKE : 완전히 같지 않지만, 비슷한 값을 조건으로 주기
      (Ex. WHERE name LIKE '김%')

      • '시작문자%' : 특정 문자로 시작하는 경우
      • '%포함문자%' : 특정한 문자를 포함하는 경우
      • '%끝문자' : 특정한 문자로 끝나는 경우

◆기본 연산

  • SUM(컬럼) : 컬럼의 합계를 구함
    (Ex. SELECT SUM(age) FROM customers )

  • AVG(컬럼) : 컬럼의 평균을 구함
    (Ex. SELECT AVG(age) FROM customers )

  • MIN(컬럼) : 컬럼의 최소 값을 가져옴
    (Ex. SELECT MIN(price) FROM food_orders )

  • MAX(컬럼) : 컬럼의 최대 값을 가져옴
    (Ex. SELECT MAX(price) FROM food_orders )

  • COUNT(컬럼) : 몇개의 데이터 or 값 가지고 있는지 구할 때
    (Ex. SELECT COUNT(age) FROM customers )

    • 데이터 개수 : 컬럼명 대신 '1' 혹은 '*' 사용 가능
      (Ex. SELECT COUNT(1) FROM food_orders )

    • DISTINCT : 몇개의 값을 가지고 있는지 구할 때
      (Ex. SELECT COUNT(DISTINCT customer_id) FROM food_orders )


◆그룹 분할

  • GROUP BY 컬럼 : 여러번의 Query 없이, 카테고리를 지정해 수식 함수로 연산

    • 예를들어, 음식 종류별 평균 음식 가격을 구하려면 WHERE을 사용해 수십 개의 쿼리를 작성 해야하는데, 이 문제를 해결해준다
    • Ex :
SELECT name, MIN(age) 
FROM customers 
GROUP BY age

◆정렬

  • ORDER BY 컬럼 : 원하는 컬럼을 오름차순 or 내림차순으로 정렬

    • DESC = 내림차순
    • ASC = 오름차순 (ORDER BY는 기본 값이 ASC이기 때문에 생략 가능)
    • Ex :
SELECT name, MIN(age) 
FROM customers 
GROUP BY age 
ORDER BY age desc

◆구문 순서
SELECT -> FROM -> WHERE -> GROUP BY -> ORDER BY


◆문자

  • REPLACE(컬럼, 현재 값, 바꿀 값) : 컬럼 내 어떤 문자를 다른 문자로 치환하는 함수
    Ex :
SELECT addr REPLACE(addr, '문곡리', '문가리')
FROM food_orders 
  • SUBSTR(컬럼, 시작 위치, 글자 수) : 컬럼의 데이터 문자열 내 시작 위치에서 글자 수만큼 자르는 함수
    Ex :
SELECT addr SUBSTR(addr, 1, 2) 
FROM food_orders
  • CONCAT(붙일 값 1, 붙일 값2, ...) : 여러 컬럼의 값을 하나로 합칠 수 있는 함수
    Ex :
SELECT restaurant_name, addr, CONCAT('[서울]', restaurant_name) 
FROM food_orders

◆조건2

  • IF(컬럼, true일 때, false일 때) : 원하는 조건에 충족할 때 적용할 방법과 아닌 방법을 지정
    • 여러가지 함수 사용 가능(LIKE, REPLACE, ... 등등)
    • Ex :
SELECT IF(addr like '%평택군%', REPLACE(addr, '문곡리', '문가리'), addr) 
FROM food_orders
  • CASE WHEN 조건 THEN 수식 : 여러번의 IF문을 적용한 효과 (각 조건별 적용할 값을 지정)
    • ELSE 수식 END : 마지막으로 나머지 조건이 남아있을 때, 나머지 조건에 수식을 적용시키고 END로 끝낸다
    • Ex :
SELECT CASE WHEN cuisine_type = 'Korean' THEN '한식' 
WHEN cuisine_type IN ('Japanese', 'Chinese) THEN'아시아' 
ELSE '기타' END "음식타입"
FROM food_orders

◆형 변환

  • 컬럼 형태 : 컬럼 제목에서 숫자형인지 문자형인지 알려준다 (A~Z = 문자,
    123 = 숫자)
  • CAST(바꿀 문자, as decimal) : 숫자형으로 변환
  • CAST(바꿀 문자, as char) : 문자형으로 변환

◆Subquery

  • 정의 : 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
  • 여러번의 연산을 수행해야 될 때
  • 조건문에 연산 결과를 사용해야 할 때
  • 조건에 Query 결과를 사용하고 싶을 때
  • Ex :
SELECT order_id, restaurant_name, food_preparation_time 
FROM 
(
SELECT order_id, restaurant_name, food_preparation_time
FROM food_orders
) a

◆조인 : 서로 다른 테이블이 공통의 컬럼을 가지고 있다면, 공통 컬럼을 기준으로 두 테이블을 합친다

  • LEFT JOIN : 왼쪽 테이블을 중심으로 오른쪽 테이블을 매치(왼쪽은 무조건 표시, 매치 레코드가 오른쪽에 없다면 NULL로 표시)
    • Ex :
SELECT * 
FROM food_orders f LEFT JOIN payments p ON f.order_id = p.order_id
  • INNER JOIN : 왼쪽 테이블과 오른쪽 테이블의 교집합
    • Ex :
SELECT * 
FROM food_orders f INNER JOIN payments p ON f.order_id = p.order_id

0개의 댓글