Back-end/MySQL

[MySQL] SELECT 문 기본부터 응용까지 알아보기

랑 이 2025. 12. 23. 22:47
반응형

백엔드 개발을 하면서 SQL의 SELECT 문을 가장 많이 사용하게 되는 거 같습니다 

 

평소에 JPA라는 ORM을 주로 사용하고 있지만 복잡한 요구사항 및 성능 개선을 위해서 직접 쿼리를 작성하는 경우도

많기 때문에 SQL의 중요성을 깨닫고 있습니다

 

간단한 요구사항은 ORM의 기본 CRUD 메서드를 활용하면 되지만 그 이상으로는 한계가 있다고 생각하고 있습니다

그래서 그중에서 많이 사용되는 SELECT 문에 대해서 정리해보려고 합니다

1. SELECT 기본 문법

SELECT 컬럼 FROM 테이블명;

가장 기본적인 형태입니다

컬럼을 모두 가져오고 싶을 때는 "*"을 사용합니다

 

하지만 필요한 컬럼만 가져오는 게 좋을 것 같습니다

2. AS - 테이블과 컬럼에 이름 붙여 사용하기

SELECT id,username FROM users;

다음과 같은 명령어가 존재한다고 가정하겠습니다

 

하지만 여기서 여러 가지 요구사항으로 인해 쿼리가 길어진다면 편의를 위해 테이블과 컬럼에 별칭을 붙여 사용할 수 있습니다

SELECT u.id, u.username
FROM users AS u;

여기서 AS는 생략이 가능합니다

SELECT u.id, u.username
FROM users u;
AS: 럼명 또는 테이블명에 별칭을 부여하는 키워드

3. WHERE - 조건으로 필터링하기

SELECT 컬럼명 FROM 테이블명 WHERE 조건식;

조회하는 결과에 특정 조건으로 원하는 데이터만 검색할 때 사용됩니다

 

3-1. 비교 연산자

WHERE 조건에 비교 연산자를 사용할 수 있습니다 일반적인 프로그래밍 언어에서 사용하는 비교 연산자와 비슷합니다

하지만 같음 비교 연산자는 "==" 아닌 "=" 이기 때문에 주의해서 사용해야 합니다

= 같음
!=, <> 다름
>
< 작음
>=  크거나 같음
<=  작거나 같음
SELECT * FROM users
WHERE age >= 20;

 

3-2. 논리 연산자

WHERE 조건에 논리 연산자도 사용이 가능합니다 여기서는 기호를 사용하지 않고 키워드로 사용합니다

AND 그리고
OR 또는
NOT 부정
SELECT * FROM users
WHERE age >= 20 AND city = 'Seoul';

 

3-3. LIKE - 부분 문자열 검색

문자열의 일부 글자검색할 때 사용하는 키워드입니다

 

예를 들어 이름의 첫 글자가 '이'로 시작하는 회원을 검색할 때 다음과 같이 LIKE 키워드를 사용해서 조회할 수 있습니다

SELECT * FROM users WHERE name LIKE '이%';

한 글자와 매치하여 조회하기 위해서는 언더바(_)를 사용합니다 

앞뒤 글자 상관없이 "랑이"라는 이름을 검색하기 위해서 다음과 같이 쿼리문을 작성하면 됩니다

SELECT * FROM users WHERE name LIKE '_랑이_';

%: 0글자 이상 아무 문자

_: 딱 1글자 아무 문자

 

3-4. IN - 여러 값 중 하나일 때

여러 개의 값 중 하나에 포함되는지 비교할 때 사용하는 키워드입니다

SELECT * FROM users
WHERE city IN ('Seoul', 'Busan', 'Incheon');

 

3-5. BETWEEN - 특정 범위 조건에 사용할 때

숫자나 날짜처럼 연속된 값의 범위를 조회하고 싶을 때 사용하는 키워드입니다

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000;

이 조건은 10000원 이상이고 30000원 이하인 상품만 가져오는 쿼리문입니다

BETWEEN A AND B는 A 이상, B 이하라는 의미를 가지고 있습니다

 

