▶ WHERE 절
- 테이블에서 조건을 충족하는 행을 조회할 때 사용
- WHERE절에는 조건식(true/false)만 작성
- 비교 연산자 : >, <, >=, <=, = (같다), !=, <> (같지 않다)
- 논리 연산자 : AND, OR, NOT
|
3) SELECT 컬럼명,...
1) FROM 테이블명 2) WHERE 조건식; |
1>> 특정 테이블에서
2>> 조건식을 만족하는 행을 추려놓고
3>> 추려진 결과 행에서 원하는 컬럼만 조회
#예제
EMPLOYEE 테이블에서 급여가 400만원을 초과하는 사원의 사번, 이름, 급여 조회
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY>4000000; -- 8행 조회
EMPLYEE 테이블에서 연봉이 5천만원 이하인 사원의 이름, 연봉 조회
SELECT EMP_NAME,SALARY*12
FROM EMPLOYEE
WHERE SALARY *12 <= 50000000; -- 15행`
이름이 '노옹철'인 사원의 사번, 이름, 전화번호 조회
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE EMP_NAME ='노옹철'; -- 같다(=, 등호 1개!!!)
부서코드(DEPT_CODE)가 'D9'이 아닌 사원의 이름, 부서 코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE <> 'D9'; -- <> 또는 != -> 같지 않음을 의미
▷ NULL 비교 연산
컬럼명 = NULL (X) / 컬럼명 != NULL (X)
- =, != 비교 연산은 컬럼에 저장된 값을 비교하는 연산이다!!!
- ORACLE DB에서 NULL은 값이 아니라 값이 존재하지 않는다는(빈칸) 의미
== 저장된 값이 없다
컬럼명 IS NULL / 컬럼명 IS NOT NULL (O)
-> 지정된 컬럼에 값이 존재하지 않는 경우 / 하는 경우
(값의 유무를 따짐)
#예제
EMPLOYEE 테이블에서 DEPT_CODE가 없는 사원 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
--WHERE DEPT_CODE != NULL; -- 결과 없음(잘못된 연산)
WHERE DEPT_CODE IS NULL; -- 하동운, 이오리 2행 조회
▷ 논리 연산자(AND/OR)
| AND(그리고) | 두 조건식의 결과가 TRUE인 경우만 TRUE → 두 조건을 모두 만족하는 행만 조회 결과에 포함 |
| OR(또는) | 두 조건 중 하나라도 TRUE인 경우에 TRUE → 두 조건 중 하나라도 만족하는 행만 조회 결과에 포함 |
#예제
EMPLOYEE 테이블에서 부서코드가 'D6'인 사원 중 급여가 400만을 초과하는 사원의
이름, 부거 코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE , SALARY
FROM EMPLOYEE
WHERE DEPT_CODE ='D6' AND SALARY >4000000;
▷ 컬럼명 BETWEEN (A) AND (B)
-- 컬럼 값이 "A 이상", "B이하"인 경우 TRUE(조회 하겠다)
#예제
EMPLOYEE 테이블에서 급여가 400만 이상 600만 이하인 사원의
이름, 급여 조회
1) AND 버전
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >=4000000 AND SALARY <= 6000000;
2) BETWEEN 버전
SELECT EMP_NAME, SALARY
FROM EMPLOYEE e
WHERE SALARY BETWEEN 4000000 AND 6000000;
▷ 컬럼명 NOT BETWEEN (A) AND (B)
컬럼 값이 "A 이상", "B이하"가 아닌 경우 TRUE(조회 하겠다)
(= A 미만, B 초과)
**날짜도 범위 비교 가능 !!**
EMPLOYEE 테이블에서 2010년대(10.1.1 ~ 19.12.31) 입사한 사원의 사번, 이름, 입사일 조회
1) AND 버전
SELECT DEPT_CODE, EMP_NAME , HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE >= TO_DATE('2010-01-01', 'YYYY-MM-DD')
AND HIRE_DATE <= TO_DATE('2019-12-31', 'YYYY-MM-DD') ;
-- 10행 조회
2) BETWEEN 버전
SELECT DEPT_CODE, EMP_NAME , HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE
BETWEEN
TO_DATE('2010-01-01', 'YYYY-MM-DD')
AND
TO_DATE('2019-12-31', 'YYYY-MM-DD') ;
▷ 일치하는 값만 조회 (OR / IN(값1, 값2,...))
1) OR
#예제 EMPLOYEE 테이블에서 부서코드가 'D5', 'D6', 'D9'인 사원의 사번,이름, 부서코드 조회
SELECT EMP_NAME , EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
OR DEPT_CODE = 'D6'
OR DEPT_CODE = 'D9'; --12행 조회
2) 컬럼명 IN (값1, 값2, 값3, ...)
컬럼 값이 IN () 내에 존재하면 TRUE --> 조회 결과에 포함
-== 연속으로 OR 연산을 작성한 것과 같은 효과
SELECT EMP_NAME , EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IN('D5', 'D6', 'D9'); -- 12행
3) 컬럼명 NOT IN (값1, 값2, 값3, ...)
컬럼 값이 IN () 내에 존재하지 않으면 TRUE --> 조회 결과에 포함
SELECT EMP_NAME , EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE NOT IN('D5', 'D6', 'D9'); -- 9행 (NULL)
▷ Like(같은, 비슷한)
비교하려는 값이 특정한 패턴을 만족 시키면 조회하는 연산자
[작성법]
* WHERE 컬럼명 LIKE '패턴'
<LIKE에 사용되는 패턴(와일드 카드)>
| '%A' |
문자열 앞부분은 어떤 문자든 포함할 수 있지만
마지막은 A로 끝나는 문자열 |
| 'A%' | A로 시작하는 문자열 |
| '%A%' | A가 포함된 문자열 |
| 'A___' | A로 시작하고 그 뒤에 3글자만 있는 문자열 ex) ABCD (O), ABCDE(x) |
| '___A' | 앞에 3글자만 있고 A로 끝나는 문자열 |
#예제
EMPLOYEE 테이블에서 성이 '전'씨인 사원의 사번, 이름 조회
SELECT DEPT_CODE, EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
EMPLOYEE 테이블에서 EMAIL의 아이디 중 '_' 앞 쪽 글자 수가 3글자인 사원의
사번, 이름, 이메일 조회
↓ ↓문제 발생 ↓ ↓
SELECT DEPT_CODE, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '____%'; -- 문제발생
'_' 와일드 카드 사용시 문제점!!!!!!!
- 작성되는 문자열의 '_' 기호가
LIKE '_'와일드카드와
똑같이 인식되서 구분이 안되는 문제가 발생!!!!
[해결방법]
- LIKE의 ESCAPE OPTION 사용
ESCAPE OPTION : 와일드 카드가 아닌 단순 문자열로 인식
→ 지정된 특수문자 뒤 "한 글자"에만 적용된다!!
EX) WHERE 컬럼명 LIKE '__#_' ESCAPE '#';
→ # 뒤에 '_'는 일반 문자열로 인식된다!!!!!!
'BackEnd > MySQL' 카테고리의 다른 글
| [DB]Oracle Database의 개요 (0) | 2024.08.24 |
|---|---|
| [DB] 함수 (1) | 2024.08.24 |
| [DB] ORDER BY절 (0) | 2024.08.24 |
| [DB] DDL(Data Definition Language) (ALTER, DROP) (0) | 2024.08.23 |
| [DB] TCL(Transaction Control Language) (0) | 2024.08.22 |