231028 TIL #228 SQL #3 WHERE문 - 2

김춘복·2023년 10월 27일
0

TIL : Today I Learned

목록 보기
228/571
post-thumbnail

Today I Learned

오늘은 sql 책 3챕터를 이어서 진행했다.


WHERE문 - 2

논리 연산자

여러 조건을 조합할 수 있는 연산자.
1(TRUE)이나 0(FALSE)의 논리값끼리 연산해 결과를 똑같이 1이나 0으로 반환하는 연산자.

명칭연산자사용법의미
논리곱AND &&a AND b (a && b)a,b 모두 1인경우에만 1을 반환
논리합OR
부정NOT !NOT a (!a)a가 1이면 0, 0이면 1을 반환
배타적 논리합XORa XOR ba,b 양쪽이 다르면 1
  • AND &&
SELECT * FROM product
WHERE price >= 100 AND price < 150 AND stock >= 10;

  • OR ||
SELECT * FROM product
WHERE price < 100 OR price >= 150 OR stock >= 20;

  • NOT !
SELECT * FROM customer
WHERE NOT(membertype_id = 1);

  • XOR
SELECT * FROM product
WHERE price >= 100 XOR price < 150;

둘 중 하나만 만족하는 조건을 보여준다. 둘다 맞거나 둘다 틀리면 해당하지 않는다.

SELECT * FROM product
WHERE price >= 100 XOR price < 150 XOR stock >= 100;

다중으로 쓰게되면 앞의 식을 먼저 판별한 뒤 뒤의 식을 판별한다.


BETWEEN & IN

연산자사용법의미
BETWEEN ANDBETWEEN a AND Ba 이상 b 이하의 경우 1을 반환
NOT BETWEEN ANDNOT BETWEEN a AND ba 이상 b 이하가 아닌 경우 1을 반환
ININ (a,b,c)a,b,c 중 하나라도 일치하면 1을 반환
NOT INNOT IN (a,b,c)a,b,c 중 어느것도 일치하지 않으면 1을 반환
  • price BETWEEN 100 AND 150은 price >= 100 AND price <= 150과 같다.

  • price NOT BETWEEN 100 AND 150은 price < 100 OR price > 150과 같다.

  • 날짜에서도 사용이 가능하다.
    ex)

SELECT * FROM customer
WHERE birthday BETWEEN '1990-01-01' AND '1999-12-31';

  • IN은 중복해서 OR을 길게 쓰는 것을 간단하게 해결해준다. 하지만 IN 안의 비교군이 많으면 속도가 느려지니 유의해야 한다.
    ex)
SELECT * FROM product
WHERE product_id IN (1,3,4);

  • IN 안에는 문자열도 지정이 가능하다. ''처럼 길이가 0인 문자열도 가능하다. 단, NULL은 지정할 수 없다.

산술 연산자

연산자사용법의미
+a + ba에 b를 더한다
-a - ba에서 b를 뺀다
*a * ba에 b를 곱한다
/a / ba를 b로 나눈다
%a % ba를 b로 나눈 나머지
MODa MOD ba를 b로 나눈 나머지
DIVa DIV ba를 b로 나눌 때 정수부
  • 나누는 수에 0을 쓰거나 대상이 NULL이면 결과는 전부 NULL이 된다.

  • ex1) WHERE구에 사용할 때

SELECT * FROM product
WHERE stock * price >= 5000;

  • ex2) SELECT구에 사용할 때
SELECT product_name AS 제품명,
 stock * price AS 총재고가격
FROM product;

  • 비교 연산자의 우선순위
    ()괄호가 최우선이며 같은 순위는 앞에서부터 차례대로 시행된다.
우선순위(높은순)
BINARY
!
*,/,DIV,MOD,%
-,+
비교(-,>=,<=,<,>,<>,<=>,!=,IS,LIKE,IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&,AND
XOR
  • ex)
SELECT * FROM product
WHERE price < 130 OR price > 150 AND stock >= 20;

업로드중..

이 조건에선 AND가 OR보다 우선되어 연산된다. OR을 먼저하려면 괄호를 사용하면 된다.

profile
Backend Dev / Data Engineer

0개의 댓글