백엔드 개발을 하면서 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의 기본적인 사용법에 대해서 작성했습니다 실제로는 여러 개의 테이블과 연관관계를 사용하여 조인해서 조회하는 경우가 많기 때문에 다음에 조인,서브쿼리 등 심화 내용에 대해서 다뤄보도록 하겠습니다
'Back-end > MySQL' 카테고리의 다른 글
| [MySQL] 윈도우 MySQL & Workbench 설치 방법 (1) | 2024.12.30 |
|---|---|
| [MySQL] Linux 환경에서 MySQL 설치 및 접속 방법 (3) | 2024.10.03 |