[SQL] SELECT SQL 예제

반응형

이번 포스팅에서는 데이터를 추출하거나 조회할 때 사용하는 SELECT SQL을 알아보겠습니다.

예제 SQL 구문을 작성하기 위한 샘플 데이터 테이블 구조는 아래 그림을 참고해 주세요.

구입한 책을 보며 직접 따라한 결과를 리마인드 할 겸 일기 형식으로 기록한 것입니다.

 

테이블 구조는 행(ROW)과 열(COLUMN)의 이차원 구조로 이루어져 있습니다. 

데이터분석 책에서 제공받은 데이터 테이블명 'stock' 조회 결과

SELECT SQL 기본 문법

위의 'stock' 테이블을 조회하려면 다음의 SQL 쿼리를 실행하면 됩니다.

SELECT *
FROM STOCK;

쿼리문 작성 시 대소문자는 구분하지 않습니다. 또한 쿼리문의 끝은 다른 프로그래밍 언어와 유사하게 세미콜론(';')으로 구분합니다. 단어와 단어 사이는 띄어쓰기를 하거나 줄 바꿈을 하거나 상관없고 세미콜론으로 마침표만 찍어주면 됩니다.

위 쿼리문에서 "SELECT", "FROM"은 '절(Clause)'로 구분되며 테이블에서 데이터를 추출하려면 SELECT 절과 FROM 절이 필요합니다. '*' 문자는 "모든"것을 뜻하며 SELECT 뒤에 올 경우 모든 열을 선택하겠다는 의미입니다.

'*' 대신 "STK_NM"으로 조회할 경우 아래와 같이 해당 열만 선택되어 조회됩니다.

SELECT 실행 결과

ORDER BY 절

ORDER BY 절은 조회 데이터의 정렬 순서를 지정할 때 사용하며 SELECT 구문의 마지막 절로 붙여 사용합니다.

예제 테이블에서 STK_NM을 기준으로 정렬하여 데이터 조회를 하려면 다음과 같이 조회합니다.

결과를 확인하면 예제 테이블과 다른 순서로 데이터가 조회된 것을 확인할 수 있습니다.

SELECT *
FROM STOCK
ORDER BY STK_NM;

STK_NM 정렬로 조회한 결과

정렬 기준을 설정하지 않으면 기본적으로 오름차순 정렬로 조회됩니다. 정렬기준은 다음과 같습니다.

  • ASC: 오름차순(Ascending)
  • DESC: 내림차순(Descending)

위 조회구문에 내림차순 기준을 적용한 쿼리문은 다음과 같습니다. 맨 뒤에 정렬 기준을 적어주면 됩니다.

SELECT *
FROM STOCK
ORDER BY STK_NM DESC;

 

ORDER BY 절은 다음과 같이 여러 칼럼을 지정하여 사용할 수 있습니다. 먼저 나열된 칼럼의 값이 같을 때 뒤쪽에 나열된 칼럼으로 정렬됩니다. 아래 예에서는 종목코드가 같을 수 없기 때문에 뒤쪽의 ORDER BY STK_NM ASC 조건은 무시되어 처리됩니다.

SELECT *
FROM STOCK
WHERE SEC_NM IN ('자동차부품', '기계와장비')
ORDER BY STK_CD ASC, STK_NM ASC;

 

WHERE 절

WHERE 절은 테이블에서 필요한 데이터만 조회하기 위해 조건식 역할을 하는 절입니다.

위 예제 테이블에서 STK_TP_NM이 우선주인 종목만 조회하려면 WHERE 절을 추가하여 다음과 같이 조회합니다.

SELECT *
FROM STOCK
WHERE STK_TP_NM='우선주'
ORDER BY STK_NM;

위 구문에서 사용한 '='의 의미는 "같다"입니다. 프로그래밍 언어에서 '=='로 표현되는 것과 차이가 있습니다. 나머지 조건 연산자는 프로그래밍 언어에서 사용하는 것과 동일하며 다음과 같습니다.

연산자 의미 상세 설명
= equal to 두 값이 동일하면 참
!= not equal to 두 값이 다르면 참
< less than 첫 번째 값이 두번째 값보다 작으면 참
> greater than 첫 번째 값이 두번째 값보다 크면 참
<= less than or equal to 첫 번째 값이 두 번째 값보다 작거나 같으면 참
>= greater than or equal to 첫 번째 값이 두 번째 값보다 크거나 같으면 참
반응형

조건 연산자를 하나씩 직접 응용해 본 SELECT 문은 다음과 같습니다.

# 우선주만 조회
SELECT *
FROM STOCK
WHERE STK_TP_NM='우선주';

# STK_TP_NM 이 null 인 행만 조회
SELECT *
FROM STOCK
WHERE STK_TP_NM is null;

# STK_TP_NM이 null 이 아닌 행만 조회
SELECT *
FROM STOCK
WHERE STK_TP_NM is not null;

# 섹터가 화장품이 아닌 행만 조회
SELECT *
FROM STOCK
WHERE SEC_NM!='화장품';

