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