새소식

SQL

SQL | MySQL | SELECT(2) - 연산자(산술, 비교, 논리)

  • -

 

 

 

MySQL은 대부분의 프로그래밍 언어에서 지원하는 기본적인 연산자를 모두 제공.

이러한 연산자를 사용하여 데이터를 추출하고 처리할 수 있다. 

 

 


 

01. 산술 연산자(사칙연산)

 

 

·  +  ,   -   ,   *  ,   /  : 더하기, 빼기, 곱하기, 나누기 

· DIV : 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림.

· % OR MOD : 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 , 그 나머지를 반환.

SELECT 
      10 + 3, 
      10 - 7,
      10 * 3,
      10 / 3,
      10 DIV 3,
      10 % 3,
      10 MOD 3
;

 

 

 

※ 문자열에 사칙연산을 가하면 0으로 인식

SELECT 
      10 + "ABC", 
      10 - "ABC", 
      10 * "ABC"
;

 

 

 

※ 숫자로 구성된 문자열은 숫자로 자동인식

SELECT '1' + '002' * 3;

 

 

 

· 열 계산도 가능 

SELECT fixed_acidity, volatile_acidity,
       fixed_acidity + volatile_acidity, 
       fixed_acidity - volatile_acidity, 
       fixed_acidity * 10
FROM wine;

 

 

 


 

02.  비교 연산자

 

▶ 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, 참(True)이면  1을 반환, 거짓(False)이면 0을 반환.

SELECT TRUE, FALSE;

 

 

SELECT !TRUE, NOT 1, !FALSE, NOT FALSE;

 


 

 

연산자  설명
= 양쪽 값이 같음
!= , <> 양쪽 값이 다름
> , < (왼쪽, 오른쪽) 값이 더 큼
>=, <= (왼쪽, 오른쪽) 값이 같거나 더 큼

 

SELECT 3 = 3,
       3 !=4,
       3 < 4,
       3 <=4
 ;

 

 


 

연산자 설명
IS  왼쪽과 오른쪽 피연산자가 같으면 참을 반환
(오른쪽 피연산자가 불리언(TRUE, FALSE)이어야 함)
IS NOT 왼쪽과 오른쪽 피연산자가 같지 않으면 참을 반환
(오른쪽 피연산자가 불리언(TRUE, FALSE)이어야 함)

 

SELECT TRUE IS TRUE;

 

 

SELECT TRUE IS NOT FALSE;

 

 

-- (TRUE IS FALSE) FALSE 반환
-- FALSE IS NOT TRUE  TRUE 1반환
SELECT (TRUE IS FALSE) IS NOT TRUE;

 

 


 

연산자  설명
IS NULL 값이 NULL이면 참을 반환
IS NOT NULL 값이 NULL이 아니면 참을 반환

 

SELECT 
   NULL IS NULL,
   NULL IS NOT NULL,
   0 IS NULL,
   0 IS NOT NULL ;

 

※ 0은 NULL이 아님 

 

 

· WHERE에 IS NULL / IS NOT NULL 사용

CREATE TABLE test
( id TINYINT PRIMARY KEY,
  name text DEFAULT NULL,
  age TINYINT ,
  salary int DEFAULT NULL);
  
 INSERT INTO test 
 (id, name, age, salary)
 VALUES
      (1, 'A', 15, 100),
      (2, NULL, 17, 500),
      (3, NULL, 20, 600),
      (4, 'D', 21, NULL),
      (5, 'E', 30, NULL),
      (6, 'F', 40, NULL);

 

 

- name 열의 NULL 갯수 COUNT

SELECT count(*) FROM test
WHERE name IS NULL;

 

 

- name 열의 NULL 아닌 갯수 COUNT

SELECT count(*) FROM test
WHERE name IS NOT NULL;

 

 


 

연산자  설명
BETWEEN min AND max 값이 min값 이상 max이하에 있음.
NOT BETWEEN min AND max 값이 min과 max값 사이가 아닌 곳에 있음

 

SELECT 5 BETWEEN 2 AND 6,
       5 BETWEEN 2 AND 5,
       5 NOT BETWEEN 6 AND 10,
       'a' BETWEEN 'a' AND 'c',
       'a' NOT BETWEEN 'b' AND 'e'
;

 


 

연산자  설명
IN() 값이 () 리스트에 존재하면 참 반환
NOT IN() 값이 () 리스트에 존재하자 않으면 참 반환

 

SELECT  1 IN (1,4,6,7),
        1 NOT IN ( 2,3,4,5),
        'a' IN ('a', 'b', 'c'),
        'e' NOT IN ('a', 'b', 'c');

 

 


 

03. 논리 연산자 

 

  논리 연산자는 논리식을 판단하여, 참(True)이면 1을 반환하고 거짓(False)이면 0을 반환 

 

연산자  설명
AND ,  && 논리식이 모두 참이면 참을 반환
OR ,  ||  논리식 중에서 하나라도 참이면 참을 반환

 

 

SELECT TRUE AND FALSE, TRUE OR FALSE;

 

 

SELECT 2 + 1 = 6 OR 2 * 3 = 6;

 

 

· store 테이블에서 상권업종소분류코드가 'Q04A01' 이면서 행정동명이 '탄방동'인 

  상권업종소분류코드, 상권업종소분류명, 행정동명 열 선택(AND 연산자 사용)

SELECT  상권업종소분류코드, 상권업종소분류명,  행정동명  FROM store
WHERE  상권업종소분류코드 = 'Q04A01' AND 행정동명 = '탄방동';

 

 

 

· store 테이블에서 상권업종소분류코드가 'Q04A01' 이면서 행정동명이 '탄방동'이 거나 '괴정동'인 

  상권업종소분류코드, 상권업종소분류명, 행정동명 열 선택(AND와 OR 연산자 사용)

SELECT  상권업종소분류코드, 상권업종소분류명,  행정동명  FROM store
WHERE  상권업종소분류코드 = 'Q04A01' AND  (행정동명 = '탄방동' OR 행정동명 = '괴정동');

 

 


 

04.  연산자 우선순위 

 

우선순위  연산자 
1 INTERVAL
2 BINARY, COLLATE
3 !
4 - (단항 연산자), ~ (비트 연산자) 
5 ^
6 * , / , DIV , % , MOD
7 - (이항 연산자), + 
8 <<, >>
9 &
10 |
11  = (관계연산자), <=>,  >=, > ,<=, < , <> , !=, IS, LIKE, REGEXP, IN
12 BETWEEN, CASE, WHEN, THEN, ELSE
13 NOT
14 AND, &&
15 XOR
16 OR, ||
17 =(대입연산자), :=

 

 

 

 


출처 및 참고 문헌(reference)

더보기

 

 

Contents