10장 DDL문을 사용해서 테이블을 생성 및 관리
SQL 기본2017. 9. 7. 02:02
■ 10장. DDL문을 사용해서 테이블을 생성 및 관리
- 10장 목차
- 데이터 베이스 오브젝트 5가지
- 테이블 생성 방법
- 데이터 타입
- 제약조건
- 서브쿼리를 사용해서 테이블 생성하는 방법
- 테이블 삭제
10.1 데이터베이스 오브젝트 5가지
- TABLE -----> 데이터를 저장하는 기본 저장 단위이고 행과 열로 구성
- VIEW -----> 테이블을 바라보는 쿼리가 뷰이다
- SEQUENCE ------> 일련번호 생성기 ( 번호를 생성하는 DB 오브젝트)
- SYNONYM ------> 테이블의 또 다른 이름
- INDEX ------> 검색 속도를 향상시키기 위한 DB 오브젝트
10.2 테이블 생성 방법
CREATE TABLE EMP500
( EMPNO NUMBER(10),
ENAME VARCHR2(10),
SAL NUMBER(10),
HIREDATE DATE );
문제292. emp500 테이브렝 데이터를 2건 정도 입력하시오!
INSERT INTO EMP500 (EMPNO, ENAME, SAL, HIREDATE)
VALUES (2934,'임은총',4864,TO_DATE(SYSDATE,'RRRR-MM-DD'));
INSERT INTO EMP500 (EMPNO, ENAME, SAL, HIREDATE)
VALUES (2234,'김범수',4864,TO_DATE('1999-12-13','RRRR-MM-DD'));
INSERT INTO EMP500 (EMPNO, ENAME, SAL, HIREDATE)
VALUES (2921,'김서희',4800,TO_DATE('1989-11-21','RRRR-MM-DD'));
문제293. 여러분들의 데이터를 입력할 수 있도록 테이블을 생성하시오.
테이블명 : emp293
CREATE TABLE EMP293
(
EMPNO NUMBER(10),
ENAME VARCHAR2(10),
SAL NUMBER(10),
birth date,
major varchar2(10),
address varchar2(30)
);
사원번호
사원이름
월급
생일
전공
주소
- 테이블명이나 컬럼명을 지을 때 주의할 사항(p10-5)
- 문자로 시작해야한다.
- 30자 이내여야 한다.
- 알파벳 대문자, 소문자 , 숫자 ,특수문자(_, #, $) 를 쓸 수 있다.
- 기존에 존재하는 똑같은 이름의 테이블명을 쓸 수 없다.
- 오라클 예약어를 사용할 수 없다.
예 : create table select ( empno...
- 테이블 생성시 default값 사용하는 방법 (p 10-9)
create table emp506
( ename varchar2(20),
sal number(10) default 2500 );
insert into emp506(ename)
values('jack');
문제294. 아래의 테이브릉ㄹ 생성하고 default도 지정하시오!
테이블명 : emp294
컬럼 : empno
ename
sal
hiredate ------------------------> default 값 : 오늘날짜
job ------------------------> default 값 : SALESMAN
ALTER SESSION SET NLS_DATE_FORMAT='RR/MM/DD';
CREATE TABLE emp295
(
EMPNO NUMBER(10),
ENAME VARCHAR2(20),
SAL NUMBER(10),
HIREDATE DATE DEFAULT TO_CHAR(SYSDATE,'RR/MM/DD'),
JOB VARCHAR2(10) DEFAULT 'SALESMAN'
);
CREATE TABLE emp295
(
EMPNO NUMBER(10),
ENAME VARCHAR2(20),
SAL NUMBER(10),
HIREDATE DATE DEFAULT TRUNC(SYSDATE), --------------> 시분초 짤림!
JOB VARCHAR2(10) DEFAULT 'SALESMAN'
);
- 내가 만든 테이블 리스트를 확인하는 방법.
SELECT * FROM USER_TABLES;
- 테이블 생성 일자
SELECT object_name, created, last_ddl_time
from user_objects;
문제295. created와 last_ddl_time 서로 다른 테이블이 무엇인지 조회하시오!
SELECT object_name, created, last_ddl_time
from user_objects
where created != Last_ddl_time;
문제296. tic-tae-toe 학습데이터를 입력하기 위한 데이블을 생성하시오
create table ttt
(
t1 number(1),
t2 number(1),
t3 number(1),
t4 number(1),
t5 number(1),
t6 number(1),
t7 number(1),
t8 number(1),
t9 number(1),
result varchar(10)
);
문제297. 승리기보에서 2가 나온 횟수 각 칸별로
select sum(decode(t1,1,1,0)) t1,
sum(decode(t2,1,1,0)) t2,
sum(decode(t3,1,1,0)) t3,
sum(decode(t4,1,1,0)) t4,
sum(decode(t5,1,1,0)) t5,
sum(decode(t6,1,1,0)) t6,
sum(decode(t7,1,1,0)) t7,
sum(decode(t8,1,1,0)) t8,
sum(decode(t9,1,1,0)) t9
from ttt
where result ='positive'
-
데이터 타입 (유형)
-
데이터 타입 (유형)
문제298. 영국 옥스포드에서 영여의 거의 모든문장을 컴퓨터에 집어
넣고 통계를 내보았더니 대략 100단어 정도가 영어 문장의 거의
50%를 차지하는 것을 확인햇다고 합니다.
내가 아는 단어들을 지금 대충 세어보다도 100개는 충분히 넘는데
왜나는 영어문장을 50%도 이해 못하나 라고 질문을 하실 수도 있는데
여기에 또 다른 비밀이 숨어있습니다.
그 100단어는 대부분 전치사 입니다. (책: 애로우 잉글리쉬)
10.3 데이터 타입 (유형) (p 10-12)
- 문자형 : char, varchar2, long, clob, blob
(2000) (4000) (2G) (4G) (4G)
- 숫자형 : number
- 날짜형 : date
내가 만듬 테이블
select table_name
from user_tables
where table_name like 'WINTER%';
문제299. 아래의 데이터를 입력하게끔 테이블을 생성하고 데이터를 입력하시오
create table tab
(
lyric varchar2(4000)
);
■ char 와 varchar2의 차이점
char vs varchar2
고정형 가변형
char(10) varchar(10)
M I R A C L E M I R A C L E
■■■■■■□□□ ■■■■■■(□□□) --> 남은 공간 회수
남은 공간 공백을 그대로 유지 저장공간을 절약한다.
MIRACLE123이라고 업데이트하면 MIRACLE123이라고 업데이트하면
블락안에서 이동하지 않지만 블락이 이동해요 -> 성능이 느려짐
CREATE TABLE EMP700
(ENAME VARCHAR2(10),
DEPTNO VARCHAR2(10) );
CREATE TABEL DEPT700
( DEPTNO CHAR(10),
LOC CHAR(10) );
INSERT INTO EMP700 VALUES('SCOTT','10');
INSERT INTO EMP700 VALUES('SMITH','20');
INSERT INTO DEPT700 VALUES('10','DALLAS');
INSERT INTO DEPT700 VALUES('20','CHICAGO');
COMMIT;
문제300. 아래와 같이 조인을 하면 결과가 출력될 것인가???
SELECT E.ENAME, D.LOC
FROM EMP700 E, DEPT700 D
WHERE E.DEPTNO = D.DEPTNO;
VARCHAR2(2) CHAR(10)
결과가 안 나온다 우리 VARCHAR 쓰자!!!!!!!!!!!!!!!
문제301.(오늘의 마지막 문제) 겨울왕국에서 가장 많이 나오는
단어와 그 건수를 출력하는 SQL을 분석하고
내가 임의로 영화 스크립트를 구글에서 내려 받아서
테이블에 입력하고 그 중에 가장 많이 나오는 단어가
무엇인지
select aaa1,count(*) a
from (
select regexp_substr(lower(w_text), '[^ ]+',1,1) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,2) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,3) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,4) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,5) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,6) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,7) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,8) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,9) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,10) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,11) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,12) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,13) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,14) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,15) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,16) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,17) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,18) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,19) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,20) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,21) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,22) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,23) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,24) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,25) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,26) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,27) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,28) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,29) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,30) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,31) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,32) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,33) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,34) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,35) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,36) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,37) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,38) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,39) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,40) aaa1 from winter7
)
where aaa1 is not null
group by aaa1
order by a desc;
테이블을 따로 만들려면
create table winter
as
(
select regexp_substr(lower(w_text), '[^ ]+',1,1) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,2) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,3) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,4) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,5) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,6) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,7) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,8) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,9) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,10) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,11) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,12) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,13) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,14) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,15) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,16) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,17) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,18) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,19) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,20) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,21) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,22) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,23) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,24) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,25) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,26) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,27) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,28) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,29) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,30) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,31) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,32) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,33) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,34) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,35) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,36) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,37) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,38) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,39) aaa1 from winter7
union all
select regexp_substr(lower(w_text), '[^ ]+',1,40) aaa1 from winter7
)
■ 어제 배운 내용 복습
- DML 문장 ---> MERGE 문
DML 문 ---> INSERT,UPDATE,DELETE,MERGE,SELECT
MERGE 문 ----> INSERT, UPDATE, DELETE 를 한번에 수행하는 명령어
- DDL 문장 ----> CREATE, ALTER, DROP, TRUNCATE, RENAME
↓
테이블 생성 명령어
앞으로의 목표 파이썬을 이용한 머신러닝 프로그램 개발(틱테토)
↓
SQL, Python, 하둡
↓
Hive SQL
■ 10장. DDL문을 사용해서 테이블을 생성 및 관리
- 10장 목차
- 데이터 베이스 오브젝트 5가지
- 테이블 생성 방법
- 데이터 타입
- 제약조건
- 서브쿼리를 사용해서 테이블 생성하는 방법
- 테이블 삭제
10.4. 제약조건
- 제약( constraints) 이란?
" 데이터 품질을 높이기 위한 데이터베이스 오브젝트 "
데이터 정재 작업
중복돼서 데이터가 입력된다거나 필수항목에 null을 입력한다거나
이메일을 입력할 때 @를 반드시 넣어야하는데 아무렇게나 입력했거나 하는 데이터들을
애초부터 입력되지 않게 해야한다.
- 제약(constraints) 의 종류 ?
- primary key ---------> 중복된 data와 null 값을 입력 못하게
- unique ---------> 중복된 data를 입력 못하게
- not null ---------> null 값이 입력되지 않게
- check ---------> 지정된 data 외에는 다른 data는 입력 되지 않게
- foreign key ----------> 참조하는 컬럼에 거는 제약
- primary ket 제약을 이용해서 테이블 생성
create table emp40
( empno number(10) primary key,
ename varchar2(10) );
insert into emp40 values( 1111, 'aaa');
insert into emp40 values( 1111, 'bbb');
insert into emp40 values(null, 'ddd');
문제305. 아래의 테이블을 생성하는데 ename 에 중복된 데이터가
입력되지 않도록 제약을 걸어서 생성하시오
(중복된 데이터만 입력 안되고 null은 입력되게 하시오)
테이블명: emp305
컬럼명: empno
ename
sal
create table emp305
( empno number(10),
ename varchar(10) unique,
sal number(10) );
- 제약을 삭제하는 명령어
alter table emp305
drop constraint SYS_C007037;
(제약이름)
(제약이름)
제약 삭제 하니 잘 들어감
- 제약 이름 확인하는 방법
select table_name,
constraint_name,
constraint_type
from user_constraints <---------------- 데이터 사전
where table_name='EMP40';
↑
반드시 대문자로 입력해야한다.
문제306. emp40 테이블에 걸린 primary 제약을 삭제하시오.
alter table emp40
drop constraint SYS_C007036;
- 제약이름을 주면서 제약을 거는 방법
create table emp45
( empno number(10) constraint emp45_empno_pk primary key,
ename varchar2(10) ); ↑
제약이름
테이블명_컬럼명_제약타입
select table_name, constraint_name
from user_onstraints
where table_name= 'EMP45';
문제307. emp45 테이블에 empno에 걸린 primary key를 삭제하시오 !
select table_name, constraint_name
from user_constraints
where table_name= 'EMP45';
alter table emp45
drop constraints emp45_empno_pk;
문제308. 아래의 테이블을 unique 제약과 함께 생성하시오
create table emp308
( empno number(10),
ename varchar(10) emp308_ename_unique unique,
sal number(10) );
문제309. 위에 308 테이블에 ename에 null은 중복입력이 될까?
된다
- check 제약 ---> 지정된 data 외에는 다른 데이터는 입력 안되게 거는 제약
CREATE TABLE DEPT400
( DEPTNO NUMBER(10),
LOC VARCHAR2(20) CONSTRAINT DEPT400_LOC_CK
CHECK(LOC IN ('DALLAS','CHICAGO','BOSTON') ) );
문제310. 아래의 테이블을 생성하는데 CHECK제약을 걸어서 생성하시오
테이블명 : emp311
컬럼명 : EMPNO
ENAME
SAL <------- 월급을 0 ~ 9000 사이의 값만 입력되게
CREATE TABLE EMP311
( EMPNO NUMBER(10),
ENAME VARCHAR2(10),
SAL NUMBER(10) CONSTRAINT EMP311_SAL_CK
CHECK(SAL BETWEEN 0 AND 9000) );
문제311. 아래의 테이블을 생성하는데 이름에 성이 김씨, 이씨 최씨만
입력되게끔 CHECK제약을 걸어서 생성하시오
CREATE TABLE EMP311
(
EMPNO NUMBER(10),
ENAME VARCHAR2(10)
CONSTRAINTS EMP312_ENAME_CK
CHECK(ENAME LIKE IN ('김%', '이%', '최%') );
문제312. 이름, 월급, 이메일 컬럼을 담는 테이블을 생성하는데
이메일에 @ 가 반드시 포함되어야 이메일이 입력이 될 수 잇또록 CHECK 제약조건을 생성하시오
테이블명 : EMP313
컬럼명 : ENAME
SAL
EMAIL
CREATE TABLE EMP313
(
ENAME VARCHAR2(10),
SAL NUMBER(10),
EMAIL VARCHAR2(20) CONSTRAINTS EMP312_ENAME_CK
CHECK(EMAIL LIKE '%@%'));
문제313. 위의 문제를 다시 수행하는데 이번에는 이메일에 @와 . 이 포함되어야지만 이메일이 입력 될 수 있도록
테이블을 생성하시오
CREATE TABLE EMP313
(
ENAME VARCHAR2(10),
SAL NUMBER(10),
EMAIL VARCHAR2(20) CONSTRAINTS EMP312_ENAME_CK CHECK(EMAIL LIKE '%@%.%'));
문제314.(점심시간문제) 아래의 테이블을 생성하는데
전공이 컴퓨터 , 통계 학과는 입력되지 못하게 하시오!
테이블명 : EMP315
컬럼명 : ENAME
MAJOR <-------- 컴퓨터, 통계 학과외에 다른 학과만 입력되게 하시오
CREATE TABLE EMP315
(
ENAME VARCHAR2(10),
MAJOR VARCHAR2(20) CONSTRAINTS EMP315_MAJOR_CK
CHECK(EMAIL NOT LIKE '컴퓨터%' or EMAIL NOT LIKE '통계%'));
- 제약(constraints) 의 종류 ?
- primary key ---------> 중복된 data와 null 값을 입력 못하게
- unique ---------> 중복된 data를 입력 못하게
- not null ---------> null 값이 입력되지 않게
- check ---------> 지정된 data 외에는 다른 data는 입력 되지 않게
- foreign key ----------> 참조하는 컬럼에 거는 제약
- foreign key 제약
- dept 테이블에 deptno에 primary key 제약을 거는 방법
(이미 만들어진 테이블에 제약을 거는 방법)
alter table dept
add
constraint dept_deptno_pl primary key(deptno);
- emp 테이블에deptno 에 foreign key 제약을 걸면서
dept 테이블에 deptno를 참조해라~
alter table emp
ADD CONSTRAINT EMP_DEPTNO_FK FOREIGN KEY(DEPTNO)
REFERENCES DEPT(DEPTNO);
EMP(자식) ------------------------------------------------------dept(부모)
insert into emp(empno, ename, sal, deptno)
values (1232,'scott',3400,30);
insert into emp(empno, ename, sal, deptno)
values (1235,'jones',3500,70);
- 위와 같이 부모-자식관계를 설정하면
- emp 테이블에 70번과 같은 부서테이블에 속하지 않은 부서번호를 입력하지 못하게 된다.
- dept 테이블에 10,20,30,번을 삭제할 수 도 없게 된다.
결론적으로 데이터의 품질이 좋아지고
outer join을 남발하지 않아도 된다.
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno (+) ;
======================> 이렇게 조인하러가여!
크은 테이블 > 작은 테이블 조인하면 느려져여
부모자식관계를 걸어서 데이터 깨끗하게 !
문제315. dept테이블에서 10 번을 삭제해보세요
delete from emp
where deptno = 10;
안데여!
문제316. dept 테이블에서 40번을 삭제하면 삭제되겠는가?
delete from emp
where deptno = 40;
돼여 ! 자식이 없어여!
emp 테이블에 deptno가 40번인 사원이 없어서 삭제가 된다.
문제317. 자식 테이블(emp)에 걸린 foreign key 제약을 삭제 하세요
alter table emp
drop CONSTRAINT EMP_DEPTNO_FK;
문제318. 부모 테이블(dept) 에 걸린 primary key 제약을 삭제하시오
alter table dept
drop constraint dept_deptno_pk;
■ 이미 생성된 테이브레 제약을 거는 방법
문제319. dept 테이블에 deptno 에 primary key 제약을 거시오 !
alter table dept
add constraint dept_deptno_pk primary key(deptno);
문제320. 우리반 테이블에 empno에 primary key 제약을 거세요
alter table emp2
add constraint emp2_empno_pk primary key(empno);
문제321. 우리반 테이블에 ename에 unique 제약을 거세요
alter table emp2
add constraint emp2_ename_un unique(empno);
문제322. emp 테이블에 월급에 check 제약을 거는데
월급이 0 ~ 9500 사이의 데이터만 입력 또는 수정되게 제약을 거시오
alter table emp
add constraint emp_sal_ck check(sal between 0 and 9500);
문제323. 사원 테이블의 KING의 월급을 9600으로 변경하시오
UPDATE EMP
SET SAL = 9600
WHERE ENAME = 'KING';
ORA-02290: check constraint (SCOTT.EMP_SAL_CK) violated
----------------------------------------------------
UPDATE EMP
SET SAL = 9600
WHERE ENAME = 'KING'
- 제약을 중지시키는 방법
ALTER TABLE EMP
DISABLE CONSTRAINT EMP_SAL_CK;
문제324. 기존에 들어잇던 데이터 중에 제약에 위반된 데이터가
있다 하더라도 무시하고 EMP_SAL_CK제약을 다시 활성화 시키시오
ALTER TABLE EMP
ENABLE NOVALIDATE CONSTRAINT EMP_SAL_CK;
-> 기존에 들어있떤 데이터들에 대해서는 제약검사 안하고
앞으로 들어올 데이터들에 대해서만 제약검사 하겠다.
- 제약을 활성화 시키는 방법
ALTER TABLE EMP
ENABLE CONSTRAINT EMP_SAL_CK;
문제325. 우리반 테이블에 EMAIL 컬럼에 CHECK 제약을 거는데
@ 와 . 이 들어가야 데이터가 입력 될 수 있도록 CHECK제약을 거시오
ALTER TABEL EMP2
ADD CONSTRAINT EMP2_EMAIL_EMP2 CHECK ( EMAIL LIKE '%@%.%');
10.5 서브쿼리를 사용해서 테이블 생성하는 방법
CREATE TABLE EMP_BACKUP
AS
SELECT *
FROM EMP;
SELECT * FROM EMP_BACKUP;
문제326. 부서번호, 부서번호별 토탈월급을 출력하는 쿼리의 결과를 테이블로 생성하시오 !
(테이블명 : emp326)
CREATE TABLE EMP326
AS
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO ;
문제327. 부서번호, 이름, 월급, 순위를 출력하는데
순위가 부서번호 별로 각각 월급이 높은 순서대로 순위를 부여하시오.
SELECT DEPTNO, ENAME, SAL, RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) RNK
FROM EMP;
문제328. 위의 결과에서 순위가 1등만 나오게 하시오
SELECT *
FROM (SELECT DEPTNO, ENAME, SAL, RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) RNK
FROM EMP)
WHERE RNK =1;
문제329. 아래의 쿼리의 결과를 테이블로 생성하시오 !
(테이블명 : emp 329)
CTAS :Create Table As Subquery의 줄임!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
create table emp329
as
SELECT DEPTNO, ENAME, SAL, RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) RNK
FROM EMP
;
- 오라클에 데이터를 삭제하는 명령어가 3가지가 있어요
DELETE |
TRUNCATE |
DROP |
|
DATA |
삭제 |
삭제 |
삭제 |
저장영역 |
유지 |
삭제 |
삭제 |
저장구조 |
유지 |
유지 |
삭제 |
ROLLBACK |
가능 |
불가능 |
불가능 |
TRUNCATE와 DROP은 순식간에 ~
INSERT INTO EMP
SELECT * FROM EMP_BACKUP;
■ 테이블을 읽기만 가능하도록 만드는 방법
ALTER TABLE EMP READ ONLY;
문제330. 다시 EMP 테이블을 읽기 쓰기가 가능하도록 변경하시오 !
ALTER TABLE EMP READ WRITE;
'SQL 기본' 카테고리의 다른 글
엔터티란(Entity) (0) | 2022.10.06 |
---|---|
11장 . 기타 스키마 객체 (0) | 2017.09.07 |
9장 데이터 조작 언어 (DML문) (0) | 2017.09.07 |
8장 집합 연산자 사용 (0) | 2017.09.07 |
7장 Subquery 사용 (0) | 2017.09.07 |