SQLD (4)
▶내장형 함수 (BUILT-IN-Function)
-형변환 함수, 문자열 함수, 숫자형 함수, 날짜형 함수
→명시적(Explicit) / 암시적 (Implicit) 형변환
-형변환
두 개의 데이터의 데이터 타입이 일치하도록 변환하는 것
-명시적 형변환
-함수를 사용해서 데이터 타입을 일치시킴
-개발자가 SQL을 사용할 때 사용
→INDEX 사용할려면 명시적 형변환 사용
ex)
SELECT *
FROM EMP
WHERE EMPNO = TO_NUMBER('100');
-암시적 형변환
-데이터베스 관리 시스템이 자동으로 함 (내부적으로 형변환 수행)
ex)
SELECT *
FROM EMP
WHERE EMPNO = '100'; // 100 : 암시적 형변환
▶내장형 함수 (BUILT-IN-Function)
-형변환 함수, 문자열 함수, 숫자형 함수, 날짜형 함수
*형변환 함수
-TO_NUMBER (문자열)
문자열 → 숫자
-TO_CHAR (숫자 or 날짜, [FORMAT])
숫자 or 날짜 → FORMAT의 문자로
-TO_DATE (문자열, FORMAT)
문자열 → FORMAT의 날짜형으로 YYYYMMDD
*인덱스 칼럼에 형변환을 수행하면 인덱스 사용 x
-인덱스는 기본적으로 변형이라는 것이 발생하면 인덱스 사용 x
∴ 인덱스 칼럼에 형변환이 발생하면 인덱스 사용 x
*문자형 함수
-ASCII (문자)
문자 or 숫자 → ASCII 코드값으로 변환
-CHAR ( ASCII 코드값)
ASCII 코드값 → 문자
-SUBSTR (문자열, m, n)
문자열 m번째 위치부터 n개를 자름
-CONCAT (문자열1, 문자열2)
-문자열 1과 2를 결합
-oracle은 ||, MS-SQL은 +
-LOWER (문자열)
영문자 소문자로
-UPPER (문자열)
영문자 대문자로
-LENGTH or LEN (문자열)
공백 포함 문자열 길이
-LTRIM (문자열, 지정문자)
왼쪽에서 지정문자 삭제 (공백도 삭제) → 지정문자 삭제 후 생긴 공백
-RTRIM (문자열, 지정문자)
오른쪽에서 지정된 문자 삭제 (공백도 삭제)
-TRIM (문자열, 지정문자)
왼, 오에서 지정된 문자 삭제 (공백도 삭제)
*숫자형 함수
-ABS (숫자)
절댓값
-SIGN (숫자)
양(1), 0, 음(-1) 구별
-MOD (숫자1, 숫자2)
1 ÷ 2 의 나머지 (% 사용 o)
-CEIL / CEILING (숫자)
숫자보다 작거나 같은 최대 정수
-ROUND (숫자, m) // m : 기본값 o
소수점 m 자리에서 반올림
-TRUNC (숫자, m) // m : 기본값 o
소수점 m 자리에서 절삭
*날짜형 함수
-SYSDATE
오늘 날짜를 날짜 타입으로 알려주무
-EXTRACT ('날짜요소' from 컬럼)
날짜 정보추출
날짜요소 (year, month, day, hour, minute, second)
SELECT SYSDATE,
EXTRACT(YEAR FROM SYSDATE),
EXTRACT(YEAR FROM SYSDATE)
FROM DUAL;
SYSDATE | EXTRACT(YEAR FROM SYSDATE) | EXTRACT(YEAR FROM SYSDATE) |
18/06/26 | 2018 | 20180626 |
→DUAL 테이블
-Oracle엔 기본적으로 DUAL 테이블이라는 Dumm 테이블이 존재 o
-임시로 사용자가 사용할 수 o 테이블로 내장형 함수 실행 시도 사용 o
-Oracle 모든 사용자가 사용 o
▶DECODE
DECODE (컬럼, 숫자, 'TRUE', 'FALSE')
컬럼 = 숫자 면 TRUE
≠ 면 FALSE
▶CASE
-조건문처럼 사용 o
-WHERE 구 조건, THEN은 참, ELSE는 거짓
CASE
WHEN 조건문 THEN ~
. . .
ELSE ~
END (AS ~ )
▶ROWNUM
-최종 결과집합에 대한 순번
-최종적인 결과집합에 부여되는 가상의 일렬번호
-논리적인 일렬번호 부여
-조회되는 행 수를 제한 할 때 많이 사용
-데이터 출력 시 부여되는 논리적 순번
-if) 페이지 단위 출력 시 인라인 뷰 사용 o
-(오라클) SELECT * FROM 테이블명
WHERE ROWNUM <= 10;
-(SQL Server) SELECT TOP(10) FROM 테이블명;
-(MY SQL) SELECT * FROM 테이블명 LIMIT 10;
ex)
SELECT *
FROM ( SELECT ROWNUM list, ENAME // list : 별칭
FROM EMP)
WHERE list BETWEEN 5 AND 10; →특정 행만 조회
▶ROWID
-ORACLE 데이터베이스 내에서 데이터를 구분할 수 있는 유일한 값
-SELECT 문으로 확인 o
-데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는지 알 수 o
*ROWID 구조
오브젝트 번호 | 1 ~ 6 | 오브젝트 별로 유일한 값을 가지고 있으며 해당 오브젝트가 속해 있는 값 |
상대 파일 번호 | 7 ~ 9 | 테이블 스페이스에 속해 있는 데이터 파일에 대한 상대 파일 번호 |
블록 번호 | 10 ~ 15 | 데이터 파일 내부에서 어느 블록에 데이터가 있는지 알려줌 |
데이터 번호 | 16 ~ 18 | 데이터 블록에 데이터가 저장되어 있는 순서를 의미 |
SELECT ROWID 칼럼명
FROM 테이블명;
*모든 테이블은 rowid를 가지고 o
▶WITH 구문
-서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 o 구문
-서브쿼리 블록에 별칭 지정 o
-옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단
WITH 테이블명 AS
(SELECT 칼럼 FROM 테이블 ...) // 서브쿼리 사용해서 임시 테이블 만듬
SELECT 칼럼 FROM 테이블 ~ ;
▶GRANT (DCL)
-데이터베이스 사용자에 권한을 부여
-데이터베이스 사용을 위해서는 권한이 필요
GRANT 권한(privileges) ON 테이블명 TO 사용자 지정(user);
*Privilegees (권한)
SELECT 지정된 테이블에 SELECT 권한 부여
INSERT insert 권한 부여
UPDATE update 권한 부여
DELETE delete 권한 부여
REFERENCES 참조 제약 조건 생성 권한 부여
ALTER 수정 할 수 o, 권한 부여
INDEX 인덱스 생성 o, 권한 부여
ALL 테이블 모든 권한 부여
*WITH GRANT OPTION
-WITH GRANT OPTION
-특정 사용자에게 권한을 부여할 수 o 권한 부여
-권한을 A가 → B에게 B가 → C에게 부여했을 때, A가 권한을 취소 (Revoke)하면 모든 권한 회수
A → B, B → C
A → x
A o, B x, C x
-WITH ADMIN OPTION
-테이블에 대한 모든 권한을 부여
-권한을 A가 → B에게 B가 → C에게 부여했을 때, A가 권한을 취소 (Revoke)하면 B만 권한 취소
A → B, B → C
A → x
A o, B x, C o
GRANT 권한(privileges) ON 테이블명 TO 사용자(user) WITH GRANT OPTION;
// WITH GRANT OPTION : 권한을 부여할 수 o 권한
▶REVOkE (DCL)
-데이터베이스 사용자에게 부여된 권한을 회수함
REVOKE 권한 ON 테이블명
FROM 사용자;
REVOKE 권한 FROM 테이블;
▶COMMIT (TCL)
-insert, update, delete 문으로 변경한 데이터를 데이터베이스에 반영
-변경 전 데이터는 잃어버림
-다른 모든 데이터베이스 사용자는 변경된 데이터를 볼 수 o
-Commit이 완료되면 데이터베이스 변경으로 인한 LOCK이 해제 된 (unLock)
-Commit이 완료되면 다른 모든 DB 사용자는 변경된 데이터를 조작 할 수 o
-Commit을 실행하면 하나의 트랜잭션 관정을 종료 함
-COMMIT;
-SET AUTOCOMMIT ON;
└ SQL PLUS 프로그램이 정상적으로 종료되면 자동 commit이 됨
└ DDL 및 DCL을 사용하는 경우 자동 commit 됨
▶ROLLBACK (TCL)
-rollback 실행 시 데이터에 대한 변경 사용을 모두 취소하고 트랜잭션을 종료
-Insert, Update, Delete 문의 작업을 모두 취소
-단, 이전에 commit 한 곳까지만 복구
-rollback을 실행하면 Lock이 해제되고, 다른 사용자도 데이터베이스 행을 조작 o
ROLLBACK;
▶SAVEPOINT (TCL)
-트랜잭션을 작게 분할하여 관리하는 것으로 savepoint 사용하면 지정된 위치 이후의 트랜잭션만 rollback o
-rollback을 실행하면 savepoint와 관계없이 데이터의 모든 변경사항을 저장하지 x
SAVEPOINT 세이브포인트 명;
ROLLBACK TO 세이브포인트 명;