논리 연산자는 쿼리에서 조건들을 합쳐서 더 복잡하게 데이터를 필터링할 수 있게 해주는 도구야. 아마 프로그래밍 언어에서 이미 한 번쯤은 봤을 거야. 만약 쿼리를 이메일 스팸 필터 프로그램이랑 비교한다면, 논리 연산자는 메일이 "스팸" 폴더로 가거나 "받은 편지함"에 남는지 결정하는 규칙이라고 생각하면 돼.
SQL은 데이터를 뽑거나 분석할 때 자주 쓰는 도구야. 논리 연산자(AND, OR, NOT)를 쓰면 한 쿼리에서 여러 조건을 조합해서 더 복잡한 질문에 답할 수 있어. 예를 들면:
- 어떤 학생들이 18살 이상 그리고 성적이 "A"야?
- 어떤 상품들이 "전자제품" 또는 "가전제품" 카테고리에 속해?
- 어떤 고객들이 구매를 한 번도 안 했어?
SQL에서 제일 중요한 논리 연산자 세 가지를 같이 보자:
AND: 두 조건이 모두 참이어야 해.OR: 조건 중 하나만 참이어도 돼.NOT: 조건을 반대로(부정) 만들어.
AND 연산자: 두 조건이 모두 참일 때
AND 연산자는 조건의 두 부분이 모두 맞아야 결과에 포함돼.
문법
SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE 조건 AND 조건2;
예제 1: 18살 이상 그리고 성적이 "A"인 학생 필터링
예를 들어, students 테이블이 있다고 해보자:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
쿼리:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
결과:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
예제 2: "HR" 부서 그리고 연봉이 50000 이상인 직원 필터링
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
OR 연산자: 조건 중 하나만 참이어도
OR 연산자는 조건 중 하나라도 맞는 행을 뽑고 싶을 때 써.
문법
SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE 조건 OR 조건2;
예제 1: 성적이 "A" 또는 "B"인 학생 필터링
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
결과:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
예제 2: "전자제품" 카테고리 또는 가격이 100 미만인 상품
products 테이블:
| product_id | name | category | price |
|---|---|---|---|
| 1 | 텔레비전 | 전자제품 | 300 |
| 2 | 다리미 | 가전제품 | 50 |
| 3 | 스마트폰 | 전자제품 | 700 |
| 4 | 주전자 | 가전제품 | 80 |
SELECT name, category, price
FROM products
WHERE category = '전자제품' OR price < 100;
결과:
| name | category | price |
|---|---|---|
| 텔레비전 | 전자제품 | 300 |
| 다리미 | 가전제품 | 50 |
| 주전자 | 가전제품 | 80 |
| 스마트폰 | 전자제품 | 700 |
NOT 연산자: 조건 반전
AND랑 OR가 조건이 참인 걸 찾는 거라면, NOT은 반대로 조건이 거짓인 행을 골라줘.
문법
SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE NOT 조건;
예제 1: 성적이 "A"가 아닌 학생 필터링
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
결과:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
예제 2: "전자제품" 아닌 카테고리 상품 뽑기
SELECT name, category, price
FROM products
WHERE NOT category = '전자제품';
논리 연산자 조합하기
논리 연산자는 조합해서 더 복잡한 조건을 만들 수 있어. 예를 들어, 18살 이상 그리고 성적이 "A" 또는 "B"인 학생을 뽑고 싶으면 AND랑 OR를 같이 쓸 수 있지.
조합 문법
SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE (조건1 AND 조건2) OR 조건3;
예제: 18살 이상이면서 성적이 "A" 또는 성적이 "B"인 학생
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
결과:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
연산자 실행 우선순위
SQL에서 논리 연산자는 아래 순서대로 실행된다는 걸 꼭 기억해:
NOTANDOR
괄호를 써서 실행 순서를 바꿀 수 있어. 괄호 없이 쓰면 결과가 예상과 다를 수도 있어!
예제: 괄호 있을 때와 없을 때 비교
이 쿼리에서는 무슨 일이 일어날까?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
이 쿼리는 다음 학생들을 뽑아:
- 18살 이상 그리고 성적이 "A"인 학생.
- 성적이 "B"인 학생.
연산자 우선순위 때문에 괄호를 쓴 것과 같은 결과가 나와:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
하지만, 만약 괄호를 이렇게 바꾸면:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
이제는 18살 이상이면서 성적이 "A" 또는 "B"인 학생만 뽑혀. 괄호가 진짜 중요해!
논리 연산자 쓸 때 흔한 실수
- 괄호를 빼먹음.
AND랑OR를 같이 쓸 때 특히 결과가 이상해질 수 있어. NOT을 쓸 때 어떤 행이 빠지는지 확실히 이해하지 않고 씀.- 논리 연산자를 잘못 씀. 예를 들어
AND대신OR를 쓰거나 반대로 쓰는 경우. - 조건이 너무 복잡함.
AND,OR,NOT가 여러 번 나오고 주석도 없으면 읽기 힘들어져.
이 연산자들은 복잡한 쿼리의 기본이야. 이제 너도 원하는 데이터를 딱 뽑아내는 쿼리를 쓸 수 있을 거야!
GO TO FULL VERSION