LIKE
LIKE는 WHERE절에 주로 사용되며, 부분적으로 일치하는 문자열을 찾을 때 사용합니다.
SELECT name
FROM instructor
WHERE name LIKE '%dar%'
"instructor
테이블에서 name
에 dar
을 포함하고 있는 튜플들을 골라 name
을 뽑아서 보여주세요"
%
: 글자 숫자 제한 X'Ap%'
는 Ap로 시작하기만 하면 됩니다. ex) Ap, Api, Apple, Application, Approach, ..._
: _
수 만큼 글자 수 제한'Ap___'
는 Ap가 일치하고, 뒤에 3글자가 와야 합니다. ex) Apple, Apart, ...'__%'
은 최소 두 글자 이상 있어야 합니다.'___'
은 세 글자 문자열만 있어야 합니다.Set Operations [UNION, INTERSECT, EXCEPT]
UNION은 합집합, INTERSECT는 교집합, EXCEPT는 차집합을 나타냅니다.
(SELECT course_id FROM section WHERE sem = 'Fall' AND year = 2017)
UNION
(SELECT course_id FROM section WHERE sem = 'Spring' AND year = 2018)
"section
테이블에서 2017년 가을학기와 2018년 봄학기의 course_id
를 모두 뽑아서 보여주세요"
(SELECT course_id FROM section WHERE sem = 'Fall' AND year = 2017)
INTERSECT
(SELECT course_id FROM section WHERE sem = 'Spring' AND year = 2018)
"section
테이블에서 2017년 가을학기와 2018년 봄학기의 course_id
중 둘이 일치하는 것을 뽑아서 보여주세요"
(SELECT course_id FROM section WHERE sem = 'Fall' AND year = 2017)
UNION
(SELECT course_id FROM section WHERE sem = 'Spring' AND year = 2018)
"section
테이블에서 2017년 가을학기의 course_id
중 2018년 봄학기에 있는 것을 제외하고 뽑아서 보여주세요"
Set Operation은 기본적으로 중복이 자동 제거됩니다.
Ordering
SELECT DISTINCT name
FROM instructor
ORDER BY name
"instructor
테이블의 모든 튜플을 name
을 기준으로 사전순 정렬하고, name
을 중복을 제거하고 뽑아서 보여주세요"
name
을 사전 역순으로 정렬하고 ..."dept_name
을 정렬한 후 name
이 정렬 가능하면 정렬하고 ..."NULL
모든 Tuple들은 null값을 가질 수 있습니다.
이는 '알 수 없는 값' 이거나 '존재하지 않는 값' 입니다.
null을 이용한 산술 연산의 결과는 항상 null입니다. ex) 3 + null = null
IS NULL은 값이 null인지 확인해줍니다.
SELECT name
FROM instructor
WHERE salary IS NULL
"instructor
테이블에서 연봉이 null인 모든 튜플의 name
을 뽑아서 보여주세요"
IS NOT NULL은 값이 null이 아닌지 확인해줍니다.
WHERE절에서는 AND, OR, NOT과 같은 논리 연산을 할 수 있습니다.
WHERE절은 unknown값을 false로 인식합니다.
unknown과 논리 연산을 할 수도 있는데, 결과는 다음과 같습니다.
AND
(true AND unknown) = unknown
(false AND unknown) = false
(unknown AND unknown) = unknown
OR
(unknown OR true) = true
(unknown OR false) = unknown
(unknown OR unknown) = unknown