[SQL] 연산자 ( Operator ) ( + 다중 행 연산자, 집합 연산자 )

728x90

 

□  연산자  ( Operator )

  • 산술 연산자  ( Arithmetic Operator )
    • +
    • -
    • *
    • /
    • DIV
    • %,  MOD
  • 대입 연산자  ( Assignment Operator )
    • =
    • :=
  • 비교 연산자  ( Comparison Operator )
    • =
    • !=,  <>
    • <
    • <=
    • >
    • >=
    • <=>
    • IS
    • IS NOT
    • IS NULL
    • IS NOT NULL
    • BETWEEN min AND max
    • NOT BETWEEN min AND max
    • IN( )
    • NOT IN( )
    • LIKE
    • NOT LIKE
  • 논리 연산자  ( Logical Operator )
    • AND,  &&
    • OR,  ||
    • XOR
    • NOT,  !
  • 비트 연산자  ( Bitwise Operator )
    • &
    • |
    • ^
    • ~
    • <<
    • >>
  • 형 변환 연산자  ( Cast Operator )
    • BINARY

 

연산자  ( + WHEHE 절에서의 형식 예 ) 연산 방향 설명
산술 연산자
column_name  +  value 더하기
column_name  -  value 빼기
column_name  *  value 곱하기
column_name  /  value 나누기
column_name  DIV  value 나누기  ( 소수 부분 버림 )
column_name  %,  MOD  value 나누기 후 나머지 반환
대입 연산자
column_name  =  value 대입  ( SET 문에서만 )
column_name  :=  value 대입
비교 연산자    
column_name  =  value 같은가?  ( 참이면 True, 거짓이면 False 반환 )
column_name  !=,  <>  value 같지 않은가?
column_name  <  value 작은가?
column_name  <=  value 작거나 같은가?
column_name  >  value 큰가?
column_name  >=  value 크거나 같은가?
column_name  <=>  value 양쪽 다 NULL인가?
column_name  IS  boolean_value 같은가?
( 오른쪽 피연산자가 boolean 값일 때 )
( TRUE/FALSE/UNKNOWN )
column_name  IS NOT  boolean_value 같지 않은가?
( 오른쪽 피연산자가 boolean 값일 때 )
( TRUE/FALSE/UNKNOWN )
column_name  IS NULL NULL인가?
column_name  IS NOT NULL NULL이 아닌가?
column_name  BETWEEN min_value AND max_value min 값보다 크거나 같고, max 값보다 작거나 같은가?
column_name  NOT BETWEEN min_value AND max_value min 값보다 작거나, max 값보다 큰가?
column_name  IN( value1, value2, ... ) IN() 안의 리스트에 존재하는가?
column_name  NOT IN( value1, value2, ... ) 〃 존재하지 않은가?
column_name  LIKE  pattern 입력받은 패턴에 부합하는가?
*  퍼센트 기호 (%)  :  0, 1 또는 여러 문자를 나타냄
*  밑줄 기호 (_)  :  하나의 단일 문자를 나타냄
column_name  NOT LIKE  pattern 입력받은 패턴에 부합하지 않는가?
논리 연산자    
logical_expr  AND,  &&  logical_expr 논리식이 모두 참이면 참 반환
logical_expr  OR,  ||  logical_expr 논리식이 하나라도 참이면 참 반환
logical_expr  XOR  logical_expr 논리식이 서로 다르면 참 반환
logical_expr  NOT,  !  logical_expr 논리식 결과가 참이면 거짓, 거짓이면 참 반환
비트 연산자    
value1  value2 AND  ☞  대응되는 비트가 모두 1이면 1 반환
value1  value2 OR  ☞  대응되는 비트 중 하나라도 1이면 1 반환
value1  ^  value2 XOR  ☞  대응되는 비트가 서로 다르면 1 반환
value1  ~  value2 NOT  ☞  비트가 1이면 0, 0이면 1 반환
value1  <<  value2 Left Shift  ☞  지정한 수 만큼 비트를 전부 왼쪽으로 이동
value1  >>  value2 Right Shift  ☞  지정한 수 만큼 비트를 전부 오른쪽으로 이동
형 변환 연산자    
BINARY  string_value   문자열을 이진 문자열로 변환
( 문자 단위가 아닌 숫자 바이트 값을 사용하여 문자열 비교를 바이트 단위로 수행 )

 

https://www.w3schools.com/sql/sql_operators.asp

http://tcpschool.com/mysql/mysql_operator_arithmetic

 

 

□  연산자 우선순위

우선순위 연산자
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 = (대입 연산자),  :=

 

https://dev.mysql.com/doc/refman/8.0/en/non-typed-operators.html

 

 

□  다중 행 연산자  ( Multiple Row Operator )

  -  서브 쿼리의 결과가 2건 이상 나오는 모든 경우 반드시 다중 행 비교 연산자와 함께 사용해야 함
  -  다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 사용할 수 있음
   ( 단일 행 서브쿼리 비교 연산자는 다중 행 서브쿼리의 비교 연산자로 사용할 수 없음 )

  • EXISTS
  • NOT EXISTS
  • ALL
  • ANY, SOME
  • IN

 

연산자  ( + WHEHE 절에서의 형식 예 ) 설명
WHERE  EXISTS  ( SELECT statements ) 하위 쿼리( WHEHE 안의 SELECT 문 )에서 반환한 행이 존재하는가?
WHERE  NOT EXISTS  ( SELECT statements ) 하위 쿼리( WHEHE 안의 SELECT 문 )에서 반환한 행이 존재하지 않는가?
WHERE  column_name  comparison_operator  ALL  ( subquery ) 하위 쿼리의 모든 행이 비교 조건을 만족하는가?
WHERE  column_name  comparison_operator  ANY | SOME  ( subquery ) 하위 쿼리의 행 중 하나라도 비교 조건을 만족하는가?
WHERE  IN  ( subquery ) 서브 쿼리의 결과에 존재하는 임의의 값과 동일한가?

 

https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html

https://dev.mysql.com/doc/refman/8.0/en/any-in-some-subqueries.html

https://dev.mysql.com/doc/refman/8.0/en/all-subqueries.html

 

 

□  집합 연산자  ( Set Operator )

  -  조인을 사용하지 않고 연관된 데이터를 조회할 수 있음
  -  조인은 데이터 집합을 수직으로 연결 하고, 집합 연산자는 데이터 집합을 수평으로 연결
  -  집합 연산자는 주로 서브 타입이나 수평 분할된 테이블을 연결하는 용도로 사용
  -  집합 연산자는 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식
    ( 2개 이상의 질의 결과를 하나의 결과로 만들어 줌 )
  -  SELECT 절의 칼럼 수가 동일 하고, 동일 위치에 존재하는 칼럼의 데이터 타입이
     상호 호환( 반드시 같은 데이터 타입일 필요는 없음 ) 가능해야 함

  • UNION
  • UNION ALL
  • INTERSECT  ( Oracle DB )
  • MINUS  ( Oracle DB /  EXCEPT  ( MS SQL Server )

 

연산자 설명
SELECT ...  UNION  SELECT ... [합집합]   공통 집합의 중복을 없애기 위해 정렬 작업 발생
SELECT ...  UNION ALL  SELECT ... [합집합]   정렬 하지 않고 공통 집합을 중복해서 그대로 보여줌
SELECT ...  INTERSECT  SELECT ... [교집합]   두 집합의 공통 집합 추출
SELECT ...  MINUS ( EXCEPT )  SELECT ... [차집합]   집합 A 에서 집합 B 와의 공통 집합을 제외한 부분

 

 

반응형