- 데이터 정의어(DDL: Data Definition Language)?
데이터베이스 데이터를 보관하고 관리하기 위해 제공되는 여러 객체(object)의 생성, 변경, 삭제 관련 기능을 수행한다.
- CREATE문은 오라클 데이터베이스 객체를 생성하는데 사용하는 명령어이다.
CREATE TABLE 소유 계정.테이블 이름(
열1 이름 열1 자료형,
열2 이름 열2 자료형,
...
열N 이름 열N 자료형
);
CREATE TABLE EMP_DDL(
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE, -- 길이 지정이 필요 없는 자료형이라 소괄호 사용X
SAL NUMBER(7, 2), -- 7: 총 자리수, 2: 소수점 자리수
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
);
CREATE TABLE DEPT_DDL
AS SELECT * FROM DEPT;
CREATE TABLE EMP_DDL_30
AS SELECT * FROM EMP WHERE DEPTNO = 30;
CREATE TABLE EMPDEPT_DDL
AS SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE,
E.SAL, E.COMM, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE 1<>1;
- ALTER명령어는 이미 생성된 오라클 데이터 베이스 객체를 변경할 때 사용한다.
- 테이블에 새 열을 추가 또는 삭제하거나, 열의 자료형 또는 길이를 변경하는 등 테이블 구조 변경과 관련된 기능을 수행한다.
CREATE TABLE EMP_ALTER
AS SELECT * FROM EMP;
- ALTER TABLE 명령어와 ADD 키워드, 추가할 열 이름과 자료형을 명시하면 테이블에 새 열을 추가할 수 있다.
ALTER TABLE EMP_ALTER
ADD HP VARCHAR(20);
ALTER TABLE EMP_ALTER
RENAME COLUMN HP TO TEL;
ALTER TABLE EMP_ALTER
MODIFY EMPNO NUMBER(5);
ALTER TABLE EMP_ALTER
DROP COLUMN TEL;
RENAME EMP_ALTER TO EMP_RENAME;
TRUNCATE TABLE EMP_RENAME;
DROP TABLE EMP_RENAME;
CREATE TABLE EMP_HW(
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
);
ALTER TABLE EMP_HW
ADD BIGO VARCHAR(20);
ALTER TABLE EMP_HW
MODIFY BIGO VARCHAR(30);
ALTER TABLE EMP_HW
RENAME COLUMN BIGO TO REMARK;
5. EMP_HW 테이블에서 EMP 테이블의 데이터를 모두 저장해보세요. 단 REMARK 열은 NULL로 삽입합니다.
INSERT INTO EMP_HW
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, NULL FROM EMP;
DROP TABLE EMP_HW;
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE UPPER('%el%')
AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Intact%' THEN 'X'
ELSE 'O'
END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT ANIMAL_ID, NAME
FROM (SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC)
WHERE ROWNUM <=2;
SELECT ANIMAL_ID, NAME, TO_CHAR(DATETIME, 'YYYY-MM-DD') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID(+) = O.ANIMAL_ID
AND I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID, O.NAME;
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
AND I.DATETIME > O.DATETIME
ORDER BY I.DATETIME;
SELECT NAME, DATETIME
FROM(
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID(+)
AND O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME)
WHERE ROWNUM <=3;
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
AND I.SEX_UPON_INTAKE LIKE '%Intact%'
AND O.SEX_UPON_OUTCOME NOT LIKE '%Intact%'
ORDER BY I.ANIMAL_ID;