ORACLE Oracle 요약 3

2020.02.22 18:07

졸리운_곰 조회 수:1666

Oracle 요약 3

▒ 데이터 베이스 객체

: 데이터를 관리하는 논리적 단위

 

- 테이블 : Data 저장

- 뷰

- 시퀀스

- 인덱스

- 동의어

==> 위의 모두를 총괄적으로 관리하는 단위 : 스키마 (유저라고 생각하면 됨.)

 

 

유저를 만든다는것은 위에 5가지를 관리할 집합체를 만드는것이라 생각.

스키마끼리 서로 알수 없다. 서로 접근을 허용을 하지 않았다면 접근할수 없다.

select * from 스키마 employees; 원래는 스키마(유저)가 들어감.

 

sysdba가 오라클의 최고 사용자와 같음. 

sysdba는 다른 스키마도 볼수 있다.

해당 스키마는 저장공간을 명시해 줄수 있다. 파일로 저장되어 관리됨.(저장매체로 접근하는것은 실제로 OS가 하기 때문에)

 

 

① 테이블 : DATA저장 ->검색, 수정, 삭제, 제약조건..

컬럼, row을 만듬.                                                               

                               

컬럼이름  데이터형식 제약조건
한글도지원  number   
(128개국어지원)   date  
  char(정해진 문자길이)  
  varchar2(가변적늘어남)  
  long(최대2G까지가변문자)  
  clob(최대4G가지문자데이터)   
  blob(가변 길이 이진 데이터(1~4Gbyte))  

 

 

----------테이블 생성------------------------------------------------------------------------------

create table 테이블명(

컬럼 형식 제약조건

); 

저장공간 명시

관리기법 명시

----------테이블의 구조 변경-----------------------------------------------------------------------

alter table 테이블명

modify (수정) 컬럼 형식 제약조건

add (추가) 컬럼 형식 제약조건

drop (삭제) 컬럼 형식 제약조건

 

- 기존의 데이터가 변경할 형식과 다르면 문제가 생김.

 

ex) alter table employees add yearsal number(15) : 컬럼추가

ex) update employees set yearsal=12*salary+nvl(salary*COMMISSION_PCT,0) ; yearsal에 데이터 추가

----------------------------------------------------------------------------------------------------

create table 사원연봉 as 서브쿼리 : 서브쿼리 내용을 새로운 테이블로 생성!!

ex) create table 사원연봉 as select 12*salary+nvl(salary*COMMISSION_PCT,0) as "연봉" from employees;

----------------------------------------------------------------------------------------------------

cf)  unused : 필요없는 컬럼을 사용하지 못하게 만듬. 해당컬럼의 데이터가 많고 데이터베이스가 바쁠때 

                   drop하기 전에 임시방편. 

형식 : alter table 테이블명 set unused (컬럼) : unused 설정

형식 : alter table 테이블명 drop unused (컬럼) : unused 된 컬럼을 삭제

 

--컬럼 UNUSED 하기
    ALTER TABLE SAWON SET UNUSED(EMAIL)
    ALTER TABLE SAWON SET UNUSED COLUMN EMAIL 

 

--UNUSED상태에 있는 컬럼명 조회 
    SELECT * FROM USER_UNUSED_COL_TABS

 

--실제로 UNUSED 상태의 컬럼을 삭제하기
    ALTER TABLE SAWON DROP UNUSED COLUMNS

----------------------------------------------------------------------------------------------------
delete : 삭제 (ROLLBACK 가능)

Truncate : 절단 (속도는 delete보다 빠름, ROLLBACK 불가능)

----------------------------------------------------------------------------------------------------

 

② 뷰 (view)

: 테이블의 논리적인 부분 집합

- 많이 검색하는 쿼리, 컬럼들.. 미리 만들어 둘수 있다.

- DML작업이 많이 없는 것들

저장공간을 사용하지 않는다. 즉, 테이블이 아니다??

 

 
형식 :
create view view명 
as
select e.employee_id,e.last_name,d.department_name
from employees e
join departments d
on e.department_id=d.department_id
 
 
 
 
ex) 
- create view emp_dept_join as select e.employee_id,e.last_name,d.department_name from employees e join departments d on e.department_id=d.department_id (emp_dept_join 뷰 생성)
 
