1. Vi 편집기 

 

세가지 모드(상태) 있다

1. 명령모드(esc 상태)

2. 입력모드(편집상태)- 편집기에서 i 누르면 insert 표시됨

명령모드(Last Line Mode)

 

- 실행하면 처음상태가 명령모드이다.

- 소문자 i 입력모드 insert모드 편집가능한상태, esc insert모드해제 커맨드가능한상태

 

 실습(임의의 파일을 만들어서 연습해보장)


DBWR 

메모리에서 변경된 버퍼를 디스크에 기록하는 프로세스


▶데이터버퍼캐쉬를 구성하는 버퍼의 종류

     1) Dirty Buffer : 변경은 완료 되었지만 디스크에 기록되지 않은 버퍼

     2) Pinned Buffer : 변경중인 버퍼

     3) Free Buffer : 변경이 완료된후 디스크에 기록된 버퍼


▶DBWR 활동 주기

     1) 체크포인트가 발생했을 경우

     2) Dirty Buffer의 수가 임계치에 도달했을 경우

     3) Free Buffer가 필요하여 데이터 버퍼 캐쉬에서 일정한 수의 버퍼를 검색하고도 Free Buffer를 찾지 못했을경우 

     4) 테이블 스페이스가 오프라인 또는 읽기전용모드로 변경될경우

     5) 테이블이 DROP되거나 TRUNCATE될 경우 

     6) 테이블 스페이스에 온라인 백업 명령이 수행 될 경우

     7) 주기적인 타임아웃에 의해 발생



LGWR

Redo Log Buffer에 기록된 내용을 Redo Rog File로 저장


Redo Log Buffer에서 사용하는 아키텍쳐

     1) 빠른 커밋 : 유저가 특정작업을 수행하고 커밋을 수행한후에는 즉시 데이터베이스에 저장하여 복구 및 조회를 할 수 있게 하겠다는                        것이다. (커밋 수행시 변경된 데이터 블록을 즉시 디스크로 저장하지않고 해당 데이터 블록에 대한 조회는 메모리에서                          수행하고 복구는 리두 로그파일에 기록된 내용을 이용하여 데이터베이스에 적용된 것과 같이 하겠다는 뜻)

     

     2) 선로그 기법 : DML 작업 시 실제 데이터에 대해 DML을 수행하기 전에 데이터들의 변경에 대한 내용을 Redo Log Buffer에 미리 

                         저장하게된다. (이래야지 작업중 장애가 발생하여도 복구를 수행 할수있다.)

     

     3) 동시 쓰기 : 커밋시 로그를 기록하는 부분에서 같은 시점에 커밋되는 작업들에 대해서는 동시에 리두로그파일에 기록한다는 의미


▶LGWR 활동주기

     1) Commit 수행시

     2) DBWR 프로세스가 데이터 버퍼캐쉬의 변경된 데이터 블록을 데이터파일에 적용하기전에 발생

     3) Redo Log Buffer의 1/3 이상이 사용되었을 경우 발생 

     4) 1MB 이상의 Redo Log가 생성되었을 경우 발생 

     5) 3초마다 발생



PMON

PMON 프로세스는 서버프로세스가 작업을 수행하는중 실패한 경우 활동한다.


▶PMON 역할

    1)실패한 프로세스가 수행중이던 트랜잭션 롤백

    2)실패한 프로세스가 획득했던 메모리, 락 및 기타 자원 할당해제


SMON

SMON역할

    1) 인스턴스 복구수행

    2) 데이터 블록의 연속된 공간 통합

    3) 임시 세그먼트 제거

    4) OPTIMAL 크기 유지


CKPT

데이터 버퍼 캐쉬의 변경된 데이터 블록을 데이터 파일에 기록하여 

메모리 내의 데이터와 데이터 파일에 저장된 데이터를 일치시키는 일련의 작업


CKPT 활동주기

1)로그스위치가 발생할 경우

2) 3초마다 발생

3) 테이블 스페이스가 오프라인으로 변경될 경우

4) 데이터 베이스가 정상적으로 종료될경우

5)사용자가 ALTER SYSTEM CHECKPOINT 명령으로 명시적인 체크포인트를 발생시킬 경우

