01. DQL(SELECT) PART.2
<LIKE>
비교하고자는 컬럼값이 내가 제시한 특정 패턴에 만족할 경우 조회
[표현법]
비교한 대상컬럼 LIKE '특정패턴'; - > 일치하는 것만 가져온다.
특정패턴을 제시할 때 와일드카드라는 특정패턴이 정의되어야한다.
1. '%' : 포함문자 검색(0글자 이상 전부 조회)
EX) 비교할 대상 컬럼 LIKE '문자%' : 비교할 대상컬럼 값 중에서 해당문자로 시작하는 값들만 가져온다.
비교할 대상 컬럼 LIKE '%문자' : 비교할 대상컬럼 값 중에서 해당문자로 끝나느 값들만 가져온다.
비교할 대상 컬럼 LIKE '%문자%' : 비교할 대상컬럼 값 중에서 해당문자로 포함된 값 조회
2. '_' : 1글자를 대체하는 검색
EX) 비교할 대상 컬럼 LIKE '_문자' : 비교대상컬럼값 문자 앞에 아무글자나 한글자가 있는 값을 조회
비교할 대상 컬럼 LIKE '문자_' : 비교대상컬럼값 문자 뒤에 아무글자나 한글자가 있는 값을 조회
비교할 대상 컬럼 LIKE '_문자_' : 배교대상컬럼 값 문자 앞, 뒤에 아무글자나 한글자가 있는 값을 조회
비교할 대상 컬럼 LIKE '___문자____' : 내가 원하는 형태로 _를 통해서 문자수를 조절할 수 있다.
EX1)
사원들 중 성이 전씨인 사원의 사원명, 급여, 입사일 조회
1
2
3
|
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
|
cs |
EX2)
사원들중 이름이 나라인 사원의 사원명, 급여, 입사일 조회
1
2
3
4
|
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%나라';
|
cs |
EX3)
사원들중 이름에 중간에 '하'라는 글자가 포함된 사원의 사원명, 급여, 입사일
1
2
3
|
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '_하_';
|
cs |
EX4)
이메일 중에 _앞글자가 3글자인 사원들의 사번, 이름, 이메일 조회
이 때는
WHERE EMAIL LIKE '____%'; ->와일드카드 문자때문에 정상출력이 되지 않는다.
와일드카드문자와 일반문자를 구분해줘야한다.
데이터값으로 취급하고싶은 와일드카드 문자 앞에 나만의 탈출문자를 제시해서 탈출시켜주면 된다.
ESCAPE OPTION을 등록해서 사용
1
2
3
|
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___/_%' ESCAPE '/'
|
cs |
<IN>
WHERE절에서 비교대상 컬럼값이 내가 제시한 목록중에 일치하는 값이 있는지 검사
[표현법]
비교대상컬럼 IN ('값', '값', '값')
EX)
부서코드가 D6이거나 D5인 부서원들의 이름, 부서코드, 급여조회
1
2
3
|
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN('D6', 'D8', 'D5');
|
cs |
<연산자 우선순위>
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. IS NULL / LIKE / IN
5. BETWEEN A AND B
6. NOT
7. AND
8. OR
================================ 연습 문제 =================================
1. 사수가 없고 부서배치도 받지 않은 사원들의 사원명, 사번, 부서코드 조회
1
2
3
4
|
SELECT EMP_NAME 사원명, EMP_ID 사번, DEPT_CODE 부서코드
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
|
cs |
2. 연봉(보너스 미 포함)이 3000만원 이상이고 보너스를 받지 않는 사원들의 사번, 사원명, 급여, 보너스 조회
1
2
3
|
SELECT EMP_ID 사번, EMP_NAME 사원명 , SALARY 급여, BONUS 보너스
FROM EMPLOYEE
WHERE SALARY * 12 >= 30000000 AND BONUS IS NULL;
|
cs |
3. 입사일이 '95/01/01' 이상이고 부서배치를 받지않은 사원들의 사번, 사원명, 입사일, 부서코드 조회
1
2
3
|
SELECT EMP_ID 사번, EMP_NAME 사원명, HIRE_DATE 입사일, DEPT_CODE 부서코드
FROM EMPLOYEE
WHERE HIRE_DATE >= '95/01/01' AND DEPT_CODE IS NULL;
|
cs |
4. 급여가 200만원 이상이고 500만원 이하인 사원 주에서 입사일이 '01/01/01' 이상이고 보너스를 받지 않은 사원들의
사번, 사원명, 급여, 입사일, 보너스 조회
1
2
3
|
SELECT EMP_ID 사번, EMP_NAME 사원명, SALARY 급여, HIRE_DATE 입사일, BONUS 보너스
FROM EMPLOYEE
WHERE SALARY BETWEEN 2000000 AND 5000000 AND HIRE_DATE >= '01/01/01' AND BONUS IS NULL;
|
cs |
5. 보너스를 포함 연봉이 NULL이 아니고 이름에 '하'가 포함된 사원들의 사번, 사원명, 급여, 보너스 포함 연봉 조회
1
2
3
4
|
SELECT EMP_ID 사번, EMP_NAME 사원명, SALARY 급여, (SALARY + (SALARY * BONUS)) * 12 보너스포함연봉
FROM EMPLOYEE
WHERE (SALARY + (SALARY * BONUS)) * 12 IS NOT NULL AND EMP_NAME LIKE '%하%';
|
cs |