yekang

sequence, subquery 본문

빅데이터/SQL

sequence, subquery

예캉 2018. 1. 4. 14:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
SELECT * FROM user_constraints;
 
 
-- set unused 예제
CREATE TABLE emp_copy
AS SELECT *
   FROM employees;
   
ALTER TABLE emp_copy
DROP (hire_date,commission_pct);
DESC emp_copy;
 
ALTER TABLE emp_copy 
SET UNUSED (email,job_id,first_name); -- drop column과 같은데 실제로 지우진 않는다. 공간을 차지한다는 차이만 있다.
DESC emp_copy;
 
SELECT *
FROM user_unused_col_tabs; -- 내 소유에 unused된거 보여준다...테이블과 unused 개수.
 
ALTER TABLE emp_copy
DROP UNUSED COLUMNS;
 
SELECT * FROM emp_copy;
DESC emp_copy;
CREATE OR REPLACE VIEW empvu20
AS SELECT *
    FROM emp_copy
    WHERE department_id=20;
    
SELECT * FROM empvu20;
 
INSERT INTO empvu20(employee_id,last_name,department_id)
    VALUES (999,'James',30);
SELECT * FROM empvu20; -- 들어가도 부서가 20번이 아니라서 여기서는 안나오고 emp_copy에선 보인다.
SELECT * FROM emp_copy; -- 이를 방지하는 것이 with check option이다.
 
CREATE OR REPLACE VIEW empvu20
AS SELECT *
    FROM emp_copy
    WHERE department_id=20
    WITH CHECK OPTION;
INSERT INTO empvu20(employee_id,last_name,department_id)
    VALUES (888,'Jill',20);    
--> 제약조건 위배 에러
 
CREATE SEQUENCE dept_deptid_seq
 START WITH 120
 INCREMENT BY 10
 MAXVALUE 9999
 NOCYCLE
 NOCACHE;
-- 처음에는 nextval밖에 안된다. currval 안된다.
SELECT dept_deptid_seq.NEXTVAL
FROM dual; -- 120 
 
SELECT dept_deptid_seq.NEXTVAL
FROM dual; -- 130
 
SELECT dept_deptid_seq.CURRVAL
FROM dual; -- 130 , 현재 value
 
SELECT dept_deptid_seq.NEXTVAL, dept_deptid_seq.NEXTVAL
FROM dual; -- 140, 140 나온다.
-- seq은 row 1개당 1번 실행된다. 왼쪽의 nextval과 오른쪽의 nextvalㅇ ㅣ같다.
 
SELECT dept_deptid_seq.NEXTVAL
FROM employees; -- 20건이라서 150부터 340까지 나온다.
 
--INSERT INTO departments VALUES (dept_deptid_seq.NEXTVAL) 
 
 
--ROWID
SELECT ROWNUM,ROWID,last_name
FROM employees;
 
SELECT *
FROM employees
WHERE ROWID='AAAFEIAAEAAABP1AAM';
cs


Comments