안녕하세요. 오랜만에 포스팅을 합니다.
지난번에는 그룹 함수에 대해서 살펴 보았는데요.
2022.04.17 - [SW교육/DB] - [Oracle]SQL Group by, 그룹 함수 쿼리 문제와 예시
오늘은 SELECT 문 사용시 WHERE 절 쿼리에서 사용하는 다양한 조건들에 대해서 알아 보도록 하겠습니다.
: 오늘 실습할 테이블은 LOTTO_AMT 라는 테이블로 로또 회차별(1~1,007) 당첨금액, 당첨 건수로 실제 로또 당첨 데이터를 업로드 한 데이터입니다.
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 ;
결과는 한건도 없군요.
(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, =) 및 부등호(>, <)를 사용하는 조건은 매우 기본적인 조건문으로 사용할 때 큰 어려움이 없을듯 합니다.
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 ;
(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 ;
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 ;
(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 ;
OR 가 들어 갈때 주의할 점은 괄호입니다. 괄호를 제대로 하지 않으면 의도한 조건보다 더 많은 결과를 조회 할 수 있습니다.
2022.04.12 - [SW교육/DB] - [Oracle]select , order by, fetch first rows only, rownum 에 대해서 알아 보자.
'SW교육 > DB' 카테고리의 다른 글
[SQLD]모델링의 정의, 데이터 모델링 정의 (2) | 2023.05.25 |
---|---|
[SQL]SQLD시험 접수하기. SQLD시험 접수 주의사항 (0) | 2023.05.09 |
[Oracle]SQL Group by, 그룹 함수 쿼리 문제와 예시 (0) | 2022.04.17 |
[Oracle]select , order by, fetch first rows only, rownum 에 대해서 알아 보자. (0) | 2022.04.12 |
[Oracle]오라클 pk 2개 이상 컬럼으로 지정하기(복합키) (0) | 2022.04.11 |