[Oracle/Sql ]select 문에서 where 절의 다양한 조건들 예시 -1-

반응형
반응형

안녕하세요. 오랜만에 포스팅을 합니다.

지난번에는 그룹 함수에 대해서 살펴 보았는데요.

2022.04.17 - [SW교육/DB] - [Oracle]SQL Group by, 그룹 함수 쿼리 문제와 예시

 

[Oracle]SQL Group by,  그룹 함수 쿼리 문제와 예시

안녕하세요. 지난번에는 SELECT 쿼리 시 ORDER BY 를 사용하여 정렬하는 방법과 FETCH FIRST ROWS ONLY 나 ROWMUM 을 사용하여 건수를 제한하여 조회하는 방법을 알아보았습니다. 2022.04.12 - [SW교육/DB] - [Ora..

pandajeytv.tistory.com

오늘은 SELECT 문 사용시 WHERE 절 쿼리에서 사용하는 다양한 조건들에 대해서 알아 보도록 하겠습니다.

: 오늘 실습할 테이블은 LOTTO_AMT 라는 테이블로 로또 회차별(1~1,007) 당첨금액, 당첨 건수로 실제 로또 당첨 데이터를 업로드 한 데이터입니다.

LOTTO_AMT


1. Equal 조건, 부등호 조건

같다(=), 크다(>), 크거나 같다(>=) , 작다.(<), 작거나 같다.(<=) 는 가장 기본적인 조건식입니다.
- 예시를 통해서 알아보도록 하겠습니다.

(1) 당첨 금액이 10억원 인 회차 및 건수를 조회해 보라.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_AMT = 1000000000
ORDER BY LOTTO_AMT DESC ;

Equal 조건, 부등호 조건

결과는 한건도 없군요.

(1) 당첨 금액이 10억원 이상인 회차 및 건수를 조회해 보라.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_AMT >= 1000000000
ORDER BY LOTTO_AMT DESC ;

Equal 조건, 부등호 조건

이런 식으로 등호(EQUAL, =) 및 부등호(>, <)를 사용하는 조건은 매우 기본적인 조건문으로 사용할 때 큰 어려움이 없을듯 합니다.
2. 포함 조건 IN
IN 조건도 매우 많이 사용하는 조건문 입니다. 역시 예를 들어 보겠습니다.
(1) 25, 370, 671 회차의 당첨 내역을 조회하라. 단, 1등내역만 조회.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_NO IN (25,370,671)
AND A.LOTTO_CFCD = '01' -- 1등 = '01'
ORDER BY LOTTO_AMT DESC ;

 

(2) 25, 370, 671 회차의 당첨 내역을 조회하라. 단, 1등, 2등 내역 조회.
위 문제의 답에서 등호 대신 IN 을 사용하여 1, 2등 내역 조회

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_NO IN (25,370,671)
AND A.LOTTO_CFCD IN ('01','02') -- 1등 = '01', 2등 = '02'
ORDER BY LOTTO_AMT DESC ;

포함 조건 IN

(3) 25, 370, 671 회차의 당첨 내역을 조회하라. 단, 4, 5등을 제외한 내역 조회.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_NO IN (25,370,671)
AND A.LOTTO_CFCD NOT IN ('04','05')
ORDER BY LOTTO_AMT DESC ;

포함 조건 IN

3. Like 조건
LIKE 문은 주로 문자열을 검색 할때 사용하는 조건문입니다. 문자열 앞뒤에 %를 선택적으로 사용할수 있습니다.
본 예제 테이블에는 적합한 데이터가 없으나 간단히 예를 들어 보겠습니다.

(1) 당첨등수 코드가 문자열 '0'으로 시작 되는 경우를 조회해 보시오.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_CFCD LIKE '0%'
ORDER BY LOTTO_AMT DESC ;



(2) 당첨등수 코드가 문자열 '1'으로 끝나는 경우를 조회해 보시오.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_CFCD LIKE '%1'
ORDER BY LOTTO_AMT DESC ;



(3) 당첨등수 코드가 문자열 '02' 이 포함 된 경우를 조회해 보시오.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_CFCD LIKE '%02%'
ORDER BY LOTTO_AMT DESC ;



게시판 등에서 제목, 텍스트 ,작성자명 등으로 검색하는 경우를 생각해 보시면 좋을 듯 합니다.

4. BETWEEN 'A' AND 'B' 조건
해당 조건문은 주로 기간을 조회 할때 사용되지만 문자열 검색이나 숫자 검색이나 다양하게 사용됩니다.
역시 예를 들어 보겠습니다.
(1) 회차 100 부터 200 까지의 내역을 조회 하시오, 단, 1등, 2등만 조회하고 당첨금액이 20억 이상인 경우만 조회 하시오. ( 회차 오름차순 정렬 )

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_NO BETWEEN 100 AND 200
AND A.LOTTO_CFCD IN ('01','02')
AND A.LOTTO_AMT >= 2000000000
ORDER BY A.LOTTO_NO ;

BETWEEN 'A' AND 'B' 조건

(2) 위 쿼리의 BETWEEN AND 부문을 등호, 부등호를 사용하여 동일한 결과의 쿼리를 작성하라.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE A.LOTTO_NO >=100
AND A.LOTTO_NO <= 200
AND A.LOTTO_CFCD IN ('01','02')
AND A.LOTTO_AMT >= 2000000000
ORDER BY A.LOTTO_NO ;


걸과는 같습니다. 문자열 조건에 대해서도 아주 많이 사용합니다.

5, AND, OR
AND 는 위 쿼리에서도 수도 없이 사용했듯이 그야 말로 많이 사용하는 합니다. OR 도 마찬가지인데요.
A.LOTTO_CFCD IN ('01','02') 은 ( A.LOTTO_CFCD ='01' OR A.LOTTO_CFCD = '02' ) 바꾸어 사용할 수 있습니다.
AND, OR에 대한 예를 한번 들어 보겠습니다.
(1) 1등이면서 10억이 안되거나 2등이지만 10억 이상인 경우를 조회해보시오. 단, 당첨이 없었던 경우는 제외하고 금액인 큰 순으로 정렬하라.

SELECT A.LOTTO_AMT AS "당첨금액"
, A.LOTTO_NO AS "회차"
, A.LOTTO_CFCD AS "당첨등수"
, A.LOTTO_CNT AS "당첨건수"
FROM JUNG.LOTTO_AMT A
WHERE ( ( A.LOTTO_CFCD = '01' AND A.LOTTO_AMT < 1000000000 ) OR
( A.LOTTO_CFCD = '02' AND A.LOTTO_AMT >= 1000000000 ) )
AND A.LOTTO_AMT <> 0
ORDER BY A.LOTTO_NO ;

AND, OR

OR 가 들어 갈때 주의할 점은 괄호입니다. 괄호를 제대로 하지 않으면 의도한 조건보다 더 많은 결과를 조회 할 수 있습니다.


2022.04.12 - [SW교육/DB] - [Oracle]select , order by, fetch first rows only, rownum 에 대해서 알아 보자.

 

[Oracle]select , order by, fetch first rows only, rownum 에 대해서 알아 보자.

안녕하세요.  지난번에는 테이블을 만들고 데이터를 가져오기 하여 import를 해 보았습니다. 2022.04.10 - [SW교육/DB] - [Oracle]Dbeaver에서 테이블 생성 및 데이터 가져오기(import, insert) [Oracle]Dbeaver..

pandajeytv.tistory.com

 

반응형

댓글

Designed by JB FACTORY