티스토리 뷰

 

 

 

 

 

▶▶   비교 연산자

–  피연산자 사이의 상대적인 크기를 판단하여,  참(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%'

 

  1.   _   :   임의의 한 문자 (숫자,영어 등 상관없음)
  2.   o   :   두번째 자리에는 알파벳 'o'가 들어가야한다 라는 조건
  3.   %  :   임의의 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)

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함