데이터베이스에서 데이터 필터링(Data Filtering)은 원하는 조건에 맞는 데이터를 추출하는 작업입니다.
주로 WHERE
절을 사용하여 필요한 데이터만 조회하거나, 수정, 삭제할 때 특정 조건을 지정할 수 있습니다.
데이터 필터링이란 원하는 데이터만 걸러내는 작업으로 주로 WHERE
절을 통해 수행합니다.
WHERE
절은 SELECT
문, UPDATE
문, DELETE
문 등에서 특정 조건에 맞는 튜플을 필터링할 때 사용합니다.
필터링을 통해 효율적으로 데이터를 조회하거나 특정 조건에 맞는 데이터를 선택적으로 조작할 수 있습니다.
SELECT
→ 특정 데이터를 조회할 때 사용UPDATE
→ 특정 조건에 맞는 데이터를 수정할 때 사용DELETE
→ 특정 조건을 만족하는 데이터를 삭제할 때 사용비교 연산자는 특정 값을 비교하여 WHERE
절에서 필터링 조건을 정의할 때 사용됩니다.
비교 연산자를 사용하면 두 값의 크기를 비교하는 조건을 주고, 이를 만족하는 튜플을 필터링할 수 있습니다.
연산자 | 설명 | 예제 | 의미 |
---|---|---|---|
= | 같다 | WHERE price = 1000; | price가 1000과 같은 튜플 필터링 |
!= 또는 <> | 같지 않다 | WHERE price != 1000; | price가 1000이 아닌 튜플 필터링 |
> | 크다 | WHERE price > 1000; | price가 1000보다 큰 튜플 필터링 |
>= | 크거나 같다 | WHERE price >= 1000; | price가 1000보다 크거나 같은 튜플 필터링 |
< | 작다 | WHERE price < 1000; | price가 1000보다 작은 튜플 필터링 |
<= | 작거나 같다 | WHERE price <= 1000; | price가 1000보다 작거나 같은 튜플 필터링 |
논리 연산자는 여러 개의 조건을 결합하거나, 특정 조건을 반대로 적용할 때 사용됩니다.
AND
는 두 조건의 교집합을, OR
는 합집합을, NOT
은 여집합을 찾아 줍니다.
연산자 | 설명 | 예제 | 의미 |
---|---|---|---|
AND | 모든 조건이 참일 때 | WHERE 조건A AND 조건B; | 조건A와 조건B를 동시에 만족하는 튜플 필터링(교집합) |
OR | 하나 이상의 조건이 참일 때 | WHERE 조건A OR 조건B; | 조건A와 조건B 중 하나라도 만족하는 튜플 필터링(합집합) |
NOT | 조건이 거짓일 때 | WHERE NOT 조건A; | 조건A를 만족하지 않는 튜플 필터링(여집합) |
산술 연산자란 사칙 연산을 위한 연산자로, 더하기(+), 빼기(-), *(곱하기), /(나누기), %(나머지)가 있습니다.
연산자 | 설명 | 예제 | 의미 |
---|---|---|---|
+ | 덧셈 | WHERE salary + 1000 > 5000; | 급여(salary)에 1,000을 더한 값이 5,000보다 큰 튜플 필터링 |
- | 뺄셈 | WHERE salary - 500 < 2000; | 급여에서 500을 뺀 값이 2,000보다 작은 튜플 필터링 |
* | 곱셈 | WHERE price * 1.1 > 30000; | 가격(price)에 10% 인상된 값이 30,000을 초과하는 튜플 필터링 |
/ | 나눗셈 | WHERE amount / 2 < 100; | 주문 수량(amount)을 절반으로 나눈 값이 100 미만인 튜플 필터링 |
% | 나머지 | WHERE id % 2 = 0; | ID 값을 2로 나눈 나머지가 0인 튜플 필터링 (짝수 ID 조회) |
산술 연산자는 WHERE
절과 SELECT
절에서 사용할 수 있는데, 특히 SELECT
절에서 사용하면 연산으로 얻은 새로운 칼럼을 출력할 수 있습니다.
연산자 우선순위란 어떤 연산자를 먼저 수행할지 그 우선순위를 정한 것으로, 하나의 쿼리에 여러 연산자가 사용될 경우 연산자 우선순위에 따라 우선순위가 높은 것부터 낮은 것 순으로 수행됩니다. 연산자 간 우선순위는 다음 표와 같습니다.
-- 1번
SELECT 3 + 5 * 2;
-- 2번
SELECT (3 + 5) * 2;
-- 3번
SELECT TRUE OR TRUE AND FALSE;
-- 4번
SELECT (TRUE OR TRUE) AND FALSE;
3 + 5 * 2
13
(3 + 5) * 2
()
가 연산자보다 우선순위가 높으므로, 3 + 5
가 먼저 계산됩니다.16
TRUE OR TRUE AND FALSE
AND
가 OR
보다 우선순위가 높습니다.1(TRUE)
(TRUE OR TRUE) AND FALSE
()
가 있으므로 TRUE OR TRUE
를 먼저 계산합니다.0(FALSE)
university(대학) DB를 생성하고, students(학생) 테이블을 생성합니다.
-- university DB 생성
CREATE DATABASE university;
-- university DB 진입
USE university;
-- students 테이블 생성
CREATE TABLE students (
id INTEGER,
nickname VARCHAR(50),
math INTEGER,
english INTEGER,
programming INTEGER,
PRIMARY KEY (id)
);
-- students 데이터 삽입
INSERT INTO students (id, nickname, math, english, programming)
VALUES
(1, 'Sparkles', 98, 96, 93),
(2, 'Soldier', 82, 66, 98),
(3, 'Lapooheart', 84, 70, 82),
(4, 'Slick', 87, 99, 98),
(5, 'Smile', 75, 73, 70),
(6, 'Jellyboo', 84, 82, 70),
(7, 'Bagel', 97, 91, 87),
(8, 'Queen', 99, 100, 88);
조건은 math, english, programming 각 칼럼 값이 90 이상이며, 이 세 조건을 AND
연산자로 연결하면 됩니다.
SELECT *
FROM students
WHERE math >= 90 AND english >= 90 AND programming >= 90;
조건은 math, english, programming 각 칼럼 값이 75 미만이며, 이 세 조건을 OR
연산자로 연결하면 됩니다.
SELECT *
FROM students
WHERE math < 75 or english < 75 or programming < 75;
각 학생의 수학, 영어, 프로그래밍 성적과 함께 총점을 출력합니다. SELECT
절에 총점을 구하는 칼럼을 추가하면 총점을 출력할 수 있습니다.
다음과 같이 +
(더하기) 연산자를 사용하면 math, english, programming 각 칼럼 값을 더해 출력할 수 있습니다.
SELECT math, english, programming, math + english + programming
FROM students;
평균은 +
(더하기) 연산자로 총점을 구한 뒤 /
(나누기) 연산자로 총점을 과목 수로 나누면 됩니다.
같은 산술 연산자라도 *
(곱하기), /
(나누기), %
(나머지) 연산자가 +
(더하기), -
(빼기) 연산자보다 먼저 수행되므로 연산자 우선순위에 주의하여 출력하도록 합니다.
SELECT id, nickname, math, english, programming, (math + english + programming) / 3
FROM students;
WHERE
절에서 총점을 계산해 270보다 큰 학생을 찾은 다음, SELECT
절에서 닉네임을 표시하고 총점과 평균을 구하면 됩니다.
SELECT
nickname,
math + english + programming,
(math + english + programming) / 3
FROM students
WHERE (math + english + programming) >= 270;
AS 키워드는 칼럼이나 테이블에 별칭을 지정하는 키워드로, 칼럼이나 테이블 이름이 길거나 의미를 분명하게 해야 할 경우 사용합니다.
AS 키워드로 붙인 별칭은 해당 쿼리의 출력 결과에만 임시로 나타나며, 쿼리의 가독성을 높이고 쿼리를 더 간결하게 해 줍니다.
SELECT 칼럼명 AS 별칭
FROM 테이블명;
-- AS 키워드
SELECT
nickname AS 닉네임,
(math + english + programming) AS 총점,
(math + english + programming) / 3 AS 평균
FROM students
WHERE (math + english + programming) >= 270;
만약 별칭에 띄어쓰기가 있거나, 특수문자가 포함되거나, 숫자로 시작하는 경우에는 별칭을 그대로 쓰지 않고 ''
(작은따옴표)로 감싸야 제대로 출력됩니다.
띄어쓰기가 포함된 경우
SELECT nickname AS 'Student Name'
FROM students;
특수문자가 포함된 경우
SELECT nickname AS 'Student-Name'
FROM students;
숫자로 시작하는 경우
SELECT nickname AS '123'
FROM students;