티스토리 뷰
▶▶ 비교 연산자
– 피연산자 사이의 상대적인 크기를 판단하여, 참(true)이면 1을 반환하고 거짓(false)이면 0을 반환함.
1. BETWEEN A AND B
2. IN
3. LIKE
4. IS NULL
▶ BETWEEN A AND B
– 구간 비교연산자.
– BETWEEN A AND B, A이상(최소값) B이하(최대값)의 값을 가짐.
EX1 ) 숫자 비교
mysql> SELECT last_name, salary
-> FROM employees
-> WHERE salary BETWEEN 2500 AND 3500;
+-------------+---------+
| last_name | salary |
+-------------+---------+
| Khoo | 3100.00 |
| Baida | 2900.00 |
| Tobias | 2800.00 |
| Himuro | 2600.00 |
| Colmenares | 2500.00 |
...
| Rajs | 3500.00 |
...
| OConnell | 2600.00 |
| Grant | 2600.00 |
+-------------+---------+
33 rows in set (0.00 sec)
→ 2500이상 3500이하의 값을 가진 사람들이 출력됨.
EX2 ) 문자열 비교
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name BETWEEN 'Patel' AND 'Vargas';
+------------+
| last_name |
+------------+
| Sciarra |
| Urman |
| Popp |
...
| Sarchand |
| Perkins |
+------------+
24 rows in set (0.00 sec)
EX3 ) 문자열 비교2
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name BETWEEN 'A' AND 'C';
+-----------+
| last_name |
+-----------+
| Austin |
| Baida |
| Bissot |
| Atkinson |
| Bernstein |
| Ande |
| Banda |
| Bloom |
| Bates |
| Abel |
| Bull |
| Bell |
| Baer |
+-----------+
13 rows in set (0.00 sec)
→ 'C'에서 문자가 하나라도 더 붙으면 'C'보다 큰 값이므로, 성이 'C'로 시작하는 사람 없음.
→ last_name 컬럼의 값이 'A'이상 'C'이하인 행을 출력함.
EX4 ) 날짜 비교
mysql> SELECT employee_id, hire_date
-> FROM employees
-> WHERE hire_date BETWEEN '1997-01-01' AND '1997-12-31';
+-------------+------------+
| employee_id | hire_date |
+-------------+------------+
| 105 | 1997-06-25 |
| 110 | 1997-09-28 |
| 111 | 1997-09-30 |
...
| 193 | 1997-03-03 |
| 202 | 1997-08-17 |
+-------------+------------+
28 rows in set (0.00 sec)
→ 날짜 데이터로도 구간 검색 가능함.
▶ IN (다중 행 비교연산자)
– 기능은 '=' 연산자와 비슷하지만 조건값을 여러개 받을 수 있음.
– 조건 컬럼과 동일한 데이터타입의 조건값을 작성함.
– 괄호는 생략 불가능, 필수적으로 사용함.
EX1 )
mysql> SELECT employee_id, last_name, salary, manager_id
-> FROM employees
-> WHERE manager_id IN (100, 101, 201);
+-------------+-----------+----------+------------+
| employee_id | last_name | salary | manager_id |
+-------------+-----------+----------+------------+
| 101 | Kochhar | 17000.00 | 100 |
| 102 | De Haan | 17000.00 | 100 |
...
| 204 | Baer | 10000.00 | 101 |
| 205 | Higgins | 12000.00 | 101 |
| 202 | Fay | 6000.00 | 201 |
+-------------+-----------+----------+------------+
20 rows in set (0.01 sec)
→ manager_id가 100, 101, 201인 사원들이 manager(관리)하는 employee_id 목록
Q1 ) employees 테이블로부터 2000년도에 입사한 모든 사원의 last_name과 hire_date를 출력하기.
A1 )
mysql> SELECT last_name, hire_date // 어떤 컬럼 출력할건지
-> FROM employees // 어떤 테이블인지
-> WHERE hire_date BETWEEN '2000-01-01' AND '2000-12-31'; // 어떤 조건을 거는지
+------------+------------+
| last_name | hire_date |
+------------+------------+
| Markle | 2000-03-08 |
| Philtanker | 2000-02-06 |
...
| Johnson | 2000-01-04 |
| Geoni | 2000-02-03 |
| Grant | 2000-01-13 |
+------------+------------+
11 rows in set (0.00 sec)
▶ LIKE (패턴문자)
LIKE '_o%'
- _ : 임의의 한 문자 (숫자,영어 등 상관없음)
- o : 두번째 자리에는 알파벳 'o'가 들어가야한다 라는 조건
- % : 임의의 0~n자리의 문자 (+길이 상관없음)
✓ '_o%' 의 패턴은
첫글자는 임의 문자,
두번째 문자는 알파벳 'o',
그 뒤의 문자는 여러 길이의 임의문자를 허용하는 패턴임
EX1 ) 길이제한 없음
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name LIKE '_o%';
+------------+
| last_name |
+------------+
| Kochhar |
| Lorentz |
...
| Johnson |
| Jones |
+------------+
12 rows in set (0.00 sec)
EX2 ) 길이제한 있음
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name LIKE '_o__';
+-----------+
| last_name |
+-----------+
| Popp |
+-----------+
1 row in set (0.00 sec)
→ _(언더스코어) 사용으로 길이에 제한을 둠.
→ 첫글자는 임의문자, 두번째는 알파벳 'o', 3,4번째는 임의문자를 허용하는 패턴.
EX3 ) 날짜
mysql> SELECT last_name, hire_date
-> FROM employees
-> WHERE hire_date LIKE '2000-__-__'; // == '2000%'
+------------+------------+
| last_name | hire_date |
+------------+------------+
| Markle | 2000-03-08 |
| Philtanker | 2000-02-06 |
| Zlotkey | 2000-01-29 |
...
| Geoni | 2000-02-03 |
| Grant | 2000-01-13 |
+------------+------------+
11 rows in set (0.00 sec)
→ 날짜는 yyyy-mm-dd 형식이 정해져 있으므로 LIKE '2000%'도 사용 가능
EX4 ) 숫자
mysql> SELECT last_name, salary
-> FROM employees
-> WHERE salary LIKE '%5__.__';
+------------+----------+
| last_name | salary |
+------------+----------+
| Colmenares | 2500.00 |
| Vollman | 6500.00 |
| Marlow | 2500.00 |
| Patel | 2500.00 |
| Rajs | 3500.00 |
| Vargas | 2500.00 |
| Partners | 13500.00 |
...
| Mavris | 6500.00 |
+------------+----------+
18 rows in set (0.00 sec)
→ 사실 이렇게는 잘 안씀, 다른 문법 쓰는게 훨씬 나음. 그냥 LIKE의 기능만 알고 넘어가기.
Q1 ) 'er'로 끝나는 last_name을 가지는 사원을 출력하기.
A1 )
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name LIKE '%er';
+------------+
| last_name |
+------------+
| Nayer |
| Philtanker |
| Tucker |
| Ozer |
| Dellinger |
| Baer |
+------------+
6 rows in set (0.00 sec)
→ 나중에 인덱스를 배울건데, 거기서 '%er'같은 패턴은 좋지 않음
Q2 ) 사원들 중에 last_name에 'or'을 포함하고 있는 사원을 출력하기.
A2 )
mysql> SELECT last_name
-> FROM employees
-> WHERE last_name LIKE '%or%';
+-----------+
| last_name |
+-----------+
| Lorentz |
| Doran |
| Taylor |
| Taylor |
+-----------+
4 rows in set (0.00 sec)
▶ IS NULL
– 논리적인 데이터값인 NULL은 일반적인 비교연산자로는 비교가 불가능함.
– NULL 여부를 논리적으로 비교하는 IS NULL연산자를 사용하여 NULL값을 찾을 수 있음.
EX )
mysql> SELECT last_name, manager_id
-> FROM employees
-> WHERE manager_id IS NULL;
+-----------+------------+
| last_name | manager_id |
+-----------+------------+
| King | NULL |
+-----------+------------+
1 row in set (0.00 sec)
'DB > MySQL' 카테고리의 다른 글
ORDER BY절 (0) | 2023.02.01 |
---|---|
논리 연산자 (AND / OR / NOT) (0) | 2023.02.01 |
WHERE(조건문)절 / 비교 연산자(관계) (0) | 2023.02.01 |
중복된 값을 제거하는 DISTINCT 키워드 (0) | 2023.02.01 |
SELECT 구문 / 표현식 / null값이란? / Column Alias (0) | 2023.01.31 |
- Total
- Today
- Yesterday
- Dao
- 인자
- Git
- 주석문
- 업캐스팅
- mysql
- 원격저장소
- 단일행함수
- gitbash
- 매개변수
- DB
- 문자형
- 오버라이딩
- 로컬저장소
- 논리형
- github
- 데이터타입
- Object
- 출력문
- 제어문
- javascript
- JSTL
- jsp
- 내장객체
- 다형성
- Java
- Method
- null
- model2
- 숫자형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |