CodeGym /행동 /SQL SELF /논리 연산자 (AND, OR, NOT): 조건 결합하기

논리 연산자 (AND, OR, NOT): 조건 결합하기

SQL SELF
레벨 2 , 레슨 2
사용 가능

논리 연산자는 쿼리에서 조건들을 합쳐서 더 복잡하게 데이터를 필터링할 수 있게 해주는 도구야. 아마 프로그래밍 언어에서 이미 한 번쯤은 봤을 거야. 만약 쿼리를 이메일 스팸 필터 프로그램이랑 비교한다면, 논리 연산자는 메일이 "스팸" 폴더로 가거나 "받은 편지함"에 남는지 결정하는 규칙이라고 생각하면 돼.

SQL은 데이터를 뽑거나 분석할 때 자주 쓰는 도구야. 논리 연산자(AND, OR, NOT)를 쓰면 한 쿼리에서 여러 조건을 조합해서 더 복잡한 질문에 답할 수 있어. 예를 들면:

  • 어떤 학생들이 18살 이상 그리고 성적이 "A"야?
  • 어떤 상품들이 "전자제품" 또는 "가전제품" 카테고리에 속해?
  • 어떤 고객들이 구매를 한 번도 안 했어?

SQL에서 제일 중요한 논리 연산자 세 가지를 같이 보자:

  1. AND: 두 조건이 모두 참이어야 해.
  2. OR: 조건 중 하나만 참이어도 돼.
  3. 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 연산자: 조건 반전

ANDOR가 조건이 참인 걸 찾는 거라면, 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"인 학생을 뽑고 싶으면 ANDOR를 같이 쓸 수 있지.

조합 문법

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에서 논리 연산자는 아래 순서대로 실행된다는 걸 꼭 기억해:

  1. NOT
  2. AND
  3. OR

괄호를 써서 실행 순서를 바꿀 수 있어. 괄호 없이 쓰면 결과가 예상과 다를 수도 있어!

예제: 괄호 있을 때와 없을 때 비교

이 쿼리에서는 무슨 일이 일어날까?

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';

이 쿼리는 다음 학생들을 뽑아:

  1. 18살 이상 그리고 성적이 "A"인 학생.
  2. 성적이 "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"인 학생만 뽑혀. 괄호가 진짜 중요해!

논리 연산자 쓸 때 흔한 실수

  1. 괄호를 빼먹음. ANDOR를 같이 쓸 때 특히 결과가 이상해질 수 있어.
  2. NOT을 쓸 때 어떤 행이 빠지는지 확실히 이해하지 않고 씀.
  3. 논리 연산자를 잘못 씀. 예를 들어 AND 대신 OR를 쓰거나 반대로 쓰는 경우.
  4. 조건이 너무 복잡함. AND, OR, NOT가 여러 번 나오고 주석도 없으면 읽기 힘들어져.

이 연산자들은 복잡한 쿼리의 기본이야. 이제 너도 원하는 데이터를 딱 뽑아내는 쿼리를 쓸 수 있을 거야!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION