목차
- DDL(CREATE)
- 데이터 딕셔너리
- CREATE TABLE
3-1. 컬럼 주석
3-2. INSERT - 제약 조건(CONSTRAINTS)
4-1. NOT NULL
4-2. UNIQUE
4-3. CHECK
4-4. PRIMARY KEY
4-5. FOREIGN KEY
A. 데이터 삭제 옵션
B. 서브쿼리를 이용한 테이블 생성
C. 제약 조건 추가 - 사용 예제
학습점검
✅ DDL의 사용 목적에 대해 이해할 수 있다.
데이터 정의 언어(Data Definition Language)는 구조적으로 생성(CREATE), 수정(ALTER), 삭제(DROP) 작업을 위해 쓰인다.
✅ CREATE TABLE 문을 이용하여 테이블을 만들 수 있다.
CREATE TABLE 테이블명 ( 컬럼명, 컬럼명... ); 형식에 따라 작성된다. 소괄호 구문 안에서 컬럼명마다 제약조건 CONSTRAINT 설정할 수 있다.
✅ 제약조건의 사용 목적에 대해 이해할 수 있다.
데이터 무결성을 보장하기 위해 쓰인다. 컬럼에 자리하게 될 값이 유효한지 확인하고자 함이다.
✅ 제약조건의 종류별 특징을 이해할 수 있다.
CONSTRAINT에는 다섯 가지 종류가 있다: 1. NOT NULL, 2. UNIQUE, 3. CHECK, 4. PRIMARY KEY, 5. FOREIGN KEY
NOT NULL은 NULL값이 아니도록 설정할 때, 즉 데이터가 반드시 있어야 할 때 쓰인다. 예를 들면 회원가입 페이지에서 선택 정보가 아닌 필수 정보를 받을 때 쓰일 수 있다. 제약조건 중 유일하게 NOT NULL만 컬럼 레벨에서만 작성 가능하다. / UNIQUE는 값이 겹치지 않도록, 즉 중복값이 없도록 설정할 때 쓰인다. / CHECK는 기록될 값에 조건을 설정할 때 쓰인다. / PRIMARY KEY는 기본키라는 뜻으로, 행을 구분하는 고유 식별자 역할을 한다. 한 테이블당 하나의 PRIMARY KEY를 가질 수 있다. 단, PRIMARY KEY를 설정할 때 (컬럼명, 컬럼명) 두 개를 묶어 한 쌍의 기본키(복합키)로 설정할 수도 있다. 이때는 두 값이 모두 같아야만 중복 값으로 구분된다. PRIMARY KEY이 갖는 제약조건으로서의 성질은 UNIQUE + NOT NULL이다. / FOREIGN KEY는 외래키, 외부키라 불린다. REFERENCES 키워드와 함께 참조된 테이블의 데이터 및 NULL값만 취급할 수 있다. 참조 데이터의 무결성을 위해 쓰인다.
✅ 적절한 제약조건을 설정하여 TABLE을 생성할 수 있다.
0. SQL : DDL, DML, DCL
- SQL(Structured Query Language)을 크게 세 가지로 구분하면 다음과 같다.
- DDL(Data Definition Language) : 데이터 정의를 일컫는다. 객체를 구조적으로 만들고(CREATE), 수정하고(ALTER), 지우는(DROP) 것이다. 테이블
- DML(Data Manipulation Language) : 데이터 조작을 일컫는다. 데이터들을 삽입(INSERT), 수정(UPDATE), 지우는(DELETE) 과정을 말한다(+ SELECT). 행에 들어가는 데이터
SELECT만 따로 DQL(Data Query Language)이라고 부르기도 하지만, 이처럼 세 갈래로 구분할 때는 SELECT까지 DML에 포함시킨다.
- DCL(Data Control Language) : 데이터 제어를 일컫는다. 권한을 부여(GRANT) 혹은 철회(REVOKE)하거나 COMMIT/ROLLBACK으로 트랜잭션을 관리하는 것을 말한다.
1. DDL(CREATE)
❗ DDL(Data Definition Language) : 데이터 정의 언어
객체(OBJECT)를 만들고(CREATE), 수정하고(ALTER), 삭제하는(DROP) 구문을 말한다.
- 오라클 객체에는 테이블(TABLE) 외에도 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE), 프로시져(PROCEDUAL), 함수(FUNCTION), 트리거(TRIGGER), 동의어(SYNONYM), 사용자(USER)가 있다.
- 그 중에서도 가장 기본이 되는 CREATE TABLE 구문을 다뤄보자.
이번 학습 순서는 DDL(CREATE) 먼저 학습하고 → DML(INSERT, UPDATE, DELETE) 다룬 뒤 → 다시 DDL(ALTER, DROP)으로 진행된다.
2. 데이터 딕셔너리
- DBMS가 관리하는 영역이다.
2-1. USER_TABLES
SELECT
UT.*
FROM USER_TABLES UT;
- 현재 접속한 계정이 가지고 있는 모든 테이블 목록을 조회한다.
2-2. USER_TAB_COLUMNS
SELECT
UTC.*
FROM USER_TAB_COLUMNS UTC;
- 존재하는 테이블별 모든 컬럼 목록을 조회한다.
WHERE UTC.TABLE_NAME = 'MEMBER';
- 하단에 WHERE절을 추가해 특정 테이블이 가진 컬럼 목록만 조회할 수 있다.
2-3. USER_CONSTRAINTS
SELECT
UC.*
FROM USER_CONSTRAINTS UC;
- 제약조건 이름 기준으로 제약조건 목록을 조회한다.
- CONSTRAINT_NAME은 지정하지 않을 경우 SYS_C...라는 이름으로 자동 생성된다.
2-4. USER_CONS_COLUMNS
SELECT
UCC.*
FROM USER_CONS_COLUMNS UCC;
- 컬럼 기준으로 제약조건 목록을 조회한다.
3. CREATE TABLE
✅ CREATE TABLE 테이블명 (컬럼명 자료형(크기), 컬럼명 자료형(크기)...);
CREATE TABLE USER_TEST(
USER_NO NUMBER,
USER_ID VARCHAR2(20),
USER_PWD VARCHAR2(20),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
3-1. 컬럼 주석
✅ COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';
COMMENT ON COLUMN USER.USER_ID IS '회원아이디';
COMMENT ON COLUMN USER.USER_PWD IS '비밀번호';
COMMENT ON COLUMN USER.PHONE IS '연락처';
3-2. INSERT
✅ INSERT INTO 테이블명 (컬럼명, 컬럼명...) VALUES (값, 값...)
INSERT
INTO USER_TEST -- 테이블명
(
USER_NO
, USER_ID
, USER_PWD
, USER_NAME
, GENDER
, PHONE
)
VALUES -- 실제 넣을 값
(
1
, 'user01'
, 'pass01'
, '홍길동'
, '남'
, '010-0001-0001'
, 'honggd@reminder.com'
);
4. 제약 조건(CONSTRAINTS)
✅ ① NOT NULL, ② UNIQUE, ③ CHECK, ④ PRIMARY KEY, ⑤ FOREIGN KEY
- 테이블 작성 시 각 컬럼에 기록될 데이터에 대해 제약조건을 설정할 수 있다.
- 제약조건 설정 목적은 데이터 무결성을 보장하는 데 있다. 즉 데이터에 결함이 없는 상태를 유지하도록 만드는 것이다.
- 입력/수정하는 데이터에 문제가 없는지, 데이터가 올바른 값인지 자동 검사하기 위해 작성된다.
제약 조건에 이름 설정
지정하지 않을 경우 SYS_C...라는 이름으로 자동 생성된다.
같은 계정 내에서 제약조건명도 중복 불가하다.
-- 컬럼 레벨
✅ 컬럼명 자료형(크기) CONSTRAINT 이름 제약조건
-- 테이블 레벨
✅ CONSTRAINT 이름 제약조건 (컬럼명)
CREATE TABLE CONS_NAME (
DATA1 VARCHAR2(20) CONSTRAINT NN_DATA1 NOT NULL, -- 컬럼 레벨 작성 가능
DATA2 VARCHAR2(20) CONSTRAINT UN_DATA2 UNIQUE,
DATA3 VARCHAR2(20),
CONSTRAINT UN_DATA3 UNIQUE (DATA3) -- 테이블 레벨 작성 가능
);
4-1. NOT NULL
-- 컬럼 레벨 ONLY
✅ 컬럼명 자료형(크기)CONSTRAINT 제약조건명NOT NULL
❗ 다른 네 가지 제약조건과 달리, NOT NULL의 작성 위치는 컬럼레벨에 제한된다.
CREATE TABLE USER_TEST (
USER_NO NUMBER NOT NULL,
USER_ID VARCHAR2(20) NOT NULL,
USER_PWD VARCHAR2(20) NOT NULL,
USER_NAME VARCHAR2(30) NOT NULL,
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
- 해당 컬럼에 값이 반드시 기록되어야 할 때 쓰인다. 즉 선택 정보가 아닌 필수 정보를 다룰 때를 말한다.
- 데이터 삽입/수정 시 NULL 값을 허용하지 않도록 만든다.
NULL을 ("C##EMPLOYEE"."USER_NOTNULL"."USER_ID") 안에 삽입할 수 없습니다
NULL을 ("사용자명"."테이블명"."컬럼명") 안에 삽입할 수 없습니다
- NOT NULL 제약 조건이 적용된 컬럼에 NULL값을 입력하게 되면 위와 같은 오류가 출력된다.
4-2. UNIQUE
-- 컬럼 레벨
✅ 컬럼명 자료형(크기)CONSTRAINT 제약조건명UNIQUE
-- 테이블 레벨 *조건 묶음 가능 (컬럼명, 컬럼명)*
✅CONSTRAINT 제약조건명UNIQUE(컬럼명)
- 컬럼의 입력값에 대해 중복을 제한할 때 사용되는 제약 조건이다.
-- 컬럼 레벨에서 UNIQUE
CREATE TABLE USER_UNIQUE (
USER_ID VARCHAR2(20) UNIQUE NOT NULL, -- 제약조건 나열 가능
- 컬럼 레벨에서 설정 가능하다.
- UNIQUE 외 다른 제약 조건과 함께 쓰일 때는 UNIQUE NOT NULL 처럼 나열해 작성한다.
-- 테이블 레벨에서 UNIQUE
EMAIL VARCHAR2(50),
UNIQUE(USER_ID) -- 소괄호에 컬럼명 작성
);
- 테이블 레벨에서 설정 가능하다.
- UNIQUE(소괄호) 부분에 컬럼명을 특정한다.
UNIQUE(USER_NO, USER_ID)
);
- 두 개의 컬럼을 묶어 하나의 UNIQUE 제약 조건으로 설정할 수 있다.
- 조건을 묶는 것은 테이블 레벨에서만 가능하다.
컬럼 레벨에서는 이 같은 작업이 불가하다.
VALUES
(
1, 'user01' -- 최초 등록 OK
1, 'user02' -- ID값이 다르므로 OK
2, 'user01' -- NO값이 다르므로 OK1, 'user01'-- NO&ID 똑같으므로 무결성 제약 조건 위배
...
)
- INSERT INTO~VALUES 구문에 네 번에 걸쳐 위 같은 데이터들을 입력한다고 가정하자.
- 이때 데이터 중 하나만 바뀌어도 다르게 인식하기에 정상 실행된다.
무결성 제약 조건(C##EMPLOYEE.SYS_C008719)에 위배됩니다
무결성 제약 조건(사용자명.제약조건명)에 위배됩니다
- 이미 존재하는 값과 중복된 데이터를 입력하거나 쌍으로 묶음 지어진 데이터들이 똑같이 들어가면 무결성 제약 조건 위배에 해당한다. 오류 코드는 위와 같다.
4-3. CHECK
-- 컬럼 레벨
✅ 컬럼명 자료형(크기)CONSTRAINT 제약조건명CHECK(컬럼명 비교연산자 비교값)
-- 테이블 레벨
✅CONSTRAINT 제약조건명CHECK(컬럼명 비교연산자 비교값)
- 기록될 컬럼값에 조건을 설정할 수 있다.
- 양수만 취급하거나 Y/N만 입력하게끔 값의 범위에 대한 확인이 필요할 때 활용된다.
- 특히 주의할 점은 비교값 자리에는 리터럴만 사용할 수 있다는 것이다.
변하는 값이나함수는 사용하지 못한다.
-- 컬럼 레벨에서 CHECK
CREATE TABLE GENDER_CHECK (
GENDER VARCHAR2(10) CHECK(GENDER IN('남', '여'))
);
- '남' 또는 '여'만 입력할 수 있는 자리에 다른 값이 들어오면 다음과 같은 오류 코드가 나타난다: 체크 제약조건(C##EMPLOYEE.SYS_C008724)이 위배되었습니다
-- 테이블 레벨에서 CHECK
CREATE TABLE POINT_CHECK (
POINT NUMBER,
CONSTRAINT CK_POINT CHECK(POINT > 0)
);
체크 제약조건(C##EMPLOYEE.CK_POINT)이 위배되었습니다
체크 제약조건(사용자명.제약조건명)이 위배되었습니다
- 양수만 받고자 할 때 음수가 지정되는 등 CHECK 조건을 위배하면 위와 같은 오류 코드가 나타난다.
4-4. PRIMARY KEY 기본키, 복합키
-- 컬럼 레벨
✅ 컬럼명 자료형(크기) CONSTRAINT 제약조건명 PRIMARY KEY
-- 테이블 레벨 *복합키 설정 가능*
✅ CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명, 컬럼명)
- 기본키(PRIMARY KEY, PK)는 컬럼 고유 식별자(IDENTIFIER)로 사용된다. 즉 행을 구분하는 역할을 수행한다.
- 테이블에서 어느 한 행의 정보를 찾기 위해 사용할 컬럼을 말한다.
- 제약 조건으로서 NOT NULL + UNIQUE의 의미를 가진다.
- 한 테이블당 하나의 PRIMARY KEY만 설정할 수 있다.
CONSTRAINT PK_USER_NO2 PRIMARY KEY(USER_NO, USER_ID)
- 단, PRIMARY KEY로서 한 개 컬럼 또는 여러 개의 컬럼을 묶어서 설정 가능하다: 복합키
무결성 제약 조건(C##EMPLOYEE.PK_USER_NO)에 위배됩니다
NULL을 ("C##EMPLOYEE"."USER_PRIMARYKEY"."USER_NO") 안에 삽입할 수 없습니다
- PRIMARY KEY 제약 조건을 위배했을 시에는 중복 작성되었는지(UNIQUE), NULL값이 들어갔는지(NOT NULL)에 따라 위와 같은 오류 코드가 출력된다.
- 여기서도 UNIQUE 특성 그대로 적용돼 1, 'user01' 한 쌍이 PRIMARY KEY일 때는 1, 'user02'든 2, 'user01'이든 다르게 인식해 삽입 가능하다. 1, 'user01'을 똑같이 입력하면 그때는 무결성 제약 조건 위배에 해당된다.
4-5. FOREIGN KEY 외부키, 외래키
-- 컬럼 레벨
✅ 컬럼명 자료형(크기)CONSTRAINT 제약조건명REFERENCES 참조할테이블명(참조할컬럼) | 삭제룰
-- 테이블 레벨
✅CONSTRAINT 제약조건명FOREIGN KEY (적용할컬럼명) REFERENCES 참조할테이블명(참조할컬럼) | 삭제룰
- 외부키/외래키(FOREIGN KEY, FK) 사용 목적은 참조 무결성이 위배하지 않도록 하는 데 있다.
- FOREIGN KEY 제약 조건에 의해 테이블간 관계가 형성된다.
- 참조된 테이블에서 제공하는 값만 사용 가능하다. 부모 KEY가 가지고 있는 값만 자식 KEY가 참조해서 쓸 수 있도록 하는 것이다. 따라서 참조하고 있는 부모 값의 범위=자식이 사용할 수 있는 범위가 된다. 부모에게 없는 데이터는 쓰일 수 없다.
FROM USER_FOREIGNKEY UF
LEFT JOIN USER_GRADE UG ON(UF.GRADE_CODE = UG.GRADE_CODE); --NULL까지 조회되도록 LEFT JOIN
- 제공되는 값 외에 NULL도 쓰일 수 있다. 따라서 NULL값 포함한 목록이 조회되도록 JOIN할 때도 LEFT OUTER JOIN 등을 활용해야 한다.
REFERENCES 참조할테이블명(참조할컬럼) | 삭제룰
- 참조할 컬럼명이 생략되면, 해당 테이블의 PRIMARY KEY로 설정된 컬럼이 자동 참조된다.
중복을 허용하는 컬럼의 경우 'D1'이라는 데이터가 이 행에도 저 행에도 있을 때, 외래키로서는 어떤 데이터를 참조해야 할지 불명확하기 때문이다.
- FOREIGN KEY로서 참조될 수 있는 컬럼은 PRIMARY KEY 컬럼 또는 UNIQUE로 지정된 컬럼이다.
무결성 제약조건(C##EMPLOYEE.FK_GRADE_CODE)이 위배되었습니다- 부모 키가 없습니다
- 따라서 부모 KEY에 존재하지 않는 값을 INSERT~VALUES 구문에 설정하게 되면 위와 같은 오류 코드가 출력된다.
A. 데이터 삭제 옵션
삭제 옵션
부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤 방식으로 처리할지 설정할 수 있다.
✅ ON DELETE RESTRICT
삭제룰을 명시하지 않았을 때 기본 지정되는 삭제 제한 옵션이다.
이때 삭제 시도 시 '자식 레코드가 발견되었습니다'라는 오류 발생 코드가 나타난다.
즉 FOREIGN KEY로 지정된 컬럼에서 해당 데이터를 사용하고 있을 때 삭제에 제한이 있다.
✅ ON DELETE SET NULL
부모 KEY 삭제 시 자식 KEY를 NULL로 변경하는 옵션이다.
✅ ON DELETE CASCADE
부모 KEY 삭제 시 자식 KEY를 가진 행도 함께 삭제한다.
B. 서브쿼리를 이용한 테이블 생성
-- 테이블 전체 복사
CREATE TABLE EMPLOYEE_COPY
AS
SELECT
E.*
FROM EMPLOYEE E;
-- 필요한 컬럼 복사
CREATE TABLE EMPLOYEE_COPY2
AS
SELECT
E.EMP_ID
, E.EMP_NAME
, E.SALARY
, D.DEPT_TITLE
, J.JOB_NAME
FROM EMPLOYEE E
LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID)
LEFT JOIN JOB J ON (E.JOB_CODE = J.JOB_CODE);
서브쿼리를 이용한 테이블 생성
❗ 컬럼명, 데이터 타입, 값이 복사된다.
❗ 제약 조건은 NOT NULL만 복사된다.
C. 제약 조건 추가
제약 조건 추가
ALTER TABLE 테이블명 ADD PRIMARY KEY (컬럼명);
ALTER TABLE 테이블명 ADD FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명);
ALTER TABLE 테이블명 ADD UNIQUE (컬럼명);
ALTER TABLE 테이블명 ADD CHECK (컬럼명 비교연산자 비교값);
ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;
❗ NOT NULL만 추가 키워드로 'MODIFY'를 쓴다.
5. 사용 예제
▶CREATE 시에 컬럼명 자료형(크기) 명시한다.
-- 회원 가입용 테이블 생성(USER_TEST)
-- 컬럼명 : USER_NO(회원번호)
-- USER_ID(회원아이디) -- 중복 금지, NULL값 허용 안 함
-- USER_PWD(회원비밀번호) --NULL값 허용 안 함
-- PNO(주민등록번호) --중복 금지, NULL값 허용 안 함
-- GENDER(성별) -- '남' 또는 '여'로 입력
-- PHONE(연락처)
-- ADDRESS(주소)
-- STATUS(탈퇴여부) -- NOT NULL, 'Y' 혹은 'N'으로 입력
-- 각 제약조건 이름 부여
-- 5명 이상 회원 정보 INSERT
-- 각 컬럼별로 코멘트 생성
CREATE TABLE USER_TEST (
USER_NO NUMBER
USER_ID VARCHAR2(20) CONSTRAINT NN_USER_ID NOT NULL,
USER_PWD VARCHAR2(20) CONSTRAINT NN_USER_PWD NOT NULL,
PNO VARCHAR2(20) CONSTRAINT NN_PNO NOT NULL,
GENDER VARCHAR2(3),
PHONE VARCHAR2(20),
ADDRESS VARCHAR2(50),
STATUS VARCHAR2(3) CONSTRAINT NN_STATUS NOT NULL,
CONSTRAINT UQ_USER_ID UNIQUE(USER_ID),
CONSTRAINT UQ_PNO UNIQUE(PNO),
CONSTRAINT CK_GENDER CHECK(GENDER IN ('남', '여')),
CONSTRAINT CK_STATUS CHECK(STATUS IN ('Y', 'N'))
);
COMMENT ON COLUMN USER_TEST.USER_NO IS '회원번호';
COMMENT ON COLUMN USER_TEST.USER_ID IS '회원아이디';
COMMENT ON COLUMN USER_TEST.USER_PWD IS '회원비밀번호';
COMMENT ON COLUMN USER_TEST.PNO IS '주민등록번호';
COMMENT ON COLUMN USER_TEST.GENDER IS '성별';
COMMENT ON COLUMN USER_TEST.PHONE IS '연락처';
COMMENT ON COLUMN USER_TEST.ADDRESS IS '주소';
COMMENT ON COLUMN USER_TEST.STATUS IS '탈퇴여부';
INSERT
INTO USER_TEST
(
USER_NO
, USER_ID
, USER_PWD
, PNO
, GENDER
, PHONE
, ADDRESS
, STATUS
)
VALUES
(
1
, 'user01'
, 'pass01'
, '991231-1234567'
, '여'
, '010-0001-0001'
, '서울특별시 용산구 123'
, 'N'
);
▶ALTER TABLE 명시한다.
▶(컬럼명)으로 쓴다.
-- EMPLOYEE 테이블의 DEPT_CODE에 외래키 제약조건 추가
-- 참조 테이블은 DEPARTMENT, 참조컬럼은 DEPARTMENT의 기본키
ALTER TABLE EMPLOYEE ADD FOREIGN KEY (DEPT_CODE) REFERENCES DEPARTMENT (DEPT_ID);
-- DEPARTMENT 테이블의 LOCATION_ID에 외래키 제약조건 추가
-- 참조 테이블은 LOCATION, 참조 컬럼은 LOCATION의 기본키
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (LOCATION_ID) REFERENCES LOCATION (LOCAL_CODE);
-- EMPLOYEE 테이블의 JOB_CODE에 외래키 제약조건 추가
-- 참조 테이블은 JOB 테이블, 참조 컬럼은 JOB테이블의 기본키
ALTER TABLE EMPLOYEE ADD FOREIGN KEY (JOB_CODE) REFERENCES JOB (JOB_CODE);
-- EMPLOYEE 테이블의 SAL_LEVEL에 외래키 제약조건 추가
-- 참조테이블은 SAL_GRADE테이블, 참조 컬럼은 SAL_GRADE테이블 기본키
ALTER TABLE EMPLOYEE ADD FOREIGN KEY (SAL_LEVEL) REFERENCES SAL_GRADE (SAL_LEVEL);
-- EMPLOYEE테이블의 ENT_YN컬럼에 CHECK제약조건 추가('Y','N')
-- 단, 대 소문자를 구분하기 때문에 대문자로 설정
ALTER TABLE EMPLOYEE ADD CHECK (ENT_YN IN ('Y', 'N'));
-- EMPLOYEE테이블의 SALARY 컬럼에 CHECK제약조건 추가(양수)
ALTER TABLE EMPLOYEE ADD CHECK (SALARY > 0);
-- EMPLOYEE테이블의 EMP_NO컬럼에 UNIQUE 제약조건 추가
ALTER TABLE EMPLOYEE ADD UNIQUE (EMP_NO);
'Database' 카테고리의 다른 글
[Oracle/SQL] 8. TCL | 트랜잭션 | COMMIT | ROLLBACK | SAVEPOINT (0) | 2022.01.25 |
---|---|
[Oracle/SQL] 7. DML | INSERT | UPDATE | DELETE | MERGE (0) | 2022.01.25 |
[Oracle/수업 과제 practice] SELECT(Additional - Option) (0) | 2022.01.23 |
[Oracle/SQL] 5. 서브쿼리 | 상관쿼리 | 스칼라 서브쿼리 | 인라인뷰 (0) | 2022.01.21 |
[Oracle/수업 과제 practice] SELECT(Additional - 함수) (0) | 2022.01.20 |