반응형

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
반응형