English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 IN과 BETWEEN 연산자를 사용하여 WHERE 절과 함께 사용하는 방법을 배울 것입니다.
지난 장에서는 AND와 OR 연산자를 사용하여 여러 조건을 조합하는 방법을 배웠습니다. 하지만 때로는 이들이 충분하지 않습니다. 예를 들어, 범위나 값을 포함하는 값을 확인해야 할 때.
여기서 IN과 BETWEEN 연산자가 나타나 있으며, 단순한 조건을 조합하는 대신 독점 범위나 값을 정의할 수 있습니다.
IN 연산자는 논리 연산자로, 특정 값이 값을 포함하는 집합인지 확인하는 데 사용됩니다. 기본 문법은 다음과 같습니다:
SELECT column_list FROM table_name WHERE column_name IN (value)1, value1,...);
여기서는column_list은 값을 얻고자 하는 데이터베이스 테이블의 열입니다/필드의이름예를 들어name,age,country와 같은 것을 생각해 봅시다. 좋아요, 몇 가지 예제를 보겠습니다。
데이터베이스에 우리는employees테이블이 있습니다. 이 테이블은 다음과 같은 기록을 가지고 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
아래 SQL 문은 단순히dept_id은1또는3의 직원들을 포함합니다。
SELECT * FROM employees WHERE dept_id IN (1, 3);
쿼리 실행 후, 아래와 같은 결과 집합을 얻을 수 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+
또한, NOT IN 연산자를 사용할 수 있습니다. 이 연산자는 IN 연산자와 반대입니다. 아래 SQL 문은 제외된 직원들을 포함한 결과를 반환합니다:dept_id아니요1또는3의 직원들을 제외한 모든 직원입니다。
SELECT * FROM employees WHERE dept_id NOT IN (1, 3);
쿼리 실행 후, 이번에는 아래와 같은 결과 집합을 얻을 수 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | +--------+--------------+------------+--------+---------+
컬럼의 값이 특정 범위에 있을 때, 종종 한 행을 선택하고 싶습니다. 숫자 데이터를 처리할 때 이러한 유형의 조건이 자주 사용됩니다。
이러한 조건을 기반으로 쿼리를 실행하려면 BETWEEN 연산자를 사용할 수 있습니다. 이는 논리 연산자로, 특정 범위를 지정할 수 있습니다. 예를 들어:
SELECT column1_name, column2_name, columnN_name FROM table_name WHERE column_name BETWEEN min_value AND max_value;
다음과 같이직원(employees)테이블에 대한 범위 조건을 구성하고 실행하는 쿼리를 수행합니다。
아래 SQL 문은 단순히employees테이블의 급여가7000부터9000 사이의 직원들입니다。
SELECT * FROM employees WHERE salary BETWEEN 7000 AND 9000;
실행 후, 다음과 같은 출력을 얻을 수 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+
CAST() 함수를 사용하여 DATE와 같은 날짜나 시간 값을 함께 사용할 때, 이 값을 필요한 데이터 타입으로 명시적으로 변환하여 최적의 결과를 얻을 수 있습니다. 예를 들어, “ 2016-12-31”과 같은 문자열이면 DATE로 변환하려면 다음과 같이 합니다:
아래 SQL 문은 다음과 같은 선택을 합니다:2006년1월1일(즉 “ 2006-01-01”)에서2016년12월31일(즉 “ 2016-12-31)간에 고용된 모든 직원:
SELECT * FROM employees WHERE hire_date BETWEEN CAST('2006-01-01AS DATE) AND CAST('2016-12-31AS DATE);
쿼리 실행 후, 아래와 같은 결과 집합을 얻을 수 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
날짜와 숫자 범위는 가장 일반적이지만, 문자열 범위를 검색하는 조건도 설정할 수 있습니다. 다음 SQL 문은 이름이 'O'와 'Z' 사이의 어떤 문자로 시작하는 모든 직원을 선택합니다:
SELECT * FROM employees WHERE emp_name BETWEEN 'O' AND 'Z';
실행 후, 다음과 같은 출력을 얻을 수 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+