2021-11-30 20:42 작성

My SQL basic 메모

Table of contents

AND 연산자

MySQL은 내장된 Boolean type이 존재하지 않으므로 숫자 0을 FALSE로 그 외의 값을 TRUE로 사용한다. AND 연산자는 2 개 이상의 Boolean 표현을 통합해 1, 0 혹은 NULL을 반환하는 논리 연산자이다.

  • A AND B에서 AB 모두 0NULL이 아닐 경우 1을 반환한다.
  • 만약 둘 중 하나가 0일 경우 0을 반환한다.
  • 그 이외에는 NULL을 반환한다.
  • 실사용에 있어서 AND 연산자는 SELECT, UPDATE, DELETE 구문의 WHERE 절에 조건을 다는 방식으로 사용된다.
  TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL
SELECT 1 AND 0, 0 AND 1, 0 AND 0, 0 AND NULL;

output:

1 AND 0 0 AND 1 0 AND 0 0 AND NULL
0 0 0 0
SELECT 1 = 0 AND 1 / 0 ;

output:

1 = 0 AND 1 / 0
0

위에서 MySQL은 1 = 0부분만 검사하는데 그 이유는 이 부분만 검사해도 전체 값이 0이 될 것이라는 것을 알 수 있기 때문이다. (1/0에서 zero error가 발생함에도 불구하고: 1/0만 실행할 경우 wanring 에러가 뜨며 NULL을 반환함)

OR 연산자

  TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;

output:

1 OR NULL 0 OR NULL NULL or NULL
1 NULL NULL

연산자 우선

ANDOR 연산자가 모두 포함되어 있는 표현구(expression)의 경우, ANDOR보다 우선한다. 따라서 MySQL은 AND 연산자를 먼저 평가한 후에 OR 연산자를 평가한다.

SELECT 1 OR 0 AND 0;

output:

1 OR 0 AND 0
1

OR 연산자를 먼저 평가하고자 하는 경우 괄호()를 포함한다.

SELECT (1 OR 0) AND 0;

output:

(1 OR 0) AND 0
0
SELECT   
	customername, 
	country, 
	creditLimit
FROM   
	customers
WHERE(country = 'USA'
		OR country = 'France')
	  AND creditlimit > 100000;

output: country가 France혹은 USA면서 creditlimit의 조건을 충족하는 데이터

customername country creditLimit
La Rochelle Gifts France 118200.00
Mini Gifts Distributors Ltd. USA 210500.00
Land of Toys Inc. USA 114900.00
Saveley & Henriot, Co. France 123900.00
Muscle Machine Inc USA 138500.00
Diecast Classics Inc. USA 100600.00
Collectable Mini Designs Co. USA 105000.00
Marta’s Replicas Co. USA 123700.00
Mini Classics USA 102700.00
Corporate Gift Ideas Co. USA 105000.00
Online Diecast Creations Co. USA 114200.00
SELECT    
    customername, 
    country, 
    creditLimit
FROM    
    customers
WHERE 
    country = 'USA'
    OR country = 'France'
    AND creditlimit > 100000;

output: country가 USA거나 creditLimit이 100,000 이상이면서 country가 France인 데이터

customername country creditLimit
Signal Gift Stores USA 71800.00
La Rochelle Gifts France 118200.00
Mini Gifts Distributors Ltd. USA 210500.00
Mini Wheels Co. USA 64600.00
Land of Toys Inc. USA 114900.00
Saveley & Henriot, Co. France 123900.00
Muscle Machine Inc USA 138500.00
Diecast Classics Inc. USA 100600.00
Technics Stores Inc. USA 84600.00
American Souvenirs Inc USA 0.00