<context:property-placeholder> 처럼 빈 팩토리 후처리기로 동작해서 빈의 값을 변경하는 것이 아니라, 단순히 프로퍼티 파일의 내용을 담은 Properties 타입의 빈을 만들어 준다.
이렇게 database.properties의 내용을 빈으로 만들어두고, dataSource 빈에서는 SpEL을 이용해서 database 빈 오브젝트에서 원하는 정보를 읽어오게 한다. (SpEL에서는 Map의 get() 메소드를 호출해주는 표현식이 존재하는데, []안에 키 값을 넣어주면 된다.)
<bean id="dataSource" class="..DataSource">
<!-- database 빈 오브젝트에서 db.driverclass를 키로 갖는 값을 가져오라는 표현식 -->
<property name="driverClass" value="#{database['db.driverclass']}"/>
...
</bean>
select ename, sal*12+nvl(comm, 0) "Annsal" from emp;
연산자 사용
SELECT SAL + COMM FROM EMP;
컬럼 + 컬럼 합친 결과
ex) 만약 컬럼 + 컬럼 null이 포함된다면?? nvl(comm,0) null을 0으로 처리!
SELECT SAL - 100 FROM EMP;
컬럼 - 100 결과
SELECT SAL * 12 FROM EMP;
컬럼 * 12의 결과
SELECT SAL / 2 FROM EMP;
컬럼 / 2 의 결과
중복되는 데이터를 한번씩만 출력하기 위해서는 distinct 키워드를 사용한다.
select distinct job from emp;
10 10 중복되는 값이 합쳐져서 출력된다.
10 20
20 30
30 40
40
WHERE 조건
SELECT * [컬럼1, 컬럼2, ....., 컬럼N]
FROM table_name
WHERE 조건절;
조건절 구성 : WHERE SAL >= 3000;
1.컬럼 2.연산자 3.비교대상값
WHERE 조건시 대소문자 구분
SELECT EMPNO, ENAME, SAL FROM EMP WHERE ENAME = 'SCOTT';
날짜 형식 검색시
select * from emp where HIREDATE <= '1982/01/01';
select * from emp where HIREDATE <= '1982-01-01';
select * from emp where HIREDATE <= '82/01/01';
select * from emp where HIREDATE <= '82-01-01';
논리연산자
컬럼 NOT BETWEEN A and B
A 미만 이거나 B 초과인 결과를 검색함( 컬럼 < A or 컬럼 > B );
IN 연산자
컬럼 NOT IN (조건, 조건,...., 조건N)
해당 조건을 제외한 나머지 결과
LIKE 연산자와 와일드 카드
select * from emp where ename like 'K%';
K로 시작하는 검색
select * from emp where ename like '%K%';
K를 포함하는 검색
select * from emp where ename like '%K';
K로 끝나는 검색
select * from emp where ename like '_A%';
공백A A앞에 어떤문자가 와도 상관없고 2번째에 A에 있는 검색결과 조회
select * from emp where ename like '__A%';
공백공백A A앞에 어떤문자가 와도 상관없고 3번째에 A에 있는 검색결과 조회
select * from emp where ename not like '%A%';
A를 포함하고 있지 않는 검색 결과 조회
IS NULL과 IS NOT NULL
select * from emp where comm is null;
comm컬럼의 null인 데이터를 검색
select * from emp where comm is not null;
comm컬럼의 null이 아닌 데이터를 검색
정렬을 위한 ORDER BY 절
SELECT * FROM EMP ORDER BY SAL;
SAL컬럼을 첫번째 데이터를 기준으로 오름차순 정렬 조회
SELECT EMPNO, ENAME, JOB, HIREDATE FROM EMP ORDER BY HIREDATE ASC;
날짜 오름차순으로 정렬 조회
SELECT * FROM EMP ORDER BY SAL DESC;
SAL컬럼을 내림차순으로 정렬 조회
SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO DESC;
EMPNO컬럼을 내림차순으로 정렬 조회
SELECT * FROM EMP ORDER BY ENAME;
ENAME컬럼을 오름차순 정렬 조회
SELECT * FROM EMP ORDER BY ENAME DESC;
ENAME을 내림차순으로 정렬 조회
SELECT * FROM EMP ORDER BY HIREDATE DESC;
날짜를 내림차순으로 정렬 조회
SELECT * FROM EMP ORDER BY SAL DESC, ENAME ASC;
SAL컬럼을 내림차순 정렬 후 정렬된 기준에서 ENAME을 오름차순으로 정렬 조회
SELECT DEPTNO, HIREDATE FROM EMP ORDER BY DEPTNO ASC, HIREDATE DESC;
DEPTNO 오름차순 정렬 후 정렬된 기준에서 HIREDATE 내림차순으로 정렬 조회
숫자함수
SELECT -10, ABS(-10) FROM DUAL;
10 절대값반환
SELECT 34.5678, FLOOR(34.5678) FROM DUAL;
34 소수점 버림
SELECT 34.5678, ROUND(34.5678) FROM DUAL;
35 반올림
SELECT 34.5678, ROUND(34.5678, 2) FROM DUAL;
34.57 위치지정 반올림
SELECT 34.5678, ROUND(345.5678, -2) FROM DUAL;
300 위치지정 반올림
SELECT TRUNC(34.5678, 2), TRUNC(34.5678, -1), TRUNC(34.5678) FROM DUAL;
34.56 , 30, 34 자릿수 버림
SELECT MOD(27,2), MOD(27, 5), MOD(27, 7) FROM DUAL;
1, 2, 6 나머지 구함
SELECT * FROM EMP WHERE MOD(EMPNO, 2) = 1;
홀수 번호 검색
문자처리 함수
SELECT upper('hello my home') from dual;
대문자로 변환
select lower('HI MY HOME') from dual;
소문자로 변환
select initcap('hohoho start') from dual;
첫글자 대문자 나머지 소문자
select concat('bbb', 'ccc') from dual;
문자열 합치기
select empno, ename, job from emp where lower(job) = 'manager';
테이블 소문자변환 후 소문자 결과 값 조회 가능
select length('oracle'), length('오라클') from dual;
문자열 길이 반환
select lengthb('oracle'), lengthb('오라클') from dual;
영문 1바이트, 한글 2바이트 차이
select substr('hi my oracle',0,2) from dual;
문자열 찾기 왼쪽부터 1 2 3 4 5 6 7 8 9 10 -> 1~2 결과 hi
select substr('Welcome to Oracle', -4, 3) from dual;
뒤에서 부터 찾기 -4칸 이후 3개의 문자열
select substr(HIREDATE, 1, 2) 년도, substr(HIREDATE, 4, 2) 달 from emp;
date 형식 82-12-12 결과 값 찾기
select * from emp where substr(HIREDATE, 4, 2) = '09';
82-08-08 형식에서 데이터 찾기
select * from emp where substr(HIREDATE, 1,2) = '87';
82-08-08 형식에서 데이터 찾기
select * from emp where substr(ename, -1, 1) = 'E';
마지막글자 E 찾기
select substrb('Welcome To Oracle', 3, 4), substrb('나는 한국사람이다', 1, 4) from dual;
바이트 단위로 찾기
select instr('welcome to oracle', 'o',1, 2) from dual;
검색 조건 위치 찾기
select * from emp where substr(ename, 3, 1) = 'R';
3번째 R인 결과 조회
select * from emp where ename like '__R%';
3번째 R인 결과 조회
select lpad('Oracle', 20, '#') from dual;
총문자열길이 설정 및 왼쪽에 #체워넣기
select rpad('Oracle', 20, '#') from dual;
총문자열길이 설정 및 오른쪽에 #체워넣기
select ltrim(' Oracle') from dual;
왼쪽공백 없애기
select rtrim('Oracle ') from dual;
오른쪽 공백 없애기
select trim(' a aaaaOracleaaaaa ') from dual;
양쪽 공백 없애기
select replace('abcdefg', 'c', 'CCC') from dual;
지정한 문자 바꾸기
날짜함수
select sysdate from dual;
현재 날짜 출력
select sysdate-1 어제, sysdate 오늘, sysdate+1 내일 from dual;
sysdate -1 +1 어제 내일 구할 수 있다
select floor(sysdate-HIREDATE) from emp;
현재날짜 - 입사날짜 시간으로 반환
select HIREDATE, round(HIREDATE, 'month') from emp;
16일기준으로 16이하 1일 16이상은 다음달 1일로
select HIREDATE, trunc(HIREDATE, 'month') from emp;
해당 달 1일로 전부
select ename, sysdate, HIREDATE, months_between(sysdate, HIREDATE) from emp;
현재날짜 - 입사날짜 총 일로 반환
select ename, HIREDATE, trunc(months_between(sysdate, HIREDATE)) from emp;
현재날짜 - 입사날짜 총일 반환 trunc활용 소수점 버림
select ename, HIREDATE, add_months(HIREDATE, 6) from emp;
입사날짜 + 6개월날짜
select sysdate, next_day(sysdate, '수요일') from dual;
현재날짜에서 다음 수요일날짜 반환
select HIREDATE, last_day(HIREDATE) from emp;
해당날짜 마지막 일 반환
형 변환 함수
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select HIREDATE, to_char(HIREDATE, 'yyyy/mm/dd day') from emp;
select HIREDATE, to_char(HIREDATE, 'yy/mon/dd dy') from emp;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(1230000) from dual;
숫자를 문자로 변환
select ename, sal, to_char(sal, 'L999,999') from emp;
sal컬럼의 숫자를 ₩800 해당국가표기로 나타낸다.
select to_char(123456, '000000000'), to_char(123456, '999,999,999') from dual;
빈공간은 00으로 채우고, 999,999,999 자릿수 맞춘다.
select ename, HIREDATE from emp where HIREDATE = to_date(19810220,'yyyymmdd');
DATE타입의 날짜형식의 데이터 조회방법
select trunc(sysdate-to_date('2008/01/01', 'yyyy/mm/dd')) from dual;
DATE타입의 연산 오늘날짜 - 2008/01/01 = 4720 결과가 나온다.
select to_number('20,000', '99,999') - to_number('10,000', '99,999') from dual;
문자열 20,000, 10,000 숫자 타입을 변환하여 연산하는 방법
select ename, sal, comm, sal*12*comm, nvl(comm, 0), sal*12+nvl(comm,0) from emp order by job;
null이 포함된 컬럼의 합을 계산할 때 nvl() 활용
select empno, ename, nvl(to_char(MGR), 'CEO') as MANAGER from emp where mgr is null;
null을 변환할 때 해당 컬럼이 number타입일 경우 char타입 변환 null컬럼 조회방법
그룹 함수
수학 함수
논리 함수
select ename, deptno,
decode(deptno, 10, 'ACCOUNTING',
20, 'RESEARCH',
30, 'SALES',
40, 'OPERATIONS')
AS DNAME
FROM EMP;
SELECT * FROM EMP;
DEPTNO 10, 20, 30, 40에 따라 특정 문자열 DNAME컬럼 값에 출력
SELECT EMPNO, ENAME, JOB, SAL, DECODE(JOB, 'ANALYST',SAL * 1.05,
'SALESMAN', SAL * 1.1,
'MANAGER', SAL * 1.15,
'CLERK', SAL * 1.20) AS UPSAL
FROM EMP;
JOB에 따라 봉급을 지정해서 UPSAL컬럼에 출력
SELECT ENAME, DEPTNO, CASE WHEN DEPTNO = 10 THEN 'ACCOUNTING'
WHEN DEPTNO = 20 THEN 'RESEARCH'
WHEN DEPTNO = 30 THEN 'SALES'
WHEN DEPTNO = 40 THEN 'OPERATIONS'
END AS DNAME
FROM EMP;
DEPTNO조건에 따라 지정한 문자열 출력
CASE WHEN 조건 THEN 결과 ELSE 결과로도 가능
CASE WHEN SAL>=1000 THEN '1000이상이다' ELSE '1000이하이다' END AS 결과
그룹 함수
SELECT SUM(SAL) FROM EMP;
SAL컬럼의 모든 합
SELECT SUM(COMM) FROM EMP;
COMM컬럼의 모든 합
SELECT AVG(SAL) FROM EMP;
SAL컬럼의 평균 값
SELECT MAX(SAL), MIN(SAL) FROM EMP;
SAL컬럼의 최대값, SAL컬럼의 최소값
SELECT ENAME, MAX(SAL) FROM EMP;
에러 이름은 여러개, MAX값은 하나다
SELECT MAX(HIREDATE), MIN(HIREDATE) FROM EMP;
DATE타입 최대날짜, 최소날짜 검색
SELECT MAX(ENAME), MIN(ENAME)FROM EMP;
알파벳 순서에 따라 조회된다.
SELECT COUNT(COMM) 사원수 FROM EMP WHERE DEPTNO = 10;
DEPTNO가 10인 사원의 커미션 조회
SELECT COUNT(DISTINCT JOB) FROM EMP;
DISTINCT중복제거함수를 이용해 중복되지 않는 데이터의 합을 카운트한다.
GROUP BY 절
SELECT DEPTNO FROM EMP GROUP BY DEPTNO;
DEPTNO 기준으로 중복되는 컬럼을 그룹으로 묶어서 조회
SELECT DISTINCT DEPTNO FROM EMP;
DEPTNO컬럼의 중복되는 컬럼을 묶어서 조회
SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO;
DEPTNO 기준으로 중복되는 컬럼 그룹및 그룹의 SAL컬럼의 합을 조회
SELECT DEPTNO, MAX(SAL), MIN(SAL) FROM EMP GROUP BY DEPTNO;
DEPTNO 기준으로 중복되는 컬럼 그룹및 그룹의 SAL컬럼의 최대값 및 최소값을 조회
SELECT DEPTNO, COUNT(DEPTNO), COUNT(COMM) FROM EMP GROUP BY DEPTNO;
DEPTNO 기준으로 중복되는 컬럼 그룹및 그룹의 수 및 COMM컬럼의 수 조회
HAVING 조건
SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) >= 2000;
DEPTNO와 SAL평균값을 그룹으로 묶은 후 HAVING을 이용해 2000보다 큰경우의 조건 결과
SELECT DEPTNO, MAX(SAL), MIN(SAL) FROM EMP GROUP BY DEPTNO HAVING MAX(SAL) > 2900;
DEPTNO와 SAL컬럼의 최대값, 최소값을 그룹으로 묶은 후 HAVING을 이용해 2900보다 큰 결과 조회
SELECT DEPTNO, MAX(SAL), MIN(SAL) FROM EMP GROUP BY DEPTNO HAVING DEPTNO > 20;
DEPTNO와 SAL컬럼의 최대값, 최소값을 그룹으로 묶은 후 HAVING을 이용해 DEPTNO 20보다 큰 결과 조회
조인을 사용하여 다중 테이블에서 데이터 표시
EQUI JOIN
EQUI JOIN AND 연산
컬럼의 모호성 해결
테이블 별칭
NON-EQUI JOIN
SELF JOIN
SELECT E1.ENAME 사원, E2.ENAME 매니저
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO AND E1.ENAME = 'SMITH';
MGR컬럼과 EMPNO컬럼을 JOIN후 E1.ENAME = SMITH인 결과 조회
SELECT E1.ENAME, E1.JOB
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO AND E2.ENAME = 'KING';
MGR컬럼과 EMPNO컬럼을 JOIN후 E2.ENAME = KING인 결과 조회
SELECT E1.ENAME, E2.ENAME
FROM EMP E1, EMP E2
WHERE E1.DEPTNO = E2.DEPTNO AND E1.ENAME = 'SCOTT';
E1.DEPTNO와 E2.DEPTNO를 JOIN후 E1.ENAME = SCOTT인 결과 조회
OUTER JOIN
SELECT EMPLOYEE.ENAME || '의 매너지는 ' || MANAGER.ENAME || '입니다'
FROM EMP EMPLOYEE, EMP MANAGER
WHERE EMPLOYEE.MGR = MANAGER.EMPNO(+);
NULL인 컬럼로 결과에 반영한다.
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO;
NULL인 컬럼도 결과에 반영한다.
ANSI JOIN
SELECT * FROM EMP,DEFT;
||
\ /
SELECT * FROM EMP CROSS JOIN DEPT;
ANSI INNER JOIN
SELECT ENAME, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.ENAME = 'SCOTT';
||
\/
SELECT ENAME, DNAME
FROM EMP
INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO
WHERE EMP.ENAME = 'SCOTT';
ANSI INNER JOIN(USING)
SELECT ENAME, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
||
\/
SELECT ENAME, DNAME
FROM EMP
INNER JOIN DEPT
USING (DEPTNO);
NATURAL JOIN
SELECT ENAME, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
||
\/
SELECT ENAME, DNAME
FROM EMP
INNER JOIN DEPT
USING (DEPTNO);
||
\/
SELECT EMP.ENAME, DEPT.DNAME
FROM EMP
NATURAL JOIN DEPT;
ANSI OUTER JOIN
연습용 테이블 DEPT01, DEPT02 생성 및 데이터 넣기
CREATE TABLE DEPT01 (
DEPTNO NUMBER(2),
DNAME VARCHAR2(14)
);
INSERT INTO DEPT01 VALUES(10, 'ACCOUNTING');
INSERT INTO DEPT01 VALUES(20, 'RESEARCH');
SELECT * FROM DEPT01;
CREATE TABLE DEPT02 (
DEPTNO NUMBER(2),
DNAME VARCHAR2(14)
);
INSERT INTO DEPT02 VALUES(10, 'ACCOUNTING');
INSERT INTO DEPT02 VALUES(30, 'SALES');
SELECT * FROM DEPT02;
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
서브 쿼리
서브 쿼리의 기본 개념
단일 행 서브 쿼리
SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'SCOTT');
SELECT *
FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'SCOTT');
SELECT ENAME, SAL
FROM EMP
WHERE SAL >= (SELECT SAL FROM EMP WHERE ENAME = 'SCOTT');
SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'DALLAS');
SELECT ENAME, SAL
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES');
SELECT ENAME, SAL
FROM EMP
WHERE MGR = (SELECT EMPNO FROM EMP WHERE ENAME = 'KING');
다중 행 서브 쿼리
IN 연산자
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO);
셋다 같은 결과
SELECT DEPTNO, DNAME, LOC
FROM DEPT
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE JOB = 'MANAGER');
||
SELECT DEPT.DEPTNO, DEPT.DNAME, DEPT.LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.JOB = 'MANAGER';
||
SELECT D.DEPTNO, D.DNAME, D.LOC
FROM EMP E
INNER JOIN DEPT D
on D.DEPTNO = E.DEPTNO
AND E.JOB = 'MANAGER';
ALL 연산자
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE DEPTNO = 30);
||
SELECT ENAME, SAL
FROM EMP
WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 30);
같은 결과
SELECT ENAME, SAL,JOB
FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE JOB = 'SALESMAN');
SELECT ENAME, SAL,JOB
FROM EMP
WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE JOB = 'SALESMAN');
ANY 연산자
SELECT ENAME, SAL
FROM EMP
WHERE SAL > (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 30);
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ANY(SELECT SAL FROM EMP WHERE DEPTNO = 30);
SELECT ENAME, SAL, JOB
FROM EMP
WHERE SAL > ANY(SELECT SAL FROM EMP WHERE JOB = 'SALESMAN')
AND JOB <> 'SALESMAN';
SELECT ENAME, SAL, JOB
FROM EMP
WHERE SAL > (SELECT MIN(SAL) FROM EMP WHERE JOB = 'SALESMAN')
AND JOB <> 'SALESMAN';
SET 연산자
UNION 연산자
UNION ALL 연산자
UNION과 합칩합의 차이
INTERSECT 연산자
MINUS 연산자
SET 연산자와 NULL
SET 연산자 제한사항
DML INSERT
INSERT INTO 테이블명 (컬럼, 컬럼, ....) VALUES (인자값, 인자값,....);
NUMBER, VARCHAR2 NUMBER, VARCHAR2 데이터형에 맞게 대입
INSERT INTO 테이블명 VALUES (인자값, 인자값,.....)
테이블 전체 데이터를 전부 넣을 때 앞에 생략가능 대신 VALUES 뒤에 값에 모든 데이터를 입력해야 함
데이터가 불필요 할 경우 NULL 대체하거나 '' 표현 가능
아니면 테이블 자체 생성시
CREATE TABLE 테이블명 (
USER_ID VARCHAR2(20),
USER_YN CHAR(1) DEFAULT 'Y'
);
DEFAULT 값을 생략 가능
DML INSET ALL
다중테이블 입력시
INSERT ALL
INTO EMP_HIR VALUES(EMPNO, ENAME, HIREDATE)
INTO EMP_MGR VALUES(EMPNO, ENAME, MGR)
SELECT EMPNO, ENAME, HIREDATE, MGR FROM EMP WHERE DEPTNO = 20;
EMP테이블에서 데이터를 가져온 후,
EMP_HIR, EMP_MGR 테이블에 각각 필요한 데이터를 넣을 수 있다.
DML INSERT ALL 조건문
INSERT ALL
WHEN HIREDATE > '1982/01/01' THEN
INTO EMP_HIR02 VALUES(EMPNO, ENAME, HIREDATE)
WHEN SAL > 2000 THEN
INTO EMP_SAL VALUES(EMPNO, ENAME, SAL)
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP;
EMP테이블에서 데이터를 가져 온 후,
WHEN .... THEN 을 이용해서 조건을 걸어 필요한 데이터만 INSERT시킬 수 있다.
DML UPDATE
UPDATE 테이블명
SET 컬럼 = 변경내용,
컬럼 = 변경내용
DML DELETE
DELETE FROM 테이블명
WHERE 조건;
데이터형 종류
LOB
ROWID
ALTER TABLE
ATLER TABLE ADD
ALTER TABLE MODIFY
ALTER TABLE ~ DROP COLUMN
SET UNUSED 옵션(특정 컬럼 삭제시 컬럼의 사용을 논리적으로 제한하는 방법)
DROP TABLE(테이블 자체 삭제)
DROP TABLE 테이블 이름;
DDL TRUNCATE(테이블의 모든 로우를 제거함)
TRUCATE 테이블명;
RENAME (테이블 이름 변경)
RENAME 기존테이블명 TO 새로운테이블명;
데이터 딕셔너리와 데이터 딕셔너리 뷰
USER_데이터 딕셔너리
ALL_ 데이터딕셔너리
DBA_ 데이터 딕셔너리 뷰
무결성 제약 조건의 개념과 종류
제약 조건 확인하기
컬럼 레벨 정의 방법으로 제약 조건 지정하기
VIEW 뷰의 개념
VIEW 뷰 권한주기
[command] 해당 계정에게 view를 create 할 수 있는 권한을 부여하는 명령어
SQL> grant create view to 계정 이름
복합 뷰
시퀀스 생성
인덱스 INDEX
SELECT *
FROM USER_IND_COLUMNS
WHERE TABLE_NAME IN('EMP', 'DEPT');
인덱스 생성하기
DELETE일어날 경우 논리적으로 삭제되고 물리적으로 남아있기때문에 사이즈증가에 대한 문제가 발생한다.