티스토리 뷰

DB/SQL

[MySQL] WHERE 문

SdardewValley 2021. 8. 27. 14:20
반응형

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
링크
«   2024/11   »
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
글 보관함