6)체크포인트 관련 파라메터에서 정한 값에 의해 활동 주기가 되었을 경우


'오라클 양성반 25기' 카테고리의 다른 글

03.오라클 메모리  (0) 2016.09.28

PGA(Program Global Area)


- 데이터베이스에 접속하는 모든 유저에게 할당되는 각각의 서버프로세스가 독자적으로 사용하는 오라클 메모리 영역


 

 구조

내용 

렬공간(Sort Area)

Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이 완료된다면 이를 메모리 정렬이라 한다. 해당 정렬 메모리 공간이 부족하다면 디스크(임시테이블스페이스)를 이용하게된다.

세션정보(Session Infomation)

서버프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스의 세션 정보를 저장한다.

커서상태정보(Cursor State)

해당 SQL의 파싱 정보가 저장되어 있는 주소를 저장한다.

변수저장공간(Stack Space)

SQL 문장에 바인드 변수를 사용했을 경우 해당 바인드 변수를 저장하는 공간이다. 


파싱

  1. SQL을 실행하면 제일먼저 SQL 파서(parser)가 SQL 문장에 문법적 오류가 없는지 검사(Syntax 검사)
  2. 문법적 오류가 없다면 의미상 오류가 없는지 검사(Semantic 검사, 오브젝트 존재유무등)
  3. 검사를 다 마치면, 사용자가 발생한 SQL과 그 실행계획이 라이브러리캐시(프로시저캐시)에 캐싱되어 있는지 확인
  4. 캐싱되어 있다면 소프트파싱, 캐싱되어있지 않다면 하드파싱

 파싱종류

 내용

소프트 파싱

 Shared Pool에 저장된 정보를 재사용하는것

하드 파싱

 Shared Pool에 저장된 정보를 재사용하지못하고 다시 구문분석을 수행 하는것


SGA(System Global Area)


- 오라클이 데이터를 읽거나 변경하기 위해 사용하는 공용 메모리 영역


Shared Pool

SGA를 관리하는 메커니즘, 파라메터 정보, 실행된 SQL, SQL 분석/실행정보 및 오라클 오브젝트 정보를 저장하는 메모리공간


고정영역(Permanent Area), 동적영역(Dynamic Area) 로 나뉜다.

LRU 알고리즘을 이용하여 메모리 공간이 관리된다.

 Permanent Area(고정영역)

 Dynamic Area(동적영역)

1) 오라클 SGA를 관리하는 메커니즘 저장 

2) 오라클 파라메터 정보 저장


고정영역의 크기는 파라메터 설정값 등을 고려하여 자동으로 할당 

사용자가 지정할수없다.

Library Cache 와 Data Dictionary로 구분됨.


Library Cache

1) DB에 접속한 유저가 실행한 SQL 저장

2) Recursive SQL( 오라클 내부 SQL) 저장

3) Parse Tree ( SQL에 대한 분석정보) 저장

4) Execution Plan(실행계획) 저장


Data Dictionary =Row Cache

1)오라클 오브젝트정보(테이블,인덱스,함수 및 트리거) 저장

2) 오라클 오브젝트 권한 정보저장



LRU 알고리즘 : 최근에 가장 적게 사용한 메모리 공간을 필요시 가장 먼저 사용하는 오라클 메모리 관리기법


Data Buffer Cache

오라클이 데이터를 읽고 수정하기 위해 디스크에 존재하는 데이터를 읽어 저장하는 메모리 공간

1) 디스크블록을 메모리로 읽어온후 해당블록을 읽거나 가공

2) LRU 알고리즘에 의해 관리

3) DB_CACHE_SIZE 파라메터로 기본데이터 버퍼캐쉬의 크기 결정

4) SGA영역중 가장많은 크기차지(디스크에서 읽고 기록하는 속도보다 메모리에서 읽고 기록하는 속도가 더 빠르기 때문에 DB성능향상을                                             위해서 디스크 I/O없이 메모리에서 읽어오는 것이 좋다.) 



Redo Log Buffer 

오브젝트 및 데이터 변경시 생성되는 로그를 저장하는 SGA 메모리 공간

