□ 연산자 ( 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 와의 공통 집합을 제외한 부분 |
'프로그래밍 언어 ( Programming Language ) > SQL' 카테고리의 다른 글
[SQL][MySQL] 복합문 ( Compound Statement Syntax ) - 흐름 제어문 ( CASE, IF, LOOP 등 ), 선언문 ( DECLARE ), BEGIN ... END (0) | 2022.01.05 |
---|---|
[SQL] 조인 ( Join ) (0) | 2022.01.05 |
[SQL][MySQL] 데이터 타입 ( Data Type ) (0) | 2022.01.05 |
[SQL] 제약 조건 ( Constraint ) (0) | 2022.01.04 |
[SQL][MySQL] DML ( Data Manipulation Language ) - SELECT (0) | 2022.01.04 |