DB_DML (SELECT) (2)

bbsm·2023년 1월 25일
0

학원 수업 복습

목록 보기
18/36

LIKE의 패턴을 나타내는 문자(와일드 카드)

'%' : 포함
'A%' : A로 시작하는 문자열
'%A' : A로 끝나는 문자열
'%A%' : A를 포함하는 문자열

'_' : 글자 수

--EMPLOYEE 테이블에서 성이 '전'씨인 사원의 사번, 이름 조회
SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';

--EMPLOYEE 테이블에서 전화번호가 010으로 시작하지 않는 사원의 사번, 이름, 전화번호 조회
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

-- EMPLOYEE 테이블에서 EMAIL의 _앞에 글자가 세글자인 사원 조회
SELECT EMP_NAME ,EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE'____%';

-- 문제점 : 와일드 카드 문자()와 패턴에 사용된 일반 문자()의 모양이 같아서 문제 발생
-- 해결 방법 : ESCAPE OPTION을 이용하여 일반 문자로 처리할 '_', '%' 앞에 아무 특수문자나 불임

<연습문제>
EMPLOYEE 테이블에서 이메일'_'앞이 4글자 이면서 부서코드가 'D9' 또는 'D6'이고 ,
입사일이 1990-01-01 ~ 2000-12-31 이고,급여가 270만 이상인 사원의
사번, 이름, 이메일, 부서보드, 입사일, 급여 조회

연산자 우선순위

  1. 산술연산자 (+ - * / )
  2. 연결연산자 ( || )
  3. 비교연산자 ( > < >= <= = != <> )
  4. IS NULL / IS NOT NULL, LIKE, IN / NOT IN
  5. BETWEEN AND / NOT BETWEEN AND
  6. NOT(논리 연산자)
  7. AND(논리 연산자)
  8. OR(논리 연산자)

IN 연산자

: 비교하려는 값과 목록에 작성된 값 중 일치하는 것이 있으면 조회하는 연산자

[작성법]
WHERE 컬럼명 IN (값1, 값2, 값3.....)

-- EMPLOYEE 테이블에서 부서코드가 D1, D6, D9인 사원의 사번, 이름, 부서코드 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IN('D1', 'D6', 'D9');
(WHERE DEPT_CODE NOT IN('D1', 'D6', 'D9');)
--> NOT 연산자 사용 가능

NULL처리 연산자

NULL : 컬럼에 값이 없음을 의미하는 값

1) IS NULL: NULL인 경우 조회
2) IS NOT NULL : NULL이 아닌 경우

-- EMPLOYEE 테이블에서 보너스가 있는 사원의 이름, 보너스 조회
SELECT EMP_NAME, BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;

ORDER BY절

: 정렬과 관계

-- EMPLOYEE 테이블 급여 오름차순으로 번, 이름, 급여 조회
SELECT EMP_ID , EMP_NAME , SALARY
FROM EMPLOYEE
ORDER BY SALARY;
-- ASC가 기본값이어서 굳이 안써도 됨

-- 급여 200만 이상인 사원의 사번, 이름, 급여 조회 단, 급여 내림 차순으로 조회
SELECT EMP_ID , EMP_NAME , SALARY
FROM EMPLOYEE
WHERE SALARY >= 2000000
ORDER BY SALARY DESC;
-- SALARY 대신 컬럼 순서인 3을 써줘도 됨 별칭으로 써줘도 됨 근데 보통 컬럼명으로

정렬 중첩

: 대분류 정렬 후 소분류 정렬 ( , 사용하면 됨)

SELECT EMP_NAME, DEPT_CODE , SALARY
FROM EMPLOYEE
ORDER BY DEPT_CODE, SALARY DESC;
-- 오름차순은 생략

0개의 댓글