반응형
안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.
예문 테이블을 가지고 IN과 NOT IN의 사용법과 어떻게 동작하는지 알아보겠습니다.
CREATE TABLE class1 ( name VARCHAR(20), color VARCHAR(10) );
CREATE TABLE class2 ( name VARCHAR(20), score INT );
INSERT INTO class1
VALUES
('BILL', 'red'), ('KIM', 'green'), ('ROSE', 'yellow'), ('SALLY', 'pink'), ('AMY', 'blue'), ('NANCY', 'black');
INSERT INTO class2
VALUES
('BILL', 70), ('KIM', 50), ('ROSE', 70), ('SALLY', 60), ('AMY', 80), ('NANCY', 90);
1. IN (검색값, ...)
IN 안에 값이 포함되는 데이터를 반환합니다.
SELECT *
FROM class1
WHERE name IN ('BILL', 'AMY');
// 실행 결과
name|color|
----+-----+
BILL|red |
AMY |blue |
// IN은 풀어서 쓴 쿼리
SELECT *
FROM class1
WHERE name = 'BILL' OR name = 'AMY';
테이블 'class1'의 'name' 칼럼의 값이 'BILL'과 'AMY'의 데이터를 반환했습니다.
2. NOT IN (검색값, ...)
IN 안에 값이 포함되지 않는 데이터를 반환합니다.
SELECT *
FROM class1
WHERE name NOT IN ('BILL', 'AMY');
// 실행 결과
name |color |
-----+------+
KIM |green |
ROSE |yellow|
SALLY|pink |
NANCY|black |
// NOT IN을 풀어서 쓴 쿼리
SELECT *
FROM class1
WHERE name <> 'BILL' AND name <> 'AMY';
테이블 'class1'의 'name' 칼럼의 값이 'BILL'과 'AMY'가 아닌 데이터를 반환했습니다.
위 풀어서 쓴 쿼리를 보면 'IN'과 'NOT IN'에 'OR'와 'AND' 조건절이 걸리게 된다는 차이가 있습니다.
많은 검색값이 필요한 문장에서는 'IN'이나 'NOT IN'을 사용하면 불필요한 조건절을 생략할 수 있습니다.
3. SUBQUERY IN (SELECT ...)
IN 문안에 서브쿼리 사용도 가능합니다.
SELECT *
FROM class1
WHERE name IN (SELECT name
FROM class2
WHERE score > 70
);
// 실행 결과
name |color|
-----+-----+
AMY |blue |
NANCY|black|
테이블 'class2'의 'score'가 70 이상인 사람만 검색하여 'class1'의 테이블의 데이터를 반환했습니다.
4. SUBQUERY NOT IN (SELECT ...)
NOT IN 문안에 서브쿼리 사용도 가능합니다.
SELECT *
FROM class1
WHERE name NOT IN (SELECT name
FROM class2
WHERE score > 70
);
// 실행결과
name |color |
-----+------+
BILL |red |
KIM |green |
ROSE |yellow|
SALLY|pink |
테이블 'class2'의 'score'가 70 이상인 사람 중 'class1'의 테이블의 'name' 칼럼의 값이 아닌 데이터를 반환했습니다.
IN과 NOT IN 문 안에 서브쿼리를 사용할 시 꼭 주의하셔야 할 경우가 있습니다.
서브 쿼리의 조회 값에 'NULL'이 있을 경우 데이터가 출력되지 않습니다.
서브쿼리의 조회 조건절에 꼭 'NULL'을 포함하지 않는 조건절을 포함시켜 주시는 것이 좋습니다.
SELECT *
FROM class1
WHERE name IN (SELECT name
FROM class2
WHERE score > 70
AND name IS NOT NULL
);
반응형
'IT 소스 > MariaDB' 카테고리의 다른 글
[MariaDB] SQL 쿼리 - BETWEEN, NOT BETWEEN (0) | 2023.01.26 |
---|---|
[MariaDB] SQL 쿼리 - LIKE, NOT LIKE (1) | 2023.01.25 |
[MariaDB] 테이블 결합 - UNION (0) | 2023.01.18 |
[MariaDB] 테이블 연결 - JOIN (0) | 2023.01.17 |
[MariaDB] 테이블 수정 - ALTER (0) | 2023.01.13 |