Database - Oracle DB/1주차(Database - Oracle DB)

[SQL] DB스터디 - 02

김야키 2018. 12. 27. 16:31


문자열 및 날짜 연산, 논리 연산, BETWEEN


선택되는 행 제한

- WHERE절을 사용하여 반환되는 행을 제한

- WHERE절은 FROM절 다음에 작성

예) EMPLOYEES테이블의 DEPARTMENT_ID의 값이 90인 사원의 정보만 출력

-> SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, DEPARTMENT_ID

    FROM EMPLOYEES

    WHERE DEPARTMENT_ID = 90;




문자열 및 날짜

- 문자열 및 날짜 값은 작은 따옴표로 묶음

- 문자 값은 대소문자를 구분하고 날짜 값은 형식을 구분 함

- 기본 날짜 표시 형식은 DD-MON-RR

예) EMPLOYEES테이블에서 LAST_NAME이 'Whalen'인 사원 정보, HIRE_DATE가 '17-FEB-96'인 사원 출력

-> SELECT LAST_NAME, JOB_ID, DEPARTMENT_ID

    FROM EMPLOYEES

    WHERE LAST_NAME = 'Whalen';

-> SELECT LAST_NAME

    FROM EMPLOYEES

    WHERE HIRE_DATE = '17-FEB-96';




비교 연산자

- WHERE절에 비교 연산자를 이용해 범위의 값 혹은 특정 값을 출력할 수 있음

- 해당 컬럼에 있는 값이 정렬을 할 수 있는 부분 이라면, 문자열을 이용한 비교 연산도 가능

예) SALARY 의 값이 3000보다 작거나 같은 사원 출럭

-> SELECT LAST_NAME, SALARY

    FROM EMPLOYEES

    WHERE SALARY <= 3000;




BETWEEN 연산자를 사용하는 범위 조건

- BETWEEN연산자를 사용하여 값의 범위를 기반으로 행을 표시

예) SALARY의 값이 2500 < SALARY < 3500 인 사원 출력

-> SELECT LAST_NAME, SALARY

    FROM EMPLOYEES

    WHERE SALARY BETWEEN 2500 AND 3500;

- AND절 앞에는 상대적으로 뒤에 나오는 값 보다는 작은 값을 입력해야 함

- 그렇지 않으면 에러는 나오지 않지만, 검색이 되지 않음

- 문자열 역시 BETWEEN연산자 사용 가능

- 모든 비교 연산자는 기본적으로 정렬이 되는 부분에 사용되기 때문에 자동으로 정렬이 될 수는 있음

- 하지만 ORDER BY명령어를 사용하지 않으면 정렬이 되었다는 보장이 없음




IN 연산자를 사용하는 멤버 조건

- IN연산자를 사용하여 값을 테스트 함

예) MANAGER_ID의 값에 100, 101, 201이 포함된 사원의 정보만 출력

-> SELECT EMPLOYEE_ID, LAST_NAME, SALARY, MANAGER_ID

    FROM EMPLOYEES

    WHERE MANAGER_ID IN (100, 101, 201);




LIKE연산자를 사용하여 패턴 일치

- LIKE연산자를 사용하여 검색 문자열 값의 대체 문자 검색을 수행

- 검색 조건에는 리터럴 문자나 숫자가 포함될 수 있음

O %는 0개 이상의 문자를 나타냄 ( 해당 문자가 포함만 되어 있어도 됨)

O _은 한 문자를 나타냄 ( 위치에 있는 문자와 개수가 완전 일치 해야 함)

예) FIRST_NAME에 첫 글자가 'S'인 사원 출력

-> SELECT FIRST_NAME

    FROM EMPLOYEES

    WHERE FIRST_NAME LIKE 'S%';


- REGEXP_LIKE 라는 함수를 이용해 특정 문자 배열(알파벳 등)을 검색할 수 있는 기능이 있음

- '정규식'이라고 함

예) customers테이블에서 PHONE_NUMBER가 유효하지 않은 행을 검색

->

SELECT

*

FROM

customers

WHERE

REGEXP_LIKE(phone_number,'[[:alpha:]]');

|    PHONE_NUMBER

|     (528) 885-A458 

|     (225) 62T-2354  






대체 문자 결합

- 패턴 일치를 위해 두 대체 문자(%, _)를 리터럴 문자와 결합할 수 있음

예) LAST_NAME에 문자 'o'가 두번째 위치에 있는 사원의 정보 출력

-> SELECT LAST_NAME

    FROM EMPLOYEES

    WHERE LAST_NAME LIKE '_o%';

예)행의 값에 '_'문자가 포함되어 있는 경우의 출력

-> SELECT *

    FROM EMPLOYEES

    WHERE JOB_ID LIKE '%A_%';

- 만약 '_'를 실제 저장된 값으로 인식시키고 싶다면

-> SELECT *

    FROM EMPLOYEES

    WHERE JOB_ID LIKE '%A!_%' ESCAPE '!';

- ESCAPE식별자를 이용해 '_'자체를 하나의 문자로 인식 시킴

- 해당 식별자를 이용하면 와일드카드를 문자열로 인식 시킬 수 있음




논리 연산자를 사용하여 조건 정의

- 두 개 이상의 조건을 비교할 때 사용

- AND : 구성 요소 조건이 모두 참인경우 TRUE를 반환

- OR : 구성 요소 조건 중 하나라도 참인경우 TRUE를 반환

- NOT : 조건이 거짓인 경우 TRUE를 반환




AND 연산자 사용

- AND 연산에서는 두 구성 요소 모두 조건이 참이어야 함

예) DEPTNO가 30이고, SAL이 1500보다 큰 사원만 출력

-> SELECT *

    FROM EMP

    WHERE DEPTNO = 30

    AND SAL > 1500;




OR 연산자 사용

- OR 연산에서는 두 구성 요소 조건 중 하나가 참이면 됨

예) SALARY가 10000이상 이거나 JOB_ID에서 'MAN'문자가 포함된 사원 만 출력

-> SELECT *

    FROM EMPLOYEES

    WHERE SALARY >= 10000

    OR JOB_ID LIKE '%MAN%';

O IN연산자와 OR연산자는 같다고 봐도 무방




우선순위 규칙

    1. 산술 연산자
    2. 연결 연산자
    3. 비교 조건
    4. IS, [NOT] NULL, LIKE, [NOT] IN
    5. [NOT] BETWEEN
    6. !=
    7. NOT 조건
    8. AND 조건
    9. OR조건




ORDER BY 절 사용

- ORDER BY 절을 사용하여 검색된 생을 정렬

O ASC : 오름차순(기본값)

O DESC : 내림차순

- ORDER BY 절은 SELECT 문의 맨 마지막에 옴

- BY와 ASC(DESC) 사이에 특정 값을 넣으면 해당 값에 따라 정렬





단일 앰퍼샌드 치환 변수 사용

- 변수 앞에 앰퍼샌드(&)를 붙이면 사용자가 값을 입력하도록 할 수 있음

- SQL Developer에서 재공하는 기능

예) EMPLOYEE_ID를 사용자가 임의의 값을 입력하도록

-> SELECT *

    FROM EMPLOYEES

    WHERE EMPLOYEE_ID = &EMPLOYEE_NUM;