- 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
- 8. 테이블 복사, 커멘트 2022.03.04
- 7. 오라클 주요 자료형 2022.03.03
- 6. 관계형 데이터 베이스 2022.03.02
- 5. TABLESPACE 생성 2022.03.02
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 |
- 테이블 복사(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';
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'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
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'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
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'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 |