IT/DBMS

[MySQL] SELECT문 복습!!

j8970 2025. 4. 15. 09:16

SELECT 문 정리


📌 SELECT 문이란?

✅ 데이터베이스에서 원하는 데이터를 조회할 때 사용하는 SQL 문
✅ "무엇을 선택할 것인지"를 결정하는 것이 핵심


🔷 SELECT 문 기본 구조

  • SELECT: 조회할 컬럼(열)을 지정
  • FROM: 데이터를 조회할 테이블을 지정
  • WHERE: 조건에 맞는 데이터 필터링
  • GROUP BY: 특정 컬럼 기준으로 그룹화
  • HAVING: 그룹화된 데이터에 조건 적용
  • ORDER BY: 결과 정렬 (기본은 오름차순)
  • LIMIT: 출력할 행의 수 제한
SELECT 컬럼명 FROM 테이블명
WHERE 조건절 GROUP BY 컬럼명
HAVING 조건 ORDER BY 컬럼명
LIMIT 숫자

🔷 실행 순서

FROM > JOIN > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT


🔷 SELECT 문 활용 예시

기본 조회 및 별칭 사용

-- 단일 컬럼 조회
SELECT name FROM korea_db.members;

-- 전체 컬럼 조회
SELECT * FROM korea_db.members;

-- 여러 컬럼 조회
SELECT member_id, name, contact FROM members;

-- 별칭 사용
SELECT member_id AS 고유번호, name '회원 이름', contact AS '회원 연락처' FROM members;

🔷 WHERE 조건절

조건에 맞는 데이터 조회

  • 관계 연산자: =, !=, >, <, >=, <=
  • 논리 연산자: AND, OR, NOT
  • NULL 여부 확인: IS NULL, IS NOT NULL
  • 범위 검색: BETWEEN A AND B
  • 목록 검색: IN (...)
  • 패턴 검색: LIKE '_', '%'
-- 포인트가 200 초과
SELECT member_id, name, points FROM members WHERE points > 200;

-- 이름이 'Minji'
SELECT * FROM members WHERE name = 'Minji';

-- 지역 코드가 'Jeju'이고 포인트가 400 초과
SELECT * FROM members WHERE area_code = 'Jeju' AND points > 400;

-- 포인트가 NULL인 회원
SELECT * FROM members WHERE points IS NULL;

-- 이름에 'un'이 포함된 경우
SELECT * FROM members WHERE name LIKE '%un%';

-- 이름이 네 글자인 경우
SELECT * FROM members WHERE name LIKE '____';

🔷 날짜/시간 조건

-- 특정 날짜 일치
SELECT * FROM members WHERE join_date = '2022-01-02';

-- 특정 날짜 사이
SELECT * FROM members WHERE join_date BETWEEN '2023-06-01' AND '2025-01-01';

-- 현재 날짜 이전 가입자
SELECT * FROM members WHERE join_date < CURDATE();

-- 연도가 2022인 회원
SELECT * FROM members WHERE YEAR(join_date) = '2022';

🔷 서브쿼리 (Subquery)

메인 쿼리 내부에서 사용되는 하위 쿼리로, 다양한 절에서 활용 가능


🔷 ORDER BY

정렬 기준을 지정 (기본: 오름차순 ASC)

SELECT * FROM members ORDER BY points DESC;

🔷 LIMIT

출력할 행의 수 제한

-- 상위 5개만 출력
SELECT * FROM members LIMIT 5;

-- 6번째부터 5개 출력
SELECT * FROM members LIMIT 5 OFFSET 5;

🔷 DISTINCT

중복 제거 후 조회

SELECT DISTINCT area_code FROM members;

🔷 GROUP BY & HAVING

데이터를 그룹화하고 조건 지정

-- 지역별 회원 수
SELECT area_code, COUNT(*) FROM members GROUP BY area_code;

-- 포인트 평균이 300 이상인 지역
SELECT area_code, AVG(points) FROM members GROUP BY area_code HAVING AVG(points) >= 300;

💡 요약

키워드 설명
SELECT 조회할 열 지정
FROM 테이블 지정
WHERE 조건 지정
GROUP BY 그룹화 기준 지정
HAVING 그룹 조건 지정
ORDER BY 정렬 기준 지정
LIMIT 출력 행 수 제한
DISTINCT 중복 제거
LIKE / IN / BETWEEN 조건 검색
IS NULL NULL 여부 판단
SUBQUERY 하위 쿼리 사용

🚀 select 정리!!