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 구조로 변경되어 연산 처리된다.

 


https://www.instagram.com/p/CaURIEbLTtN/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'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 다 가능

 

 

 

 

 


https://www.instagram.com/p/CaUTDTIpikv/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'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'

 

 

 


https://www.instagram.com/p/CajSLqHJPpe/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'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;

 

 

 


https://www.instagram.com/p/CZoTTZ3p1No/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'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
  • 테이블 복사(DEPT → TBL_DEPT)
CREATE TABLE TBL_DEPT
AS
SELECT *
  FROM DEPT;

 

  • 테이블의 커멘트 정보 확인
SELECT *
  FROM USER_TAB_COMMENTS;

 

  • 테이블 레벨의 커멘트 정보 입력
COMMENT ON TABLE TBL_EMP IS '사원 정보';

 

  • 컬럼 레벨의 커멘트 데이터 확인
SELECT *
  FROM USER_COL_COMMENTS;

-- TBL_DEPT 테이블 소속의 컬럼들만 확인
SELECT *
  FROM USER_COL_COMMENTS
 WHERE TABLE_NAME = 'TBL_DEPT';

 

  • TBL_EMP 테이블을 대상으로 테이블에 포함된 컬럼에 대한 커멘트 데이터 설정
DESC TBL_EMP;

COMMENT ON COLUMN TBL_EMP.EMPNO IS '사원 번호';

SELECT *
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = 'TBL_EMP';

 


https://www.instagram.com/p/CaZHxcqJmHV/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'SQL > Oracle' 카테고리의 다른 글

10. NVL, COALESCE, 컬럼연결(결합)  (0) 2022.03.06
9. 컬럼 구조의 추가 및 제거  (0) 2022.03.05
7. 오라클 주요 자료형  (0) 2022.03.03
6. 관계형 데이터 베이스  (0) 2022.03.02
5. TABLESPACE 생성  (0) 2022.03.02

1. 숫자형

NUMBER          -> -10의 38승-1 ~ 10의 38승

NUMBER(3)      -> -999~999

NUMBER(4)      -> -9999~9999

NUMBER(4, 1)  -> -999.8 ~ 999.9

 

2. 문자열

CHAR                 → 고정형 크기

CHAR(10)           → 무조건 10Byte 소모

CHAR(10)           ←'강의실'                    6Byte이지만 10Byte를 소모

CHAR(10)           ← '강의실강의실'        10Byte 를 초과하므로 입력 불가

VARCHAR2         → 가변형 크기

VARCHAR2(10)   → 담긴 데이터에 따라 크기가 변화

VARCHAR2(10)   ← '강의실'                6Byte

VARCHAR2(10)   ← '강의실강의실'     10Byte 를 초과하므로 입력 불가

NCHAR               → 유니코드 기반(글자수) 고정형 크기

NVARCHAR2       → 유니코드기반(글자수) 가변형 크기

NVARCHAR2(10) → 10글자

 

3.날짜

DATE

SELECT SYSDATE              -- 현재 년월일 반환하는 함수
FROM DUAL;
--==>> 2022-02-17
  • 날짜 형식에 대한 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM--DD HH:MI:SS';
--==>>Session이(가) 변경되었습니다.
SELECT SYSDATE
FROM DUAL;
--==>>2022-02--17 05:14:34

 

 

 

 

 


https://www.instagram.com/p/CaXMPGYJwoj/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'SQL > Oracle' 카테고리의 다른 글

10. NVL, COALESCE, 컬럼연결(결합)  (0) 2022.03.06
9. 컬럼 구조의 추가 및 제거  (0) 2022.03.05
8. 테이블 복사, 커멘트  (0) 2022.03.04
6. 관계형 데이터 베이스  (0) 2022.03.02
5. TABLESPACE 생성  (0) 2022.03.02

관계형 데이터 베이스

  • 각각의 데이터를 테이블의 형태로 연결시켜 저장해 놓은 구조
  • 그리고 이들 각각의 테이블들 간의 관계를 설정하여 연결시켜 놓은 구조

SELECT 문의 처리(PARSING) 순서

SELECT 컬럼명      -- 5
  FROM 테이블명    -- 1
 WHERE 조건절      -- 2
GROUP BY 절        -- 3
HAVING 조건절      -- 4
ORDER BY 절        -- 6

 

  • SCOTT 소유의 테이블 조회
SELECT *
  FROM TAB;

 

  • 각 테이블의 데이터 조회
SELECT *
  FROM DEPT;

 

  • DEPT 테이블에 존재하는 컬럼의 구조 조회
DESCRIBE DEPT;

DESC DEPT;      --둘이 같음

 

 

