티스토리 뷰
반응형
WHERE
특정한 조건을 줄 때 사용
-- 아래의 형태로 사용
SELECT
column_name
FROM
table_name
WHERE
condition;
번호가 6인 학생의 이름과 번호를 가져올 때
SELECT student_number, student_name -- 번호와 이름 선택
FROM student
WHERE student_number = 6; -- 조건
- MySQL에서는 ==라는 기호가 아니라 =를 사용한다.
연산자
= | 같음 |
!= | 같지 않음 |
<> | 같지 않음 |
< | 작음 |
> | 큼 |
<= | 작거나 같음 |
>= | 크거나 같음 |
student_name이 NULL인 경우를 가져올 때
SELECT
student_name, student_number
FROM
student
WHERE
student_name IS NULL; -- stduent_name이 NULL인 경우
- NULL인 경우 '='이 아닌 IS를 사용한다.
student_name이 NULL이 아닌 경우를 가져올 때
SELECT
student_name, student_number
FROM
student
WHERE
student_name IS NOT NULL; -- stduent_name이 NULL인 경우
- NULL 아닌 경우 '!='이 아닌 IS NOT을 사용한다.
<=>
NULL이 비교대상일 때 사용하는 연산자
- "<=>"가 아닌 "="을 사용하면 결과값이 NULL이 출력된다.
SELECT
0 = NULL, -- NULL
0 != NULL, -- NULL
0 <=> NULL, -- 0
NULL <=> NULL; -- 1
BOOLEAN 데이터 타입 비교
BOOLEAN형을 비교할 때 "="와 "!="뿐만 아니라 "IS"와 "IS NOT"도 사용할 수 있다.
SELECT
1 = TRUE, -- 1
1 = FALSE, -- 0
1 != FALSE, -- 1
10 = TRUE, -- 0
1 IS TRUE, -- 1
1 IS NOT TRUE, -- 0
1 IS FALSE, -- 0
10 IS TRUE; -- 1
"="와 "IS"의 차이점
"="을 사용하면 1외에 모두 FALSE라고 판단한다.
"IS"를 사용하면 0외에 모두 TRUE라고 판단한다.
문자열 조건
문자열 조건으로 "="을 사용할 수 있다.
하지만 "="을 할 때 문제가 있다.
"="을 사용하여 문자열을 비교할 때의 문제
- 대소문자 구별을 하지 않는다 => "S"와 "s"가 같다.
- 공백을 무시한다 => "S"와 "S "가 같다.
이를 해결하고 싶으면 BINARY 연산자를 사용하면 된다.
WHERE string="S"; -- 가 아닌
WHERE string= BINARY "S"; --라고 사용하면 된다.
LIKE와 LIKE NOT
- LIKE를 사용하면 공백은 무시하지 않는다
- LIKE는 대소문자를 구분하지 않는다
SET @S = 'S';
SELECT @S LIKE 'S', -- 1
@S LIKE 's', -- 1 : LIKE는 대소문자를 구분한다
@S LIKE 'S '; -- 0 : LIKE는 공백을 무시한다
- LIKE와 와일드 카드를 사용하여 문자열의 포함 여부를 알 수 있다
- % : 길이가 0이상의 임의의 문자
- _ : 길이가 1인 임이의 문자
SELECT
student_name, student_number
FROM
student
WHERE
student_name LIKE '김%'; -- 성이 김씨인 경우
- 와일드 카드는 중복하여 사용할 수 있다 => "%_", "___" ... 등이 가능하다
💡 와일드카드가 아닌 문자로 %나 _를 사용하고 싶다면 백슬래시(\)를 사용하면 된다.
EX) \%
\를 사용하는 경우
\% | 문자 % |
\_ | 문자 _ |
\" | 문자 " |
\' | 문자 ' |
\\ | 문자 \ |
\n | 줄 바꿈 |
\t | 탭 |
\b | 백스페이스 |
\r | 커서를 제일 앞으로 이동 |
논리연산자
AND | && |
OR | || |
NOT | ! |
XOR | XOR |
NULL이 피연산자로 포함된 논리연산 결과
SELECT 0 AND NULL, -- 0
1 AND NULL, -- NULL
NULL AND NULL, -- NULL
0 OR NULL, -- NULL
1 OR NULL, -- 1
NULL OR NULL, -- NULL
NOT 0, -- 1
NOT 1, -- 0
NOT 100, -- 0
NOT NULL, -- NULL
0 XOR 1, -- 1
0 XOR NULL, -- NULL
1 XOR NULL, -- NULL
NULL XOR NULL; -- NULL
BETWEEN
BETWEEN x AND y | x 이상 y 이하인 경우 1을 반환 |
NOT BETWEEN x AND y | x 이상 y 이하가 아닌 경우 1을 반환 |
SELECT
*
FROM
student
WHERE
student_number BETWEEN 10 AND 20;
이를 실행해 본다면 10번인 학생과 20번인 학생도 출력된다.
즉, student_number BETWEEN 10 AND 20와 10 <= student_number AND student_number <= 20은 동일하다.
IN
IN (x, y, z) | x, y, z 중 일치하는 것이 있다면 1을 반환 |
NOT IN (x, y, z) | x, y, z 모두 일치하지 않으면 1을 반환 |
- IN은 OR을 사용해서 여러개의 조건 나열해야 할 때 사용하면 유용하다.
- IN 안에 한 개의 조건이 들어가더라도 실행 가능하다.
SELECT
*
FROM
student
WHERE
student_number IN (1, 2, 3, 4, 5); -- 1번부터 5번까지의 student_number을 가진 행이 출력된다
연산자 우선순위
높다 | BINARY |
! | |
*, /, DIV, %, MOD | |
-, + | |
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, IN | |
BETWEEN, CASE, WHEN, THEN, ELSE | |
NOT | |
&&, AND | |
XOR | |
낮다 | ||, OR |
- DIV: 나눗셈 결과에서 몫에 해당하는 값
- MOD: 나눗셈 결과에서 나머지에 해당하는 값
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- git
- hashcode
- Kotlin
- Python
- postman tests
- postman collection
- java
- string
- 2차 인터뷰
- graphql
- go 특징
- 코딩테스트
- Kotlin In Action
- github
- 네이버 2022 공채
- Basic Type
- Squash and merge
- 1차 인터뷰
- DGS Framework
- pm.test
- 확장 함수
- postman
- python3
- squash merge
- 코틀린
- 주생성자
- pm.expect
- downTo
- solidity
- mysql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함