이름이 N으로 시작하거나 N으로 끝나는 직원들의 이름을 알고 싶다.
select name
from employee
where name like 'N%' or name like '%N';
-
N% : n으로 시작하는 경우
-
%N : n으로 끝나는 경우
name |
---|
BROWN |
JOHN |
NICOLE |
이름에 NG가 들어가는 직원들의 이름을 알고 싶다
select name
from employee
where name like '%NG%';
name |
---|
DINGYO |
JISUNG |
이름이 J로 시작하는, 총 네글자의 이름을 가지는 직원들의 이름을 알고 싶다
select name
from employee
where name 'J___';
name |
---|
JANE |
AOHN |
%로 시작하거나 _로 끝나는 프로젝트 이름을 찾고 싶다면?
select name
from project
where name LIKE '\%%' or name name LIKE '%\_';
“어떤 값이 어떤 특정 값 사이에 있다” 이, 여부를 참과 거짓으로 나타낼 수 있다.
(중요) 예를 들어 BETWEEN 1 AND 4
이렇게 되어 있으면 ‘4’는 포함되지 않는 것이다.
‘4’ 전까지를 말하는 것이다.
SELECT 5 BETWEEN 1 AND 10;
‘5’ 는 1과 10 사이에 있다. → 참인 것이다.
SELECT 'banana' NOT BETWEEN 'Apple' AND 'camera';
이건 단어의 앞 글자만 보면 되는 것이다. A와 C 사이에 B 가 있으니 참이지만, NOT 이 붙어 있으니 false 로 나온 것이다.
참고로 mysql 은 소, 대문자 구분을 하지 않는다.
SELECT * FROM OrderDetails
WHERE ProductID BETWEEN 1 AND 4;
SELECT * FROM Customers
WHERE CustomerName BETWEEN 'a' AND 'b';
여기서 포인트는 마지막꺼는 포함하지 않는 다는 것이다.
a AND b 를 했지만 a 관한 것만 출력 되는 것이다.
b 가 없어서 출력 안되는 것이 아니다.
select id
from employee
where birth_data = null;
위 쿼리를 실행 시키면 아무것도 나오지 않을 수도 있다!!
여기서는 =
을 사용하면 안된다
- 왜? -> null과 비교 할때는 같다는
=
걸 사용하면 안된다.
select id
from employee
where birth_data = IS NULL;
만약, 생일 정보가 null이 아닌 직원들의 id를 가져 오고 싶다면 `IS NOT`을 사용하기
-
SQL에서 NULL과 비교 연산을 하게 되면 그 결과는
unknown
이다 -
unknown
은 'true 일수도 있고 false일 수도 있다' 라는 의미이다
Three-Valued Logic 이란?
비교/논리 연산의 결과로 true, false, unknown을 가진다
-
1 = 1 ->
true
-
1 != 1 ->
false
-
1 = null =
unknown
-
1 != null =
unknown
-
1 > null =
unknown
-
1 <= null =
unknown
-
null > null =
unknown
where절에 있는 condition의 결과가 true인 tuple만 선택 된다.
- 즉, 결과가
false
거나unknown
이면 tuple은 선택되지 않는다
2000년대생이 없는 부서의 ID와 이름을 알고 싶다면?
2000년생이 회사에 입사를 했는데,
아직 부서 배치를 받지 않아서 null로 처리되어 있는 상태인 것이다.
select D.id, D.name
from department AS D
where D.id NOT IN (
select E.dept_id
from employee E
where E.birth_date >= '2000-01-01'
);
)
select D.id, D.name
from department AS D
where D.id NOT IN (
select E.dept_id
from employee E
where E.birth_date >= '2000-01-01' AND E.dept_id IS NOT NULL
);
)