1. 아래의 SELECT 문장이 성공적으로 수행 될까요? (참/거짓)
SQL> SELECT ename 이름, job 업무, sal 급여
2 FROM emp; |
답 : 참
2. 아래의 SELECT 문장이 성공적으로 수행 될까요? (참/거짓)
SQL> SELECT *
2 FROM salgrade; |
답 : 참
3.이 문장에 에러가 있습니다. 올바르게 작성하시오.
SQL> SELECT empno, ename, sal X 12 년 봉
2 FROM emp; |
SELECT empno, ename, sal*12 "년 봉" 로 고치면 된다.
4. EMP 테이블의 구조와 내용을 조회하여라.
SELECT *
FROM emp;
5. EMP 테이블에서 중복되지 않는 부서번호를 출력하시오
SELECT DISTINCT
deptno
FROM emp;
6. EMP 테이블의 이름과 업무를 연결하여 출력하여라
SELECT ename || ' ' || job AS "Employees"
FROM emp;
7. DEPT 테이블의 부서명과 위치를 연결하여 출력하여라
SELECT dname || ' ' || loc AS "dept"
FROM emp;
8. EMP 테이블의 업무와 급여를 연결하여 출력하여라.
SELECT job || ' ' || sal AS "ex eight"
FROM emp;
1. WHERE절에 HIREDATE의 비교를 '01-JAN-82'가 아닌 '01-jan-82'로 기술하면 결과는?
SQL> SELECT *
2 FROM emp
3 WHERE hiredate = '23-jan-82'; |
ORA-01858: 숫자가 있어야 하는 위치에서 숫자가 아닌 문자가 발견되었습니다.
01858. 00000 - "a non-numeric character was found where a numeric was expected"
*Cause: The input data to be converted using a date format model was
incorrect. The input data did not contain a number where a number was
required by the format model.
*Action: Fix the input data or the date format model to make sure the
elements match in number and type. Then retry the operation.
2. EMP 데이블에서 급여가 3000이상인 사원의 정보를 사원번호, 이름, 담당업무 급여를 출력하는 SELECT 문장을 작성하시오.
SELECT empno,ename,job,sal FROM emp WHERE sal >=3000;
3. EMP 테이블에서 사원번호가 7788인 사원의 이름과 부서번호를 출력하는 SELECT 문장을 작성하시오.
SELECT ename,empno
FROM emp
WHERE empno=7788;
4. EMP 테이블에서 입사일이 February 20, 1981과 May 1, 1981 사이에 입사한 사원의 이름, 업무, 입사일을 출력하는 SELECT 문장을 작성하시오. 단 입사일 순으로 출력하시오.
SELECT ename,job,hiredate
FROM emp
WHERE hiredate BETWEEN '81/02/01' AND '81-05-01'
ORDER BY hiredate;
5. EMP 테이블에서 부서번호가 10, 20인 사원의 모든 정보를 출력하는 SELECT 문장을 작성하시오. 단 이름순으로 정렬하여라.
SELECT *
FROM emp
WHERE deptno IN (10,20);
6. EMP 테이블에서 급여가 1500이상이고 부서번호가 10,30인 사원의 이름과 급여를 출력하는 SELECT 문장을 작성하여라, 단 HEADING을 Employee과 Monthly Salary로 출력하여라.
SELECT
ename Employee
,sal "Monthly Salary"
FROM emp
WHERE sal >=1500 AND deptno IN (10,30)
7. EMP 테이블에서 1982년에 입사한 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.
SELECT * FROM emp WHERE hiredate BETWEEN '82/01/01' AND '82/12/31';
8.EMP 테이블에서 COMM에 NULL이 아닌 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.
SELECT *
FROM emp
WHERE COMM is NOT NULL;
9. EMP 테이블에서 보너스가 급여보다 10%가 많은 모든 종업원에 대하여 이름, 급여, 보너스
SELECT ename,sal,comm
FROM emp
WHERE comm > sal*1.1;
10. EMP 테이블에서 업무가 Clerk이거나 Analyst이고 급여가 1000,3000,5000이 아닌 모든 사원의 정보를 출력하는 SELECT 문을 작성하여라.
SELECT * FROM emp WHERE job in ('CLERK', 'ANALYST') and sal NOT IN (1000,3000,5000);
11. EMP 테이블에서 이름에 L이 두 자가 있고 부서가 30이거나 또는 관리자가 7782인 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.
SELECT *
FROM emp
WHERE ename LIKE '%LL%' OR DEPTNO IN (30) AND empno IN (7782);
1. 현재 날짜를 출력하고 열 레이블은 Current Date로 출력하는 SELECT 문장을 기술하시오.
SELECT SYSDATE "Current Date" FROM dual;
2. EMP 테이블에서 현재 급여에 15%가 증가된 급여를 사원번호, 이름, 업무, 급여, 증가된 급여(New Salary), 증가액(Increase)를 출력하는 SELECT 문장을 기술하시오.
SELECT empno,ename,job,sal,sal*1.15 "New Salary",sal*0.15 "Increase"
FROM emp;
3. EMP 테이블에서 이름, 입사일, 입사일로부터 6개월 후 돌아오는 월요일을 구하여 출력하는 SELECT 문장을 기술하시오.
SELECT ename,hiredate,NEXT_DAY(ADD_MONTHS(hiredate,6),'월요일')
FROM emp;
4. EMP 테이블에서 이름, 입사일, 입사일로부터 현재까지의 월수, 급여, 입사일로부터 현재까지의 급여의 총계를 출력하는 SELECT 문장을 기술하시오.
SELECT ename
,hiredate
,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate))
,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate))*sal
FROM emp;
5. EMP 테이블에서 다음의 결과가 출력되도록 작성하시오.
Dream Salary
--------------------------------------------------------------------------------------------------------
KING earns $5,000.00 monthly but wants $15,000.00
BLAKE earns $2,850.00 monthly but wants $8,550.00
ClARK earns $2,450.00 monthly but wants $7,350.00
.......................
14 rows sekected |
SELECT ename
,TO_CHAR(sal,'$99,999.00') "earns"
,TO_CHAR(sal*3,'$99,999.00') "wants"
FROM emp;
SELECT
RPAD(ename, 20, ' ') || ' earns ' || TO_CHAR(sal,'$99,999.00')
|| ' monthly but wants ' || TO_CHAR(sal*3,'$99,999.00')
FROM emp;
6. EMP 테이블에서 모든 사원의 이름과 급여(15자리로 출력 좌측의 빈곳은 "*"로 대치)를 출력하는 SELECT 문장을 기술하시오.
SELECT LPAD(ename,15,'*') "이름"
,LPAD(sal,15,'*') "급여"
FROM emp;
7. EMP 테이블에서 모든 사원의 정보를 이름, 업무, 입사일, 입사한 요일을 출력하는 SELECT 문장을 기술하시오.
SELECT ename
,job
,hiredate "입사일"
,TO_CHAR(hiredate,'DAY') "입사한 요일"
FROM emp;
8. EMP 테이블에서 이름의 길이가 6자 이상인 사원의 정보를 이름, 이름의 글자수, 업무를 출력하는 SELECT 문장을 기술하시오.
SELECT ename ,LENGTH(ename) FROM emp WHERE LENGTH(ename)>=6;
9. EMP 테이블에서 모든 사원의 정보를 이름, 업무, 급여, 보너스, 급여+보너스를 출력하는 SELECT 문장을 기술하시오.
SELECT ename,job,sal,comm,sal+comm FROM emp;
SELECT ename,job,sal,comm
,sal+NVL(comm,0) "급여+보너스"
FROM emp;
SELECT ename
,job
,NVL(sal,0) "급여"
,NVL(comm,0) "보너스"
,sal+NVL(comm,0) "급여+보너스"
FROM emp;
1. EMP 테이블에서 인원수, 최대 급여, 최소 급여, 급여의 합을 계산하여 출력하는 SELECT 문장을 작성하여라.
SELECT COUNT(*) -- 가급적이면 *보다는 인원수를 지칭하는 empno를 사용하는 것을 추천 이유는 *는 모든 것을
,MAX(sal) 계산하기 떄문임.
,MIN(sal)
,TO_CHAR(SUM(sal),'$999,999.00')
FROM emp;
2. EMP 테이블에서 각 업무별로 최대 급여, 최소 급여, 급여의 합을 출력하는 SELECT 문장을 작성하여라.
SELECT MAX(sal)
,MIN(sal)
,SUM(sal)
FROM emp
GROUP BY job;
3. EMP 테이블에서 업무별 인원수를 구하여 출력하는 SELECT 문장을 작성하여라.
SELECT COUNT(*)
FROM emp
GROUP BY job;
SELECT job "업무"
,COUNT(empno) "인원수"
FROM emp
GROUP BY job;
4. EMP 테이블에서 최고 급여와 최소 급여의 차이는 얼마인가 출력하는 SELECT 문장을 작성하여라.
SELECT MAX(sal) - MIN(sal)
FROM emp;
5. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.
H_YEAR |
COUNT(*) |
MIN(SAL) |
MAX(SAL) |
AVG(SAL) |
SUM(SAL) |
------ |
---------- |
---------- |
---------- |
---------- |
---------- |
80 |
1 |
800 |
800 |
800 |
800 |
81 |
10 |
950 |
5000 |
2282.5 |
22825 |
82 |
2 |
1300 |
3000 |
2150 |
4300 |
93 |
1 |
1100 |
1100 |
1100 |
1100 |
SELECT TO_CHAR(hiredate,'YY') "H_YEAR" ,COUNT(*) ,MIN(SAL) ,MAX(SAL) ,AVG(SAL) ,SUM(SAL) FROM emp GROUP BY TO_CHAR(hiredate,'YY') ORDER BY TO_CHAR(hiredate,'YY') nulls first;
6. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.
TOTAL |
1980 |
1981 |
1982 |
1983 |
--------- |
---------- |
---------- |
---------- |
---------- |
14 |
1 |
10 |
2 |
1 |
SELECT COUNT(empno) "TOTAL" ,SUM(DECODE(TO_CHAR(hiredate,'YYYY'),'1980',1,0)) "1980" ,SUM(DECODE(TO_CHAR(hiredate,'YYYY'),'1981',1,0)) "1981" ,SUM(DECODE(TO_CHAR(hiredate,'YYYY'),'1982',1,0)) "1982" ,SUM(DECODE(TO_CHAR(hiredate,'YYYY'),'1983',1,0)) "1983" FROM emp;
7. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.
JOB |
Deptno 10 |
Deptno 20 |
Deptno 30 |
Total |
---------- |
---------- |
---------- |
---------- |
---------- |
ANALYST |
|
6000 |
|
6000 |
CLERK |
1300 |
1900 |
950 |
4150 |
MANAGER |
2450 |
2975 |
2850 |
8275 |
PRESIDENT |
5000 |
|
|
5000 |
SALESMAN |
|
|
5600 |
5600 |
SELECT JOB ,SUM(DECODE(deptno,10,sal,0)) "Deptno 10" ,SUM(DECODE(deptno,20,sal,0)) "Deptno 20" ,SUM(DECODE(deptno,30,sal,0)) "Deptno 30" ,SUM(sal) "TOTAL" FROM emp GROUP BY job;
1. EMP 테이블에서 모든 사원에 대한 이름, 부서번호, 부서명을 출력하는 SELECT 문장을 작성하여라
SELECT ename "이름"
,a.deptno "부서번호"
,b.dname "부서명"
FROM emp a
,dept b
WHERE a.deptno=b.deptno
;
2. EMP 테이블에서 NEW YORK에서 근무하고 있는 사원에 대하여이름, 업무, 급여, 부서명을 출력하는 SELECT 문장을 작성하여라
SELECT ename "이름" ,job "업무" ,sal "급여" ,b.dname "부서명" ,b.loc "위치" FROM emp a ,dept b WHERE a.deptno=b.deptno AND b.loc='NEW YORK' ;
3. EMP 테이블에서 보너스를 받는 사원에 대하여 이름, 부서명, 위치를 출력하는 SELECT 문장을 작성하여라
SELECT ename "이름"
,b.dname "부서명"
,b.loc "위치"
FROM emp a
,dept b
WHERE a.deptno=b.deptno
AND (a.comm>0 OR a.comm IS NOT NULL)
;
4. EMP 테이블에서 이름 중 L자가 있는 사원에 대하여 이름, 업무, 부서명, 위치를 출력하는 SELECT 문장을 작성하여라.
SELECT ename "이름" ,job "업무" ,b.dname "부서명" ,b.loc "위치" FROM emp a ,dept b WHERE a.deptno=b.deptno AND a.ename LIKE '%L%' ;
5. 아래의 결과를 출력하는 SELECT 문장을 작성하여라. (관리자가 없는 King을 포함하여 모든 사원을 출력)
Employee |
EMP# |
Manager |
Mgr# |
---------- |
--------- |
---------- |
---------- |
KING |
7839 |
|
|
BLAKE |
7698 |
KING |
7839 |
CLARK |
7782 |
KING |
7839 |
................... |
|
|
|
14 row selected |
|
|
|
SELECT a.ename "Employee"
,a.empno "EMP#"
,b.ename "Manager"
,a.mgr "Mgr#"
FROM emp a
,emp b
WHERE a.mgr=b.empno(+)
ORDER BY b.mgr DESC
;
6. EMP 테이블에서 그들의 관리자 보다 먼저 입사한 사원에 대하여 이름, 입사일, 관리자 이름, 관리자 입사일을 출력하는 SELECT 문장을 작성하여라.
SELECT a.ename "이름"
,a.hiredate "입사일"
,b.ename "관리자 이름"
,b.hiredate "관리자 입사일"
FROM emp a
,emp b
WHERE a.mgr=b.empno
AND a.hiredate < b.hiredate
;
7. EMP 테이블에서 사원의 급여와 사원의 급여 양만큼 "*"를 출력하는 SELECT 문장을 작성하여라. 단 "*"는 100을 의미한다.
Employee and their salary |
-------------------------------------------------------------------------------------------------- |
KING **************************************************** |
BLAKE ***************************** |
CLARK ******************** |
JONES ***************************** |
MARTIN ********************** |
ALLEN ************************* |
TURNER ************************ |
. . . . . . . . . |
14 rows selected. |
SELECT ename
,star
,lpad(' ', star+1,'*') --R/LPAD(기본값, 자리수, 자리수를 채울값)
FROM emp a,
(SELECT empno
,TRUNC(sal/100) star
FROM emp
) b
WHERE a.empno=b.empno
;
1. EMP 테이블에서 이름, 부서번호, 부서명을 출력한다. 단, 최저 급여인 사원정보를 출력
SELECT a.ename "이름"
,a.deptno "부서번호"
,b.dname "부서명"
FROM emp a
,dept b
WHERE a.sal = (SELECT MIN(sal)
FROM emp)
AND a.deptno=b.deptno
;
SELECT ename "이름"
,deptno "부서번호"
,(SELECT dname FROM dept WHERE deptno=a.deptno) "부서명"
FROM emp a
WHERE sal=(SELECT MIN(sal)
FROM emp)
;
2. EMP 테이블에서 업무별 최고 급여인 사원의 이름, 업무, 급여를 출력한다.
SELECT ename "이름"
,job "업무"
,sal "급여"
FROM emp
WHERE sal IN (SELECT MAX(sal)
FROM emp
GROUP BY deptno)
;
3. EMP 테이블에서 부서별 가장먼저 입사한 사원의 이름, 부서명, 입사일을 출력한다.
SELECT a.ename "이름"
,b.dname "부서명"
,a.hiredate "입사일"
FROM emp a
,dept b
WHERE (a.deptno, a.hiredate) IN (SELECT deptno, MIN(hiredate)
FROM emp
GROUP BY deptno)
AND a.deptno=b.deptno
;
4. EMP 테이블에서 입사년도가 가장늦은(최근) 사원의 사번은 어느 부서인가?
SELECT a.ename "이름"
,a.empno "사번"
,b.dname "부서명"
,a.hiredate "입사일"
FROM emp a
,dept b
WHERE hiredate IN (SELECT MAX(hiredate)
FROM emp)
AND a.deptno=b.deptno
;
5. EMP 테이블에서 부서별 사원의 이름, 부서명, 입사일을 출력하되 위치가 'NEW YORK'인 사람만 출력한다.
SELECT a.ename "이름"
,b.dname "부서명" --(SELECT dname FROM dept WHERE deptno=a.deptno) "부서명"
,a.hiredate "입사일"
,b.loc "위치" --(SELECT loc FROM dept WHERE deptno=a.deptno) "위치"
,a.deptno
FROM emp a
,dept b
WHERE b.dname IN (SELECT dname
FROM emp
GROUP BY dname)
AND b.loc='NEW YORK'
AND a.deptno=b.deptno
;
SELECT a.ename
,a.dname
,a.hiredate
FROM(SELECT b.deptno
,b.ename
,c.dname
,b.hiredate
FROM emp b
,dept c
WHERE b.deptno=c.deptno
AND c.loc='NEW YORK'
) a
ORDER BY a.deptno
;
1. EMP 테이블에 있는 모든 CONSTRAINT를 조회하는 SELECT 문을 작성하여라.
DESC USER_CONSTRAINTS;SELECT TABLE_NAME ,CONSTRAINT_NAME FROM USER_CONSTRAINTS ;
2. EMP 테이블에 SAL, COMM을 제외한 모든 COLUMN과 행을 포함하는 EMP_DEMO 테이블을 생성하는 SQL 문을 작성하여라.
CREATE TABLE EMP_DEMO
AS SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, DEPTNO
FROM emp
;
3. EMP 테이블과 DEPT 테이블을 이용하여 아래의 내용을 포함하는 테이블(EMP_DEPT)을 생성하여라.
EMPNO |
ENAME |
JOB |
DNAME |
LOC |
---------- |
---------- |
---------- |
----------- |
---------- |
7839 |
KING |
PRESIDENT |
ACCOUNTING |
NEW YORK |
7698 |
BLAKE |
MANAGER |
SALES |
CHICAGO |
7782 |
CKARK |
MANAGER |
ACCOUNTING |
NEW YORK |
. . . . . . . . . . . . |
|
|
|
|
14 rows selected |
|
|
|
|
CREATE TABLE EMP_DEPT
AS SELECT a.EMPNO, a.ENAME, a.JOB, b.DNAME, b.LOC
FROM emp a
,dept b
WHERE a.deptno=b.deptno
;
SELECT * FROM EMP_DEPT;
4. EMP 테이블과 SALGRADE 테이블을 이용하여 아래의 내용을 포함하는 테이블 (EMP_GRADE)을 생성하여라.
EMPNO |
ENAME |
JOB |
SAL |
COMM |
GRADE |
7839 |
KING |
PRESIDENT |
5000 |
|
5 |
7698 |
BLAKE |
MANAGER |
2850 |
|
4 |
7782 |
CLARK |
MANAGER |
2450 |
|
4 |
7566 |
JONES |
MANAGER |
2975 |
|
4 |
. . . . . . . . . . . . |
|
|
|
|
|
14 rows |
selected |
|
|
|
|
CREATE TABLE EMP_GRADE AS SELECT a.EMPNO,a.ENAME,a.JOB,a.SAL,a.COMM,b.grade FROM emp a ,salgrade b WHERE a.sal BETWEEN b.LOSAL AND b.HISAL ;
5. DEPT 테이블의 PRIMARY KEY를 DISABLE하는 SQL 문을 작성하여라.
ALTER TABLE dept
DISABLE CONSTRAINT dept_primary_key CASCADE;
6. 3번에서 생성한 테이블에 EMPNO를 PRIMARY KEY로 설정하는 SQL문을 작성하여라.
SELECT table_name, constraint_name,status FROM user_constraints WHERE table_name='EMP_DEPT';ALTER TABLE EMP_DEPTADD CONSTRAINT emp_dept_empno_pk PRIMARY KEY(empno);
7. 4번에서 생성한 테이블에 SAL의 정밀도를 정수 부분을 12자리 소수 이하 4자리를 기억할 수 있도록 변경하는 SQL문을 작성하여라.
desc emp_grade;
ALTER TABLE emp_grade
MODIFY sal number(16,4);
8. 3번에서 작성한 테이블의 내용과 기억 장소를 모두 해제하는 SQL문을 작성하여라.
TRUNCATE TABLE EMP_DEPT;
9. 3번과 4번 생성한 테이블을 모두 삭제하는 SQL문을 작성하여라.
DROP TABLE EMP_DEPT;
DROP TABLE EMP_GRADE;
1.아래의 구조를 만족하는 MY_DATA 테이블을 생성하시오. 단 ID가 PRIMARY KEY이다.
SQL> DESC my_data |
Name |
Null? |
Type |
--------------------------- |
-------------- |
---------- |
ID |
NOT NULL |
NUMBER(4) |
NAME |
|
VARCHAR(10) |
USERID |
|
VARCHAR2(30) |
SALARY |
|
NUMBER(10,2) |
CREATE TABLE MY_DATA(ID NUMBER(4) NOT NULL,NAME VARCHAR(10),USERID VARCHAR2(30),SALARY NUMBER(10,2),CONSTRAINT MY_DATA_ID_PK PRIMARY KEY (id));
2. 1번에 의해 생성된 테이블에 아래의 값을 입력하여라.
ID |
NAME |
USERID |
SALARY |
1 |
Scott |
sscott |
10,000.00 |
2 |
Ford |
fford |
13,000.00 |
3 |
Patel |
ppatel |
33,000.00 |
4 |
Report |
rreport |
23,500.00 |
5 |
Good |
ggood |
44,450.00 |
INSERT INTO MY_DATA(ID,NAME,USERID,SALARY)VALUES(1,'Scott','sscott','10000');INSERT INTO MY_DATA(ID,NAME,USERID,SALARY)VALUES(2,'Ford','fford','13000');INSERT INTO MY_DATA(ID,NAME,USERID,SALARY)VALUES(3,'Patel','ppatel','33000');INSERT INTO MY_DATA(ID,NAME,USERID,SALARY)VALUES(4,'Report','rreport','23500');INSERT INTO MY_DATA(ID,NAME,USERID,SALARY)VALUES(5,'Good','ggood','44450');
3. 2번에서 입력한 자료를 확인 하여라.
SELECT ID
,name
,userid
,TO_CHAR(salary,'999,999.00') "salary"
FROM my_data;
4. 2번에서 입력한 자료를 모두 삭제하고 insert하기 위한 script를 작성하여 대화식으로 입력하여라. 단 내용은 2번과 동일하다.
TRUNCATE TABLE MY_DATA;
INSERT INTO my_date VALUES(&id,'&name','&userid',&salary);
5. 4번에서 바꾼 자료를 영구적으로 데이터베이스에 등록하여라.
commit;
6. ID가 3번인 사람의 급여를 65,000.00으로 생신하고 영구적으로 데이터베이스에 반영하여라.
UPDATE my_data SET salary=65000 WHERE id=3;commit;
7. 이름이 Ford인 사원을 영구 제명하여라.
DELETE FROM my_data
WHERE name='Ford';
commit;
8. 급여가 15,000이하인 사람의 급여를 15,000로 변경하여라.
UPDATE my_data SET salary =15000 WHERE salary<15000;commit;
9. 1번에서 생성한 테이블을 삭제하여라.
DROP TABLE my_data;
1. 초기값1부터 최대값 999,999까지 1씩 증가하는 TEST_SEQ SEQUENCE를 생성하여라.
CREATE SEQUENCE TEST_SEQ_SEQUENCEINCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE NOCYCLE ;
2. 현재 SESSION을 이루고 있는 사용자가 사용할 수 있는 SEQUENCE를 조회하여라.
SELECT *
FROM USER_SEQUENCES
;
3.1번에서 작성한 SEQUENCE의 현재 값을 조회하여라.
SELECT TEST_SEQ_SEQUENCE.currval FROM DUAL ;
4. CURRVAL과 NEXTVAL을 설명하여라.
SELECT TEST_SEQ_SEQUENCE.NEXTval
FROM DUAL
;
5. CACHE와 NOCACHE의 차이점을 설명하여라.
얼마나 많은 값이 메모리에 오라클 서버가 미리 할당하고 유지하는가를 지정.
6. CYCLE와 NOCYCLE의 차이점을 설명하여라.
최대 또는 최소값에 도달한 후에 계속 값을 생성할 지의 여부를 지정
7. 1번에서 생성한 SEQUENCE를 삭제하여라.
DROP SEQUENCE TEST_SEQ_SEQUENCE;
1. EMP테이블에서 사원 번호, 이름, 업무,부서를 포함하는 EMP_VIEW VIEW를 생성하여라.
CREATE VIEW EMP_VIEW AS SELECT empno ,ename ,job ,deptno FROM emp ;
2. 1번에서 생성한 VIEW를 이용하여 10번 부서의 자료만 조회하여라.
SELECT * FROM EMP_VIEW WHERE deptno=10 ;
3. 번에서 생성한 VIEW를 DATA DICTIONARY에서 조회하여라.
desc EMP_VIEW
;
4. EMP 테이블과 DEPT 테이블을 이용하여 이름, 업무, 급여, 부서명, 위치를 포함하는 EMP_DEPT_NAME이라는 VIEW를 생성하여라.
CREATE VIEW EMP_DEPT_NAME AS SELECT a.ename ,a.job ,a.sal ,b.dname ,b.loc FROM emp a ,dept b WHERE a.deptno=b.deptno ;
5. VIEW생성시 WITH READ ONLY OPTION에 대하여 설명하여라.
이 VIEW에서 DML이 수행될 수 없게 한다.
6. VIEW생성시 WITH CHECK OPTION에 대하여 설명하여라.
VIEW에 의해 액세스 될 수 있는 행만이 입력, 갱신될 수 있다.
7. VIEW를 이용하여 자료를 수정할 수 있는 경우와 없는 경우에 대하여 설명하여라.
1)단순 VIEW에서 DML 연산을 수행할 수 있습니다.
2) VIEW가 다음을 포함 한다면 행을 제거할 수 없습니다.
① 그룹 함수 ② GROUP By절 ③ DISTINCT 키워드
3) 다음을 포함한다면 VIEW에서 데이터를 수정할 수 없습니다.
① 그룹 함수 ② GROUP BY 절 ③ DISTINCT 키워드 ④ 표현식으로 정의된 열 ⑤ ROWNUM 의사열
4) 다음을 포함한다면 VIEW에서 데이터를 추가할 수 없습니다.
① 그룹 함수 ② GROUP BY절 ③ DISTINCT 키워드 ④ 표현식으로 정의된 열 ⑤ ROWNUM의사열
⑥ VIEW에 의해 선택되지 않은 NOT NULL열이 기본 테이블에 있을 경우
1.EMP 테이블에서 이름을 가지고 INDEX(emp_ename_indx)를 생성하여라
CREATE INDEX emp_ename_indx
ON emp(ename)
;
2. INDEX의 장단점을 기술하여라.
장점 : 검색속도를 향상시킨다.
- 인덱스는 테이블의 값을 빠르게 액세스 하도록 하는 데이터베이스 객체이다.
- 데이터를 빠르게 찾기 위한 B*TREE을 써서 디스크 입출력 횟수를 줄인다.
- Oracle8 Server가 인덱스를 자동적으로 사용하고 유지 보수 한다.
- 인덱스를 만들면 사용자가 직접 조작할 필요가 없게 된다.
- 인덱스는 논리적으로도 물리적으로도 테이블과는 독립적이다.
- 언제든지 생성하거나 삭제할 수 있으며 이는 테이블이나 다른 인덱스에 영향을 주지 않는다는 의미이다
3. 테이블 생성시 자동적으로 생성되는 INDEX가 있다. 어떤 제약 조건을 기술하면 생성되는가?
PRIMARY KEY, UNIQUE KEY
4. INDEX 생성 지침을 설명하여라.
가) 많은 것이 항상 더 좋은 것은 아니다.
테이블의 많은 인덱스가 질의의 스피드 향상을 꼭 의미하는 것은 아닙니다. 인덱스를 가지고 있는 테이블에 대한 각 DML 작업은 인덱스도 갱신되어야 함을 의미합니다. 많은 인덱스가 테이블과 관련되어 있으며, ORACLE SERVER은 DML 후에 모든 인덱스를 갱신하기 위해 더 많은 노력이 필요하게 됩니다.
나) 언제 인덱스를 생성하는가?
1) 열은 WHERE 절 또는 조인 조건에서 자주 사용됩니다.
2) 열은 광범위한 값을 포함합니다.
3) 열은 많은 수의 null 값을 포함합니다.
4) 둘 또는 이상의 열은 WHERE 절 또는 조인 조건에서 자주 함께 사용됩니다.
5) 테이블은 대형이고 대부분의 질의들은 행의 2~4%보다 적게 읽어 들일 것으로 예상됩니다.
다) 언제 인덱스를 생성해서는 안되는가
1) 테이블이 작다.
2) 열의 질의의 조건으로 자주 사용되지 않는다.
3) 대부분의 질의들은 행의 2~4%이상을 읽어 들일 것으로 예상된다.
4) 테이블은 자주 갱신됩니다. 테이블에 하나 이상 인덱스를 가지고 있다면 테이블을 엑세스하는 DML 문장은 인덱스의 유지 때문에 상대적으로 더 많은 시간이 걸리게 됩니다.
5. 여러 개의 COLUMN으로 인덱스를 사용하는 경우가 있다. 몇개의 COLUMN까지 가능한다.
많이 할 수 있으나 안함
6. 동의어는 어떤 경우에 사용하는가.
다른 사용자가 소유한 테이블을 참조하기 위해서는 동의어를 생성한 이름 뒤에 점을 찍고 테이블 이름을 써야 합니다. 동의어 생성은 스키마 이름까지 명시할 필요를 제거시키고 테이블, 뷰, 시쿼스, 프로시저, 또는 다른 객체에 대한 또 다른 이름을 제공 합니다. 이 방법은 뷰처럼 긴 이름을 가진 객체한테 유용하게 사용될 수 있습니다.
7. EMP 테이블을 EMPLOYEE라는 동의어를 생성하여라
CREATE SYNONYM EMPLOYEE FOR EMP ;
1. Oracle8에 로그온하기 위한 필요한 권한은 무엇인가?
2. 테이블을 생성하기 위해 필요한 권한은 무엇인가
3. SYSTEM PRIVILEGE와 OBJECT PRIVILEGE란?
4. 테이블을 생성한 OWNER는 어떠한 권한을 가지는가?
5. 사용자가 비밀 번호를 갱신하려면 어떤 문장을 기술하여야 하는가?
6. 사용자가 액세스할 수 있는 테이블을 조회하여라?
7. CONNECT ROLE와 RESOURCE ROLE에 대하여 설명하여라
8. 현재 SESSION을 이루고 있는 사용자가 가지고 있는 OBJECT권한을 조회하여라.
9. 사용자는 KSH이고 패스워드는 KIM인 사용자를 생성하여라.
10. 9번에서 생성된 사용자에게 CONNECT와 RESOURCE권한을 부여하여라.
11. 10번에서 부여한 권한을 취소하고 KSH사용자를 삭제하여라.