SQL

01. DQL(SELECT) PART.2

비보호신호등 2024. 8. 12. 17:19

<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