Database - 3 (SQL 4)

김세영·2021년 4월 15일
0

Set Membership

IN & NOT IN

  • SELECT DISTINCT course_id
    FROM section
    WHERE semester = 'Fall' AND year = 2017 AND
    course_id IN (SELECT course_id
    FROM section
    WHERE semester = 'Spring' AND year = 2018)
    "section 테이블에서 2017년 가을학기의 course_id와 2018년 봄학기의 course_id를 중복을 제거한 후 뽑아서 보여주세요"

위에서 IN대신 NOT IN을 사용하면, 2017년 가을학기에 있는 course_id 중 2018년 봄학기에는 없는 것들을 뽑아서 가져옵니다.

  • SELECT DISTINCT name
    FROM instructor
    WHERE name NOT IN ('Mozart', 'Einstein')
    "instructor 테이블에서 Mozart도 아니고, Einstein도 아닌 것들의 튜플 중 name을 뽑아서 보여주세요"

  • SELECT COUNT (DISTINCT ID)
    FROM takes
    WHERE (course_id, sec_id, semester, year) IN
    (SELECT course_id, sec_id, semester, year
    FROM teaches
    WHERE teaches.ID = 10101)
    "teaches 테이블에서 ID가 10101인 튜플이 takes 테이블에 있는 것들을 골라, 중복을 제거한 후 ID의 개수를 계산해주세요"

위의 쿼리문은 예시를 위해 작성한 것이고, 훨씬 간단하게 작성할 수 있습니다.

Set Comparison

SOME

SOME은 비교 대상 집합의 원소 중 연산에 만족하는 값이 하나라도 있다면 true, 그렇지 않으면 false를 반환합니다.

  • ex)
    (5 < SOME {0, 5, 6}) = true (5 < 6이 참)
    (5 < SOME {0, 5}) = false (5 < 0, 5 < 5 모두 거짓)
    (5 = SOME {0, 5}) = true (5 = 5가 참)
    (5 ≠ SOME {0, 5}) = true (0 ≠ 5가 참)

(= SOME)은 IN과 같은 의미이지만, (≠ SOME)은 NOT IN과 같은 의미가 아닙니다.

ALL

ALL은 비교 대상 집합의 원소가 모두 연산에 만족하면 true, 그렇지 않으면 false를 반환합니다.

  • ex)
    (5 < ALL {0, 5, 6}) = false (5 < 0, 5 < 5가 거짓)
    (5 < ALL {6, 10}) = true (5 < 6, 5 < 10이 모두 참)
    (5 = ALL {4, 5}) = false (5 = 4가 거짓)
    (5 ≠ ALL {4, 6}) = true (5 ≠ 4, 5 ≠ 6이 모두 참)

(≠ ALL)은 NOT IN과 같은 의미이지만, (= ALL)은 IN과 같은 의미가 아닙니다.

profile
초보 iOS 개발자입니다ㅏ

0개의 댓글