SQL 연산자

✒️ 2025-06-05 18:45 내용 수정


참고 자료 : Geeksforgeeks SQL Operators

카테고리 연산자 설명
산술 연산자 +, -, *, /, % 숫자 계산 수행
비교 연산자 =, <>, !=, >, <, >=, <= 두 값 비교
논리 연산자 AND, OR, NOT 조건 결합 및 부정
비트 연산자 &, ^, ~, <<, >> 비트 논리 연산, 비트 시프트
복합 연산자 +=, -=, *=, /=, %=, &=, ^=, |= 연산 후 값 할당
문자열 연산자 LIKE, CONCATENATE 문자열 결합, 정규표현식 매칭
집합 연산자 UNION, UNION ALL, INTERSECT, EXCEPT 쿼리 결과 집합 연산 수행
특수 연산자 IN, BETWEEN, EXISTS 특정 조건이나 패턴 매칭 수행
중복 제거 연산자 DISTINCT 중복된 행 제거

산술 연산자

연산자 설명
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지 연산
SELECT 10 + 5 AS sum_result; -- 15
SELECT 10 - 5 AS diff_result; -- 5
SELECT 10 * 5 AS prod_result; -- 50
SELECT 10 / 5 AS div_result; -- 2
SELECT 10 % 3 AS mod_result; -- 1

비교 연산자

연산자 설명
= 같음
<> 또는 != 같지 않음
>
< 작음
>= 크거나 같음
<= 작거나 같음
SELECT * FROM employees WHERE salary = 5000;
SELECT * FROM employees WHERE salary <> 5000;
SELECT * FROM employees WHERE salary > 5000;
SELECT * FROM employees WHERE salary < 5000;
SELECT * FROM employees WHERE salary >= 5000;
SELECT * FROM employees WHERE salary <= 5000;

논리 연산자

연산자 설명
AND 두 조건식이 모두 참일 때 ( && 역할)
OR 둘 중 하나가 참일 때 ( || 역할)
NOT 조건의 결과를 반대로 변환
SELECT * FROM products WHERE price > 100 AND category = 'Electronics';
SELECT * FROM products WHERE price > 100 OR category = 'Electronics';
SELECT * FROM products WHERE NOT category = 'Electronics';

비트 연산자

연산자 설명
& 비트 AND 연산
| 비트 OR 연산
^ 비트 XOR 연산
~ 비트 NOT 연산
<< 비트 왼쪽 시프트
>> 비트 오른쪽 시프트
-- 비트 AND 연산
SELECT 6 & 3 AS result; -- 결과: 2
-- 6 : 0 1 1 0
-- 3 : 0 0 1 1
-- 6 & 3 : 0 0 1 0 => 2

-- 비트 OR 연산
SELECT 6 | 3 AS result; -- 결과: 7
-- 6 : 0 1 1 0
-- 3 : 0 0 1 1
-- 6 | 3 : 0 1 1 1 => 7

-- 비트 XOR 연산
SELECT 6 ^ 3 AS result; -- 결과: 5
-- 6 : 0 1 1 0
-- 3 : 0 0 1 1
-- 6 ^ 3 : 0 1 0 1 => 5

-- 비트 NOT 연산
SELECT ~6 AS result;    -- 결과: -7 (2의 보수 표현)
-- 6 : 0 1 1 0
-- ~6 : 1 0 0 1 => 7, 보수 표현으로 음수

-- 비트 시프트 연산
SELECT 1 << 2 AS result; -- 결과: 4
-- 1 : 0 0 0 1
-- 1 << 2 : 0 1 0 0 => 4

SELECT 4 >> 1 AS result; -- 결과: 2
-- 4 : 0 1 0 0
-- 4 >> 1 : 0 0 1 0 => 2

복합 연산자

연산자 설명
+= 덧셈 후 할당
-= 뺄셈 후 할당
*= 곱셈 후 할당
/= 나눗셈 후 할당
%= 나머지 연산 후 할당
&= 비트 AND 연산 후 할당
^= 비트 XOR 연산 후 할당
|= 비트 OR 연산 후 할당
UPDATE employees SET salary += 1000 WHERE department = 'Sales';
UPDATE employees SET salary -= 1000 WHERE department = 'Sales';
UPDATE employees SET salary *= 1000 WHERE department = 'Sales';
UPDATE employees SET salary /= 1000 WHERE department = 'Sales';
UPDATE employees SET salary %= 1000 WHERE department = 'Sales';