1) 오브젝트가 변경되거나 DML작업에 의해 데이터가 변경되는 경우 로그를 리두 로그 버퍼에 생성한다.

2) 로그들은 서버프로세스에 의해 리두 로그 버퍼에 기록된후 LGWR프로세스에 의해 리두로그파일에 저장된다.


Large Pool 

공유풀의 부하를 감소시키는 역할

UGA 영역저장

RMAN의 정보저장

병렬 프로세스의 정보저장

I/O 슬레이브 프로세스의 정보저장


Java Pool

자바명령을 구문분석할 경우 사용하는 메모리 공간 

JAVA_POOL_SIZE 파라메터로 자바풀 지정


'오라클 양성반 25기' 카테고리의 다른 글

04. 오라클 프로세스  (0) 2016.09.28

1.EMP테이블과 같은 구조, 같은 데이터를 갖는 테이블 REEMP 테이블을 생성하고 ,테이블의 구조와 데이터를 확인하여라.

CREATE TABLE REEMP 

AS 

SELECT * FROM EMP;


DESC REEMP


2.DEPT 테이블과 같은 구조, 같은 데이터를 갖는 테이블 REDEPT테이블을 생성하고, 테이블의 구조와 데이터를 확인하여라.

CREATE TABLE REDEPT 

AS SELECT * FROM DEPT;


DESC REDEPT


3.REEMP 테이블을 토대로 EMPNO,ENAME,DEPTNO를 포함하는 뷰 REEMP_VIEW를 작성하여라.

CREATE OR REPLACE VIEW REEMP_VIEW AS SELECT EMPNO,ENAME,DEPTNO FROM REEMP;


1) 뷰 REEMP_VIEW의 구조를 확인하여라.

DESC REEMP_VIEW


2) 뷰 REEMP_VIEW의 데이터를 확인하여라.

SELECT * FROM REEMP_VIEW;


3) 뷰 REEMP_VIEW의 EMPNO의 데이터를 EMPNO+100으로 변경하여라.

UPDATE REEMP_VIEW SET EMPNO=EMPNO+100;


4) 뷰 EMPNO의값이 변경되었는지를 REEMP_VIEW에서 확인하여라.

100씩 추가되었다.


5) 뷰 EMPNO의 값이 변경되었는지를 REEMP테이블에서 확인하여라.

100씩 추가되었다.


6) 데이터사전을 이용해서 생성된뷰 REEMP_VIEW의 이름과 생성구문을 확인하여라.

SELECT * FROM USER_VIEWS; 


4.REEMP 테이블로부터 DEPTNO=30인 사원들로만 된 REEMP_VIEW30을 만들어라. 단 DEPTNO의 값은 변경될 수 없도록 하여라.

CREATE OR REPLACE VIEW REEMP_VIEW30 

AS 

SELECT * FROM REEMP 

WHERE DEPTNO = 30 

WITH CHECK OPTION;


1)뷰 REEMP_VIEW30의 구조를 확인하여라.

DESC REEMP_VIEW30;


2) 뷰REEMP_VIEW30의 데이터를 확인하여라.

SELECT * FROM REEMP_VIEW30;


3)뷰 REEMP_VIEW30 에서 DEPTNO가 30인것을 10으로 바꾸어라, 바꿀수없다면 그 이유에 대해 설명하여라.

UPDATE REEMP_VIEW30 

SET DEPTNO=10 WHERE DEPTNO =30;

뷰의 WITH CHECK OPTION의 조건에 위배되기 때문에 바꿀수없다.


4) 데이터 사전을 이용해서 생성된 뷰 REEMP_VIEW30의 이름과 생성 구문을 확인하여라.

SELECT * FROM USER_VIEWS; 


5.REEMP 테이블과 REDEPT테이블로부터 EMPNO,ENAME,DEPTNO,DNAME을 포함하는 뷰 E_D_VIEW를 작성하여라.

CREATE OR REPLACE VIEW E_D_VIEW 

AS 

SELECT E.EMPNO,E.ENAME,E.DEPTNO,D.DNAME 

FROM REEMP E, REDEPT D 

WHERE E.DEPTNO =D.DEPTNO;


