문자열 및 날짜 연산, 논리 연산, 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연산자는 같다고 봐도 무방
우선순위 규칙
- 산술 연산자
- 연결 연산자
- 비교 조건
- IS, [NOT] NULL, LIKE, [NOT] IN
- [NOT] BETWEEN
- !=
- NOT 조건
- AND 조건
- 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;
'Database - Oracle DB > 1주차(Database - Oracle DB)' 카테고리의 다른 글
[SQL] DB 스터디 - 05 (0) | 2019.01.03 |
---|---|
[SQL] DB 스터디 - 04 (0) | 2019.01.02 |
[SQL] Advanced SQL - 기본적인 SELECT 명령문 작성 (0) | 2019.01.02 |
[SQL] DB스터디 - 03 (0) | 2018.12.28 |
[SQL] DB스터디 - 01 (0) | 2018.12.27 |