- select employee_id, department_id from emp_dept_join
 
 
<뷰 정보확인>
select * from user_views;
select * from dba_views;
 
cf) create or replace view ~
 
     같은 이름의 뷰가 있을때 덮어쓰고 싶을때 
     or replace를 사용.
 
 
<뷰 삭제>
Drop view view명
 
 
 
- 단순 뷰 : 테이블을 하나 써서 만듬
- 복합 뷰 : 테이블을 여러개 써서 만듬
- 인라인 뷰
 
cf) 대개 뷰는 검색작업을 위해 많이 쓰지만, DML작업도 할수 있다.검색을 위한 목적이라면 단순뷰나 복합뷰든 상관없지만, DML작업을 할 때는 단순뷰는 하나의 테이블을 사용하기때문에 잘되지만, 복합뷰(group by를 써서 사용한 경우등..)는 여러 테이블을 사용하기 때문에 원본에 문제가 생길수 있기때문에 잘 쓰지 않는 것이 좋음. 
 

cf) Top-N 분석 ----------------------------------------------------------------

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

rownum : row에 대한 number를 붙여줌.

- select rownum,last_name,salary from employees

ROWNUM  LAST_NAME  SALARY 
King  30000 
Kochhar  17000 
Dehaan  17000 
Hunold  9000 
Ernst  6000 
Lorentz  4200 
Mourgos  5800 
Rajs  3500 
Davies  3100 
10  Matos  2600 
11  Vargas  2500 
12  Zlotkey  10500 
13  Abel  11000 
14  Taylor  8600 
15  Grant  7000 
16  Whaien  4400 
17  Hartstein  13000 
18  Fay  6000 
19  Higgins  12000 
20  Gietz  8300 

 

 

- select rownum,last_name,salary from employees order by salary desc;

(먼저 rownum,last_name,salary 를 뽑아 놓고 정렬을 하기때문에, rownum이 뒤죽박죽ㅋㅋ)

ROWNUM  LAST_NAME  SALARY 
King  30000 
Kochhar  17000 
Dehaan  17000 
17  Hartstein  13000 
19  Higgins  12000 
13  Abel  11000 
12  Zlotkey  10500 
Hunold  9000 
14  Taylor  8600 
20  Gietz  8300 
15  Grant  7000 
Ernst  6000 
18  Fay  6000 
Mourgos  5800 
16  Whaien  4400 
Lorentz  4200 
Rajs  3500 
Davies  3100 
10  Matos  2600 
11  Vargas  2500 

 

 

- select rownum,last_name,salary from (select last_name,salary from employees order by salary desc);

ROWNUM  LAST_NAME  SALARY 
King  30000 
Kochhar  17000 
Dehaan  17000 
Hartstein  13000 
Higgins  12000 
Abel  11000 
Zlotkey  10500 
Hunold  9000 
Taylor  8600 
10  Gietz  8300 
11  Grant  7000 
12  Ernst  6000 
13  Fay  6000 
14  Mourgos  5800 
15  Whaien  4400 
16  Lorentz  4200 
17  Rajs  3500 
18  Davies  3100 
19  Matos  2600 
20  Vargas  2500 

 

- select rownum,last_name,salary from (select last_name,salary from employees order by salary desc) where rownum<6;

(1~5까지 뽑아보자!!ㅋㅋ)

------------------------------------------------------------------------------------

③ 시퀀스

: 연속적으로 값을 할당하는 의미

ex) Max(employee_id)+1 

=> but max는 group 함수, 따라서 row가 많을 수록 시간이 오래 걸림.

이런 단점을 보완해서 나온것이~ 시쿼스라네요~ㅋ

 

 

 

 

 

 

 

 

 

 

 

- 형식 : create sequence 시퀀스명 start with 처음부여할번호 increment by 간격 maxvalue 최대값 nocycle nocache ;

ex) - create sequence dept_id_deq start with 200 increment by 10 maxvalue 1000 nocycle nocache;

     - select * from user_sequences;