# 종목코드가 051905보다 작거나 같은 행만 조회
SELECT *
FROM STOCK
WHERE STK_CD<='051905';

 

조건 연산자와 AND, OR를 조합한 중첩 조건문

C 언어에서 여러 조건을 연결하려면 AND와 OR를 "&&", "||"로 표현하는데 SQL에서는 문자 그대로(AND, OR) 사용합니다. AND는 연결된 모든 조건을 만족해야 하고 OR는 나열된 조건 중 하나만 만족해도 참이 됩니다.

예제 테이블에서 종목섹터가 화학이면서 코스닥에 상장된 종목을 조회하려면 다음과 같이 AND 조건을 사용하여 조회합니다.

SELECT *
FROM STOCK
WHERE SEC_NM='화학'
AND EX_CD='KD';

예제 테이블에서 종목섹터가 기계와장비 또는 자동차부품인 종목을 조회하려면 다음과 같이 OR 조건을 사용하여 조회합니다.

SELECT *
FROM STOCK
WHERE SEC_NM='기계와장비'
OR SEC_NM='자동차부품';

여러 개의 AND, OR연산자를 사용할 때는 구문별로 괄호를 사용해야 예상하지 못한 결과를 피할 수 있습니다.

# 코스피 종목이면서 섹터가 기계와장비거나 자동자부품인 종목 조회
# 쿼리 작성 의도를 반영하여 괄호로 묶습니다.
SELECT *
FROM STOCK
WHERE EX_CD='KP'
AND (SEC_NM='기계와장비' OR SEC_NM='자동차부품');

 

LIKE 조건 연산자

리눅스 콘솔 프롬프트에서 "ls *.sh" 명령은 확장자가 ".sh"인 모든 파일을 나열합니다. 또는 "ls file_?.sh"는 중간에 한 글자가 아무 문자나 해당되는 파일을 나열합니다. 이와 유사한 결과를 얻기 위해 SQL에서도 LIKE 조건 연산자를 사용할 수 있습니다. LIKE 연산자는 문자열의 패턴을 지정하여 데이터를 검색하는 데 사용되며 숫자 타입에는 사용 불가능합니다. 또는 LIKE 연산자의 기본 구문은 다음과 같습니다.

WHERE 컬럼명 LIKE 패턴;

패턴은 문자열로 지정되며 와일드카드 문자를 사용하여 지정할 수 있고 와일드카드와 의미는 다음과 같습니다.

  • %: 0개 이상의 문자를 나타냅니다.
  • _: 1개의 문자를 나타냅니다.

예를 들어 다음 쿼리문은 STOCK 테이블에서 NM 칼럼의 값이 "삼성"으로 시작(포함)하는 모든 데이터를 검색합니다.

SELECT *
FROM STOCK
WHERE STK_NM LIKE '삼성%';

WHERE STK_NM LIKE '삼성%' 조회 결과

포함하지 않는 데이터 조회 시 NOT LIKE를 사용합니다. 섹터가 "반도체"인데 종목명에 "전자"가 없는 종목 조회 방법은 다음과 같습니다.

SELECT *
FROM STOCK
WHERE SEC_NM='반도체'
AND STK_NM NOT LIKE '%전자%';

NOT LIKE 조회 결과

IN 조건 연산자

섹터가 "증권", "금융", "은행"인 종목을 OR 연산자를 활용하여 조회하는 구문은 다음과 같습니다.

SELECT *
FROM STOCK
WHERE SEC_NM='증권'
OR SEC_NM='금융'
OR SEC_NM='은행';

위 구문을 IN 연산자를 적용하면 다음과 같습니다.

SELECT *
FROM STOCK
WHERE SEC_NM IN ('증권','금융','은행');

반대로 섹터가 "증권", "금융", "은행"이 아닌 종목 조회는 NOT IN을 사용하여 다음과 같이 조회합니다.

SELECT *
FROM STOCK
WHERE SEC_NM NOT IN ('증권','금융','은행');

BETWEEN 조건 연산자

IN 연산자가 OR 쿼리문을 최적화하였다면 BETWEEN 연산자는 AND 쿼리문을 최적화할 수 있습니다.

다음의 쿼리문으로 BETWEEN을 사용했을 때 어떤 느낌인지 감을 잡아볼 수 있습니다.

SELECT *
FROM STOCK
WHERE STK_CD>='002820'
AND STK_CD<='002990';

# BETWEEN 사용
SELECT *
FROM STOCK
WHERE STK_CD BETWEEN '002820' AND '002990';

자료형(Data Type)

Database에는 다양한 데이터 타입이 있지만 그중에서 문자, 숫자 데이터 타입이 가장 일반적으로 사용됩니다.

문자 데이터 타입을 조회할 때는 싱글 따옴표(')를 사용해야 합니다. 12345는 12,345의 값을 가진 숫자이고

'12345'는 문자열입니다.

문자 데이터 타입은 문자로 조회하고 숫자 데이터 타입은 숫자로 조회해야 합니다.

 

이상으로 SELECT SQL문에 대한 기본적인 사용 방법을 알아보았습니다.

반응형