1)뷰 E_D_VIEW의 구조를 확인하여라.

DESC E_D_VIEW 


2)뷰 E_D_VIEW의 모든 데이터를 확인하여라.

SELECT * FROM E_D_VIEW;


3)뷰 E_D_VIEW에 하나의 데이터(9000,'KIM',30,'MARKETING')를 추가하여라.만약 추가할 수 없다면 그 이유에 대해 설명하여라.

INSERT INTO E_D_VIEW(EMPNO,ENAME,DEPTNO,DNAME) VALUES(9000,'KIM',30,'MARKETING');

추가할수없다.

유니크한 키가없기때문에?


4)데이터 사전을 이용해서 생성된 뷰 E_D_VIEW의 이름과 생성구문을 확인하여라. 

SELECT * FROM USER_VIEWS; 



1)함수의 정의 

함수란 하나 이상의 매개변수(인수:Argument)를 전달받아 처리해서 그 결과를 반환해주는 프로그램을 말한다.


2)함수의 기능

-데이터에 관한 계산을 수행한다.

-데이터를 다른 형태로 변환한다.

-데이터 그룹 결과를 출력한다.


3)단일행 함수의 종류

1. LOWER 함수

-인수로 받아들인 문자열을 모두 소문자로 변환시켜 결과를 나타낸다.



(1). 오라클 설치시 비밀번호를 변경한 경우

[시작] - [모든프로그램] - [Oracle-OraDb11g_home1] - [응용프로그램 개발] - [SQL Plus] 를 시작한다.

사용자명:scott 비밀번호:tiger 를 입력한다.

화면처럼나온다면 접속성공



(2). 오라클 설치시 비밀번호를 변경하지 않은 경우

사용자명 :system 비밀번호:manager 를 입력한다.

접속성공

alter user scott account unlock;

잠겨있는 scott 계정을 풀어준다.

alter user scott identified by tiger;

비밀번호를 변경해준다.

종료시에는 프롬프트에서 "exit"를 입력하면 오라클이 종료된다.

SQL Plus 속성 - 대상(T)에서 경로마지막에 사용자명과 비민번호를 입력해주면 

매번 SQL Plus에서 "conn scott/tiger"를 입력하지않아도 자동으로 로그인해준다.


'공부' 카테고리의 다른 글

1.오라클 설치과정  (0) 2016.08.29

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 에 접속한후

자신의 컴퓨터의 사양에맞게 File 1,File 2를 다운받는다.

//다운받을때 폴더이름을 한글로 하면 설치가 되지않는다.

 내 노트북사양은 윈도우7 64bit이다.

다운받은 2개의 파일 압축을 풀어준다.

"win64_11gR2_database_2of2\database\stage\Components" 경로에 있는 폴더를 모두 복사한다.

"win64_11gR2_database_1of2\database\stage\Components" 경로에 복사한 파일을  붙여넣는다.


"win64_11gR2_database_1of2\database" 폴더에 있는 setup 파일을 실행한다.


설치가 시작되는 화면이다,

보안갱신구성화면이 나타나면 파일 다운받을때 사용했던 계정을 입력하면되고 사용하기 싫으면 입력 안해도된다.

굳이 필요성을 느끼지못해 나는 입력하진 않았다.

"예" 를 눌러준다.

데이터베이스 생성 및 구성을 체크해주고 [다음]버튼을 누른다.

데스크톱 클래스를 체크해주고 [다음]버튼을 누른다.

원하는 경로를 설정해주고 관리비밀번호를 입력한다.

비밀번호가 권장표준을 따르지 않아도 설정이 가는하지만 ,

이 암호는 SYS, SYSTEM,SYSMAN,DBSNMP 계정을 사용하기 위해 필요하므로 기억해야한다.

"예" 버튼을 눌르고 [다음]버튼을 눌러준다.

요약화면이 나타나면 확인후 [완료]버튼을 누른다.

제품설치가 진행되는 화면이다.

설치진행과정에서 Database Configration Assistant 화면이 나타난다.

Configration Assistant 유틸리티는 오라클에 포함된 데이터베이스 관리 유틸리티 중의 하나로, 

데이터베이스를 생성하는데 사용된다.

Configration Assistant 유틸리티 설치가 완성된후 [비밀번호 관리]를 눌러준다.


계정 

암호 

설명 

SYS 

change_on_install

DBA용 계정

SYSTEM 

manager

DBA용 계정

SCOTT 

tiger

교육용 계정

HR 

tiger

교육용 계정


완료 화면이 나오면 [닫기]버튼을 누른다.


설치 끝~


'공부' 카테고리의 다른 글

2.오라클 시작과 종료  (0) 2016.08.29

1.DEPT학번c 테이블을 다음과 같이 변경하여라.


1)DEPT학번c 테이블의 구조를 확인하여라.

DESC DEPT학번c

2)테이블 이름을 D학번 으로 변경하여라.

RENAME DEPT학번c TO D학번; 

3)D학번 테이블의 구조를 확인하여라.

DESC D학번

4)NAME 칼럼에 NOT NULL 제약조건을 추가하고 테이블의 구조를 확인하여라.

ALTER TABLE D학번 MODIFY NAME VARCHAR2(10) CONSTRAINT D학번_NAME_nn NOT NULL; 

5)regionid 칼럼을 NUM(5)로 추가하고 테이블의 구조를 확인하여라.

ALTER TABLE D학번 ADD regionid NUMBER(5);  

DESC D학번

6)D학번 테이블의 제약조건을 확인하여라.

SELECT TABLE_NAME, CONSTRAINT_NAME,STATUS FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'D학번';


2.EMP학번c 테이블을 다음과 같이 변경하여라.


1) EMP학번c 테이블의 구조를 확인하여라.

DESC EMP학번c 

2) 테이블의 이름을 E학번 으로 변경하여라.

RENAME EMP학번c TO E학번; 

3) E학번 테이블의 구조를 확인하여라.

DESC E학번

4) managerid 칼럼을 NUM(7) NOT NULL 제약조건으로 추가하고 테이블의 구조를 확인하여라.

ALTER TABLE E학번 ADD managerid NUMBER(7) CONSTRAINT E학번_managerid_nn NOT NULL;  

DESC E학번 

5) ID 칼럼의 길이를 NUM(10)으로 하고 테이블의 구조를 확인하여라.

ALTER TABLE E학번 MODIFY ID NUMBER(10);

DESC E학번 

6) LNAME 칼럼의 NOT NULL 제약조건을 삭제하고 테이블의 구조를 확인하여라.

ALTER TABLE E학번 DROP CONSTRAINT EMP학번c_LNAME_nn; 

7)E학번 테이블의 managerid 칼럼에 D학번 테이블의 NO 칼럼을 참조하는 FOREIGN KEY 제약조건을 추가하여라.

ALTER TABLE E학번 

ADD CONSTRAINT  E학번_managerid_fk FOREIGN KEY(managerid) REFERENCES D학번(NO);

8) E학번 테이블의 제약조건을 확인하여라.

SELECT TABLE_NAME, CONSTRAINT_NAME,STATUS FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'E학번';


1.다음테이블을 생성하여라.


테이블이름 :EMP학번c(칼럼레벨),EMP학번t(테이블레벨)


칼럼명

ID 

LNAME 

FNAME

DEPTID 

키유형

PK 

  

FK

NN/UK 

NN,UK 

NN 

 

NN 

FK테이블

 

 

 

DEPT학번 

FK칼럼 

 

 

 

NO 

DataType 

NUM 

V2 

V2 

NUM 

길이

25 

25 



테이블이름 :DEPT학번c(칼럼레벨),DEPT학번t(테이블레벨)


칼럼명

NO 

NAME 

 키유형

PK

 

NN/UK 

NN,UK

 

FK테이블


 

FK칼럼 

 

 

DataType

NUM

V2 

길이

25 


1) 칼럼 레벨과 테이블 레벨로 테이블을 각각 생성하여라.

CREATE TABLE EMP학번c ( ID NUMBER(7) CONSTRAINT EMP학번c_ID_PK PRIMARY KEY,

LNAME VARCHAR2(25) CONSTRAINT EMP학번c_LNAME_NN NOT NULL,

FNAME VARCHAR2(25),

DEPTID NUMBER(7)   CONSTRAINT EMP학번c_DEPTID_NN NOT NULL

CONSTRAINT EMP학번c_DEPTID_FK REFERENCES DEPT(DEPTNO)); 

//DEPT학번테이블이 없는관계로 DEPT테이블을 참조함.

CREATE TABLE EMP학번t (ID NUMBER(7),

LNAME VARCHAR2(25) CONSTRAINT EMP학번t_LNAME_NN NOT NULL,

FNAME VARCHAR2(25),

DEPTID NUMBER(7) CONSTRAINT EMP학번t_DEPTID_NN NOT NULL,

CONSTRAINT EMP학번t_ID_PK PRIMARY KEY(ID));


CREATE TABLE DEPT학번c ( NO NUMBER(7) CONSTRAINT DEPT학번c_NO_PK PRIMARY KEY,

  NAME VARCHAR2(25));

CREATE TABLE DEPT학번t ( NO NUMBER(7),

                                    NAME VARCHAR2(25),

  CONSTRAINT DEPT학번t_NO_PK PRIMARY KEY(NO));  

2) 위에서 생성한 테이블들의 구조를 확인하여라.

DESC EMP학번c

DESC EMP학번t

DESC DEPT학번c

DESC DEPT학번t 


3) 위에서 생성한 테이블의 데이터를 확인하여라.

SELECT * FROM EMP학번c;

SELECT * FROM EMP학번t;

SELECT * FROM DEPT학번c;

SELECT * FROM DEPT학번t;


4) 데이터사전을 이용해서 생성한 EMP학번c, EMP학번t, DEPT학번c, DEPT학번t 테이블에 대해 칼럼명,제약조건명,제약조건유형,참조테이블,탐조칼럼을 검색하여라(4개의 테이블에 대해서만 표시하여라.)


SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMP학번c';

SELECT *FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMP학번t';

SELECT *FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT학번c';

SELECT *FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT학번t';

//맞는지 모르겟음;


2. 1) EMP학번c 테이블의 구조만 복사하는 빈 테이블을 EMP학번EMPTY 이름으로 생성하여라.

CREATE TABLE EMP학번EMPTY 

AS SELECT * 

FROM  EMP학번c

WHERE 1=0;


2) 위에서 생성한 테이블의 구조를 확인하여라.

DESC EMP학번EMPTY


3) 위에서 생성한 데이터를 확인하여라.

SELECT * FROM EMP학번EMPTY;


3. 1) EMP학번c 테이블의 구조와 내용을 복사하여 EMP학번COPY 테이블을 생성하여라.

CREATE TABLE EMP학번COPY 

AS SELECT * 

FROM  EMP학번c



2) 위에서 생성한 테이블의 구조를 확인하여라.

DESC EMP학번COPY


3) 위에서 생성한 데이터를 확인하여라.

SELECT * FROM EMP학번COPY;






1. 10번 부서에 대해 급여의 평균 값,최대 값,최소 값,인원 수를 구하여 출력하여라.

SELECT AVG(sal),MAX(sal),MIN(sal),COUNT(empno) FROM emp WHERE deptno = 10;

2. 각 부서별 같은 직무를 갖는 사원의 인원수를 구하여 부서 번호, 직무,인원수를 출력하여라.

SELECT deptno,job,COUNT(empno) FROM emp GROUP BY deptno,job;

3. 사원들의 직무별 평균 급여와 최고급여,최저급여를 평균급여에 대해 오름차순으로 정렬하여라.

SELECT AVG(sal),MAX(sal),MIN(sal) FROM emp GROUP BY job ORDER BY AVG(sal) ASC;

4. EMP와 DEPT테이블을 조인하여 모든 사원에 대해 부서 번호, 부서이름, 사원이름, 급여를 출력하여라.

SELECT e.ename,e.sal,e.deptno,d.dname FROM emp e, dept d WHERE e.deptno = d.deptno ;

5. 이름이 'ALLEN'인 사원의 부서 이름을 출력하여라.

