SELECT 기본 구문
SELECT문은 데이터베이스에서 데이터를 검색하는 구문으로 직관적으로 사용할 수 있지만, 시스템 성능에 영향을 줄 수 있기 때문에 주의해서 사용해야 한다. 실전에서 사용하는 구문들은 훨씬 복잡하지만, 실제 큰 틀에서는 아래에서 크게 벗어나진 않는다.
SELECT [열]
FROM [테이블]
WHERE [조건]
ORDER BY [열]
WHERE으로 데이터 검색하기
원하는 조건에 맞는 행을 검색하는 기본적인 WHERE문의 형식은 다음과 같다. 조건문에서는 조건 연산자와 논리 연사자 등을 적절히 조합해 원하는 조건문을 만들어 준다.
SELECT [열]
FROM [테이블]
WHERE [열] [조건 연산자] [조건값]
- 조건 연산자
연산자 | 설명 |
---|---|
<, >, >=, <= | 부등호에 따라 조건값과 비교해서 검색 |
= | 조건과 같은 값을 검색 |
<>, != | 조건과 같지 않은 값 검색 |
!< , !> | 조건보다 작지 않거나 크지 않은 값 검색 |
- 논리 연산자
연산자 | 설명 |
---|---|
ALL | 모든 비교 집합이 TRUE면 TRUE |
AND | 두 Bool 표현식이 모두 TRUE면 TRUE |
OR | 표현식이 하나라도 TRUE면 TRUE |
ANY | 비교 집합 중 하나라도 TRUE면 TRUE |
SOME | 비교 집합 중 일부가 TRUE면 TRUE |
BETWEEN | 범위 내에 있으면 TRUE |
EXISTS | 하위 쿼리에 행이 포함되면 TRUE |
IN | 피연산자가 리스트 중 하나라도 포함되면 TRUE |
LIKE | 패턴과 일치하면 TRUE |
NOT | 연산자 반대로 실행 |
케이스 스터디
특정 범위에 해당하는 값 검색
특정 범위에 해당하는 값을 검색하기 위해 BETWEEN이나 AND를 사용할 수 있습니다.
-- BETWEEN 사용
SELECT * FROM nasdaq_company
WHERE ipo_year BETWEEN 2010 AND 2011
-- AND 사용
SELECT * FROM nasdaq_company
WHERE ipo_year >= 2010
AND ipo_year <= 2011
AND, OR 조건이 혼합된 조건 검색
예를 들어, 아래 두가지 조건(각 bullet은 AND 조건)을 만족하는 행을 검색한다고 가정하자.
- sector가 'Technology' 또는 'Consumer Services'
- symbol이 'MSFT' 또는 'AMD' 또는 'AMZN'
이 경우 아래와 같이 구현이 가능하다. 만약 IN을 사용하지 않고, OR를 연결하려면 괄호를 통해 우선순위를 지정해줄 필요가 있다.
SELECT * FROM nasdaq_company
WHERE sector IN ('Technology', 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN')
NULL 데이터 검색
데이터가 비어있는 상태(Null)의 경우 분석에 반영 여부가 중요할 수 있다. NULL을 필터링 하기 위해서는 아래 코드처럼 입력해주면 된다. 만약 NULL이 아닌 데이터를 검색하려거든 IS NOT NULL로만 변경하면 된다.
SELECT * FROM nasdaq_company
WHERE sector IS NULL
ORDER BY로 데이터 정렬
데이터베이스 출력 결과를 오름차순(ASC)과 내림차순(DESC)으로 정렬할 수 있다. 열 기준에 따라 정렬할 수 있는데, 여러 개의 열을 동시에 쓸 수 있으며 쓰여진 순서에 따라 서로 다르게 정렬이 이뤄진다.
SELECT [열]
FROM [테이블]
WHERE [열] [조건 연산자] [조건값]
ORDER BY [열] [ASC, DESC]
케이스 스터디
오름차순과 내림차순을 조합해 정렬하기
각 열에 오름차순과 내림차순을 조합해 정렬할 수 있다. 다음은 sector 열에서는 오름차순으로 정렬하고 symbol 열에서는 내림차순으로 정렬하며, 정렬 우선순위는 sector와 symbol 순인 경우이다.
SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY sector ASC, symbol DESC
TOP N 데이터 검색
(SQL 서버)특정 조건에 해당하는 데이터 중 상위 N개의 데이터만 보고 싶다면, SELECT TOP으로 검색하려는 행의 수를 추가해 사용한다. 다음은 sector는 오름차순, symbol은 내림차순으로 정렬해 상위 10개 데이터를 검색하는 쿼리이다.
SELECT TOP 10 * FROM nasdaq_company
ORDER BY sector ASC, symbol DESC
(MySQL) 만약 MySQL을 사용한다면, 위에 구문은 지원하지 않기 때문에 LIMIT를 대신 사용한다.
SELECT * FROM nasdaq_company
ORDER BY sector ASC, symbol DESC
LIMIT 10
특정 구간 데이터 검색
Top N 데이터와 다르게 특정 구간의 데이터를 검색하고 싶다면, OFFSET ... FETCH NEXT를 활용한다. OFFSET은 검색 결과에서 지정한 행 개수만큼 건너뛰고 출력한다. (즉, ...에 입력한 행은 건너뛰고 +1부터 조회한다) 여기서 주의할 점은 정렬한 열을 기준으로 하기 때문에 ORDER BY가 필수적이라는 점이다.
FETCH NEXT는 OFFSET 이후 얼마만큼 출력할지 행의 개수를 지정한다. 이 때문에 OFFSET을 반드시 먼저 수행해줘야 한다. 다음 구문은 1,001번째 데이터부터 10개의 데이터를 출력하는 쿼리이다.
SELECT * FROM nasdaq_company
ORDER BY symbol DESC
OFFSET 1000 ROWS
FETCH NEXT 10 ROWS ONLY
'SQL' 카테고리의 다른 글
SQL로 데이터 그룹화하기 | GROUP BY, HAVING, DISTINCT (0) | 2025.01.04 |
---|---|
SQL 와일드 카드로 특정 문자열 검색하기 | %, _, [] (1) | 2025.01.03 |
SQL_GROUP BY로 피벗테이블처럼 활용하기 (0) | 2020.09.09 |
SQL로 빈칸 채우기_COALESCE 함수의 활용 (0) | 2020.08.19 |
SQL로 이동평균(MA; Moving Average) 구하기 (0) | 2020.08.17 |