SELECT 문은 데이터베이스에서 데이터를 조회할 때 사용합니다.
전체 데이터를 조회하는 방법과 SELECT 문과 WHERE 절을 사용하여 한 가지 혹은 여러 조건으로 조회하는 방법에 대해 설명드리겠습니다.
기본 구조
SELECT 문에서 많이 사용하는 기본 구조는 다음과 같습니다.
SELECT [컬럼명]
FROM [테이블명]
WHERE [조건]
GROUP BY [컬럼명]
ORDER BY [컬럼명] [ASC | DESC]
MySQL 공식문서에 나와있는 구문은 더 많지만 많이 사용되는 기본적인 구조는 이와 같습니다.
쉽게 설명하면, 테이블의 조건과 일치하는 데이터를 조회한다는 의미입니다.
예제 데이터를 통해 좀 더 자세히 설명드리겠습니다.
예제 데이터는 MySQL 샘플 데이터베이스인 world DB의 데이터를 사용하겠습니다.
MySQL 8버전을 사용했고, MySQL Workbench에서 실행하였습니다.
전체 조회
테이블의 모든 데이터를 조회하고 싶을 때 다음과 같이 사용합니다.
SELECT * FROM <테이블명>
world 데이터베이스에 있는 city 테이블의 모든 데이터를 조회하는 쿼리입니다.
혹시 테이블이 없다거나 못찾는다는 오류가 발생하면 use <데이터베이스명> 명령어를 사용하거나 데이터베이스 우클릭 -> Set as Default Schema를 선택하면 됩니다.
전체 컬럼 말고 일부 컬럼만 보고싶을 때는 다음과 같이 사용합니다.
SELECT <컬럼명1>, <컬럼명2> .. <컬럼명5>
FROM <테이블명>
city 테이블에서 도시이름(Name)과 인구수(Population) 컬럼만 조회하는 쿼리입니다.
조건부 조회
원하는 조건의 데이터만 조회하고 싶을 때는 다음과 같이 사용합니다.
SELECT * FROM <테이블명>
WHERE <조건>
인구수 100만명이 넘는 데이터를 조회하였습니다.
WHERE 절에 들어갈 수 있는 조건은 다양합니다.
그리고 AND와 OR을 사용해서 여러개의 조건을 걸어서 조회할 수 있습니다.
비교
1. 일치
특정 데이터와 일치하는지 여부를 조회할 때는 등호(=)를 사용합니다.
일치하지 않는 데이터를 조회할 때는 <>, != 연산자를 사용합니다.
여러 데이터 중에서 일치하는지 여부를 조회할 때는 IN 절을 사용합니다.
# 국가 코드가 KOR인 도시 조회
SELECT * FROM city WHERE CountryCode = 'KOR'
# 국가 코드가 KOR이거나 USA인 도시 조회
SELECT * FROM city WHERE CountryCode in ('KOR', 'USA')
# 국가 언어 데이터에서 국가 코드가 KOR이 아닌 데이터 조회
SELECT * FROM countryLanguage WHERE CountryCode <> 'KOR'
SELECT * FROM countryLanguage WHERE CountryCode != 'KOR'
2. 대소
이상, 이하, 초과, 미만 등 대소를 비교하고자 할 때는 <=, =>, <, > 연산자를 사용합니다.
# 인구 수가 100만명이 넘는 도시 조회
SELECT * FROM city WHERE Population > 1000000
# 인구 수가 100만명 이하인 도시 조회
SELECT * FROM city WHERE Population <= 100000
3. 범위
특정 범위에 있는 데이터를 조회할 때는 BETWEEN 절을 사용합니다.
BETWEEN의 범위에는 범위에 사용된 데이터도 포함됩니다.
(ex. 범위가 1~10이면 1과 10도 포함)
# 인구 수가 2만 ~ 3만명인 데이터 조회
SELECT * FROM city WHERE Population between 20000 and 30000
4. NULL
데이터가 NULL인지 아닌지 여부를 판단할 때는 IS NULL, IS NOT NULL을 사용합니다.
# 수도 데이터가 없는 국가 조회
SELECT * FROM country WHERE Capital is null
# 수도 데이터가 있는 국가 조회
SELECT * FROM country WHERE Capital is not null
포함
특정 문자열을 포함하는 데이터를 조회할 때는 LIKE 절을 사용합니다.
LIKE 절은 대소문자를 구분하지 않습니다.
# 이름이 A로 시작하는 도시 조회
SELECT * FROM city WHERE Name like 'A%'
# 이름이 E로 끝나는 도시 데이터 조회
SELECT * FROM city WHERE Name like '%E'
# 이름에 O가 포함되는 도시 데이터 조회
SELECT * FROM city WHERE Name like '%O%'
부정
조건을 부정하고자 할 때 NOT을 사용합니다.
# 국가의 면적이 1000 이하가 아닌 데이터(= 국가의 면적이 1000을 넘는 데이터)
SELECT * FROM country WHERE NOT SurfaceArea <= 1000
# 국가의 면적이 1000 ~ 10000이 아닌 데이터
SELECT * FROM country WHERE NOT SurfaceArea BETWEEN 1000 and 10000
SELECT * FROM country WHERE SurfaceArea NOT BETWEEN 1000 and 10000
# 국가의 이름에 A가 포함되지 않은 데이터
SELECT * FROM country WHERE Name NOT LIKE '%A%'
여러 조건
WHERE 절에는 여러 조건을 사용할 수 있습니다.
주어진 조건에 모두 일치하는 데이터를 찾고자 할 때는 AND, 여러 조건 중 한 조건만 일치하는 데이터를 찾고자 할 때는 OR을 사용하면 됩니다.
# 국가 언어 데이터 중 영어를 사용하고, 퍼센트가 10 미만인 데이터 조회
SELECT * FROM countrylanguage
WHERE Language = 'English' AND Percentage < 10
# 국가 언어 데이터 중 영어를 사용하거나, 퍼센트가 10 미만인 데이터 조회
SELECT * FROM countrylanguage
WHERE Language = 'English' OR Percentage < 10
읽으면 좋은 글
[MySQL] SELECT GROUP BY 기본 사용법 및 예제
[MySQL] SELECT ORDER BY 정렬 사용법 및 예제
[MySQL] SELECT LIKE 절 사용 방법 정리