복잡한뇌구조마냥

[DB] SQL 기초 공부 본문

BE/DB

[DB] SQL 기초 공부

지금해냥 2025. 5. 6. 15:23

알고리즘 문제를 풀면서 SQL 문제를 보자마자 멈칫하는 자신을 보면서

'아 내가 지금까지 SQL에 너무 소홀했나' 라고 생각이 들었다.

 

문제를 풀면서 오랜만에 DB 명령어 간단하게 사용해보았던 내용을 정리하려고 한다.

 

✅ 쿼리 흐름 개요

SELECT → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY

SQL은 위 순서대로 작성하고 실행됩니다. 

1️⃣ SELECT – 조회할 컬럼 선택

sql
복사편집
SELECT name, age
SELECT name, age
  • 원하는 컬럼만 선택
  • *로 전체 조회 가능
  • 계산식도 가능: SELECT price * quantity AS total_price

2️⃣ FROM – 데이터를 가져올 테이블

sql
 
FROM users
  • 데이터를 조회할 기준 테이블
  • JOIN, 서브쿼리 등도 이 위치에서 사용

3️⃣ JOIN – 테이블 결합

sql
 
FROM users
INNER JOIN orders
  • INNER JOIN, LEFT JOIN, RIGHT JOIN 등
  • 서로 다른 테이블을 기준 컬럼으로 연결할 때 사용

4️⃣ ON – JOIN 조건

sql
 
ON users.id = orders.user_id
  • 어떤 컬럼을 기준으로 테이블을 연결할지 지정

5️⃣ WHERE – 행 필터링

sql
 
WHERE age >= 30 AND city = 'Seoul'
  • 조건에 맞는 행만 추출
  • AND, OR, IN, LIKE, BETWEEN 등 활용

6️⃣ GROUP BY – 행 그룹화

sql
 
GROUP BY department
  • 특정 컬럼을 기준으로 행을 묶어서 집계
  • GROUP BY 없이 SUM, MAX 등 집계함수 사용 시 전체 데이터 대상으로 1행만 나옴

7️⃣ 집계 함수 – MAX, SUM, COUNT, AVG 등

sql
 
SELECT department, MAX(salary), SUM(bonus)
FROM employees
GROUP BY department
  • MAX: 최대값
  • SUM: 합계
  • COUNT: 개수
  • AVG: 평균
  • MIN: 최소값
  • 그룹별 통계 데이터를 뽑을 때 반드시 GROUP BY와 함께 사용

8️⃣ ORDER BY – 정렬

sql
 
ORDER BY salary DESC
  • ASC: 오름차순 (기본값)
  • DESC: 내림차순
  • 여러 컬럼 조합 정렬도 가능

9️⃣ CASE WHEN – 조건 분기 컬럼 생성

sql
 
SELECT name,
       CASE WHEN age >= 20 THEN '성인'
            ELSE '미성년자'
       END AS age_group
  • 조건에 따라 값 분기
  • SELECT나 ORDER BY 등에서 사용

🔟 AS – 컬럼 또는 테이블 별칭

sql
 
SELECT name AS user_name
  • 출력 이름을 보기 좋게 바꾸기
  • 서브쿼리 별칭에도 자주 사용

➕ 추가로 알아두면 좋은 문법

✅ HAVING – 그룹화 이후 조건

sql
 
HAVING COUNT(*) >= 2
  • WHERE는 그룹화 전, HAVING은 그룹화 후 필터링

✅ DISTINCT – 중복 제거

sql
 
SELECT DISTINCT city
  • 중복 없이 고유한 값만 출력

✅ LIMIT / TOP – 행 개수 제한

sql
 
LIMIT 10        -- MySQL, PostgreSQL  
SELECT TOP 5 *  -- SQL Server
  • 쿼리 결과 중 일부만 보기

✅ SUBQUERY – 서브쿼리

sql
 
SELECT name
FROM users
WHERE id IN (
  SELECT user_id
  FROM orders
  WHERE price > 100
)
  • 쿼리 안의 쿼리
  • 필터링, JOIN, FROM절 안에서도 사용 가능

✅ QUARTER() – 분기 추출

sql
 
SELECT QUARTER(order_date) AS quarter 
FROM orders
  • 1년을 기준으로 1~4분기 추출
  • 월 기준으로 1~3: 1분기, 4~6: 2분기 …

📌 응용 예시:

sql
SELECT QUARTER(order_date) AS qtr, COUNT(*) AS order_count 
FROM orders 
GROUP BY QUARTER(order_date)
 

✅ SUBSTRING() – 문자열 자르기

sql
 
SELECT SUBSTRING(phone, 1, 3) AS area_code 
FROM customers
  • 문자열 일부 추출: SUBSTRING(문자열, 시작위치, 길이)
  • 인덱스는 1부터 시작 (MySQL 기준)

📌 응용 예시:

sql
 
-- 주민번호 앞 6자리 추출
SELECT SUBSTRING(jumin, 1, 6) AS birth_ymd
FROM users

 

SQL은 생각보다 명확한 규칙을 따릅니다. 데이터를 추출하고 가공하는 데 필요한 문법들을 쿼리 순서에 따라 익혀두면, 실무나 테스트에서 막힘 없이 활용할 수 있습니다.

 

참고 자료:

https://www.w3schools.com/sql/default.asp

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

LIST

'BE > DB' 카테고리의 다른 글

[DB] Supabase 기본 세팅  (1) 2025.07.14
[DB] ERD Cloud 사용법  (1) 2025.07.11
[MariaDB] SQL 명령어 연습  (0) 2025.05.27
[MariaDB] 설치 및 실행  (0) 2025.05.27
[MongoDB] Embedded Document, 배열, 객체 검색 쿼리 정리  (0) 2024.02.26