Quiet Time


 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)
    1. 문자형 : char, varchar2, long, clob, blob
     (2000) (4000)     (2G)    (4G) (4G)
    1. 숫자형 : number
    2. 날짜형 : 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
)
 
 어제 배운 내용 복습
 
    1. DML 문장 ---> MERGE 
 
       DML   ---> INSERT,UPDATE,DELETE,MERGE,SELECT
         
              MERGE  ----> INSERT, UPDATE, DELETE  한번에 수행하는 명령어

 
    1. DDL 문장 ----> CREATE, ALTER, DROP, TRUNCATE, RENAME
        
테이블 생성 명령어
 
앞으로의 목표 파이썬을 이용한 머신러닝 프로그램 개발(틱테토)
SQL, Python, 하둡
     
Hive SQL
 
 
 
 10. DDL문을 사용해서 테이블을 생성  관리
    • 10 목차
    • 데이터 베이스 오브젝트 5가지
    • 테이블 생성 방법
    • 데이터 타입
    • 제약조건
    • 서브쿼리를 사용해서 테이블 생성하는 방법
    • 테이블 삭제
 
        
10.4. 제약조건
 
    • 제약( constraints) 이란?
" 데이터 품질을 높이기 위한 데이터베이스 오브젝트 "
 
데이터 정재 작업
 
중복돼서 데이터가 입력된다거나 필수항목에 null 입력한다거나
이메일을 입력할  @ 반드시 넣어야하는데 아무렇게나 입력했거나 하는 데이터들을
애초부터 입력되지 않게 해야한다.
 
    • 제약(constraints)  종류 ?
      1. primary key                      ---------> 중복된 data null 값을 입력 못하게
      2. unique                               ---------> 중복된 data 입력 못하게
      3. not null                              ---------> null 값이 입력되지 않게
      4. check                                  ---------> 지정된 data 외에는 다른 data 입력 되지 않게
      5. 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)  종류 ?
      1. primary key                      ---------> 중복된 data null 값을 입력 못하게
      2. unique                               ---------> 중복된 data 입력 못하게
      3. not null                              ---------> null 값이 입력되지 않게
      4. check                                  ---------> 지정된 data 외에는 다른 data 입력 되지 않게
      5. 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