Purple Bobblehead Bunny

Database

[OracleDB] SQL 종류 (DDL.DML.DCL)

준영어린이 2022. 5. 14. 17:23

 

 

DDL - Data Definition Language
- 데이터베이스 개체를 생성/삭제/변경하는 역할
- CREATE, DROP, ALTER...
DML - Data Manipulation Language
- 데이터를 조작(선택, 삽입, 수정, 삭제) 하는데 사용되는 언어
- SELECT, INSERT, UPDATE, DELETE ...
DCL - Data Control Language
- 권한부여/철회에 사용되는 구문
- GRANT/REVOKE/DENY

 

 

 

DDL

1. 테이블 컬럼 추가 (ALTER TABLE ADD)

 

//ALTER TABLE 테이블명 ADD(컬럼명 데이터타입(사이즈));

//USER 테이블에 USER_NAME 컬럼을 VARCHAR 타입으로 추가

ALTER TABLE USER ADD(USER_NAME VARCHAR(13));

 

2. 테이블 컬럼 수정 ( ALTER TABLE MODIFY)

 

//ALTER TABLE 테이블명 MODIFY(컬럼명 데이터타입(사이즈));

//USER테이블에 USER_AGE 컬럼을 NUMBER(3) 타입으로 수정

ALTER TABLE USER MODIFY(USER_AGE NUMBER(3));

 

3. 테이블 컬럼 삭제 ( ALTER TABLE DROP)

 

//ALTER TABLE 테이블명 DROP COLUMN 컬럼명

//USER테이블에 USER_NAME 컬럼 삭제

ALTER TABLE USER DROP COLUMN USER_NAME;

 

4. 테이블 컬럼 이름 변경 ( ALTER TABLE RENAME)

 

//ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;

//USER테이블에 USER_NAME 컬럼을 USER_FIRST_NAME 으로 변경

ALTER TABLE USER RENAME COLUMN USER_NAME TO USER_FIRST_NAME;

 

DML

 

USER_TABLE 생성

 

CREATE TABLE userTbl( // 회원 테이블
userID CHAR(10) NOT NULL PRIMARY KEY, // 사용자 아이디
name NVARCHAR(10) NOT NULL,           // 이름
birthYear INT NOT NULL,               // 출생년도
addr NCHAR(2) NOT NULL,               // 지역(2글자 입력.. 경남, 서울, 경기...)
mobile1 CHAR(3)                       // 휴대폰의 국번
mobile2 CHAR(8)                       // 휴대폰의 나머지 전화번호
height SMALLINT                       // 키
mDate DATE                            // 회원가입 일
);

 

 

 

BUY_TABLE 생성

 

CREATE TABLE buyTbl(              // 회원 구매 테이블
num INT NOT NULL PRIMARY KEY,     // 순번 (Primary key)
userID CHAR(8) NOT NULL,       
prodName CHAR(6) NOT NULL,        // 물품명
groupName CHAR(4)                 // 분류
price INT NOT NULL,               // 단가
amount SMALLINT NOT NULL,         // 수량
FOREIGN KEY (userID) REFERENCES userTbl(userID) 
);

 

 

USERTABLE 값 삽입

INSERT INTO userTbl VALUES('LSG','이승기',1987,'서울','011','1111111',182.'2008-8-8');
INSERT INTO userTbl VALUES('KBS','김범수',1979,'경남','011','2222222',173.'2012-4-4');
INSERT INTO userTbl VALUES('KKH','김경호',1971,'전남','019','3333333',177.'2007-7-7');
INSERT INTO userTbl VALUES('JYP','조용필',1950,'경기','011','4444444',166.'2009-4-4');
INSERT INTO userTbl VALUES('SSK','성시경',1979,'서울',NULL,NULL,182,'2009-9-9');

 

BUYTABLE 값 삽입

 

INSERT INTO buyTbl VALUES(1,'KBS','운동화',NULL,30,2);
INSERT INTO buyTbl VALUES(2,'KBS','노트북','전자',1000,1);
INSERT INTO buyTbl VALUES(3,'JYP','모니터','전자',200,1);
INSERT INTO buyTbl VALUES(4,'BBK','모니터','전자',200,5);
INSERT INTO buyTbl VALUES(5,'KBS','청바지','의류',50,3);
INSERT INTO buyTbl VALUES(6,'BBK','메모리','전자',80,10);
INSERT INTO buyTbl VALUES(7,'SSK','책','서적',15,5);
INSERT INTO buyTbl VALUES(8,'EJW','책','서적',15,2);

 

USE / SELECT

테이블 조회하기

 

OracleDB에서 데이블 목록을 조회할 때는 오라클에서 제공하는 3가지 시스템 뷰를 사용한다.

3가지 시스템 뷰는 all_tables,all_tab_comments,all_objects이며, 접근 권한에 따라서 접두어(all)를 바꿔서 사용할 수 있다.

 

테이블 목록 조회 3가지 방법

SELECT * 
  FROM all_tables
 
// all_tables는 권한을 가진 모든 테이블이 조회되며 통계 정보를 쉽게 확인할 수 있다.




SELECT * 
  FROM all_tab_comments
 WHERE table_type = 'TABLE'
 
// all_tab_comments는 권한을 가진 모든 테이블 목록과 테이블 설명(COMMENT)을 조회할 때 사용한다




SELECT * 
  FROM all_objects
 WHERE object_type = 'TABLE'

// all_objects는 권한을 가진 모든 테이블의 최초 생성 일시와 마지막 변경 일시를 확인할 수 있다.

 

 

시스템 뷰의 접두어를 변경해서 사용 가능

 

all all_tables
all_tab_comments
all_objects
사용자 계정이 접근 가능한 모든 테이블 또는 객체 조회
user user_tables
user_tab_comments
user_objects
사용자 계정에 생성된 모든 테이블 또는 객체 조회
dba dba_tables
dba_tab_comments
dba_objects
관리자(DBA) 권한으로 모든 테이블 또는 객체 조회

 

 

일반적으로는 all 접두어 뷰를 많이 사용하며, 관리자 권한이 있으면 dba 접두어 뷰를 사용할 수 있다.

현재 로그인한 게정에 생성된 테이블 목록만 필요하다면 user 접두어 뷰를 사용하면 된다.

 

 

all_tables 사용법

 

SELECT * FROM all_tables

 

 

 

 

all_tables 대신에 all_all_tables를 사용할 수 있다. all_all_tables 시스템 뷰를 사용하면 객체 테이블도 추가할 수 있다.

일반적인 테이블을 조회하면 all_tables를 사용하면 된다. all_tables 조회하면 table_type 칼럼 항목은 없으며

all_all_tables를 조회할 때만 table_type 칼럼이 존재하며 값이 NULL이면 일반 테이블, 값이 있으면 객체 테이블이다

 

SELECT * FROM all_all_tables

 

all_tables과 all_all_tables의 차이는 조회 시 객체 테이블의 포함 여부이다.

 

 

 

 

SELECT * FROM all_tab_comments WHERE table_type = 'TABLE'

 

 

 

all_tab_comments 시스템 뷰는 TABLE,VIEW 목록을 조회한다.

테이블만 조회 할 경우 table_type 조건을 부여해야 테이블 목록만 조회된다.

 

 

SELECT *
  FROM all_tab_comments
 WHERE table_type = 'TABLE'
   AND owner IN ('SYSTEM', 'HR')
   
   
 SELECT * 
   FROM all_tab_comments
  WHERE table_name = 'EMP'
  
// 특정 테이블의 설명(COMMENT)을 확인할 때는 table_name 조건을 부여하면 된다

 

all_objects 사용법

 

SELECT * 
  FROM all_objects
 WHERE object_type='TABLE'
 
 
 //all_objects를 조회하면 테이블의 최초 생성 일시와 마지막 수정 일시를 확인할 수 있다
 //all_objects는 테이블 외에 뷰, 프로시저, 함수, 시노님, 시퀀스 등 모든 객체를 조회할 수 있다

 

 

 

SELECT *
  FROM all_objects
  WHERE object_name LIKE '%DEPT%'
  
  
  // all_objects 뷰는 테이블 조회보다는 전체적인 객체 검색이 필요할 때 많이 사용한다

 

 

 

SELECT *
  FROM all_tables
  
// all_tables는 권한을 가진 모든 테이블이 조회되며 정보를 쉽게 확인할 수 있다.


SELECT * 
  FROM all_tab_comments
 WHERE table_type = 'TABLE'
 
// all_tab_comments는 권한을 가진 모든 테이블 목록과 테이블 설명(COMMENT)을 조회 할 때 사용한다.


SELECT *
  FROM all_objects
 WHERE object_type = 'TABLE'
 
 
//all_objects는 권한을 가진 모든 테이블의 최초 생성 일시와 마지막 변경 일시를 확인할 수 있다.

 

 

 

SELECT 옵션

 

where 조건

 

// where 조건
// SELECT * 열이름 FROM 테이블이름 WHERE 조건

select * from usertbl;
select * from usertbl where name='김경호';


// where 조건 + 관계연산자
// SELECT 열이름 FROM 테이블이름 WHERE 조건

select * from usertbl where birthyear>=1970 and height>=182;
select * from usertbl where birthyear>=1970 or height>=182;

 

 

BETWEEN...AND / IN() / LIKE

 

//BETWEEN..AND -(-에서 - 사이)
SELECT Name,height FROM userTbl WHERE height BETWEEN 180 AND 183;


//IN() - (비연속적 집합 - 문자열)
SELECT Name,height FROM userTbl WHERE addr IN('경남','전남','경북');


//LIKE - (문자열 내용 검색)
SELECT Name,height FROM userTbl WHERE name LIKE '김%';
SELECT Name,height FROM userTbl WHERE name LIKE '_재범';

 

서브쿼리

// 서브쿼리 - 쿼리 안에 쿼리
SELECT Name,height FROM userTbl
WHERE height < (SELECT height FROM userTbl WHERE Name='김경호');





// 서브쿼리 - 쿼리 안에 쿼리 - 하나 이상 값 반환 시 오류
SELECT Name, height FROM userTbl
WHERE height < (SELECT height FROM userTbl WHERE addr='경남');

 

ANY / ALL

 

// ANY - 여러 결과 중 한 가지만 만족해도 OK

SELECT Name, height FROM userTbl
WHERE height>=ANY (SELECT height FROM userTbl WHERE addr='경남');

// ALL - 모두 만족해야 OK

SELECT Name, height FROM userTbl
WHERE height >= ALL (SELECT height FROM userTbl WHERE addr='경남');

 

 

ORDER BY

 

//ORDER BY - 정렬(기본 오름차순)
SELECT Name, mDate FROM userTbl ORDER BY mDate;



//ORDER BY DESC - 내림파순 정렬
SELECT Name, mDate FROM userTbl ORDER BY mDate DESC;


//ORDER BY
SELECT Name, height FROM userTbl ORDER BY height DESC, name ASC;

 

 

테이블 복사

 

// 테이블 복사하기 스키마 & 데이터
//CREATE TABLE 새로만들테이블명 AS SELECT * FROM 복사할테이블명 [WHERE 절]

// 테이블 구조만 복사하기
//CREATE TABLE 새로만들테이블명 AS SELECT * FROM 복사할테이블명 WHERE 1=2 
//[where절에 '참'이 아닌 조건을 넣어줌]


//테이블은 이미 생성되어 있고 데이터만 복사 (테이블 구조가 동일할 때)
//INSERT INTO 복사할테이블명 SELECT * FROM 테이블명 [WHERE 절]

INSERT INTO TB_BOARD_TEMP SELECT * FROM TB_BOARD;


// 테이블은 이미 생성되어 있고 데이터만 복사 (테이블 구조가 다를 때)
// INSERT INTO 복사할테이블명 (NUM, TITLE, CONTENTS) SELECT NUM, TITLE, CONTENTS FROM 테이블명

INSERT INTO TB_BOARD_TEMP (NUM, TITLE, CONTENTS) SELECT NUM, TITLE, CONTENTS FROM TB_BOARD;

 

'Database' 카테고리의 다른 글

[OracleDB] 제약조건  (0) 2022.05.21
[OracleDB] SELECT  (0) 2022.05.15
[OracleDB] 기본 CRUD  (0) 2022.05.13
[MySQL] WorkBench ERD Diagram  (0) 2022.04.12
[MySQL] 사용자 추가, 권한 부여,권한 제거  (0) 2022.04.03