SELECT d.dname FROM  emp e,dept d WHERE e.deptno =d.deptno AND e.ename = (SELECT ename FROM emp WHERE ename = 'ALLEN');

6. 'ALLEN'과 직무가 같은 사원의 이름,부서 이름, 급여, 부서위치를 출력하여라.

SELECT e.ename, d.dname, e.sal,d.loc FROM emp e,dept d WHERE e.deptno =d.deptno AND e.job = (select job from emp where ename ='ALLEN');

7. 전체사원의 평균 급여보다 급여가 많은 사람의 사원 번호,이름, 부서이름,입사일,부서위치,급여를 출력하여라.

select e.empno,e.ename,d.dname,e.hiredate,d.loc,e.sal from emp e, dept d where e.deptno =d.deptno and e.sal > (select avg(sal) from emp);

8. 10번 부서 사원들 중에서 20번 부서의 사원과 같은 직무를 갖는 사원의 사원 번호 ,이름,부서 이름, 입사일, 부서 위치를 출력하여라.

select e.empno,d.dname,e.hiredate,d.loc from emp e,dept d where e.deptno =d.deptno and e.deptno=10 and e.job in (select job from emp where deptno =20);

9. 'ALLEN'의 급여보다 많고 'SCOTT'의 급여보다 적은 사원의 사원번호,이름,부서이름,부서위치,급여를 급여가 많은 순으로 출력하여라.

select e.empno,e.ename,d.dname,d.loc,e.sal from emp e, dept d where e.deptno = d.deptno and sal >(select sal from emp where  ename ='ALLEN') and sal <(select sal from emp where  ename ='SCOTT');

10. 30번 부서의 최고급여보다 급여가 많은 사원의 사원 번호 ,이름,급여를 출력하여라.

select empno,ename,sal from emp where sal > (select max(sal) from emp where deptno ='30');

11. 사원 이름의 두 번째 글자가 'A'인 사원들의 수를 출력하여라.

select count(*) from emp where ename like '_A%';

12. 사원들의 평균 급여,총 급여, 최고급여액,최저 급여액을 구하여라.

select avg(sal),sum(sal),max(sal),min(sal) from emp;

13. 평균급여가  1500이 넘는  직무와 평균 급여를 구하여라.

select job,avg(sal) from emp group by job; 

14.사원들의 이름,부서 이름, 급여를 출력하여라.

select e.ename,d.dname, e.sal from emp e, dept d where e.deptno =d.deptno;

15. 각 부서별 부서 번호(모든 부서에 대해서),부서 이름,부서 위치,사원의 수를 출력하여라.

select d.deptno,d.dname,d.loc,count(*) from emp e, dept d where e.deptno =d.deptno group by d.deptno,d.dname,d.loc

16.모든 사원들의 평균 급여보다 많이 받는 사원들의 사원 번호와 이름을 출력하여라.

select empno,ename from emp where sal > (select avg(sal) from emp);

17.'FORD'와 부서가 같은 사원들의 이름,부서 이름, 직무, 급여를 출력하여라.

select e.ename,d.dname,e.job,e.sal from emp e, dept d where e.deptno =d.deptno  and job = (select job from emp where ename ='FORD'); 

18.부서이름이 'SALES'인 사원들의 평균 급여보다 많고, 부서 이름이 'RESEARCH'인 사원들의 평균 급여보다 적은 사원들의 이름, 부서번호, 급여, 직무를 출력하여라.

select ename,sal,job from emp where sal > (select avg(e.sal) from emp e,dept d where e.deptno =d.deptno and d.dname ='SALES')

and  sal < (select avg(e.sal) from emp e,dept d where e.deptno =d.deptno and d.dname ='RESEARCH');

19.부서별 평균 급여가 1000보다 적은 부서 사원들의 부서 번호를 출력하여라.

select deptno from emp group by deptno having avg(sal) <1000;

20. 직무가 'ANALYST'인 사원보다 급여가 적으면서, 직무가 'ANALYST'가 아닌 사원들의 사원번호,이름, 직무, 급여를 출력하여라.

select deptno,ename,job,sal from emp where sal < (select sal from emp where job ='ANALYST')

and job != 'ANALYST';-- 모름 

 

+ Recent posts