SEQUENCE_NAME  MIN_VALUE  MAX_VALUE  INCREMENT_BY  CYC  ORD  CACHE_SIZE  LAST_NUMBER 
DEPT_ID_DEQ  1000  10  200

 

     

      -  insert into departments values(dept_id_deq.nextval,'KBS',100,1400);

       (nextval : last_number의 값을 넣어줌)

      

DEPARTMENT_ID  DEPARTMENT_NAME  MANAGER_ID  LOCATION_ID 
200  KBS  100  1400

 

 

200 -> currval

210 -> nextval

하나를 더 부여하면,

210 -> currval

220 -> nextval 이 됨.

 

      -  insert into departments values(dept_id_deq.nextval,'MBS',600,1100);

DEPARTMENT_ID  DEPARTMENT_NAME  MANAGER_ID  LOCATION_ID 
200  KBS  100  1400 
210  MBS  600  1100

 

 

cf) 중간에 오류가 나더라도 건너뛰고 자동으로 부여된다.

------------------------------------------------------------------------------------

④ 동의어 (synonym)

긴 이름들을 단순화 할때 쓰면 편리함.

- 형식 : create synonym newname for oldname

 

 

참고> 상대방 오라클 접속 설정

1. # xhost + localhost

2. $HOME/bin로 이동 해서 

3. $./netca 실행

 

[출처] https://psnote.tistory.com/37?category=585985

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86756
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79073
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95836
78 [Kafka] Kafka 한번 살펴보자... Quickstart file 졸리운_곰 2021.06.18 1312
77 Java Kafka Producer, Consumer 예제 구현 Java를 이용하여 Kafka Producer와 Kakfa Consumer를 구현해보자. file 졸리운_곰 2021.06.18 1172
76 Beginner’s Guide to Understand Kafka file 졸리운_곰 2021.06.18 1574
75 [Kafka] Kafka 설치/실행 및 테스트 file 졸리운_곰 2021.06.18 1066
74 [java] [kafka] [Kafka] 개념 및 기본예제 file 졸리운_곰 2021.06.16 2170
73 Getting started with Apache Kafka in Python file 졸리운_곰 2020.09.10 2261
72 [Kafka] 다운로드 및 Quick Start file 졸리운_곰 2020.09.07 1897
71 [Kafka] 기본 개념잡기 file 졸리운_곰 2020.09.07 1711
70 Flume Integration with Kafka file 졸리운_곰 2019.04.16 2083
69 빅데이터: 플럼(Flume) 토폴로지 설계 file 졸리운_곰 2019.04.16 1603
68 실시간 처리를 위한 분산 메시징 시스템 카프카(Kafka) file 졸리운_곰 2018.05.12 1410
67 Flume과 Kafka를 사용한 초당 100만개 로그 수집 테스트 file 졸리운_곰 2018.05.12 1400
66 웹 크롤링 / web crwaling / web scraping / 웹 스크래핑 file 졸리운_곰 2017.07.09 1848
65 빅데이터 단지 몇퍼센트의 예측 정확성을 위하여 장애로 가득찬 빅데이터 시스템을 도입하여야 하는가에 대한 의문! file 졸리운_곰 2017.03.20 1608
64 빅데이터: 플럼(Flume) 토폴로지 설계 file 졸리운_곰 2017.03.20 1420
63 [실시간 분석 시스템] Apache Flume를 활용한 데이터 수집(1) file 졸리운_곰 2017.03.06 1322
62 [실시간 분석 시스템] 데이터 수집 #2 Apache Sqoop을 활용하여 RDBMS 데이터 수집(2) file 졸리운_곰 2017.03.06 1386
61 [실시간 분석 시스템] 데이터 수집 #2 Apache Sqoop을 활용하여 RDBMS 데이터 수집(1) file 졸리운_곰 2017.03.06 1107
60 [실시간 분석 시스템] 데이터 수집 #1 오픈 소스 수집기 비교 file 졸리운_곰 2017.03.06 1750
59 [실시간 분석 시스템] 일단 데이터 들여다 보기 file 졸리운_곰 2017.03.06 1945
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED