반응형
1. 뷰(VIEW)
- 뷰 객체(개체)
- 테이블을 기반으로 만들어지는 가상의 테이블
- 뷰는 생성과 삭제만 가능 (뷰의 변경은 없다!!!!)
- 논리적으로 만들어지는 개체( 서브쿼리의 검색결과를 통해 검색결과가 없다면 원래 안만들어줌!)
- 뷰는 테이블의 행검색을 간편하게 사용하기 위한 기능 제공 : 관계를 맺고 있는 테이블에서 검색을 쉽게 하기 위해
- 뷰는 테이블 권한 설정을 간편하게 사용하기 위한 기능 제공 - 필요한값만 제공해주기 위해 (관리자가 많이 사용함)
- ex) 📕딕셔너리 : 관리자가 만들어준 뷰
- 딕셔너리는 원래 시스템 관리자만 볼 수 있는 정보지만, 모든행을 보여줄 필요는 없기 때문에 뷰로 만들어 사용자에게 필요한 값만 보여줌~~
- 단순뷰와 복합뷰로 구분
1) 단순뷰
- 하나의 테이블을 기반으로 생성되는 뷰
- 검색뿐만 아니라 뷰를 이용한 테이블의 행 삽입 , 변경 , 삭제 가능
- 단순뷰 생성시 그룹함수 또는 DISTINCT키워드를 사용한 경우 검색만 가능
2) 복합뷰
- 다수의 테이블을 기반으로 생성되는 뷰
- 테이블을 결합(JOIN)하여 생성하는 뷰
- 검색만 가능
2. 뷰 생성하기
- 서브쿼리 이용
- 서브쿼리의 검색결과를 이용해 뷰 생성
1) 형식
CREATE [OR REPLACE] [(FORCE|NOFORCE)] VIEW 뷰이름[(컬럼명,컬럼명,...)]
AS SELECT 검색대상,검색대상,...
FROM 테이블명
[WHERE 조건식]
[WITH CHECK OPTION] [WITH READ ONLY]
- CERATE OR REPLACE: 동일한 이름의 뷰가 존재할 경우 기존 뷰를 삭제하고 새로운 뷰 생성 vs 테이블은 생성, 삭제 ,변경이 가능하지만 vs 뷰는 생성, 삭제만 가능
- FORCE: 서브쿼리의 검색결과가 없어도 강제로 뷰를 생성하기 위한 기능 제공
- NOFORCE (기본값) : 서브쿼리에서 검색결과가 없으면 뷰를 만들지 마세요.
- 뷰는 논리적으로 만들어지는 개체 (서브쿼리의 검색결과를 통해 검색결과가 없다면 원래 안만들어줌!)
- WITH CHECK OPTION: 뷰를 생성한 서브쿼리의 조건식에서 사용된 컬럼에 저장된 값을 변경하지 못하도록 설정하는 기능 제공
- WITH READ ONLY: 검색만 가능하도록 설정하는 기능 제공 (단순뷰에서만 사용)
2) 단순 뷰로 생성 후 뷰 목록 확인, CRUD
--단순 뷰 생성
--검색, 삽입, 변경, 삭제 가능!
--그룹함수 또는 DISTINCT키워드를 이용해 생성한다면 검색만 가능
--1)
--📊 EMP_COPY 테이블 생성
--EMP테이블에 저장된 모든 사원을 검색하여 EMP_COPY 테이블을 생성하고 검색행을 삽입 처리
CREATE TABLE EMP_COPY AS SELECT * FROM EMP;
SELECT * FROM EMP_COPY; --복사된 테이블은 제약조건이 없음
--2)
--🎫 EMP_VIEW30 뷰 생성 - ERROR
--EMP_COPY 테이블에서 부서번호가 30인 사원의 사원번호, 사원이름, 부서번호를 검색하여 EMP_VIEW30 뷰 생성
--현재 접속 사용자는 뷰에 대한 시스템 권한이 없으므로 뷰를 생성할 경우 에러 발생
--관리자(SYS)에게 뷰에 대한 시스템 권한 요청 필요함
CREATE VIEW EMP_VIEW30 AS SELECT EMPNO,ENAME,DEPTNO FROM EMP_COPY WHERE DEPTNO=30; --ERROR
//ORA-01031: 권한이 불충분합니다
--3)
--🔥 시스템 관리자로 접속하여 'SCOTT'에게 뷰에 대한 시스템 권한 부여
--시스템 관리자(SYSDBA - SYS 계정)로 접속하여 현재 접속 사용자(SCOTT)에게 뷰에 대한 시스템 권한 부여
GRANT CREATE VIEW TO SCOTT; --SCOTT에게 뷰 만들고 삭제하는 권한 부여해줌
//Grant을(를) 성공했습니다.
--4)
--🎫 EMP_VIEW30 뷰 생성 - OK
--시스템에게 관리자에게 뷰에 대한 시스템 권한을 부여 받은 후 뷰 관련 명령 사용 가능
CREATE VIEW EMP_VIEW30 AS SELECT EMPNO,ENAME,DEPTNO FROM EMP_COPY WHERE DEPTNO=30;
//View EMP_VIEW30이(가) 생성되었습니다.
--5)
--🖤뷰 목록 확인
--📕USER_VIEWS : 뷰 정보를 제공하는 딕셔너리
SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
--6)
--🖤뷰 검색 - SELECT
--테이블에 저장된 행을 이용하여 검색
SELECT * FROM EMP_VIEW30;
--7)
--🖤단순뷰에 행 삽입 - INSERT
--테이블에 행을 삽입 처리 - 뷰에 없는 컬럼에는 컬럼 기본값 전달되어 삽입
-- 실제 뷰에 삽입되는 것이 아닌, 테이블의 행에 삽입처리되는 것
INSERT INTO EMP_VIEW30 VALUES(1111,'홍길동',30);
//1 행 이(가) 삽입되었습니다.
--8)
--🖤뷰 전체 검색 - SELECT
SELECT * FROM EMP_VIEW30;
--9)
--🖤테이블 전체 검색
--테이블에 홍길동이 확인 됨! , 기본값은 NULL이 저장!
SELECT * FROM EMP_COPY;
COMMIT;
3) 테이블 권한을 없애고, 뷰로만 접근하게 만들기 (뷰의 장점)
--1)
--🎫 EMP_VIEW01 뷰 생성 - 인사부사원에게만 제공
--EMP_COPY테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 입사일, 급여를 검색하여
--EMP_VIEW01 뷰 생성
CREATE VIEW EMP_VIEW01 AS SELECT EMPNO,ENAME,JOB,HIREDATE,SAL FROM EMP_COPY;
//View EMP_VIEW01이(가) 생성되었습니다.
--2)
--🎫 EMP_VIEW02 뷰 생성 - 영업부사원에게만 제공
--EMP_COPY테이블에서 업무가 SALESMAN인 사원의 사원번호, 사원이름, 성과급을 검색하여 EMP_VIEW02 뷰 생성
CREATE VIEW EMP_VIEW02 AS SELECT EMPNO,ENAME,COMM FROM EMP_COPY WHERE JOB='SALESMAN';
//View EMP_VIEW02이(가) 생성되었습니다.
--3)
--🎫 뷰를 통해 필요한 정보만을 제공할 수 있음 테이블 관련 접근 권한을 없앰으로서,
--사용자에 따라 필요한 컬럼값만을 보여줄 수 있음 보안성을 위해
--EMP_COPY테이블에 접근 권한을 없애고
--EMP_VIEW01뷰와 EMP_VIEW02뷰를 이용해 EMP_COPY테이블의 저장된 행에서 필요한 정보만 검색하여 제공함
--인사부에 근무하는 사원은 EMP_VIEW01 뷰에 접근 가능한 권한을 제공하며 필요한 정보 검색 가능
SELECT * FROM EMP_VIEW01;
--영업부에 근무하는 사원은 EMP_VIEW02 뷰에 접근 가능한 권한을 제공하며 필요한 정보 검색 가능
SELECT * FROM EMP_VIEW02;
4) 복합 뷰로 생성 후 검색하기 - 복합뷰는 검색만 가능 (뷰의 장점)
--1)
--📊 테이블 JOIN해 검색 - 테이블 결합(JOIN)은 너무 귀찮다!!!! 복합뷰 이용하자!!!!!!!
--EMP테이블과 DEPT테이블에서 모든 사원의 사원번호, 사원이름, 급여, 부서이름, 부서위치 검색
--결합조건 : EMP테이블의 부서번호(DEPTNO)와 DEPT테이블의 부서번호(DEPTNO)가 같은 행을 서로 결합하여 검색
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
--2)
--🎫 EMP_VIEW 뷰 생성해 검색 (복합뷰)
--EMP테이블과 DEPT테이블에서 모든 사원의 사원번호, 사원이름, 급여, 부서이름, 부서위치 검색하여 EMP_VIEW 뷰생성
CREATE VIEW EMP_VIEW AS SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
SELECT * FROM EMP_VIEW; --뷰를 이용하여 두개이상의 테이블에서 원하는 행의 결합결과 검색
3. 뷰의 특징
--1)
-- 🎫 EMP_VIEW30 뷰 속성을 변경하려면 기존 뷰 삭제 후 새로운 뷰 생성
SELECT * FROM EMP_VIEW30;
SELECT VIEW_NAME,TEXT FROM USER_VIEWS;
-- 🎫 기존 뷰 삭제 후 생성 중~
--CREATE 0R REPLACE VIEW 명령을 사용하여 기존 뷰를 삭제하고 새로운 뷰 생성 가능
CREATE OR REPLACE VIEW EMP_VIEW30 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP_COPY WHERE DEPTNO=30;
//View EMP_VIEW30이(가) 생성되었습니다.
SELECT * FROM EMP_VIEW30;
--2)
-- 🎫 EMP_VIEW10 뷰에서 값변경시 테이블에 적용 + 뷰 미검색
-- 🎫 EMP_VIEW10 뷰 생성
-- EMP_COPY 테이블에서 부서번호가 10인 사원의 사원번호, 사원이름, 급여, 부서번호를 검색하여
-- EMP_VIEW10 뷰 생성
CREATE OR REPLACE VIEW EMP_VIEW10 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP_COPY WHERE DEPTNO=10;
//View EMP_VIEW10이(가) 생성되었습니다.
SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
SELECT * FROM EMP_VIEW10;
-- EMP_VIEW10 뷰에서 사원번호가 7782인 사원의 부서번호를 20으로 변경
-- EMP_COPY 테이블에 행의 컬럼값 변경
UPDATE EMP_VIEW10 SET DEPTNO=20 WHERE EMPNO=7782;
SELECT * FROM EMP_VIEW10; --테이블에 저장된 컬럼값이 변경되어 뷰에서는 '7782사원' 미검색
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP_COPY;
-- 롤백처리
ROLLBACK;
SELECT * FROM EMP_VIEW10; --롤백하면 다시 3명 그대로
--3)
-- 🎫 EMP_VIEW10 뷰의 [WITH CHECK OPTION] 기능 사용
-- EMP_COPY 테이블에서 부서번호가 10인 사원의 사원번호, 사원이름, 급여, 부서번호를 검색하여 EMP_VIEW10 뷰 생성
-- EMP_VIEW10 뷰에 WITH CHECK OPTION 기능 추가
CREATE OR REPLACE VIEW EMP_VIEW10 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP_COPY WHERE DEPTNO=10 WITH CHECK OPTION;
//View EMP_VIEW10이(가) 생성되었습니다.
-- EMP_VIEW10 뷰에서 사원번호가 7782인 사원의 부서번호를 20으로 변경
-- WITH CHECK OPTION 기능에 의해 뷰를 생성한 서브쿼리의 조건식에서 사용한 컬럼값을 변경할 경우 에러 발생
-- 즉, DEPTNO=10의 컬럼값은 절대로 변경 못함
UPDATE EMP_VIEW10 SET DEPTNO=20 WHERE EMPNO=7782; --ERROR
--4)
-- 🎫 EMP_VIEW20 뷰의 [WITH CHECK OPTION] 기능 미사용
-- EMP_COPY 테이블에서 부서번호가 20인 사원의 사원번호, 사원이름, 급여, 부서번호를 검색하여 EMP_VIEW20 뷰 생성
CREATE OR REPLACE VIEW EMP_VIEW20 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP_COPY WHERE DEPTNO=20;
//View EMP_VIEW20이(가) 생성되었습니다.
SELECT * FROM EMP_VIEW20;
-- EMP_VIEW20 뷰에서 사원번호가 7788인 사원정보 삭제 - EMP_COPY 테이블의 행 삭제
DELETE FROM EMP_VIEW20 WHERE EMPNO=7788;
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP_COPY;
SELECT * FROM EMP_VIEW20;
--롤백처리
ROLLBACK;
SELECT * FROM EMP_VIEW20;
--5)
-- 🎫 EMP_VIEW20 뷰의 [WITH READ ONLY] 기능 사용
-- EMP_COPY 테이블에서 부서번호가 20인 사원의 사원번호, 사원이름, 급여, 부서번호를 검색하여 EMP_VIEW20 뷰 생성
-- EMP_VIEW20 뷰에 WITH READ ONLY 기능 추가
CREATE OR REPLACE VIEW EMP_VIEW20 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP_COPY WHERE DEPTNO=20 WITH READ ONLY;
//View EMP_VIEW20이(가) 생성되었습니다.
SELECT * FROM EMP_VIEW20;
-- EMP_VIEW20 뷰에서 사원번호가 7788인 사원정보 삭제
-- WITH READ ONLY 기능에 의해 단순뷰에서 DML 명령을 실행할 경우 에러 발생
DELETE FROM EMP_VIEW20 WHERE EMPNO=7788; --ERROR
4. 뷰 삭제하기 (단순뷰+복합뷰)
- 뷰 삭제
- 테이블 삭제 -> 뷰 미삭제 : 하지만 뷰 안에 값이 없으므로 무쓸모..
1) 형식
DROP VIEW 뷰이름
2) 예시
--1)
--🖤뷰 목록 확인
SELECT VIEW_NAME,TEXT FROM USER_VIEWS;
--2)
--🖤EMP_VIEW 뷰 삭제
DROP VIEW EMP_VIEW;
//View EMP_VIEW이(가) 삭제되었습니다.
SELECT VIEW_NAME FROM USER_VIEWS;
--3)
--🖤EMP_COPY 테이블 삭제
--테이블을 삭제해도 테이블을 기반으로 생성된 뷰는 미삭제
DROP TABLE EMP_COPY PURGE;
//Table EMP_COPY이(가) 삭제되었습니다.
SELECT VIEW_NAME,TEXT FROM USER_VIEWdS;
--4)
--🖤EMP_VIEW30 뷰 검색 - ERROR
--뷰가 참조할 수 있는 테이블이 없는 경우 에러 발생
SELECT * FROM EMP_VIEW30; --ERROR
5. ROWNUM 키워드
- 검색행에 순차적으로 행번호를 제공하는 키워드
--1)
--😋 검색 + 행번호 X
SELECT EMPNO, ENAME, SAL FROM EMP;
--2)
--😋 검색 + 행번호 O
SELECT ROWNUM, EMPNO, ENAME, SAL FROM EMP;
--3)
--😋 급여로 내림차순 정렬 + 행번호 X
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여 검색
SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC;
--4)
--😋급여로 내림차순 정렬 + 행번호 O
--행번호가 뒤죽박죽ㅠㅠ
--1ST FROM EMP
--2ND SELECT ROWNUM, EMPNO, ENAME, SAL **
--3RD ORDER BY SAL DESC
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여 검색
-- 행번호를 제공받아 검색
SELECT ROWNUM, EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC;
--5)
--😋 급여로 내림차순 정렬 + "뷰"
-- 1ST :
-- AS SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC : "ORDER BY SAL DESC" 를 먼저 적용하기 위해 "뷰" 이용
-- 2ND :
-- CREATE OR REPLACE VIEW EMP_VIEW
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여
--EMP_VIEW 뷰 생성
CREATE OR REPLACE VIEW EMP_VIEW AS SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC;
--뷰를 이용해 행번호가 정렬됨
SELECT * FROM EMP_VIEW;
--6)
--😋 급여로 내림차순 정렬 + "뷰" -> 행번호로 정렬
-- EMP_VIEW 뷰의 모든 행을 "행번호"와 같이 검색
-- *는 다른검색대상과 함께 사용 못함
SELECT ROWNUM, * FROM EMP_VIEW; --ERROR
SELECT ROWNUM,EMPNO,ENAME,SAL FROM EMP_VIEW; --OK
--7)
-- 😋 테이블 또는 뷰의 모든 컬럼을 다른 검색대상과 같이 사용할 경우
-- 테이블명.* 또는 뷰명.* 형식으로 표현하여 검색 가능
-- 행번호와 EMP_VIEW 뷰가 가진 모든것들로 정렬해주세요.
SELECT ROWNUM, EMP_VIEW.* FROM EMP_VIEW;
6. 인라인 뷰(INLINE VIEW)
- 뷰는 필요하면 관리자에게 권한 부여 받아야하는데 특별한 경우가 아니면 일반사용자에게 권한 제공 안함
- 하지만 뷰 권한이 없어도 뷰를 만들 수 있음 - 인라인뷰
- SELECT명령에서 FROM 서브쿼리에 의해 일시적으로 생성되어 사용하는 뷰
- 뷰 관련 시스템 권한이 없어도 인라인 뷰를 생성하여 사용 가능
1) 형식
- FROM (서브쿼리) 이용
SELECT 검색대상,... FROM (SELECT 검색대상,... FROM 테이블명 [WHERE 조건식])
2) 예시
--1)
--🔥 인라인뷰
--(EMP테이블로부터 EMPNO,ENAME,SAL를 검색해주세요 단, SAL로 오름차순 정렬이요)로 부터
--EMPNO,ENAME,SAL 검색해주세요
SELECT * FROM (SELECT EMPNO,ENAME,SAL FROM EMP);
--(EMP테이블로부터 EMPNO,ENAME,SAL를 검색해주세요 단, SAL로 내림차순 정렬이요)로 부터
--EMPNO,ENAME,SAL 검색해주세요
SELECT EMPNO,ENAME,SAL FROM (SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC);
--2)
--🔥 인라인뷰 + 행번호
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여 행번호를 제공받아 검색
--서브쿼리로 정렬된 인라인 뷰를 생성하여 행번호를 제공받아 검색
--(EMP테이블로부터 EMPNO,ENAME,SAL를 검색해주세요 단, SAL로 내림차순 정렬이요)로 부터
--ROWNUM, EMPNO,ENAME,SAL 검색해주세요
SELECT ROWNUM, EMPNO,ENAME,SAL FROM (SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC);
--3)
--🔥 인라인뷰에 별칭 설정 가능 + 행번호
--인라인 뷰의 별칭을 사용하여 인라인 뷰의 모든 컬럼값 검색을 표현
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여 행번호를 제공받아 검색
--서브쿼리로 정렬된 인라인 뷰를 생성하여 행번호를 제공받아 검색
--(EMP테이블로부터 EMPNO,ENAME,SAL를 검색해주세요 단, SAL로 내림차순 정렬이요)로 부터
--ROWNUM, EMPNO,ENAME,SAL 검색해주세요
SELECT ROWNUM, EMPNO,ENAME,SAL FROM (SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC);
7. 내가 원하는 행들만 검색하기
- ROWNUM + 인라인뷰
- 행번호를 이용해 내가 원하는 행만 검색가능함
--1)
--🎫 행번호가 5보다 작거나 같은 행 검색
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여
--행번호를 제공받아 검색하고, 행번호가 5보다 작거나 같은 행 검색
--ROWNUM 키워드를 WHERE의 조건식에서 사용하여 검색
SELECT ROWNUM, TEMP.* FROM
(SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC) TEMP WHERE ROWNUM<=5;
--2)
--🎫행번호가 10인 행 검색 - 검색실패
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여
--행번호를 제공받아 검색하고, 행번호가 10인 행 검색
-- ROWNUM 키워드는 인라인 뷰의 검색행에 순차적으로 부여되는 행번호로
--처리행 전에 행번호를 미리 부여받지 못해 비교 검색 불가능
-- ROWNUM 키워드를 WHERE의 조건식에서 사용할 때 '<' 또는 '<=' 연산자는 사용 가능하지만
-- '>' 또는 '>=' , '=' 연산자를 이용한 연산식 사용 불가능
SELECT ROWNUM, TEMP.* FROM
(SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC) TEMP WHERE ROWNUM=10; --검색 실패
--3)
--🎫행번호가 10인 행 검색 - 검색성공
-- 🔥(ROWNUM + 인라인뷰) : 페이징 처리시 사용
--ROWNUM 키워드를 포함한 인라인 뷰를 생성하고
--ROWNUM 키워드에 컬럼 별칭을 설정하여 조건식에 사용해 검색 가능
--원하는 걸 찾아 -> 행번호를 붙이고 -> 검색
SELECT * FROM
(SELECT ROWNUM RN, TEMP.* FROM
(SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC) TEMP) WHERE RN=10;
8. 페이징 처리시 사용하는 SELECT 명령
🔥페이징 처리
- 하나의 웹페이지에 원하는 범위의 행만 검색하여 출력하는 기능
- 멀티미디어 기능있는 것 외에 대부분은 페이징처리
- EX)게시물 만들기 구현 : 페이징처리 와 검색 기능이 중요! VS 스크롤처리 (클릭 이벤트를 통해 스크롤이 늘어남)
--EMP테이블에서 저장된 모든 사원의 사원번호, 사원이름, 급여를 급여로 내림차순 정렬하여
--행번호를 제공받아 검색하고 행번호가 6~10 범위에 포함되는 행 검색
--SELECT문에 어떤 것을 검색할지 작성 -> ROWNUM을 붙여 행번호 붙여줌 -> 원하는 행만큼 검색
SELECT * FROM
(SELECT ROWNUM RN, TEMP.* FROM
(SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC) TEMP) WHERE RN BETWEEN 6 AND 10;
-- 오라클만 이렇게..
반응형
'sql' 카테고리의 다른 글
[sql] 15. DCL (GRANT/REVOKE) | 롤(ROLL) (0) | 2024.05.12 |
---|---|
[sql] 14. DDL 시퀀스(SEQUENCE) | 인덱스(INDEX) | 동의어(SYNONYM) | 사용자(USER) (0) | 2024.05.11 |
[sql] 11. DDL (CREATE TABLE) | 제약조건 (0) | 2024.05.10 |
[sql] 10. TCL (COMMIT/ROLLBACK/SAVEPOINT) (0) | 2024.05.09 |
[sql] 9. DML (INSERT/UPDATE/DELETE/MERGE) (0) | 2024.05.09 |