본문 바로가기
SQL 문제 풀기/2. SQLD 기출 : 2024.3.01~2024.4.25

<SQLD 10> 논리연산자 AND와 OR에 대한 기출문제

by HYEHYE_SON 2024. 3. 10.
728x90

매일 SQLD 기출 문제 풀기 챌린지


 


문제10.

다음 보기 중 SQL의 결과와 다른 것은?

테이블명 : SQLD_10

NUM CODE COL1 COL2
1 A 100 350
2 A 130 300
3 B 150 400
4 A 200 300
5 B 250 200
6 A 300 150


① SELECT * 
     FROM SQLD_10 
     WHERE 1=1 AND CODE IN('A','B') AND COL1 BETWEEN 200 AND 400;

② SELECT * 
      FROM SQLD_10 
      WHERE 1=1 
       AND (CODE='A' AND 200 BETWEEN COL1 AND COL2) 
        OR (CODE='B' AND 200 BETWEEN COL1 AND COL2);

③ SELECT * 
      FROM SQLD_10 
      WHERE 1=1 AND 200 BETWEEN COL1 AND COL2;

④ SELECT * 
      FROM SQLD_10 
      WHERE 1=1 AND COL1 <= 200 AND COL2 >= 200;
 


해설해보기

#1번
WHERE 조건절을 살펴보면
1=1 즉 TRUE이고,
(AND) CODE컬럼에 A나 B가 있으며,
(AND) COL1의 값이 200~400사이에 해당하는 값들을 출력하는 것
(단, BETWEEN 200 AND 400은 200과 400도 포함된다)
따라서 NUM이 4,5,6인 행이 출력된다.

#2번
WHERE 조건절을 살펴보면
1=1 즉 TRUE이고,
(AND) CODE = A이면서 COL1과 COL2의 각각의 값 사이에 200이 있는 값 이거나 ,
(OR) CODE = B 이면서 COL1과 COL2의 각각의 값 사이에 200이 있는 행 출력
예를들어,
NUM 1 인 COL1 : 100 과 COL2 : 350 사이에 200이 있으므로 해당됨

따라서 NUM이 1,2,3,4인 행이 출력된다.

#3번
WHERE 조건절을 살펴보면
1=1 즉 TRUE이고,
(AND)  COL1과 COL2의 각각의 값 사이에 200이 있는 값이 있는 행 출력

따라서 NUM 1,2,3,4인 행이 출력된다.

#4번
WHERE 조건절을 살펴보면
1=1 즉 TRUE이고,
(AND) COL1이 200이하이고, = NUM 1,2,3,4
(AND) COL2이 200이상인 값이 있는 행 출력 = NUM 1,2,3,4,5
and이므로 두가지 모두에 해당하는 것은 num 1,2,3,4

따라서 NUM 1,2,3,4

결과적으로 SQL의 실행결과가 다른 것은 





 
직접 실행해보기

#1번 실행

# 1번

 SELECT * 
     FROM SQLD_10 
     WHERE 1=1 AND CODE IN('A','B') AND COL1 BETWEEN 200 AND 400;

 

#2,3,4 실행

# 2번, 3번, 4번

SELECT * 
   FROM SQLD_10 
    WHERE 1=1 
     AND (CODE='A' AND 200 BETWEEN COL1 AND COL2) 
     OR (CODE='B' AND 200 BETWEEN COL1 AND COL2);

SELECT * 
    FROM SQLD_10 
    WHERE 1=1 AND 200 BETWEEN COL1 AND COL2;

SELECT * 
    FROM SQLD_10 
    WHERE 1=1 AND COL1 <= 200 AND COL2 >= 200;


관련 스크립트

create  table   sqld_10
( num     number(10),
  code     varchar2(5),
  col1      number(10),
  col2     number(10) );

insert   into   sqld_10  values( 1, 'A', 100, 350);
insert   into   sqld_10  values( 2, 'A', 130, 300);
insert   into   sqld_10  values( 3, 'B', 150, 400);
insert   into   sqld_10  values( 4, 'A', 200, 300);
insert   into   sqld_10  values( 5, 'B', 250, 200);
insert   into   sqld_10  values( 6, 'A', 300, 150);

commit;

 
 
 
 
 
 
 
 
 
 

반응형