1. 산술 연산자
산술 연산자는 숫자 데이터에 대한 기본적인 수학 연산을 수행합니다.
| 연산자 | 설명 | 예시 |
| + | 덧셈 | SELECT price + tax FROM products; |
| - | 뺄셈 | SELECT salary - tax FROM employees; |
| * | 곱셈 | SELECT quantity * price FROM orders; |
| / | 나눗셈 | SELECT total_amout / item_count FROM sales; |
| % | 나머지(모듈로) | SELECT employee_id % 2 FROM employees; |
산술 연산자는 숫자 데이터를 계산할 때 매우 유용합니다. 예를 들어, 상품의 총 가격을 계산하거나 평균값을 구할 때 사용할 수 있습니다.
-- 직원의 연봉에서 세금을 제외한 실수령액 계산
SELECT employee_name, annual_salary, annual_tax,
annual_salary - annual_tax AS net_salary
FROM employees;
-- 상품의 총 가격 계산 (단가 × 수량)
SELECT product_name, unit_price, quantity,
unit_price * quantity AS total_price
FROM order_details;
2. 논리 부정 연산자 (NOT)
논리 부정 연산자는 조건의 결과를 반대로 바꿉니다.
| 연산자 | 설명 | 예시 |
| NOT | 조건의 결과를 반대로 변환 | SELECT * FROM products WHERE NOT discontinued = 1; |
NOT 연산자는 주로 WHERE 절에서 조건을 부정할 때 사용됩니다.
-- 재고가 없지 않은 상품 조회 (즉, 재고가 있는 상품)
SELECT product_name, stock
FROM products
WHERE NOT stock = 0;
-- 특정 카테고리에 속하지 않는 상품 조회
SELECT product_name, category
FROM products
WHERE NOT category = 'Electronics';
3. IN 연산자
IN 연산자는 값이 지정된 목록 내에 있는지 확인합니다.
| 연산자 | 설명 | 예시 |
| IN | 값이 목록에 포함되어 있는지 확인 | SELECT * FROM products WHERE category_id IN (1, 2, 5); |
| NOT IN | 값이 목록에 포함되어 있지 않은지 확인 | SELECT * FROM customers WHERE country NOT IN ('USA', 'Canada'); |
IN 연산자는 여러 값을 OR 조건으로 연결하는 것보다 더 간결하고 효율적인 방법을 제공합니다.
-- 특정 부서에 속한 직원 조회
SELECT employee_name, department
FROM employees
WHERE department IN ('Marketing', 'Sales', 'IT');
-- 특정 국가에 속하지 않는 고객 조회
SELECT customer_name, country
FROM customers
WHERE country NOT IN ('USA', 'UK', 'Germany');
4. BETWEEN A AND B 연산자
BETWEEN 연산자는 값이 특정 범위 내에 있는지 확인합니다.
| 연산자 | 설명 | 예시 |
| BETWEEN | 값이 지정된 범위 내에 있는지 확인 (범위 포함) | SELECT * FROM products WHERE price BETWEEN 10 AND 20; |
| NOT BETWEEN | 값이 지정된 범위 밖에 있는지 확인 | SELECT * FROM orders WHERE order_date NOT BETWEEN '2023-01-01' AND '2023-12-31'; |
BETWEEN 연산자는 범위 검색을 간단하게 만들어주며, 숫자뿐만 아니라 날짜와 문자열에도 사용할 수 있습니다.
-- 특정 가격 범위의 상품 조회
SELECT product_name, price
FROM products
WHERE price BETWEEN 100 AND 500;
-- 특정 기간 동안의 주문 조회
SELECT order_id, order_date
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-03-31';
5. IS NULL 연산자
IS NULL 연산자는 값이 NULL인지 확인합니다.
| 연산자 | 설명 | 예시 |
| IS NULL | 값이 NULL인지 확인 | SELECT * FROM customers WHERE phone IS NULL; |
| IS NOT NULL | 값이 NULL이 아닌지 확인 | SELECT * FROM employees WHERE manager_id IS NOT NULL; |
NULL은 '값이 없음'을 의미하며, 일반 비교 연산자(=, !=)로는 NULL을 비교할 수 없습니다. 반드시 IS NULL 또는 IS NOT NULL을 사용해야 합니다.
-- 전화번호가 등록되지 않은 고객 조회
SELECT customer_name, phone
FROM customers
WHERE phone IS NULL;
-- 관리자가 있는 직원 조회
SELECT employee_name, manager_id
FROM employees
WHERE manager_id IS NOT NULL;
6. 집합 연산자
집합 연산자는 두 개 이상의 SELECT 문 결과를 결합합니다.
| 연산자 | 설명 | 예시 |
| UNION | 두 쿼리 결과를 결합하고 중복을 제거 | SELECT city FROM customers UNION SELECT city FROM suppliers; |
| UNION ALL | 두 쿼리 결과를 결합하고 중복을 유지 | SELECT city FROM customers UNION ALL SELECT city FROM suppliers; |
| INTERSECT | 두 쿼리 결과의 교집합 반환 | SELECT city FROM customers INTERSECT SELECT city FORM suppliers; |
| EXCEPT/MINUS | 첫 번쨰 쿼리에서 두 번째 쿼리 결과를 제외한 결과 반환 | SELECT city FROM customers EXCEPT SELECT city FROM suppliers; |
집합 연산자는 여러 테이블에서 데이터를 결합하거나 비교할 때 유용합니다.
-- 고객과 공급업체가 있는 모든 도시 목록 (중복 제거)
SELECT city FROM customers
UNION
SELECT city FROM suppliers;
-- 고객과 공급업체가 모두 있는 도시 목록
SELECT city FROM customers
INTERSECT
SELECT city FROM suppliers;
-- 고객은 있지만 공급업체는 없는 도시 목록
SELECT city FROM customers
EXCEPT
SELECT city FROM suppliers;
7. 연산자 우선순위
SQL에서 연산자는 다음과 같은 우선순위를 가집니다 (높은 것부터 낮은 순서로):
- 괄호 ( )
- 산술 연산자: *, /, % (곱셈, 나눗셈, 모듈로)
- 산술 연산자: +, - (덧셈, 뺄셈)
- 비교 연산자: =, <>, !=, <, >, <=, >=, LIKE, IN, BETWEEN, IS NULL
- 논리 연산자: NOT
- 논리 연산자: AND
- 논리 연산자: OR
우선순위를 명확히 하고 가독성을 높이기 위해 괄호를 사용하는 것이 좋습니다.
-- 우선순위 예시
SELECT product_name, unit_price, units_in_stock
FROM products
WHERE (category_id = 1 OR category_id = 2)
AND units_in_stock > 0
AND unit_price * 0.9 <= 100;'BOOK' 카테고리의 다른 글
| [Do it SQL] Chapter 06-3/ 06-4 (0) | 2025.03.31 |
|---|---|
| [Do it SQL] Chapter 06-1/ 06-2 (1) | 2025.03.29 |
| [Do it SQL] Chapter 05-1/ 05-2 (2) | 2025.03.24 |
| [Do it SQL] Chapter 04-5 / 04-6 (1) | 2025.03.21 |
| [Do it SQL] Chapter 04-3 / 04-4 (0) | 2025.03.20 |