1) 리터럴 문자
- 리터럴 문자란? 쿼리 구문에 포함된 일반 문자, 숫자, 날짜 값
- 문자나 날짜 리터럴은 작은 따옴표로 묶어서 작성해야 함
- Mysql 은 작은따옴표, 큰따옴표 모두 허용하나 다른 DBMS가 작은따옴표만 허용하는 경우가 많으니 작은따옴표로 기억하는 것을 권장함
- 문자: MySQL은 대소문자 구분하지 않음(DBMS에 따라 다름)
- 날짜: MySQL은 년-월-일 순서로 작성해야 함(DBMS에 따라 다름
WHERE절
- 테이블의 전체 행 데이터에서 출력할 행을 정할 수 있는 조건식을 작성하는 절
- 행을 제한한다라는 표현을 쓰기도 함.
비교연산자
- 값들을 비교하여 참/거짓의 여부로 행의 출력을 결정하는 연산자
SELECT …
FROM …
WHERE 기준 연산자 조건값
- 부등식의 개념을 활용하는 연산자
= 같은 값 비교
부등식의 개념을 활용하는 연산자
- = 같은 값 비교
- != 같지 않은 값 비교
- > 크다. 초과
- < 작다. 미만
- >= 크거나 같다. 이상
<= 작거나 같다. 이하
숫자 데이터비교
- department_id 컬럼을 기준으로 조건값 90과 일치한 값을 가지는 조건을 만족하는 행을 출력
mysql> SELECT employee_id, last_name, job_id, department_id -> FROM employees -> WHERE department_id = 90; |
- 사원번호가 110 미만인 값을 가진 행을 출력
mysql> SELECT employee_id, last_name -> FROM employees -> WHERE employee_id < 110; |
mysql> SELECT employee_id, salary -> FROM employees -> WHERE salary >= 15000; |
문자열 데이터 비교
- MySQL 기준 동일한 스펠링을 가진 문자열인 경우 대소문자 상관없이 일치한 값을 인정해준다.
- DBMS에서는 대소문자를 구분하기 때문에 주의해야한다.
mysql> SELECT last_name, job_id, department_id -> FROM employees -> WHERE last_name = 'Whalen'; |
mysql> SELECT last_name -> FROM employees -> WHERE last_name > 'Whalen'; |

- last_name 컬럼의 값이 'B'보다 작은 값을 가진 행을 출력
- 'A'로 시작하는 문자열들은 'B'보다 작으므로 결과로 출력된다.
mysql> SELECT last_name -> FROM employees -> WHERE last_name < 'B'; |

mysql> SELECT employee_id, last_name -> FROM employees -> WHERE last_name != 'King'; |
날짜데이터 비교
- DATE(날짜) - 년, 월, 일 / TIME(시간)- 시, 분, 초 / DATETIME- 년, 월, 일, 시, 분,
- 날짜데이터의 경우 날짜 양식을 갖춘 문자열도 데이터베이스에서는 날짜데이터로 자동 변환해주기 때문에 날짜, 문자열간 비교가 가능하다.
- 다만, 국가, 언어, 클라이언트, 설정에 따라 날짜의 양식이 다를 수 있으므로, 가능하면 함수를 통한 날짜데이터를 사용하는 것이 좋다.
- 사원의 고용일이 1996년 02월 17일인 사원을 출력
mysql> SELECT last_name, hire_date -> FROM employees -> WHERE hire_date = '1996-02-17'; |
- '1997-06-25' 이후 hire_date 날짜 데이터를 가진 행을 출력
- 날짜데이터는 이전 날짜가 이후 날짜보다 작은 값이므로 '1997-06-25' 이후 입사자들만 출력되었음.
mysql> SELECT employee_id, hire_date -> FROM employees -> WHERE hire_date > '1997-06-25'; |
BETWEEN A AND B
- A, B 사이 구간에 속하는 값을 비교하여 출력해주는 연산자
- A : 구간의 최소값
- B : 구간의 최대값
- 구간의 경계값도 결과에 포함된다.
- salary의 값이 2500 이상 3500이하인 값을 가진 행을 출력한다.
mysql> SELECT last_name, salary -> FROM employees -> WHERE salary BETWEEN 2500 AND 3500; |
mysql> SELECT last_name -> FROM employees -> WHERE last_name BETWEEN 'Baida' AND 'Fay'; |
- last_name의 값이 'A' 이상 'C' 이하인 행들을 출력
mysql> SELECT last_name -> FROM employees -> WHERE last_name BETWEEN 'A' AND 'C'; |
- hire_date의 값이'1994-01-01' 이상 '1994-12-31'이하인 행을 출력
mysql> SELECT employee_id, hire_date -> FROM employees -> WHERE hire_date BETWEEN '1994-01-01' AND '1994-12-31'; |
IN 연산자
- IN 연산자는 다중행비교연산자로 여러 조건값을 비교하여 일치하는 값들을 가진 행을 출력해준다.
- 조건값들은 괄호() 기호로 묶어서 작성하며, 조건값의 수는 제한이 없음.
mysql> SELECT employee_id, last_name, salary, manager_id -> FROM employees -> WHERE manager_id IN (100, 101, 201); |
mysql> SELECT employee_id, hire_date -> FROM employees -> WHERE hire_date IN ('1993-01-13', '1991-05-21', '1987-06-17'); |
LIKE(패턴 비교연산자)
- 패턴문자의 패턴과 일치한 값을 가진 행을 출력
- 패턴문자
- _ : 임의의 한자리의 문자
- % : 임의의 0~n자리의 문자
- last_name의 값이 두번째자리가 'o'인 문자열을 출력.
mysql> SELECT last_name -> FROM employees -> WHERE last_name LIKE '_o%'; |
- 'A'로 시작하는 last_name을 가진 행의 last_name 컬럼을 출력
mysql> SELECT last_name -> FROM employees -> WHERE last_name LIKE 'A%'; |
- 'n'으로 끝나는 last_name의 값을 가진 행의 last_name 출력
mysql> SELECT last_name -> FROM employees -> WHERE last_name LIKE '%n'; |
- first_name에 'er'을 포함하고 있는 행의 first_name 컬럼을 출력
mysql> SELECT first_name -> FROM employees -> WHERE first_name LIKE '%er%'; |
- 1993년도에 입사한 사원의 employee_id, last_name, hire_date를 출력
mysql> SELECT employee_id, last_name, hire_date -> FROM employees -> WHERE hire_date LIKE '1993%'; |
- employee_id의 값이 110번대인 사원의 employee_id를 출력
mysql> SELECT employee_id -> FROM employees -> WHERE employee_id LIKE '11_'; |
IS NULL
- NULL값은 일반적인 비교연산으로는 비교가 불가능한 값이다.
- NULL값을 비교하기 위해서는 IS NULL과 같은 연산자를 활용해야 한다.
mysql> SELECT last_name, manager_id -> FROM employees -> WHERE manager_id IS NULL; |
AND
- A조건 AND B조건
AND를 끼고 있는 두 조건에 대해서 모두 조건을 만족하는 값을 가진 행을 출력한다. - 두 조건 중 하나라도 만족하지 않는 경우 결과로 출력되지 않는다.
- salary의 값이 10000이 넘고 그리고 job_id의 컬럼에 'MAN'을 포함하는 값을 가진 행을 출력
mysql> SELECT employee_id, last_name, job_id, salary -> FROM employees -> WHERE salary >= 10000 AND job_id LIKE '%MAN%'; |
OR
- A OR B
A 또는 B로 두 조건 중 하나 이상에 대하여 참인 경우 결과로 출력된다.
mysql> SELECT employee_id, last_name, job_id, salary -> FROM employees -> WHERE salary >= 10000 OR job_id LIKE '%MAN%'; |
이상의 조건 조합하기
- AND나 OR에 대한 조합 횟수 제한은 없다.
- 다만, AND, OR간에 AND가 우선순위가 높아 OR과 함께 조합되는 경우 AND로 묶인 조건들이 먼저 연산이 실행된다.
- AND와 OR이 조합된 조건식들에서 연산 순서의 조정이 필요한 경우 ()괄호를 활용하여 우선순위를 바꿀 수 있다.
- () > AND > OR
Q. employees 테이블에서 급여가 10000이상이고 그리고 job_id에 'MAN' 또는 'REP'를 포함하는 값을 가진 행의 employee_id, last_name, job_id, salary를 출력해라.
mysql> SELECT employee_id, last_name, job_id, salary -> FROM employees -> WHERE (job_id LIKE '%MAN%' OR job_id LIKE '%REP%') AND salary >= 10000; |
Q. employees 테이블로부터 2000년도에 입사한 모든 사원의 last_name과 hire_date를 출력하시오
A.
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 |
| Zlotkey | 2000-01-29 |
| Marvins | 2000-01-24 |
| Lee | 2000-02-23 |
| Ande | 2000-03-24 |
| Banda | 2000-04-21 |
| Kumar | 2000-04-21 |
| Johnson | 2000-01-04 |
| Geoni | 2000-02-03 |
| Grant | 2000-01-13 |
+------------+------------+
mysql> SELECT last_name, hire_date -> FROM employees -> WHERE hire_date >= '2000-01-01' AND hire_date <= '2000-12-31'; |
+------------+------------+
| last_name | hire_date |
+------------+------------+
| Markle | 2000-03-08 |
| Philtanker | 2000-02-06 |
| Zlotkey | 2000-01-29 |
| Marvins | 2000-01-24 |
| Lee | 2000-02-23 |
| Ande | 2000-03-24 |
| Banda | 2000-04-21 |
| Kumar | 2000-04-21 |
| Johnson | 2000-01-04 |
| Geoni | 2000-02-03 |
| Grant | 2000-01-13 |
+------------+------------+
NOT 연산자
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees -> WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP'); |
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees -> WHERE salary NOT BETWEEN 10000 AND 15000; |
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees -> WHERE last_name NOT LIKE '%A%'; |
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees -> WHERE commission_pct IS NOT NULL; |
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees -> WHERE NOT(commission_pct IS NULL); |
'⛏️ > Mysql | Oracle' 카테고리의 다른 글
[SQL] 6. ORDER BY (0) | 2023.08.09 |
---|---|
[SQL] WORKBENCH, DBeaver 설치 (0) | 2023.08.08 |
[SQL] 4. SELECT 문법 (0) | 2023.07.19 |
[SQL] 3. MySQL 설치 및 기동 (0) | 2023.07.18 |
[SQL] 2. SQL, KEY(기본키, 외래키) (0) | 2023.07.18 |