3-6. IS NULL / IS NOT NULL - 값이 없는 데이터 찾기

데이터를 다룰 때 NULL(값없음) 처리를 많이 하게 됩니다

이러한 데이터의 NULL 값 여부를 판별하여 조회할 때 사용하는 키워드입니다

SELECT * FROM users
WHERE phone IS NULL;

이 조건은 전화번호가 NULL 일 경우 (입력되지 않은 경우)를 찾는 쿼리문입니다

SELECT * FROM users 
WHERE phone IS NOT NULL;

반대로 전화번호가 NULL이 아닌 경우를 찾는 쿼리문입니다

 

NULL 값을 비교할 때는 비교 연산자로 처리할 수 없기 때문에 IS NOT NULL, IS NULL 키워드를 사용해야 합니다

4. ORDER BY - 정렬하여 조회하기

조회할 순서를 오름차순,내림차순으로 정렬하여 조회할 때 사용하는 키워드입니다

 

정렬 종류

ASC (Ascending) 오름차순

작은 순서부터 큰 순서로 가는 방식이며 SQL에서는 기본값으로 사용됩니다

 

DESC (descending) 내림차순

큰 순서 부터 작은 수서로 가는 방식으로 사용됩니다

 

두 개가 헷갈리는 경우가 많은데 간단하게 그래프에 대입해 보면 값이 늘어나는 오름차순은 그래프가 우상향 하기 때문에

오름차순으로 생각하고 값이 줄어드는 내림차순은 우하향 하기 때문에 내림차순이라고 생각하면 이해하기 쉽습니다

SELECT * FROM users
ORDER BY created_at DESC;

위 쿼리문처럼 럼명 뒤에 정렬 종류 키워드를 작성하여 사용합니다

 

다중 정렬

정렬 기준을 여러 개를 지정하여 사용할 수 있습니다

예를 들어 첫 번째 정렬값에서 중복값이 나왔을 경우 다른 컬럼으로 정렬하도록 하는 경우 사용됩니다

SELECT * FROM users
ORDER BY age DESC, username ASC;

- 첫번째 정렬: 나이를 기준으로 내림차순 정렬

- 두 번째 정렬: 같은 나이끼리는 이름을 오름차순 정렬

5. LIMIT - 조회 개수 제한

결과 개수를 제한하는 키워드입니다

SELECT * FROM logs
ORDER BY created_at DESC LIMIT 10;

전체 데이터 개수 중 앞에서 10건만 조회하도록 하는 쿼리문입니다

6. DISTINCT - 중복 제거

특정 컬럼의 중복을 제거하여 조회할 때 사용하는 키워드입니다

SELECT DISTINCT city FROM users;

동일한 city가 여러 개가 있어도 단 하나의 데이터만 가져옵니다

7. GROUP BY / HAVING - 그룹화와 집계

주로 통계를 낼 때 사용하는 키워드입니다 집계함수와 함께 사용됩니다

SELECT 컬럼, 집계함수 FROM 테이블
GROUP BY 컬럼;

 

집계 함수
  • COUNT(*) : 행의 개수 
  • SUM(컬럼) : 합계
  • AVG(컬럼) : 평균
  • MAX(컬럼) : 최댓값
  • MIN(컬럼) : 최솟값
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

id	name	department
1	OOO	 개발팀
2	OOO	 개발팀
3	OOO	 개발팀
4	OOO	 인사팀
5	OOO	 인사팀
6	OOO	 디자인팀

실행 결과
department	employee_count
개발팀	     3
인사팀	     2
디자인팀	1
  • department 기준으로 직원을 묶음
  • 각 부서마다 직원이 몇 명인지 COUNT
  • 그 결과를 employee_count 컬럼으로 조회

SELECT의 기본적인 사용법에 대해서 작성했습니다 실제로는 여러 개의 테이블과 연관관계를 사용하여 조인해서 조회하는 경우가 많기 때문에 다음에 조인,서브쿼리 등 심화 내용에 대해서 다뤄보도록 하겠습니다

반응형