데이터 정의어 (DDL= Data Definition Language)
create table 테이블명 (
컬럼명 타입(크기),
컬럼명 타입(크기),
컬럼명 타입(크기));
ex) create table dept(
dno number(2),
dname varchar2(14),
loc varchar(13));
< 테이블명 및 컬럼명 정의 규칙 >
- 문자(영어 대소문자)로 시작 , 30자 이내
- 문자(영어 대소문자) , 숫자 0~9 , 특수문자( _ $ # )만 사용 가능
- 대소문자 구별 없음 , 소문자로 저장하려면 ''로 묶어준다
- 동일 사용자의 다른 객체의 이름과 중복 안 됨
ex) system이 만든 테이블명들은 다 달라야 함
create table 테이블명 (컬럼명, 컬럼명2 ...)
as
서브쿼리;
ex)
1. create table 테이블명(컬럼명 o)
- 서브 쿼리문으로 부서 테이블의 구조와 데이터 복사하기
create table dept1(dept_id) --컬럼수 1개
AS
select dno --컬럼수 1개
from department;
2. create table 테이블명(컬럼명 명시 x)
- 산술식에 별칭 필수
create table dept2
AS
select eno, ename, salary*12 연봉 --별칭
from employee
where dno=20;
where 0 = 1ex) 부서 테이블의 구조만 복사하여 dept3 테이블 생성
create table dept3
AS
select *
from department
WHERE 0=1; --거짓 조건
🖐 테이블 구조 확인 명령어
DESC 테이블명;
이클립스에서는 실행되지 않음
(RUN SQL Command Line에서 실행 / conn system 1234 입력 👉 desc dept3 ;
alter table 테이블명
add (컬럼명 타입);
ex)
사원 테이블에 날짜 타입을 가지는 birth 컬럼 추가
alter table dept
add(birth date);
alter table 테이블명
modify 컬럼명 타입(크기);
ex)
1. 사원 이름 컬럼 크기 변경하기
alter table dept
modify ename varchar2(30);
2. 사원 이름 컬럼 크기 변경 (30 -> 10)
alter table dept
modify ename varchar2(30); => 오류 : 크기 작게 변경 불가
3. 사원 이름 컬럼 타입 변경 (varchar2 -> number)
alter table dept
MODIFY ename number(30); => 오류 : 타입 변경은 char <-> varchar2만 가능
4. 컬럼 기본 값 지정
alter table dept
MODIFY ename varchar2(40) DEFAULT '기본';
alter table 테이블명
drop column 컬럼명;
ex)
사원 테이블에서 사원 이름 컬럼 제거
alter table dept
drop column ename;
alter table 테이블명
set unused (컬럼명);
ex)
사원 테이블에서 사원번호 제거
alter table dept
set unused (eno);
🤔 사용하는 이유?
unused로 표시된 모든 컬럼을 한번에 제거
alter table dept2
DROP unused columns; => s:복수
rename 기존 테이블명 to 변경 테이블명;
ex) 테이블명 변경하기
rename dept2 to dept3;
drop table 테이블명;
ex) 테이블 제거하기
drop table dept
drop table 테이블명 cascade constraints; --s : 제약조건'들'
truncate table 테이블명;
ex)
테이블의 모든 데이터 제거하기
truncate table dept; => but, 테이블의 구조는 남아있음 (컬럼명, 데이터 타입)
USER_ 로시작 ~ S(복수)로 끝남
ex)
USER_tables로 사용자가 소유한 '테이블'에 대한 정보 조회
select *
from USER_tables;
전체 사용자와 관련된 뷰, 사용자가 접근할 수 있는 모든 객체 정보 조회
객체 : 테이블, 시퀀스, 인덱스, 뷰 등
owner : 조회 중인 객체가 누구의 소유인지 확인
ex)
ALL_tables로 테이블에 대한 정보 조회
사용자 : system 일 때 - 500레코드 (레코드:한줄), SYS와 SYSTEM만 : 사용자(HR:교육용) 제외된 상태로 결과가 나옴
: hr 일 때 - 78레코드 (사용자 hr과 다른 사용자를 포함한 결과 나옴)
select owner, table_name
from ALL_tables;
--where owner in ('SYSTEM') or table_name in ('EMPLOYEE', 'DEPARTMENT');
--where table_name in ('EMPLOYEE', 'DEPARTMENT');
ex)
DBA_tables로 테이블에 대한 정보 조회
사용자 : system 일 때 - 500레코드 (레코드:한줄), SYS와 SYSTEM만 : 사용자(HR:교육용) 제외된 상태로 결과가 나옴
ALL_tables로 조회한 정보와 같은 결과
: hr 일 때 - 실패(table or view does not exist) : DBA 권한 없음
select owner, table_name
from DBA_tables;