변경(수정) 구조적 - ALTER (구조적인 변경할때)

               데이터 - UPDATE (데이터를 변경할때)

 

제거(삭제) 구조적 - DROP

               데이터 - DELETE

 

생성(입력) 구조적 - CREATE

                데이터 - INSERT

 


https://www.instagram.com/p/CaY_98nPD9U/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'SQL > Oracle' 카테고리의 다른 글

10. NVL, COALESCE, 컬럼연결(결합)  (0) 2022.03.06
9. 컬럼 구조의 추가 및 제거  (0) 2022.03.05
8. 테이블 복사, 커멘트  (0) 2022.03.04
7. 오라클 주요 자료형  (0) 2022.03.03
5. TABLESPACE 생성  (0) 2022.03.02

※ TABLESPACE 란?

--> 세그먼트(테이블, 인덱스, ...)를 저장해두는 오라클의 논리적인 저장 구조를 의미한다.

-- (세그먼트: 오라클에서 저장공간을 필요로 하는 것을 말한다)

CREATE TABLESPACE TBS_EDUA                  -- 생성하겠다. 테이블스페이스를... TBS_EDUA라는 이름으로
DATAFILE 'C:\\TESTDATA\\TBS_EDUA01.DBF'       -- 물리적 데이터 파일 경로 및 이름
SIZE 4M                                     -- 사이즈(용량)
EXTENT MANAGEMENT LOCAL                     -- 오라클 서버가 세그먼트를 알아서 관리
SEGMENT SPACE MANAGEMENT AUTO;              -- 세그먼트 공간 관리도 오라클 서버가 자동으로 관리
--==>>TABLESPACE TBS_EDUA이(가) 생성되었습니다.

 

※ 테이블스페이스 생성 구문을 실행하기 전에 해당 경로의 물리적인 디렉터리 생성이 필요하다.

-- (C:\TESTDATA)

 

 

생성된 테이블스페이스 조회

SELECT *
FROM DBA_TABLESPACES; 
--==>>
/*
         :
TBS_EDUA	8192	65536	1	2147483645	2147483645	65536	ONLINE	PERMANENT	LOGGING	NO	LOCAL	SYSTEM	NO	AUTO	DISABLED	NOT APPLY	NO	HOST	NO
*/

 

파일 용량 정보 조회(물리적인 파일 이름 조회)

SELECT *
FROM DBA_DATA_FILES;
--==>>
/*
    :
C:\\TESTDATA\\TBS_EDUA01.DBF	5	TBS_EDUA	4194304	512	AVAILABLE	5	NO	0	0	0	3145728	384	ONLINE
    :
*/

 

오라클 사용자 계정 생성

CREATE USER lyt IDENTIFIED BY 0000
DEFAULT TABLESPACE TBS_EDUA;
--==>> User LYT이(가) 생성되었습니다.
--> lyt라는 사용자 계정을 생성하고 패스워드는 0000부분에 설정
--  이 계정을 통해 생성하는 오라클 세그먼트는 TES_EDUA 라는 테이블스페이스에 생성할 수 있도록 설정

※ 생성된 오라클 사용자 계정(각자 본인 이름 이니셜 계정)을 통해 접속 시도

→ 접속 불가(실패)

『create session』 권한이 없기 때문에 접속 불가.

 

 

생성된 오라클 사용자 계정(각자 본인 이름 이니셜 계정)에 오라클 서버 접속이 가능하도록 CTREATE SESSION 권한 부여

GRANT CREATE SESSION TO LYT;
--==>> Grant을(를) 성공했습니다.
SELECT *
FROM DBA_SYS_PRIVS;
--==>>
/*
LYT CREATE SESSION NO
*/

 

 

각자 생성한 오라클 사용자 계정에 테이블 생성이 가능하도록 CREATE TABLE 권한 부여

GRANT CREATE TABLE TO LYT;
--==>> Grant을(를) 성공했습니다.

 

 

각자 생성한 오라클 사용자 계정에 테이블 스페이스(TBS_EDUA) 에서 사용할 수 있는 공간(할당량) 지정.

ALTER USER LYT
QUOTA UNLIMITED ON TBS_EDUA; --(QUOTA가 할당량임, 이건 TBS_EDUA에서 무제한으로 할당)
--==>> User LYT이(가) 변경되었습니다.

 

 

 

 


부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


'SQL > Oracle' 카테고리의 다른 글

10. NVL, COALESCE, 컬럼연결(결합)  (0) 2022.03.06
9. 컬럼 구조의 추가 및 제거  (0) 2022.03.05
8. 테이블 복사, 커멘트  (0) 2022.03.04
7. 오라클 주요 자료형  (0) 2022.03.03
6. 관계형 데이터 베이스  (0) 2022.03.02