- 14. COMMIT / ROLLBACK, DML구문 2022.03.07
- 13. LIKE, %, _ 2022.03.07
- 12. 날짜 변환 함수, BETWEEN A AND B 2022.03.07
- 11. UPPER(), LOWER(), INITCAP() 2022.03.07
- 10. NVL, COALESCE, 컬럼연결(결합) 2022.03.06
- 9. 컬럼 구조의 추가 및 제거 2022.03.05
SELECT *
FROM TBL_DEPT;
--==>>
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
데이터 입력
INSERT INTO TBL_DEPT VALUES(50, '개발부', '서울');
- 이 데이터는 TBL_DEPT 테이블이 저장되어 있는 하드디스크상에 저장된것이 아니라 메모리(RAM) 상에 입력된 것임
- 이를 하드디스크상에 물리적으로 저장하기 위해서는 COMMIT을 수행해야 한다.
커밋
COMMIT;
롤백(ROLLBACK)
ROLLBACK;
- COMMIT을 실행한 이후로 DML 구문(INSERT, UPDATE, DELETE)를 통해 변경된 데이터를 취소할 수 있다.
- DML 구문을 사용한 후 COMMIT 을 하고 나서 ROLLBACK을 실행해봐야 아무 소용 없다.
데이터 수정(UPDATE)
UPDATE TBL_DEPT
SET DNAME = '연구부', LOC = '경기'
WHERE DEPTNO = 50;
데이터 삭제(DELETE)
DELETE TBL_DEPT
WHERE DEPTNO = 50;
-- 이렇게 바로 지우기보다는
-- 아래처럼 확인하고 지우기
SELECT *
FROM TBL_DEPT
WHERE DEPTNO = 50;
DELETE
FROM TBL_DEPT
WHERE DEPTNO = 50;

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
|---|---|
| 15. ORDER BY 절 (0) | 2022.03.09 |
| 13. LIKE, %, _ (0) | 2022.03.07 |
| 12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
| 11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
LIKE
SELECT *
FROM TBL_SAWON
WHERE SANAME = '홍길동';
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '홍길동';
둘의 결과는 같음
LIKE와 함께 사용되는 %는 모든 글자 의미
LIKE와 함께 사용되는 _는 한 글자 의미
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김__';
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김%';
-- 이 라는 글자가 하나라도 포함되어 있는 항목 조회
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%';
-- 이 라는 글자가 두 번 들 어있는 항목 조회
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%이%';
참고로 데이터베이스 설계 과정에서 성과 이름을 분리하여 처리해야할 업무 계획이 있다면 테이블에서 성 컬럼과 이름 컬럼을 분리해서 구성해야 한다
왜냐하면 2글자 성이 존재하기 때문(남궁, 선우)
『99.99%』라는 글자가 포함된 행의 데이터 조회
SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99\\%%' ESCAPE '\\';
- ESCAPE로 정한 문자의 다음 한 글자를 와이들카드에서 탈출시킴
- 일반적으로 사용빈도가 낮은 특수문자를 사용함

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 15. ORDER BY 절 (0) | 2022.03.09 |
|---|---|
| 14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
| 12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
| 11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
| 10. NVL, COALESCE, 컬럼연결(결합) (0) | 2022.03.06 |
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE = '1981-09-28';
-- 가능하지만(오라클의 자동변환으로 인해서) 믿으면 안된다.
그래서 날짜 변환 함수를 사용해야 한다.
TO_DATE()
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE = TO_DATE('1981-09-28', 'YYYY-MM-DD');
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE >= TO_DATE('1981-09-28', 'YYYY-MM-DD');
- 오라클에서는 날짜 데이터에 대한 크기 비교 가능
- 과거보다 미래를 더 큰 값으로 간주
BETWEEN ⓐ AND ⓑ
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE BETWEEN TO_DATE('1981-04-02', 'YYYY-MM-DD')
AND TO_DATE('1981-09-28', 'YYYY-MM-DD');
-- 1981년 4월 2일과 1981년 9월 28일 사이
SELECT *
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 'S';
-- 문자열도 가능(사전식)
- BETWEEN ⓐ AND ⓑ는 날짜형, 숫자형, 문자형 데이터 모두에 적용된다
- 단, 문자형일 경우 아스키코드 순서(사전식 배열)를 따르기 때문에 대문자가 앞쪽에 위치하고 소문자가 뒤쪽에 위치한다.
- 또한 BETWEEN ⓐ AND ⓑ 는 해당 구문이 수행되는 시점에서 오라클 내부적으로는 부등호 연산자의 형태로 바뀌어 연산 처리된다.
SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB = 'SALESMAN'
OR JOB = 'CLERK';
SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB IN ('SALESMAN', 'CLERK');
SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB = ANY ('SALESMAN', 'CLERK');
- 위에 3가지 유형의 쿼리문은 모두 같은 결과를 반환
- 하지만, 맨 위의 쿼리문(OR)이 가장 빠르게 처리된다.
- 밑에 둘은 내부적으로 OR 구조로 변경되어 연산 처리된다.

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
|---|---|
| 13. LIKE, %, _ (0) | 2022.03.07 |
| 11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
| 10. NVL, COALESCE, 컬럼연결(결합) (0) | 2022.03.06 |
| 9. 컬럼 구조의 추가 및 제거 (0) | 2022.03.05 |
UPPER()
: 모두 대문자로 변환
LOWER()
: 모두 소문자로 변환
INITCAP()
: 첫 글자만 대문자로 하고 나머지는 모두 소문자로 변환
TBL_EMP 테이블에서 직종이 영업사원인 사람 조회하는 방법
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE JOB = UPPER('SALESMAN') OR JOB = LOWER('SALESMAN');
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE INITCAP(JOB) = INITCAP('SALESMAN');
-- UPPER, LOWER, INITCAP 다 가능

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 13. LIKE, %, _ (0) | 2022.03.07 |
|---|---|
| 12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
| 10. NVL, COALESCE, 컬럼연결(결합) (0) | 2022.03.06 |
| 9. 컬럼 구조의 추가 및 제거 (0) | 2022.03.05 |
| 8. 테이블 복사, 커멘트 (0) | 2022.03.04 |
NVL()
SELECT NULL "COL1", NVL(NULL, 10) "COL2", NVL(5, 10) "COL3"
FROM DUAL;
--==>> (null) 10 5
- 첫 번째 파라미터 값이 null이 아니면 그 값 그대로 반환
- null이면 두 번째 파라미터 값을 반환하고
NVL2()
SELECT ENAME "사원명", NVL2(COMM, '수당 有', '수당 無') "수당확인"
FROM TBL_EMP;
- 첫 번째 파라미터 값이NULL이면 세 번째 파라미터 값 반환
- NULL이 아니면 두 번째 파라미터 값을 반환하고
COALESCE()
- 매개변수 제한이 없는 형태로 인지하고 활용하기
- 맨 앞에 있는 매개변수부터 차례로 NULL인지 아닌지 확인하여 NULL인 경우 그다음 매개변수의 값을 반환한다.
- NULL이 아닌 경우 반환하고,
SELECT NULL "COL1"
, COALESCE(NULL, NULL, NULL, 30) "COL2"
, COALESCE(10, NULL, NULL) "COL3"
FROM DUAL;
--==>> (null) 30 10
컬럼과 컬럼의 연결(결합)
SELECT 1+2
FROM DUAL;
--==>> 3
SELECT 'A' || 'B'
FROM DUAL;
--==>> AB
SELECT ENAME || JOB
FROM TBL_EMP;
참고)
DATE SESSION변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
|---|---|
| 11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
| 9. 컬럼 구조의 추가 및 제거 (0) | 2022.03.05 |
| 8. 테이블 복사, 커멘트 (0) | 2022.03.04 |
| 7. 오라클 주요 자료형 (0) | 2022.03.03 |
- TBL_EMP 테이블에 컬럼 추가(주민등록번호 데이터를 담을 컬럼 추가)
ALTER TABLE TBL_EMP
ADD SSN CHAR(13);
- TBL_EMP 테이블에 추가한 컬럼 구조적 제거
ALTER TABLE TBL_EMP
DROP COLUMN SSN;
- TBL_EMP 행 삭제
DELETE TBL_EMP;
--==>> 14개 행 이(가) 삭제되었습니다.
SELECT *
FROM TBL_EMP;
--> 에러 발생하지 않음
-- 다만 데이터 없음. 테이블의 구조는 그대로 남아있고 데이터만 삭제된 상황
- TBL_EMP 테이블 삭제
DROP TABLE TBL_EMP;
SELECT NULL, NULL+2, NULL*2, 2/NULL
FROM DUAL;
--==>>
- null은 상태의 값을 의미하며, 논리적으로는 실제 존재하지 않는 값이기 때문에 null이 연산아 포함될 경우 그 결과는 무조건 null
- NULL이 포함된 항목 조회
SELECT ENAME "사원명", JOB "직종명", SAL "급여", COMM "커미션"
FROM TBL_EMP
WHERE COMM IS NULL;
→ NULL은 산술적인 연산이 아니라 논리적 연산이므로 IS
→ NULL은 실제 존재하는 값이 아니기에 일반적인 연산자를 활용해 비교할 수 없다. NULL을 대상으로 사용할 수 없는 연산자들은 >=, <=, >, <, !=, ^=. <>
- NULL이 포함되지 않은 항목 조회
SELECT ENAME "사원명", JOB "직종명", SAL "급여", COMM "커미션"
FROM TBL_EMP
WHERE COMM IS NOT NULL;
SELECT ENAME "사원명", JOB "직종명", SAL "급여", COMM "커미션"
FROM TBL_EMP
WHERE NOT COMM IS NULL;

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
| 11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
|---|---|
| 10. NVL, COALESCE, 컬럼연결(결합) (0) | 2022.03.06 |
| 8. 테이블 복사, 커멘트 (0) | 2022.03.04 |
| 7. 오라클 주요 자료형 (0) | 2022.03.03 |
| 6. 관계형 데이터 베이스 (0) | 2022.03.02 |