문자열 연산자

연산자 / 함수 설명
CONCAT()
CONCATENATE
문자열 연결 함수 (MySQL 등)
LIKE 유사 검색. 부분적으로 일치하는 속성 검색 시 사용
문자열을 왼쪽에서 오른쪽으로 차례대로 비교하며, 조건을 만족하는 문자가 등장하면 종료됨.

1. CONCATENATION

SELECT 칼럼명1||칼럼명2
FROM 테이블명;

-- 문자열 연결도 가능하다.
SELECT 칼럼명1||'문자열'||칼럼명2||'문자열'
FROM 테이블명;
-- EMPLOYEES 테이블 사용
SELECT FIRST_NAME||' '||LAST_NAME
FROM EMPLOYEES;

CONCAT.png

2. LIKE 연산자와 정규식 규칙

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '정규식';
정규식 예시 설명
% 0개 이상의 문자를 일치시키는 와일드 카드 기능
A% A로 시작하는 값 검색
%A A로 끝나는 값 검색
%A% A를 포함하는 값 검색
_ 하나의 문자를 일치시키는 와일드 카드 기능. 밑줄 1개 당 글자 1개
A_ A로 시작하는 2 글자 데이터
_A A로 끝나는 2 글자 데이터
혼합형 A_% A로 시작하는 2글자 이상의 데이터
\ 이스케이프 문자.소스 문자열을 검색할 때 사용
DBeaver나 DB 버전에 따라 사용하지 않아도 소스 문자열이 검색될 수도 있다.
SELECT *
FROM 테이블명
WHERE 
	컬럼명 LIKE '정규표현식1' OR
	컬럼명 LIKE '정규표현식2' OR
	컬럼명 LIKE '정규표현식3';
SELECT * 
FROM student
WHERE name LIKE '%a%';

sql_dql_regex.png


특수 연산자

연산자 설명
BETWEEN A AND B A와 B 사이의 값(A 이상 B 이하)
IN (A, B) OR 대신에 사용
EXIST 서브 쿼리 내의 행의 존재를 확인하는 연산자

1. BETWEEN A AND B

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 BETWEEN 비교값1 AND 비교값2; -- 비교값1 이상 비교값2 이하
SELECT username, register_date FROM users
WHERE register_date BETWEEN DATE '2025-01-01' AND CURRENT_DATE;

2. IN (A, B)

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN (비교값1, 비교값2); -- 비교값1 또는 비교값2
SELECT fruit_name FROM fruits
WHERE color IN ('RED', 'GREEN');

3. EXISTS

SELECT 컬럼이름 FROM 테이블이름
WHERE EXISTS
(SELECT 컬럼이름 FROM 테이블이름 WHERE 조건절);
-- 2024-01-01 이후로 가입한 사용자가 있는 서버
SELECT server_name FROM server_list
WHERE EXISTS
(SELECT 1 FROM users WHERE register_date >= DATE '2024-01-01');

집합 연산자

연산자 설명
UNION 두 쿼리 결과를 합치고 중복 제거
UNION ALL 두 쿼리 결과를 합치고 중복 포함
INTERSECT 두 쿼리 결과의 공통 부분 반환
EXCEPT 또는 MINUS 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외
SELECT 컬럼이름1, 컬럼이름2, ... FROM 테이블1
[UNION|UNION ALL|INTERSECT|EXCEPT/MINUS]
SELECT 컬럼이름1, 컬럼이름2, ... FROM 테이블2;
-- 중복 제거
SELECT name FROM students
UNION
SELECT name FROM teachers;

-- 중복 포함
SELECT name FROM students
UNION ALL
SELECT name FROM teachers;

-- 공통 부분
SELECT name FROM students
INTERSECT
SELECT name FROM teachers;

-- 차집합 (PostgreSQL, SQL Server)
SELECT name FROM students
EXCEPT
SELECT name FROM teachers;

-- 차집합 (Oracle)
SELECT name FROM students
MINUS
SELECT name FROM teachers;

중복 제거 연산

1. DISTINCT

SELECT DISTINCT 컬럼명 
FROM 테이블명;