반응형

본 글은 책 "칼퇴족 김대리는 알고 나만 모르는 SQL 기초 편"의 정리 내용입니다.

논리연산자는 두 개 이상의 조건을 주기 위해 사용된다. 

OR 논리 연산자를 이용한 예

OR 연산자


SELECT 열이름1, 열이름2 FROM 테이블명 WHERE 조건절1 OR 조건절2;

예제 (테이블명 : BRNCH_INFO)


  • 각 열에 대한 설명
    : 영업점 번호, 영업점 이름, 영업점 신선일, 영업점 폐쇄일, 영업점 인원, 경영평가
BRNCH_NO  BRNCH_NM  OPEN_DT  CLOSE_DT  BRANCH_NUM  BRNCH_PERF
789 시청 1990-03-12 NULL 13 A
640 여의도 2005-08-07 NULL 8 B
368 대치 2005-08-01 2013-07-09 13 C
248 창동 2000-11-30 NULL 12 A
547 종각 1993-02-21 NULL 11 C
780 명동 1999-09-22 NULL 8 A
987 역삼 2008-08-30 NULL 7 B
456 대학로 2010-12-01 NULL 8 B
650 신촌 2002-05-17 NULL 10 C
  • Primary Key는 BRNCH_NO
더보기
CREATE TABLE BRNCH_INFO
(
BRNCH_NO INT NOT NULL,
BRNCH_NM CHAR(20) NOT NULL,
OPEN_DT date NOT NULL,
CLOSE_DT date NULL,
BRNCH_NUM INT NOT NULL,
BRNCH_PERF CHAR(20) NOT NULL
);

INSERT INTO BRNCH_INFO
VALUES
(789, '시청', '1990-03-12', NULL, 13, 'A'),
(640, '여의도', '2005-08-07', NULL, 8, 'B'),
(368, '대치', '2005-08-01', '2013-07-09', 13, 'C'),
(248, '창동', '2000-11-30', NULL, 12, 'A'),
(547, '종각', '1993-02-21', NULL, 11, 'C'),
(780, '명동', '1999-09-22', NULL, 8, 'A'),
(987, '역삼', '2008-08-30', NULL, 7, 'B'),
(456, '대학로', '2010-12-01', NULL, 8, 'B'),
(650, '신촌', '2002-05-17', NULL, 10, 'C');

문제

Q1. 위 테이블에서 직원수(BRANCH_NUM)가 10명 이상이거나 경영평가(BRNCH_PERF)가 ‘A’인 영업점 번호(BRNCH_NO), 영업점 인원(BRNCH_NUM), 경영평가(BRNCH_PERF)를 출력

BRNCH_NO BRNCH_NUM BRNCH_PERF
368 13 C
547 11 C
650 10 C
더보기
SELECT BRNCH_NO, BRNCH_NM, BRNCH_NUM, BRNCH_PERF 
FROM BRNCH_INFO
WHERE BRNCH_NUM >=10 OR BRNCH_PERF='A';

 

참고


  • 연산의 우선순위에 있어서 AND가 OR보다 높음
    • OR 연산자를 먼저 처리하기 위해서는 괄호가 필요

EXAMPLE 1) 아래 쿼리문의 결과는? (괄호 사용 X)

SELECT * 
FROM BRNCH_INFO
WHERE OPEN_DT <= '1999-12-31' OR BRNCH_NUM = 8 AND BRNCH_PERF = 'A';

 

과정 1

  • 위의 WHERE 조건을 나눠서 생각
  • 괄호가 없으므로 AND 연산을 먼저 처리
SELECT * 
FROM BRNCH_INFO
WHERE BRNCH_NUM = 8 AND BRNCH_PERF = 'A';
BRNCH_NO  BRNCH_NM  OPEN_DT  CLOSE_DT  BRNCH_NUM  BRNCH_PERF
780 명동 1999-09-22   8 A

과정 2

  • 추가적으로 OR 연산 앞에 있는 조건을 이용해 출력
SELECT * 
FROM BRNCH_INFO
WHERE OPEN_DT <= '1999-12-31';
BRNCH_NO  BRNCH_NM  OPEN_DT  CLOSE_DT  BRNCH_NUM  BRNCH_PERF
789 시청 1990-03-12   13 A
547 종각 1993-02-21   11 C
780 명동 1999-09-22   8 A
  • 최종적으로 위 두 쿼리문의 결과를 OR 연산으로 출력하면 BRNCH_NO가 780인 경우가 중복되므로 아래와 같음

최종 결과

BRNCH_NO  BRNCH_NM  OPEN_DT  CLOSE_DT  BRNCH_NUM  BRNCH_PERF
789 시청 1990-03-12   13 A
547 종각 1993-02-21   11 C
780 명동 1999-09-22   8 A

 

EXAMPLE 2) 아래 쿼리문의 결과는? (괄호 사용)

SELECT * 
FROM BRNCH_INFO
WHERE (OPEN_DT <= '1999-12-31' OR BRNCH_NUM = 8) AND BRNCH_PERF = 'A';

 

과정 1

  • 괄호가 있는 OR연산 먼저 처리
SELECT * 
FROM BRNCH_INFO
WHERE (OPEN_DT <= '1999-12-31' OR BRNCH_NUM = 8);
BRNCH_NO  BRNCH_NM  OPEN_DT CLOSE_DT  BRNCH_NUM  BRNCH_PERF
789 시청 1990-03-12   13 A
640 여의도 2005-08-07   8 B
547 종각 1993-02-21   11 C
780 명동 1999-09-22   8 A
456 대학로 2010-12-01   8 B

 

과정 2

  • AND 연산 뒷 조건 처리
SELECT * 
FROM BRNCH_INFO
WHERE BRNCH_PERF = 'A';
BRNCH_NO  BRNCH_NM  OPEN_DT CLOSE_DT  BRNCH_NUM  BRNCH_PERF
789 시청 1990-03-12   13 A
248 창동 2000-11-30   12 A
780 명동 1999-09-22   8 A
  • 마지막으로 AND 연산을 처리하면 중복되는 BRNCH_NO가 789780만 있으므로 최종 출력은 아래와 같음

최종 결과

BRNCH_NO  BRNCH_NM  OPEN_DT CLOSE_DT  BRNCH_NUM  BRNCH_PERF
789 시청 1990-03-12   13 A
780 명동 1999-09-22   8 A

⇒ 결론적으로 괄호의 사용에 따라 연산의 우선순위가 달라지기 때문에 최종 결과도 달라짐

반응형

+ Recent posts