728x90
반응형

1. 숫자형 함수 적용과 그 결괏값이 올바르지 않은 것은?
1. ABS(-30) = 30
2. SIGN(-50) = -1
3
. MOD(7,3) = 2

4. CEIL(38.12) = 39
 
✏️

더보기

정답 : 3

SIGN(n) : 결과값이 0 또는 양수, 음수인지에 따라 0 /1 /-1 반환

SIGN(0-5) -> -1 / SIGN(0) -> 0 / SIGN(5-1) -> 1

 

MOD(n,m) : 나머지 값 반환(n%m, n MOD m로 표현가능)

MOD(29,9) -> 2 / MOD(34.5,3) -> 1.5 / MOD(N,0) -> nul


2. 아래 SQL에서 출력되는 ROWS의 개수를 구하시오.

1. 10건
2. 14건
3. 18건
4. 20건
 
✏️

더보기

정답 : 3

DEPTNO로 조인을 하고 DNAME과 JOB으로 CUBE를 실행했다. CUBE는 전체합계와 각 칼럼별로 부분합계를 출력한다.


3. 다음의 SQL문에 대한 설명으로 올바르지 않은 것은?

가. 실제 데이터
DEPTNO   SAL
--------------------
    10
    10         1000
    10         2000
    20
    20          500

나. SELECT문
SELECT DEPTNO, SUM(NVL(SAL,0)) FROM DEPT GROUP BY DEPTNO;

1. SELECT문에 WHERE 조건이 없으므로 연산에 참여하는 총 행 수는 5개이다.
2. DEPTNO 10의 합계는 3000이고 20의 합계는 500이다.
3. NVL(SAL, 0)문에서 NVL은 NULL에 대한 합계오류를 예방한다.
4. 부서별 합계를 계산할 때 NULL값을 만나면 0으로 치환한다.
 
✏️

더보기

정답 : 3

그룹 함수를 사용하는 경우 NULL값은 연산에서 제외된다. 그래서 NVL 함수를 사용하는 것은 합계오류 예방과는 전혀 관계가 없다.


4. 다음 SQL문의 실행 결과로 올바른 것을 고르시오.

1. 10, 20
2. 10, 20, 30
3 .10, 20, 30 ,40
4. 10, 20, 30, 40, 50
 
✏️

더보기

정답 : 2

ALL 연산자는 서브쿼리(Subquery) 값 모두가 조건에 만족하면 True를 반환한다.


5. 자신의 속성이 없어도 다른 속성을 이용하여 결과를 도출할 수 있는 특징을 가진 속성의 이름은?
1. 설계 속성(Designed Attribute)
2. 기본 속성(Basic Attribute)
3. 파생 속성(Derived Attribute)
4. 관계 속성(Associative Attribute)
 
✏️

더보기

정답 : 3

파생 속성(Derived Attribute)은 다른 속성을 이용하여 계산된 속성으로 자신의 고유값을 갖지 않고 파생, 유추되어 재산정될 수 있는 속성이다.


6. 엔터티에 대한 개념 중 엔터티 정의의 공통점 3가지가 아닌 것은?
1. 데이터베이스 내에서 변별 가능한 객체이다.
2. 엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당된다.
3. 저장되기 위한 어떤 것(Thing)이다.
4. 업무상 관리가 필요한 관심사에 해당된다.
 
✏️

더보기

정답 : 1

엔터티(Entity)의 3가지 공통점은 다음과 같다.
•개념, 사건, 사람, 장소 등과 같이 명사이다.
•비즈니스 프로세스에서 관리되어야 하는 정보이다.
•저장이 필요한 어떤 것이다.


7. 다음의 데이터베이스에서 ‘부양가족을 2명 이상 가진 사원의 사번(eno), 성명(ename), 부양가족 수를 검색’하는 질의를 SQL로 적절하게 표현한 것은?

employee(eno, ename, adddress, score, dno)
dependent(eno, ename, birthday, relation)

1.
SELECT eno, ename, count(*)
FROM employee e, dependent d
WHERE e.eno = d.eno and count(*) >= 2
GROUP BY d.eno;
2.
SELECT e.eno, e.ename, count(*)
FROM employee e, dependent d
WHERE EXISTS (SELECT * FROM dependent
GROUP BY eno
HAVING count(*) >= 2)
GROUP BY e.eno, e.ename;
3.
SELECT e.eno, e.ename, t.cnt
FROM employee e, (SELECT eno, count(*) as cnt
FROM dependent GROUP BY
eno HAVING count
(*) >= 2) t
WHERE e.eno = t.eno;
4.
SELECT e.eno, e.ename, count(*)
FROM employee e, dependent d
WHERE e.eno = d.eno
GROUP BY e.eno, e.ename
HAVING count(*) >= 3;
 
✏️

더보기

정답 : 3

1번 집계함수에 대한 조건절은 HAVING을 사용해야 함

2번 GROUP BY절을 사용했으나 SELECT 절 COUNT(*)는 전체 개수 반환 함


8. 릴레이션 Emp, Dept가 다음과 같이 정의되어 있다. 부서에 사원이 한 명도 없는 부서(deptno)를 검색하는 질의를 작성했을 때, 가장 거리가 먼 것은? (단, Emp의 deptno는 Dept의 deptno를 참조하는 외래키이다)

Emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
Dept(deptno, dname, loc)

1.
SELECT deptno
FROM Dept
WHERE deptno NOT IN (SELECT deptno FROM Emp);
2.
SELECT deptno
FROM Dept a
WHERE NOT EXISTS (SELECT * FROM Emp b WHERE a.deptno =b.deptno);
3.
SELECT b.deptno
FROM Emp a RIGHT OUTER JOIN Dept b
ON a.deptno = b.deptno
WHERE empno IS NULL;
4.
SELECT deptno
FROM Dept
WHERE deptno < > ANY (SELECT deptno FROM Emp);
 
✏️

더보기

정답 : 4

4번 ANY()실행 시 하나라도 조건값을 만족하면 결과를 도출하기 때문에 모든 deptno 값이 도출 된다.


9. 실행 계획에 대한 설명으로 적절하지 않은 것은?
1. 실행 계획은 SQL문의 처리를 위한 절차와 방법이 표현된다.
2. 실행 계획이 다르면 결과도 달라질 수 있다.
3. 실행 계획은 액세스 기법, 조인 순서, 조인 방법 등으로 구성된다.
4. 최적화 정보는 실행 계획의 단계별 예상 비용을 표시한 것이다

✏️

더보기

정답 : 2
동일 SQL문에 대해 실행 계획이 다르다고 결과가 달라지지는 않는다. 그러나 실행 계획의 차이로 성능이 달라질 수 있다.



10. 사원 테이블에 사원번호는 기본키로 설정되어 있다. SQL문으로 사원번호 1번을 검색하는데 사원 테이블에는 하나의 ROW만 저장되어 있다. 이때 유리한 스캔 방식은 무엇으로 판단되는가?
1. Unique Index Scan
2. Non-Unique Index Scan
3. Index Full Scan
4. Table Full Scan
 
✏️

더보기

정답 : 4

하나의 데이터(행)를 읽기 위해서는 인덱스를 사용하지 않고 테이블을 FULL SCAN하는 것이 효율적이다. 즉, 검색되는 행이 1건이므로 굳이 인덱스를 읽지 않고 바로 테이블을 검색해야 한다.


11. Case문에서 ELSE를 생략하면 어떤 현상이 발생되는가?
1. ELSE를 생략하고 작성하면 실행 시 ELSE 조건이 참이 되며 오류가 발생한다.
2. ELSE 조건이 만족하게 되면 공집합이 리턴 된다.
3. ELSE 조건을 만족하게 되면 무시된다.
4. ELSE 조건이 만족하게 되면 NULL이 된다.
 
✏️

더보기

정답 : 4

CASE문은 IF~THEN~ELSE를 구현할 수 있는 SQL문이다. 즉, 어떤 조건이 참이면 A를 실행하고 그렇지 않으면 B를 실행하라는 것이다. CASE문에서 ELSE 조건을 생략하면 NULL이 되돌려진다.

  •  

12. 다음 모델의 배송 엔터티에서 고객의 정보를 찾을 때, 성능 향상과 SQL 문장을 단순화하는 가장 적절한 반정규화 방법은 무엇인가? (단, 주문목록 엔터티에서는 고객의 주식별자를 상속받기를 원하지 않음, 배송 엔터티에서는 고객 엔터티의 모든 속성을 참조하기를 원함)
1. 고객과 배송 엔터티의 관계를 추가(1:M관계)하는 관계 반정규화
2. 배송과 고객의 엔터티를 통합하는 반정규화
3. 배송 엔터티와 주문목록 엔터티 관계를 식별자 관계로 수정
4. 고객의 모든 정보를 모두 배송 엔터티의 속성으로 반정규화
 
✏️

더보기

정답 : 1

고객 엔터티의 모든 속성을 참조하기를 원할 때 가장 효율성이 좋은 반정규화 기법은 관계를 중복하는(관계의 반정규화) 방법이며 이를 적용하면 두 테이블의 조인 경로를 단축하게 되고 SQL 문장을 단순하게 구성할 수 있다.


13. 다음 중 아래 테이블 정의와 인덱스 구조를 참고하여, 인덱스를 효율적으로 액세스할 수 없는 검색조건을 고르시오.

1. where 주문번호 between 1 and 10
2. where 주문자명 like ‘%홍길동%’
3. where 주문일자 >= ‘20181201’
4. where 주문일자 = ‘20181201’
 
✏️

더보기

정답 : 2

LIKE 검색 문자열 앞뒤에 모두 ‘%’ 기호를 붙였으므로 정상적인 Index Range Scan이 불가능하다.


14. 두 개 릴레이션 Student와 Department가 있을 때, 질의문 “SELECT * FROM Student s, Department d WHERE s.dept > 100;”을 수행하려고 한다. 이 질의 수행으로 생성되는 결과 릴레이션의 차수(Degree)와 카디널리티(Cardinality)는 각각 얼마인가? (단, 릴레이션 Student의 애트리뷰트 ‘소속(dept)’은 릴레이션 Department의 애트리뷰트 ‘코드(dno)’를 외부키로 참조한다)

1. 차수=5, 카디널리티=3
2. 차수=5, 카디널리티=2
3. 차수=8, 카디널리티=9
4. 차수=8, 카디널리티=3
 
✏️

더보기

정답 : 3

차수(Degree)와 카디널리티(Cardinality)를 구하는 문제로 차수는 결과 릴레이션의 칼럼 수이다. 그래서 Student와 dept 테이블을 조인하여 모든 컬럼을 출력하기 때문에 (SELECT *) 각각 Student 테이블에서 5개 , dept 테이블에서 3개 , 총 8개의 컬럼(=차수)을 가지게 된다.
카디널리티는 선택된 행들의 개수이다. Where문을 보면 결과 릴레이션에서 Student 릴레이션의 dept값이 100보다 큰 것만 조회한다. 위 조건에 부합하는 결과 행수는 9건이므로 카디널리티는 9가 된다.
(Student와 Dept를 카티션곱 조인하면 15개의 행이 나오고, 이중 where 조건에 부합하는 대상은 9건이다)


15. Subquery의 종류 중에서 Subquery가 Mainquery의 제공자 역할을 하고 Mainquery의 값이 Subquery에 주입되지 않는 유형은 무엇인가?
1. Filter형 Subquery
2. Early Filter형 Subquery
3. Associative Subquery
4. Access Subquery
 
✏️

더보기

정답 : 4

Access Subquery는 제공자 역할을 하는 서브쿼리이다.


16. 다음 설명에 해당하는 모델링 관점은 무엇인가?

업무가 어떤 데이터와 관련이 있는지 또는 데이터 간의 관계는 무엇인지에 대해서 모델링 하는 관점

1. 프로세스 관점
2. 데이터와 프로세스의 상관 관점
3. 데이터와 데이터 간의 상관 관점
4. 데이터 관점
 
✏️

더보기

정답 : 4

데이터 모델링의 세 가지 관점
1. 데이터 관점 : 업무가 어떤 데이터와 관련이 있는지 또는 데이터 간의 관계는 무엇인지에 대해서 모델링 하는 방법(What, Data)
2. 프로세스 관점 : 업무가 실제로 하고 있는 일은 무엇인지 또는 무엇을 해야 하는지를 모델링 하는 방법(How, Process)
3. 데이터와 프로세스의 상관 관점 : 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지 모델링하는 방법(Interaction)


728x90
반응형
728x90
반응형

1. 다음 보기 중 슈퍼/서브타입 데이터 모델의 변환타입에 대한 설명으로 옳은 것은? 

1) One To One이란 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성하고 테이블의 수가 많아진다.

2) Plus Type은 하나의 테이블을 생성하는 것으로 조인(Join)이 발생하지 않는다.

3) Plus Type은 슈퍼+서브타입 형식으로 데이터를 처리하는 경우로 조인성능이 우수하여 
   Super Type과 Sub Type변환 시에 항상 사용된다.

4) One To One type은 조인성능이 우수하기 때문에 관리가 편리하다.

 

정답

더보기

정답 : 1번

슈퍼/서브 타입 데이터 모델의 변환

데이터량이 소량일 경우 성능에 영향을 미치지 않기 때문에 데이터처리의 유연성을 고려하여 1:1 관계를 유지한다.

그러나 데이터용량이 많아지는 경우, 해당 업무적인 특징이 성능에 민감한 경우는 트랜잭션이 해당 테이블에 어떻게 발생되는지에 따라 3가지 변환방법을 참조하여 상황에 맞게 변환하도록 해야 한다.

 

- One To One Type : 개별로 발생되는 트랜잭션에 대해서는 슈퍼,서브 개별 테이블로 구성된다.

                                         >> 테이블 수 많음, 조인 많음, 관리 어려움

- Plus Type : 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션에 대해서 는 슈퍼 + 서브타입 테이블로 구성된다.

                          >> 조인 발생, 관리 어려움

- Single Type (All in One 타입) : 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성된다.

                                                               >> 조인 성능 좋음, 관리 편함, I/O성능 나쁨


2. 다음 보기 중 해시조인(Hash Join)에 대한 설명으로 옳지 않은 것은? 

1) 해시조인은 두 개의 테이블 간에 조인을 할 때 범위검색이 아닌 동등조인(EQUI-Join)에 적합한 방식이다.

2) 작은 테이블(Build Input)을 먼저 읽어서 Hash Area에 해시 테이블을 생성하는 방법으로 큰 테이블로 
   Hash Area를 생성하면 과다한Sort가 유발 되어 성능이 저하될 수 있다.

3) 온라인 트랜잭션 처리(OLTP)에 유용하다.

4) 해시조인은 수행 빈도가 낮고 수행시간이 오래 걸리는 대용량 테이블에 대한 조인을 할 때 유용하다.​

 

정답

더보기

정답 : 2번

- NL Join : 프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인을 수행하고, 랜덤 액세스 방식으로 데이터 읽는다. (대용량 데이터 처리 시 불리, 유니크 인덱스를 이용하여 소량 테이블 조인할 때 유리함) 

- Sort Merge Join : 조인 칼럼을 기준으로 데이터를 정렬하여 조인을 수행하고 스캔 방식으로 데이터를 읽음. (대용량 데이터 처리 시 성능상 불리함)

- Hash Join : 조인 칼럼을 기준으로 동일한 해시값을 갖는 데이터의 실제값을 비교하며 조인한다. NL Join의 랜덤 액세스 문제와 SMJ의 정렬 작업 부담을 해결하기 위한 대안으로 등장했다. (선행 테이블이 작을때 유리, 별도의 공간 필요)

 

방 법 설 명
중첩 반복 조인
(Nested Loop Join)
- 좁은 범위에 유리
- 유리순차적으로 처리하며, Random Access 위주
- 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 함
- 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수
색인된 중첩 반복 조인, 단일 반복 조인
(Single Loop Join)
- 후행(Driven) 테이블의 조인 속성에 인덱스가 존재할 경우 사용
- 선행 테이블의 각 레코드들에 대하여 후행 테이블의 인덱스 접근 구조를 사용하여 직접 검색 후 조인하는 방식
정렬 합병 조인
(Sort Merge Join)
- Sort Merge 조인은 해당 테이블의 인덱스가 없을때 수행이 된다.
- 테이블을 정렬(Sort) 한 후에 정렬된 테이블을 병합(Merge) 하면서 조인을 실행한다.

- 조인 연결고리의 비교 연산자가 범위 연산( >, < )인 경우 Nested Loop 조인보다 유리
- 두 결과집합의 크기가 차이가 많이 나는 경우에는 비효율적
해시 조인
(Hash Join)
- 해시(Hash)함수를 사용하여 두 테이블의 자료를 결합하는 조인 방식
- Nested Loop 조인과 Sort Merge 조인의 문제점을 해결

- 대용량 데이터 처리는 상당히 큰 hash area를 필요로 함으로, 메모리의 지나친 사용으로 오버헤드 발생 가능성

 


3. 다음 파티션에 대한 설명으로 틀린 것을 고르시오.

1) RANK() OVER (PARTITION BY JOB ORDER BY 급여 DESC) JOB_RANK
   #직업별 급여가 높은 순서대로 부여되고 동일한 순위는 동일한 값이 부여 된다.

2) SUM(급여) OVER (PARTITION BY MGR ORDER BY 급여 RANGE UNBOUNDED PRECEDING)
   #RANGE는 논리적 주소에 의한 행 집합을 의미하고 MGR별 현재 행부터 
   파티션내 첫번째 행까지 급여의 합계를 계산한다.

3) AVG(급여) OVER (PARTITION BY MGR ORDER BY 날짜 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING))
   #각 MGR 별로 앞의 한건, 현재 행, 뒤의 한건 사이에서 급여의 평균을 계산한다.

4) COUNT(*) OVER (ORDER BY 급여) RANGE BETWEEN 10 PRECEDING AND 300 FOLLOWING)
   #급여를 기준으로 현재 행에서의 급여의 10에서 300사이의 급여를 가지는 행의 수를 COUNT

 

정답

더보기

정답 : 3번

3번은 각 MGR별로 급여의 평균을 계산하기 전에 날짜를 기준으로 정렬을 수행한 다음에 급여의 평균을 계산한다.

즉, 각 MGR 파티션내에서 날짜 기준으로 정렬을 수행하였을 때, 파티션 내에서 앞의 한 건, 현재 행 뒤의 한 건 사이 급여의 평균을 계산한다.


4. 아래의 테이블들에 대해서 SQL문을 수행하였을 때의 결과 값은?

[TEST29_1]
COL
----
1
2
3
4

[TEST29_2]
COL
----
2
NULL

[SQL]
SELECT COUNT(*)
FROM TEST29_1 A
WHERE A.COL NOT IN (SELECT COL FROM TEST29_2);

-----------------------------------------------------
1) 0

2) 1

3) 3

4) 6

 

정답

더보기

정답 : 1번

NOT IN문 서브쿼리의 결과 중에 NULL이 포함되는 경우 데이터가 출력되지 않는다.

 

X IN (A, B) --> X = A OR X=BX NOT IN (A, B) --> NOT(X = A OR X = B) --> X != A AND X !=B 

B를 NULL로 바꾸면

X NOT IN (A, NULL) --> NOT(X = A OR X = NULL ) --> X != A AND X != NULL  

X != NULL 조건은 NULL을 비교하므로 항상 거짓이 됨.

항상 거짓인 조건이 AND로 연결되니 전체 조건은 참이 될 수 없다.


5. 다음 중 보기의 테이블을 설계할 사항으로 가장 적절한 것은?

- 개인 고객과 법인 고객이 있고 각 고객 데이터는 공통 속성을 가지고 있다.
- 각각의 고객 데이터에서만 사용되는 개별 속성도 있다.
- 로그인 관리는 동일하게 관리된다.
- 법인 고객과 개인 고객 중 개인 고객의 비율이 98%를 차지한다.
- 개인 고객에 대한 사용이 압도적으로 많다.
-------------------------------------------------------------------------

1) 통합하여 하나의 테이블을 만든다. (All in One)

2) 공통 속성을 중복으로 두어 슈퍼-서브 타입으로 한다. (슈퍼-서브타입)

3) 공통 속성을 별도로 두고 개인 고객과 법인 고객도 별도의 테이블로 생성한다. (1:1)

4) 위 보기 모두 성능 조절을 위한 방법으로 부적절한다.
 

정답

더보기

정답 : 2

해설 : 슈퍼/서브타입  데이터의 특징은 공통점과 차이점을 고려하여 효과적으로 표현할 수 있다는 것이다.

즉, 공통의 부분을 슈퍼타입으로 모델링하고 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브엔터티로 구분하여 업무의 모습을 정확하게 표현하면서 물리적인 데이터 모델로 변환을 할 때 선택의 폭을 넓힐 수 있는 장점이 있다.


6. 주어진 테이블에서 아래와 같은 결과를 반환하는 SQL문을 고르시오.

[SQLD_33_12]
DNAME      YEAR     SAL
------------------------
경영지원부    2010     4900
경영지원부    2011     5000
경영지원부    2012     5100
인사부       2010     4800
인사부       2011     4900
인사부       2012     5000

[RESULT]
DNAME      YEAR     SUM(SAL)
----------------------------
인사부       2010     4800
인사부       2011     4900
인사부       2012     5000
인사부                14700
경영지원부    2010     4900
경영지원부    2011     5000
경영지원부    2012     5100
경영지원부             15000
                     29700
1)
SELECT DNAME, YEAR, SUM(SAL)
FROM SQLD_33_12
GROUP BY ROLLUP((DNAME, YEAR), NULL);

2)
SELECT DNAME, YEAR, SUM(SAL)
FROM SQLD_33_12
GROUP BY ROLLUP(DNAME, (DNAME, YEAR));

3)
SELECT DNAME, SUM(SAL)
FROM SQLD_33_12
GROUP BY ROLLUP((DNAME, YEAR));

4)
SELECT DNAME, SUM(SAL)
FROM SQLD_33_12
GROUP BY ROLLUP(DNAME, YEAR, (DNAME, YEAR));

 

정답

더보기

정답 : 2

ROLLUP은 단계별 합계

우측 항목을 하나씩 단계별로 제거

1. ROLLUP (DNAME, (DNAME, YEAR))

>> (DNAME, YEAR)를 한 묶음으로 처리하여 합계 도출

2. ROLLUP (DNAME, ())

>> DNAME 합계 도출

3. ROLLUP ()

>> () 전체 합계 도출


7. 다음 주어진 테이블에 대해서 아래의 SQL문을 수행하였을 때의 결과로 올바른 것은?

[SQLD_32_1]
N1   V1
-------
1    A
2  
3    B
4    C

[SQLD_32_2]
N1   V1
-------
1    A
2  
3    B
 
[SQL]
SELECT SUM(A.N1)
FROM SQLD_32_1 A,
SQLD_32_2 B
WHERE A.V1 <> B.V1;
----------------------------------------
1) 10

2) 30

3) 12

4) 8

 

정답

더보기
정답 : 3
WHERE절에 비교연산자 <>는 CROSS JOIN으로 수행
A 테이블을 기준으로
A.V1의 값이 A일 때 B.V1의 값이 A가 아닌 것은 B 하나 이므로 A.N1의 값은 1 (NULL은 제외)
A.V1의 값이 NULL일 때는 아무것도 추출이 안됨
A.V1의 값이 B 일 때 B.V1의 값이 B가 아닌것은 A 하나 이므로 A.N1의 값은 3 (NULL은 제외)
A.V1의 값이 C 일 때 B.V1의 값이 C가 아닌 것은 A, B 이므로 A.N1의 값은 4 + 4 (NULL은 제외) 

8. 주어진 테이블에서 날짜 값을 2020, 02로 분리하여 추출하도록 아래 SQL문의 (      )을 완성하시오. 

[SQLD_33_47]
COL1
--------
2020-2-1

[SQL]
SELECT EXTRACT(YEAR FROM SYSDATE),
LPAD(EXTRACT(month from sysdate),(     ))
FROM SQLD_33_47;

 

정답

더보기

정답 : 2, '0'

EXTRACT(‘YEAR’|”MONTH’|’DAY’ from SYSDATE) : 날짜유형 데이터 추출

LPAD("값", "총 문자길이", "채움문자")

LPAD 함수는 지정한 길이만큼 왼쪽부터 채움문자로 채운다.

채움문자를 지정하지 않으면 공백으로 해당 길이만큼 문자를 채운다. 


9. 아래의 보기를 만족하는 조인 기법은 무엇인가?

- 먼저 선행 테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행한다.
- 랜덤 방식으로 엑세스 한다.
- 결과를 가능한 빨리 화면에 보여줘야 하는 온라인 프로그램에 적당하다.

 

정답

더보기

NESTED LOOP JOIN


10. SELECT NVL(COUNT(*), 9999) FROM TABLE WHERE 1 = 2 의 결과값은? 

1) 9999

2) 0

3) NULL

4) 1

 

정답

더보기

정답 : 2

집계 함수에서 COUNT(*) 함수는 조건절이 거짓일 때 0을 반환한다.


11. 다음은 ABC증권회사의 회원정보를 모델링 한 것이다. 회원정보는 수퍼타입이고 개인회원과 법인회원 정보는 서브타입이다. 애플리케이션에 회원정보를 조회하는 경우는 항상 개인회원과 법인회원을 동시에 조회하는 특성이 있을 때 수퍼타입과 서브타입을 변환하는 방법으로 가장 올바른 것은? 

1) ONE TO ONE

2) PLUS TYPE

3) SINGLE TYPE

4) 정답 없음​

 

정답

더보기

정답 : 3번

항상 같이 조회한다고 했으므로 하나의 테이블로 통합해서 만드는 SINGLE TYPE 방법이 가장 올바른 방법이다.

수퍼타입과 서브타입의 변환 시에 가장 고려되어야 하는 것은 애플리케이션이 테이블을 어떻게 사용하는지 이다.

 

슈퍼/서브타입 데이터 모델의 변환타입 비교

구분 One To One Type Plus Type Single Type
특징 개별 테이블 유지 슈퍼+서브타입 테이블 하나의 테이블
확장성 우수함 보통 나쁨
조인성능 나쁨 나쁨 우수함
I/O량 성능 좋음 좋음 나쁨
관리용이성 좋지않음 좋지않음 좋음(1개)
트랜잭션 유형에 따른 선택방법 개별 테이블로 접근이 많은 경우 선택 슈퍼+서브 형식으로 데이터를 처리하는 경우 선택 전체를 일괄적으로 처리하는 경우 선택

12. 다음은 ABC증권회사의 데이터베이스 모델링이다. 모델링은 고객과 계좌간의 관계를 표현한 것이다. 다음의 보기 중에서 그 설명이 올바르지 않은 것은? 

1) 계좌를 개설하지 않은 고객은 ABC증권 회사에 고객이 될 수가 없다.

2) 계좌번호는 전체 고객마다 유일한 번호가 부여된다.

3) 고객마스터와 계좌마스터의 관계는 식별관계이다.

4) 한 명의 고객에 하나의 고객등급만 부여된다.​

 

정답

더보기

정답 : 2번

테이블상의 계좌마스터의 식별자 속성이 계좌번호 + 고객번호이므로 전체 고객에게 유일한 번호가 할당되는것은아니다. 같은 계좌번호라도 다른 고객번호로 계좌마스터에서 고유한 레코드를 식별 할 수 있다.

즉, 고객별로 계좌번호가 같을수 있지만 (예: 고객 A, 계좌 123 / 고객 B, 계좌 123)

한 명의 고객의 계좌번호는 유일하다. (예: 고객 A, 계좌 123 / 고객 A, 계좌 124)


13. 식별자 중에서 비즈니스 프로세스에 의하여 만들어지는 식별자로 대체여부로 분리되는 식별자는 무엇인가?

1) 본질 식별자

2) 단일 식별자

3) 내부 식별자

4) 인조 식별자

 

정답

 
더보기

정답 : 1번

식별자 분류

대표성 여부

•주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있음

•보조식별자 : 어커런스를 구분할 수 있는 구분자이나 대표 성을 가지지 못해 참조관계 연결불가

스스로 생성여부

•내부식별자 : 스스로 생성되는 식별자 (본질식별자)

•외부식별자 : 타 엔터티로부터 받아오는 식별자

속성의 수

•단일식별자 : 하나의 속성으로 구성

•복합식별자 : 2개 이상의 속성으로 구성

대체 여부

•본질식별자 : 대체될 수 없는 식별자, 업무에 의해 만들어 지는 식별자

•인조식별자 : 대체 가능한 식별자, 인위적으로 만든 식별 자


14. 다음 중 문자에 대한 설명으로 부적절한 것은 무엇인가? 

1) VARCHAR(가변길이 문자형)은 비교시 서로 길이가 다를 경우 서로 다른 내용으로 판단한다.

2) CHAR(고정길이 문자형)은 비교 시 서로 길이가 다를 경우 서로 다른 내용으로 판단한다.

3) 문자형과 숫자형을 비교 시 문자형을 숫자형으로 묵시적 변환하여 비교한다.

4) 연산자 실행 순서는 괄호, NOT, 비교연산자, AND, OR순이다.
 

정답

더보기

정답 : 2번

CHAR는 길이가 서로 다르면 짧은 쪽에 스페이스를 추가하여 같은 값으로 판단한다. 같은 값에서 길이만 서로 다를 경우 다른 값으로 판단하는 것은 VARCHAR(가변길이 문자형 : 입력한 크기만큼 할당 )로 비교하는 경우이다.

 

데이터 유형

CHAR(s) : 고정 길이 문자열 정보 ‘AA’ = ‘AA ’

                  할당된 변수 값의 길이가 L이하 일 때 차이는 공백으로 채워짐

VARCHAR(s) : 가변 길이가 문자열 정보 ‘AA’ != ‘AA ’

                         할당된 변수 값의 길이의 최대값이 L인 문자열은 가능한 최대 길이로 설정

NUMERIC : 정수(L:전체 자릿 수), 실수(D:소수점 자릿수) 등 숫자 정보

DATE : 날짜와 시각 정보


15. 테이블의 칼럼을 변경하는 DDL문으로 올바른 것은? 

TEST 테이블의 NAME 칼럼의 데이터 타입을 
CHAR에서 VARCHAR로 변경하고
데이터 크기를 100으로 늘린다.
(1)
ALTER TABLE TEST ALTER COLUMN NAME VARCHAR(100);

(2)
ALTER TABLE TEST MODIFY(NAME VARCHAR(100));

(3)
ALTER TABLE TEST ADD COLUMN NAME VARCHAR(100);

(4)
ALTER TABLE TEST ADD CONSTRAINT COLUMN NAME NAME VARCHAR(100);

 

정답

더보기

정답 : 2번

칼럼의 변경은 ALTER TABLE ~ MODIFY 문을 사용하면 된다. 칼럼은 데이터 타입 및 길이를 변경 할 수 있다.

추가(ADD), 삭제(DROP)

※ SQL Server 에선 1번이 정답이지만 따로 DBMS를 명시하지 않으면 기본적으로 ORACLE을 기준으로 생각


16. 다음 보기 중 서브쿼리에 대한 설명을 옳지 않은 것은? 

1) 서브쿼리에서는 정렬을 수행하기 위해서 내부에 ORDER BY를 사용하지 못한다.

2) 메인 쿼리를 작성할 때 서브쿼리에 있는 칼럼을 자유롭게 사용할 수 있으면 편리하다.

3) 여러 개의 행을 되돌리는 서브쿼리는 다중행 연산자를 사용해야 한다.

4) EXIST는 TRUE와 FALSE만 되돌린다.
 

정답

더보기

정답 : 2

서브쿼리에 있는 칼럼을 자유롭게 사용할수 없다.

서브쿼리 중에서 INLINE VIEW의 칼럼은 메인쿼리에서도 사용이 가능하다.

즉, 어떤 서브쿼리를 사용하느냐에 따라 사용가능여부가 달라지므로 자유롭게 사용할 수 없다. 


17. 아래의 ERD에서 3차 정규형을 만족할 때 학과등록 엔터티의 개수는 몇 개가 되는가?

[조건]
가) 평가코드, 평가내역은 한번에 종속
나) 코스명, 기간은 코스코드에 종속
다) 평가코드, 평가내역은 속성 간 종속적 관계

[참고]
1차정규형 : 모든 속성은 반드시 하나의 값, 속성값의 중복 제거

2차정규형 : 식별자에 종속되지 않는 속성의 중복 제거

3차정규형 : 2차정규형을 만족하며 식별자 외 일반 칼럼간의 종속 존재 제거

 

정답

더보기

정답 : 3

2차 정규화 → 3차 정규화(종속 존재를 분해)

>> 학번, 코스코드(FK), 평가코드(FK) = 3개


18. 아래의 SQL1과 동일한 값을 반환하도록 SQL2의 빈칸에 서브쿼리 연산자를 작성하시오.

[SQLD39_50_1]    [SQLD39_50_2]
COL1  COL2       COL1  COL2   COL3
100   200        100   200    1000
110   300        110   350    2000
120   400        120   400    3000
130   500        130   550    4000

[SQL1]
SELECT * FROM SQLD39_50_1 A 
   WHERE(A.COL1, A.COL2)
   IN (SELECT B.COL1, B.COL2 
          FROM SQLD39_50_2 B
       WHERE B.COL3 > 2000);
       
[SQL2]
SELECT * FROM SQLD39_50_1 A
   WHERE (         )
   (SELECT 1
       FROM SQLD39_50_2 B
    WHERE A.COL1 = B.COL1 
      AND A.COL2 = B.COL2
      AND B.COL3 > 2000);

 

정답

더보기

정답 : EXISTS

SQL1 의 결과는 (120, 400)

SQL2 에 같은 결과를 반환하기 위해서는 빈칸에 EXISTS를 작성

EXISTS 연산자는 하위 쿼리에 레코드가 있는지 테스트 하는 데 사용

하위 쿼리가 하나 이상의 레코드를 반환하는 경우 TRUE 그렇지 않은 경우 FALSE 


19. 주어진 SQL문의 빈칸에 올 수 있는 함수로 옳지 않는 것은? 

[SQLD_34]
DEPT        NAME        SALARY
------------------------------
MARKETING      A           30
SALES          B           40
MARKETING      C           40
SALES          D           50
MANUFACTURE    E           50
MARKETING      F           50
MANUFACTURE    G           60
SALES          H           60
MANUFACTURE    I           70

SELECT*FROM SQLD_34
WHERE SALARY (     );
1) <= (SELECT MAX(SALARY) FROM SQLD_34 GROUP BY DEPT)

2) >= ANY(30,40,50,60,70)

3) <= ALL(30,40,50,60,70)

4) IN (SELECT SALARY FROM SQLD_34 WHERE DEPT = 'MARKETING')

 

정답

더보기

정답 : 1번

- 1번의 쿼리는 각 부서(DEPT)에 대해 멀티행을 반환한다. 그러나 <= 연산자는 오른쪽에 단일 값이 있어야 한다. 따라서 여러 값을 반환하는 이 서브쿼리를 직접 사용할 수 없다.

- 4번 쿼리의 IN 연산자는 오른쪽에 지정된 목록 중 하나와 일치하는 경우에 조건을 충족시키는 데 사용된다. 쿼리는 'MARKETING' 부서에 속하는 직원들의 급여를 반환하고 이 목록을 왼쪽에 있는 IN 연산자와 함께 사용하면, 왼쪽 테이블의 각 행의 급여가 해당 부서의 급여 목록 중 하나와 일치하면 조건을 충족시킨다.

 

단일행 서브쿼리

- 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리

- 항상 비교연산자와 함께 사용된다.

- 비교연산자 뒤에는 단일행이 와야 하는데 뒤에 GROUP BY DEPT는 다중행 함수로 멀티행을 반환하여 에러가 발생함.


20. 아래의 ERD 에 대한 반정규화 기법으로 적절하지 않은 것은? 

1) 배송 테이블에서 고객의 정보를 찾는 빈도가 높을 경우 고객과 배송 테이블의 관계를 추가하는 관계의 반정규화를 한다.

2) 주문목록 테이블에서 고객이 정보를 찾는 빈도가 높을 경우 고객과 주문 테이블의 비식별자 관계를 식별자 관계로 한다.

3) 주문 테이블에서 항상 고객명을 같이 조회하는 경우 고객 테이블의 고객명을 주문 테이블에 넣어 컬럼의 반정규화를 한다.

4) 주문과 주문목록, 배송 테이블의 모든 컬럼을 고객 (최상위 테이블) 테이블에 모두 넣는 반정규화를 한다.

 

정답

더보기

정답 : 4번

1번 : 중복관계 추가

2번 : PK에 의한 컬럼 추가 

3번 : 중복컬럼 추가

4번 : 이력 테이블 추가

이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재시켜 성능 향상

마스터테이블을 이력테이블에 중복시켜야하는데 그 반대를 말하고 있다.

1 : M 관계인데 M의 자료를 1에다 넣을 수 없다.


21. 아래의 SQL을 ORACLE 과 SQL SERVER에서 수행할 때 SQL에 대해 틀린 설명은? (AUTO COMMIT은 FALSE로 설정) 

<SCRIPT>
UPDATE SQLD_34_30 SET N1=3 WHERE N2=1; 
CREATE TABLE SQLD_34_30_TEMP (N1 NUMBER); 
ROLLBACK;
 
1) SQL SERVER 의 경우 ROLLBACK 이 된 후 UPDATE 와 CREATE 구문 모두 취소된다

2) SQL SERVER 의 경우 ROLLBACK 이 된 후 SQLD_34_21_TEMP 는 만들어지지 않는다.

3) ORACLE 의 경우 ROLLBACK 이 된 후 UPDATE 와 CREATE 구문 모두 취소된다.

4) ORACLE 의 경우 UPDATE 는 취소되지 않는다.

 

정답

더보기

정답 : 3번

- SQL Server : 기본값이 AUTO COMMIT이지만 AUTO COMMIT을 False로 두면 DDL, DML 모두 ROLLBACK 가능

- Oracle : AUTO COMMIT이 없이 명시적으로 Commit을 해줘야 하나, DDL의 경우 명령문 수행과 동시에 COMMIT이 진행되어 ROLLBACK이 되지 않는다. 


22. 주어진 ERD에서 오류가 나지 않는 SQL문을 고르시오. 

1)
SELECT * FROM 계좌마스터
WHERE 회원번호 = (SELECT DISTINCT 회원번호 FROM 고객);

2)
SELECT * FROM 계좌마스터 
WHERE 회원번호 IN (SELECT DISTINCT 회원번호 FROM 고객);

3)
SELECT 회원번호, 종목코드 FROM 일자별주문내역
WHERE 주문일자 EXISTS (SELECT DISTINCT 주문일자 FROM 계좌마스터);

4)
SELECT 회원번호, 종목코드 FROM 일자별주문내역
WHERE 주문일자 ALL (SELECT DISTINCT 주문일자 FROM 계좌마스터);

 

정답

더보기

정답 : 2번

1번

서브쿼리 결과가 여러개의 행이 리턴 되므로 오류가 발생한다

"=" 는 단일행 연산자로 서브쿼리의 결과가 반드시 하나만 리턴 되어야 한다.

 

3번

EXISTS 앞에 뭔가 있어서 오류

수정 > WHERE EXISTS  

 

4번

ALL은 비교 연산자(=, >, <, <>, !=)가 필요하다.

앞에 뭔가 없어서 오류

수정 > WHERE 주문일자 = ALL


23. 아래의 SQL문을 수행한 결과로 잘못된 것은? 

CREATE TABLE 주문 (
    C1 NUMBER(10),
    C2 DATE,
    C3 VARCHAR(10),
    C4 NUMBER DEFAULT 100
);

INSERT INTO 주문 (C1,C2,C3) VALUES (1, SYSDATE, 'TEST1');
1) INSERT INTO 주문 VALUES(2, SYSDATE, 'TEST2'); 
2) DELETE 주문
3) DELETE FROM 주문;
4) UPDATE 주문 SET C1=1;

 

정답

더보기

정답 : 1번

데이터 값을 넣을 때 컬럼을 따로 지정하지 않으면 테이블의 모든 컬럼에 값을 넣어줘야 한다.

즉, INSERT INTO 주문 VALUES(2, SYSDATE, 'TEST2');   여기선  C4에 대한 값을 넣지 않아서 오류가 난다.


24. 다음 ERD로 작성한 SQL문에서 오류가 발생하는 것은?

 

1)
SELECT (SELECT SUM(주문금액) FROM 일자별주문내역)
FROM 고객마스터 GROUP BY 회원번호;

2)
SELECT SUM(일자별주문내역.주문금액)
FROM 일자별주문내역 
FULL OUTER JOIN 고객마스터 
ON 고객마스터.회원번호 = 일자별주문내역.회원번호 
GROUP BY 회원번호;

3)
SELECT SUM(일자별주문내역.주문금액)
FROM 고객마스터, 일자별주문내역 
WHERE 고객마스터.회원번호 = 일자별주문내역.회원번호
GROUP BY 회원번호;

4)
SELECT SUM(주문금액) 
FROM 일자별주문내역
WHERE EXISTS (SELECT*FROM 고객마스터
              UNION ALL SELECT*FROM 일자별주문내역)
GROUP BY 회원번호;

 

정답

더보기

정답 : 4번

고객마스터와 일자별주문내역에 나오는 칼럼 수와 데이터 타입이 일치하지 않으므로 에러가 난다.

UNION 및 UNION ALL을 사용할 때 나오는 SQL문은 칼럼 수와 데이터 타입이 완전 일치해야 한다.

 

출처 : https://yunamom.tistory.com/

728x90
반응형
728x90
반응형

1. 순수 관계 연산자와 SQL 문장 비교

- SELECT 연산은 WHERE 절로 구현

- PROJECT 연산은 SELECT 절로 구현

- (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현

- DIVIDE 연산은 현재 사용되지 않음

 

2. ANSI/ISO SQL에서 표시하는 FROM 절의 JOIN 형태

- INNER JOIN : INNER JOIN은 OUTER(외부) JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환한다.

- NATURAL JOIN

- USING 조건절

- ON 조건절

- CROSS JOIN : 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 결과는 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.

- OUTER JOIN(LEFT, RIGHT, FULL)

     > LEFT OUTER JOIN : 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다. 즉, Table A와 B가 있을 때 (Table 'A'가 기준이 됨), A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.

     > FULL OUTER JOIN : JOIN 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성한다. 즉, TABLE A와 B가 있을 때 (TABLE 'A', 'B' 모두 기준이 됨), RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.

 

3. OUTER JOIN  문장 예시

SELECT X.KEY1, Y.KEY2
FROM TAB1 X
            LEFT OUTER JOIN TAB2 Y
ON (X.KEY1=Y.KEY2)

 

4. 집합 연산자

SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명1
[WHERE 조건식]
[[GROUP BY 칼럼(Column)이나 표현식
 [HAVING 그룹조건식]]

집합 연산자

SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명2
[WHERE 조건식]
[[GROUP BY 칼럼(Column)이나 표현식
 [HAVING 그룹조건식]]
[ORDER BY 1, 2 [ASC 또는 DESC] ];
※ ORDER BY는 집합 연산을 적용한 최종 결과에 대한 정렬 처리이므로 가장 마지막 줄에 한 번만 기술한다.

 

5. 집합 연산자의 종류

집합 연산자 연산자의 의미
UNION 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다.
UNION ALL 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일하다. (결과의 정렬 순서에는 차이가 있을 수 있음)
INTERSECT 여러 개의 SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.
EXCEPT 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함)

 

6. 일반 집합 연산자를 SQL과 비교

- UNION 연산은 UNION 기능으로 구현

- INTERSECTION 연산은 INTERSECTION 기능으로 구현

- DIFFERENCE  연산은 EXCEPT(Oracle은 MINUS) 기능으로 구현

- PRODUCT 연산은 CROSS JOIN 기능으로 구현

 

7. 계층 구조

- PRIOP : CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정한다. PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개하는 순방향 전개를 한다. 그리고 PRIOR 부모 = 자식 형태를 사용하면 반대로 자식 데이터에서 부모 데이터(자식 부모) 방향으로 전개하는 역방향 전개를 한다.

- START WITH : 계층 구조 전개의 시작 위치를 지정하는 구문이다. 즉, 루트 데이터를 지정한다.

- ORDER SIBLINGS BY : 형제 노드(동일 LEVEL) 사이에서 정렬을 수행한다.

 

8. 계층형 질의

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용한다. 계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다. 예를 들어, 사원 테이블에서는 사원들 사이에 상위 사원(관리자)과 하위 사원 관계가 존재하고 조직 테이블에서는 조직들 사이에 상위 조직과 하위 조직 관계가 존재한다.

 

9. SELF JOIN

- 셀프 조인(Self join)이란 동일 테이블 사이의 조인을 말한다. 따라서 FROM 절에 동일 테이블이 두 번 이상 나타난다. 동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭(Alias)을 사용해야 한다.

- 셀프 조인(Self join) 문장

SELECT ALIAS명1.칼럼명,
               ALIAS명2.칼럼명, ...
FROM 테이블 ALIAS명1,
            테이블 ALIAS명2
WHERE ALIAS명1.칼럼명1 = ALIAS명2.칼럼명2;

 

10. 반환되는 데이터의 형태에 따른 서브쿼리 분류

서브쿼리 종류 설명
Single Row 서브쿼리
(단일 행 서브쿼리)
서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미한다. 단일 행 서브쿼리는 단일 행 비교 연산자와 함꼐 사용된다. 단일 행 비교 연산자에는 =, <, <=, >, >=. <> 이 있다.
Multi Row 서브쿼리
(다중 행 서브쿼리)
서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미한다. 다중 행 서브쿼리는 다중 행 비교 연산자와 함께 사용된다. 다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.
Multi Column 서브쿼리
(다중 칼럼 서브쿼리)
서브쿼리의 실행 결과로 여러 칼럼을 반환한다. 메인쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일 해야 한다.

 

11. 서브쿼리 사용 시 주의사항

① 서브쿼리를 괄호로 감싸서 사용한다.

② 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관없다.

③ 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY절은 SELECT절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은 메인쿼리의 마지막 문장에 위치해야 한다.

 

12. 인라인 뷰(Inline View)

FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다. 서브쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있다. 인라인 뷰는 SQL 문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않는다. 

 

13. 뷰 사용의 장점

- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.

- 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수있다. 또한 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.

- 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다.

 

14. CUBE

- Grouping Columns이 가질 수 있는 모든 경우에 대하여 Subtotal을 생성해야 하는 경우에는 CUBE를 사용하는 것이 바람직하나, ROLLUP에 비해 시스템에 많은 부담을 주므로 사용에 주의해야 한다

- CUBE는 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. CUBE도 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시가 되어야 한다.

 

15. GROUPING SETS

- GROUPING SETS은 다양한 소계 집합을 만들 수 있는데, GROUPING SETS에 표시된 인수들에 대한 개별 집계를 구할 수 있으며, 이때 표시된 인수들 간에는 계층 구조인 ROLLUP과는 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 같다. 그리고 GROUPING SETS 함수도 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시가 되어야 한다.

 

16. 순위 함수

- RANK 함수는 ORDER BY를 포함한 QUERY문에서 특정 항목(칼럼)에 대한 순위를 구하는 함수이며 동일한 순위를 부여하게 된다.

- DENSE_RANK 함수는 RANK 함수와 흡사하나, 동일한 순위를 하나의 건수로 취급하는 것이 다른 점이다.

- ROW_NUMBER 함수는 RANK나 DENSE_RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여하는데 반해, 동일한 값이라도 고유한 순위를 부여한다.

 

17. LAG, LEAD

- LAG 함수를 이용해 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있다. 이후 몇 번째 행의 값을 가져오는 것은 LEAD 함수이며, SQL Server에서는 지원하지 않는 함수이다.

 

18. PL/SQL의 특징

- PL/SQL은 Block 구조로 되어있어 각 기능별로 모듈화가 가능하다.

- 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환한다.

- IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.

- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.

- PL/SQL은 Oracle에 내장되어 있으므로 Oracle과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.

- PL/SQL은 응용 프로그램의 성능을 향상시킨다.

- PL/SQL은 여러 SQL문장을 Block으로 묶고 한 번에 Block 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.

 

19. 저장 모듈(Stored Module)

- SQL 문장을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램이며, 독립적으로 실행되거나 다른 프로그램으로 부터 실행될 수 있는 완전한 실행 프로그램이다. Oracle의 저장 모듈에는 Procedure, User Defined Function, Trigger가 있다.

 

20. Procedure와 Trigger의 차이점

Procedure Trigger
CREATE Proceduer 문법사용 CREATE Trigger 문법사용
EXECUTE 명령어로 실행 생성 후 자동으로 실행
COMMIT, ROLLBACK 실행 가능 COMMIT, ROLLBACK 실행 안됨
728x90
반응형

'Certificate > SQLD' 카테고리의 다른 글

[SQLD] 기출문제 오답정리 2  (3) 2023.11.15
[SQLD] 기출문제 오답정리  (2) 2023.11.12
[SQLD] 2과목 1장 핵심정리 모아놓기  (0) 2023.11.05
[SQLD] 단답형 정리  (0) 2023.11.05
[SQLD] 1과목 핵심정리 모아놓기  (0) 2023.11.05
728x90
반응형

1. SQL 문장들의 종류

명령어의 종류 명령어 설명
데이터 조작어
(DML : Data Manipulation Language)
SELECT 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다.
INSERT
UPDATE
DELETE
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다.
데이터 정의어
(DDL : Data Definition Language)
CREATE
ALTER
DROP
RENAME
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제 하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.
데이터 제어어
(DCL : Data Control Language)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다.

 

2. 테이블 칼럼에 대한 정의 변경

- [ORACLE]

ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 · · ·);

 

- [SQL Server]

ALTER TABLE 테이블명 ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 · · ·);

 

3. NULL

- NULL(ASCII 코드 00번)은 공백(BLANK, ASCII 코드 32번)이나 숫자 0(ZERO, ASCII 48)과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. 'NULL'은 '아직 정의되지 않는 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'를 의미한다.

 

4. 제약조건의 종류

- PRIMARY KEY(기본키)

- UNIQUE KEY(고유키)

- NOT NULL

- CHECK

- FOREIGN KEY(외래키)

 

5. 테이블 생성의 주의사항

- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.

- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.

- 테이블 이름을 지정하고 각 칼럼들은 괄호 "()"로 묶어 지정한다.

- 각 컬럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";''으로 끝난다.

- 칼럼에 대해서는 다른 테이블가지 고려하여 데이터 베이스 내에서는 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점)

- 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.

- 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

- 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.

- A-Z, a-z, 0-9, _, $, # 문자만 허용된다.

 

6. 테이블의 불필요한 칼럼 삭제

ALTER TABLE 테이블 명
DROP COLUMN 삭제할 컬럼명;

 

7. 테이블에 데이터를 입력하는 두 가지 유형

INSERT INTO 테이블명 (COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);
INSERT INTO 테이블명 VALUES (전체 COLUMN에 넣을 VALUE_LIST);

 

8. 입력된 데이터의 수정

UPDATE 테이블명 SET 수정되어야 하는 컬럼명 = 수정되기를 원하는 새로운 값;

 

9. 테이블에 입력된 데이터 조회

SELECT [ALL/DISTINCT] 보고 싶은 칼럼명, 보고 싶은 칼럼명, ...
FROM 해당 칼럼들이 있는 테이블명;

- ALL : Default 옵션이므로 별도로 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다.

- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.

 

10. TRUNCATE

- TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제 한다. 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.

 

11. 트랜잭션의 특성

- 원자성(atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (all or nothing)

- 일관성(consistency) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.

- 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.

- 지속성(durability) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

12. COMMIT, ROLLBACK

- 테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK)기능을 사용한다.  롤백(ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.

 

13. BEGIN TRANSACTION

- BEGIN TRANSACTION(BEGIN TRAN 구문도 기능)으로 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION은 생략 가능) 또는 ROLLBACK TRANSACTION(TRANSACTION은 생략 가능)으로 트랜잭션을 종료한다. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행된다.

 

14. SAVEPOINT

-저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK)할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.

[ORACLE]
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1;
[SQL Server]
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;

 

15. WHERE

- WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.

     > 칼럼(Column)명 (보통 조건식의 좌측에 위치)

     > 비교 연산자

     > 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)

     > 비교 칼럼명 (JOIN 사용시)

 

16. 연산자의 우선순위

① 괄호로 묶은 연산

② 부정 연산자(NOT)

③ 비교 연산자(=, >, >=, <, <=)와 SQL 비교 연산자 (BETWEEN a AND b, IN (list), LIKE, IS NULL)

④ 논리 연산자 중 AND, OR의 순으로 처리

 

17. NULL의 연산

- NULL 값과의 연산(+, -, *, / 등)은 NULL값을 리턴

- NULL 값과의 비교연산(=, >, >=, <, <=)은 거짓(FALSE)을 리턴

- 특정 값보다 크다, 적다라고 표현할 수 없음

 

18. 연산자의 종류

구분 연산자 연산자의 의미
비교 연산자 = 같다.
> 보다 크다.
>= 보다 크거나 같다.
< 보다 작다.
<= 보다 작거나 같다.
SQL 연산자 BETWEEN a AND b a와 b의 값 사이에 있으면 된다.(a와 b 값이 포함됨)
IN (list) 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다
LIKE '비교문자열' 비교문자열과 형태가 일치하면 된다.(%, _ 사용)
IS NULL NULL 값인 경우
논리 연산자 AND 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉, 앞의 조건과 뒤의 조건을 동시에 만족해야 한다.
OR 앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다. 즉, 앞뒤의 조건 중 하나만 참(TRUE)이면 된다.
NOT 뒤에 오는 조건에 반대되는 결과를 되돌려준다.
부정 비교 연산자 != 같지 않다.
^=  같지 않다.
<> 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
NOT 칼럼명 =  ~와 같지 않다.
NOT 칼럼명 >   !보다 크지 않다.
부정 SQL 연산자 NOT BETWEEN a AND b a와 b의 값 사이에 있지 않다.
NOT IN (list) list 값과 일치하지 않는다.
IS NOT NULL NULL 값을 갖지 않는다.

 

19. 함수

- 함수는 벤더에서 제공하는 함수인 내장 함수(Built-in Function)와 사용자가 정의할 수 있는 함수(User Defined Function)로 나눌 수 있다. 내장 함수는 다시 단일행 함수(Single-Row Function)와 다중행 함수(Multi-Row Function)로 나눌 수 있으며, 다중행 함수는 집계 함수(Aggregate Function), 그룹 함수(Group Function), 윈도우 함수(Window Function)로 구분된다.

 

20. 단일행 문자형 함수의 종류

문자형 함수 함수 설명
LOWER (문자열) 문자열의 알파벳 문자를 소문자로 바꾸어 준다.
UPPER (문자열) 문자열의 알파벳 문자를 대문자로 바꾸어 준다.
ASCII (문자) 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다.
CHR/CHAR (ASCII번호) ASCII 코드 번호를 문자나 숫자로 바꾸어 준다.
CONCAT (문자열1, 문자열2) Oracle, My SQL 에서 유효한 함수이며 문자열1가 문자열2를 연결한다. 합성 연산자 '||'(Oracle)나 '+'(SQL Server)와 동일하다.
SUBSTR/SUBSTRING (문자열, m[, n ]) 문자열 중 m위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다. n이 생략되면 마지막 문자까지이다.
LENGTH/LEN (문자열) 문자열의 개수를 숫자값으로 돌려준다.
LTRIM (문자열 [, 지정문자]) 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다.(지정 문자가 생략되면 공백 값이 디폴트)
SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
RTRIM (문자열 [, 지정문자]) 문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다.(지정 문자가 생략되면 공백 값이 디폴트)
SQL Server에서는 RTRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
TRIM ([leading | trailing | both] 지정문자 FROM 문자열) 문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다. (leading | trailing | both 가 생략되면 both가 디폴트)
SQL Server에서는 TRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.
※ 주: Oracle 함수 / SQL Server함수 표시, '/' 없는 것은 공통 함수

 

21. 단일행 함수의 종류

종류 내용 함수의 예
문자형 함수 문자를 입력하면 문자나 숫자값을 반환한다. LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH / LEN, LTRIM, RTRIM, TRIM, ASCII
숫자형 함수 숫자를 입력하면 숫자 값을 반환한다. ABS, MOD, ROUND, TRUNC, SIGN, CHR / CHAR, CEIL / CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN
날짜형 함수 DATE 타입의 값을 연산한다. SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d, 'YYYY'|'MM'|'DD')) / YEAR|MONTH|DAY
변환형 함수 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. TO_NUMBER, TO_CHAR, TO_DATE / CAST, CONVERT
NULL관련 함수 NULL을 처리하기 위한 함수 NVL / ISNULL, NULLIF, COALESCE

 

22. DUAL 테이블의 특성

- 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.

- SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.

- DUMMY 라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.

 

23. NULL의 특성

- NULL 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.

- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL값을 포함할 수 있다.

- NULL 값을 포함하는 연산의 경우 결과 값도 NULL값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.

- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로 , 문자 유형 데이터인 경우는 블랭크보다는 'x'같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.

 

24. 단일행 NULL 관련 함수의 종류

일반형 함수 함수 설명
NVL(표현식1, 표현식2) /
ISNULL(표현식1, 표현식2)
표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다.
단, 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다.
NULL관련 가장 많이 사용되는 함수이므로 상당히 중요하다.
NULLIF(표현식1, 표현식2) 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
COALESCE(표현식1, 표현식2, ...) 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴한다.
※ 주: Oracle 함수 / SQL Server함수 표시, '/' 없는 것은 공통 함수

 

25. NULL 표현 연산의 결과

- NULL + 2, 2 + NULL, NULL - 2, 2 - NULL, NULL * 2, 2 * NULL, NULL / 2, 2 / NULL 의 결과는 모두 NULL이다.

 

26. 집계 함수의 종류

집계 함수 사용 목적
COUNT (*) NULL값을 포함한 행의 수를 출력한다.
COUNT (표현식) 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.
SUM ([DISTINCT |  ALL] 표현식) 표현식의 NULL 값을 제외한 합계를 출력한다.
AVG ([DISTINCT |  ALL] 표현식) 표현식의 NULL 값을 제외한 평균를 출력한다.
MAX ([DISTINCT |  ALL] 표현식) 표현식의 최대값을 출력한다.
(문자, 날짜 데이터 타입도 사용가능)
MIN ([DISTINCT |  ALL] 표현식) 표현식의 최소값을 출력한다.
(문자, 날짜 데이터 타입도 사용가능)
STDDEV ([DISTINCT |  ALL] 표현식) 표현식의 표준 편차를 출력한다.
VARIAN ([DISTINCT |  ALL] 표현식) 표현식의 분산을 출력한다.
기타 통계 함수 벤더별로 다양한 통계식을 제공한다.

 

27. GROUP BY 문장

SELECT [DISTINCT] 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식] ;

 

28. GROUP BY 절과 HAVING 절의 특성

- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.

- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.

- GROUP BY 절에서는 SELECT 절과 달리 ALIAS 명을 사용할 수 없다

- 집계함수는 WHERE 절에는 올 수 없다.(집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다)

- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.

- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.

- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.

- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.

 

29. ORDER BY 문장

SELECT 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식]
[ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC]] ;

- ASC (Ascending) : 조회한 데이터를 오름차순으로 정렬한다. (기본 값이므로 생략 가능)

- DESC (Descending) : 조회한 데이터를 내림차순으로 정렬한다.

 

30. ORDER BY 절 특징

- 기본적인 정렬 순서는 오름차순(ASC)이다.

- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값 부터 출력된다.

- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력된다. 예를 들어 '01-JAN-2012'는 '01-SEP-2012'보다 먼저 출력된다.

- Oracle에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.

- 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.

 

31. SELECT 문장 실행 순서

① 발췌 대상 테이블을 참조한다. (FROM)

② 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)

③ 행들을 소그룹화 한다. (GROUP BY)

④ 그룹핑된 값의 조건에 맞는 것만을 출력한다. (HAVING)

⑤ 데이터 값을 출력/계산한다. (SELECT)

⑥ 데이터를 정렬한다. (ORDER BY)

 

32. TOP () WITH TIES

- 사원 테이블에서 급여가 높은 2명을 내림차순으로 출력하는데 같은 급여를 받는 사원이 있으면 같이 출력한다.

SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;

 

33. EQUI JOIN 문장

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;
→ WHERE 절에 JOIN 조건을 넣는다.

 

34. ANSI/ISO SQL 표준 EQUI JOIN 문장

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.칼럼명1 = 테이블2.칼럼명2;
→ ON 절에 JOIN 조건을 넣는다.

 

35. JOIN

- 두개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는 것을 JOIN이라고 하며, 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.

728x90
반응형

'Certificate > SQLD' 카테고리의 다른 글

[SQLD] 기출문제 오답정리 2  (3) 2023.11.15
[SQLD] 기출문제 오답정리  (2) 2023.11.12
[SQLD] 2과목 2장 핵심정리 모아놓기  (1) 2023.11.12
[SQLD] 단답형 정리  (0) 2023.11.05
[SQLD] 1과목 핵심정리 모아놓기  (0) 2023.11.05
728x90
반응형

1. 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위를 무엇이라 하는가?

정답
속성(Attribute)
 

2. 아래 설명을 읽고 다음 에 들어갈 단어를 작성하시오.

첫번째, 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
두번째, 데이터베이스 용량산정을 수행한다.
세번째, 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
네번째, 용량과 트랜잭션의 유형에 따라 <         ㉠         >를 수행한다.
다섯번째, 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
정답
반정규화(역정규화)
 

3. 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에 대해서 을 채우시오.

하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 데이블을 몇 개로 쪼개도 성능이 저하되는 겅우가 있다. 이때 논리적으로는 하나이 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법을 <         ㉠         >이라고 한다.
정답
파티셔닝 기법(Partitioning)
 

4. 아래 내용에 해당하는 SQL 명령어의 종류를 작성하시오.

논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(Transaction)별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control Language)로 분류하기도 한다.
정답
TCL
 

5. 4개의 칼럼으로 이루어진 EMP 테이블에서 COMN 칼럼을 삭제하고자 할 때, 아래 SQL 문장의 ㉠, ㉡ 안에 들어갈 내용을 기술하시오.

<         ㉠         > TABLE EMP
<         ㉡         > COMN;
정답
㉠ : ALTER
㉡ : DROP COLUMN
 

6. STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL을 작성하시오.(ANSI 표준 기준)

정답
RENAME STADIUM TO STADIUM_JSC
 

7. 아래의 고객지역 테이블을 대상으로 질의 결과와 같이 거주지와 근무지를 출력하고자 한다. 아래 SQL의 ㉠ 안에 들어갈 내용을 작성하시오.


[SQL]

SELECT <         ㉠         > 거주지, 근무지
FROM 고객지역;
정답
DISTINCT
 

8. 아래 내용의 ㉠, ㉡, ㉢에 해당하는 단어를 순서대로 작성하시오.

<         ㉠         >은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.<         ㉠         >의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 <         ㉡         >과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 <                >이 있다.
정답
㉠ : 트랜잭션 또는 Transaction
㉡ : 커밋 또는 Commit
㉢ : 롤백 또는 Rollback
 

9. 아래의 상품 테이블의 데이터에 대하여 관리자가 아래와 같이 SQL문장을 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품ID '001'의 최종 상품명을 작성하시오.

[테이블 : 상품]

상품ID 상품명
001 TV

[SQL]

BEGIN TRANSACTION;
SAVE TRANSACTION SP1;
UPDATE 상품 SET 상품명 = 'LCD-TV' WHERE 상품ID = '001';
SAVE TRANSACTION SP2;
UPDATE 상품 SET 상품명 = '평면-TV' WHERE 상품ID = '001';
ROLLBACK TRANSACTION SP2;
COMMIT; 
정답
LCD-TV
 

10. 아래의 에 들어갈 내용을 적으시오.

SQL을 사용하여 데이터베이스에서 데이터를 조회할 때 원하는 데이터만을 검색하기 위해서 SELECT, FROM 절과 함께 <         ㉠         >을(를) 이용하여 조회되는 데이터의 조건을 설정하여 데이터를 제한할 수 있다.
정답
WHERE 또는 WHERE 절
 

11. 아래는 SEARCHED_CASE_EXPRESSION SQL문장이다. 이때 사용된 SEARCHED_CASE_EXPRESSION은 SIMPLE_CASE_EXPRESSION을 이용해 똑같은 기능을 표현할 수 있다. 아래 SQL 문장의 안에 들어갈 표현을 작성시오. (스칼라 서브쿼리는 제외함)

[SEARCHED_CASE_EXPRESSION 문장 사례]
SELECT LOC,
       CASE WHEN LOC = 'NEW YORK' THEN 'EAST'
          ELSE 'ETC'
       END as AREA
FROM DEPT;

[SIMPLE_CASE_EXPRESSION 문장 사례]
SELECT LOC,
       CASE <         ㉠         >
          ELSE 'ETC'
       END as AREA
FROM DEPT;
정답
LOC WHEN 'NEW YORK' THEN 'EAST'
 

12. 사원 테이블에서 MGR의 값이 7698과 같으면 NULL을 표시하고, 같지 않으면 MGR을 표시 하려고 한다. 아래 SQL 문장의 안에 들어갈 함수명을 작성하시오.

SELECT ENAME, EMPNO, MGR, <         ㉠         > (MGR,7698) as NM
FROM EMP;
정답
NULLIF
 

13. 아래 각 함수에 대한 설명 중 ㉠, ㉡, ㉢에 들어갈 함수를 차례대로 작성하시오.

<         ㉠         > (표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다.
<         ㉡         > (표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
<         ㉢         > (표현식1, 표현식2) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.
정답
㉠ : NVL / ISNULL
㉡ : NULLIF
㉢ : COALESCE
 

14. 아래의 사례1은 Cartesian Product를 만들기 위한 SQL 문장이며 사례1과 같은 결과를 얻기 위해 사례2 SQL 문장의 ㉠ 안에 들어갈 내용을 작성하시오.

[사례1]
SELECT ENAME, DNAME
FROM EMP, DEPT
ORDER BY ENAME;

[사례2] SELECT ENAME, DNAME
FROM EMP  <         ㉠         > DEPT
ORDER BY NAME;
정답
㉠ : CROSS JOIN
 

15. 다음과 같은 2개의 릴레이션이 있다고 가정하자. student의 기본키는 st_num이고, department의 기본키는 dept_num이다. 또한 student의 d_num은 department의 dept_num을 참조하는 외래키이다. 아래 SQL문의 실행 결과 건수는?

SELECT count(st_num)
FROM student s
WHERE not exists
            (SELECT *
               FROM department d
               WHERE s.d_num = d.dept_num
                   and dept-name = '전자계산학과');

정답
5
 

16. 아래와 같은 데이터 상황에서 아래의 SQL을 수행할 경우 정렬 순서상 2번째 표시될 값을 적으시오.


SELECT C3
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC


정답
C
 

17. 아래 결과를 얻기 위한 SQL문에서 에 들어갈 함수를 작성하시오.

구매고객 구매월 총 구매건 총 구매액
AAA 201001 1 1000
AAA 201002 2 3000
AAA 201003 1 1000
AAA   4 5000
BBB 201001 3 2000
BBB 201002 5 3000
BBB 201003 1 2000
BBB   9 7000
CCC 201101 1 2000
CCC 201102 1 5000
CCC 201103 1 1000
CCC   3 8000
    16 20000

[SQL 문]
SELECT 구매고객, 구매월, COUNT(*) "총 구매건", SUM "총 구매액" FROM 구매이력
GROUP BY  <         ㉠         >  (구매고객, 구매월)
 정답
ROLLUP
 

18. 아래 설명 중 ㉠, ㉡에 해당하는 내용을 작성하시오.

DBMS에 생성된 USER와 다양한 권한들 사이에서 중개 역할을 할 수 있도록 DBMS에서는 ROLE을 제공한다. 이러한 ROLE을 DBMS에게 부여하기 위해서는 <         ㉠         > 명령을 사용하며ROLE을 회수하기 위해서는 <         ㉡         > 명령을 사용한다.
정답

㉠ : GRANT

㉡ : REVOKE

 

18. 아래의 ㉠에 들어갈 내용을 쓰시오.

DBMS 사용자를 생성하면 기본적으로 많은 권한을 부여해야 한다. 많은 DBMS에서는 DBMS 관리자가 사용자별로 권한을 관리해야 하는 부담과 복잡함을 줄이기 위하여 다양한 권한을 그룹으로 묶어 관리할 수 있도록 사용자와 권한 사이에서 중개 역할을 수행하는<         ㉠         >을 제공한다.
정답

ROLE

728x90
반응형
728x90
반응형

1. 발생시점에 따른 엔터티 분류

- 기본/키엔터티 (Fundamental Entity, Key Entity)

- 중심엔터티 (Main Entity)

- 행위엔터티(Active Entity)

 

2. 데이터모델링이란

- 정보시스템을 구축하기 위한 데이터 관점의 업무 분석 기법

- 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정

- 데이터베이스를 구축하기 위한 분석/설계의 과정

 

3. 데이터 모델링의 유의점

- 중복(Duplication)

- 비유연성(Inflexibility)

- 비일관성(Inconsistency)

 

4. 데이터 모델링 개념

- 개념적 데이터 모델링 : 추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링 진행. 전사적 데이터 모델링, EA수립 시 많이 사용.

- 논리적 데이터 모델링 : 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현, 재사용성이 높음.

- 물리적 데이터 모델링 : 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

 

5. 데이터베이스 스키마 구조 3단계

- 외부스키마(External Schema)

- 개념스키마(Conceptual Schema)

- 내부스키마(Internal Schema)

 

6. ERD 작성 순서

① 엔터티를 그린다

② 엔터티를 적절하게 배치한다.

③ 엔터티 간 관계를 설정한다.

④ 관계명을 기술한다.

⑤ 관계의 참여도를 기술한다.

⑥ 관계의 필수여부를 기술한다.

 

7. 엔터티의 특징

- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다. (EX. 환자, 토익의 응시횟수, ...)

- 유일한 식별자에 의해 식별이 가능해야 한다.

- 영속적으로 존재하는 인스턴스의 집합이어야 한다. ('한 개'가 아니라 '두 개 이상')

- 엔터티는 업무 프로세스에 의해 이용되어야 한다.

- 엔터티는 반드시 속성이 있어야 한다,

- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.

 

8. 엔터티, 인스턴스, 속성, 속성값의 관계

- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다.

- 한 개의 엔터티는 두 개 이상의 속성을 갖는다.

- 한 개의 속성은 한 개의 속성 값을 갖는다.

 

9. 속성의 특성에 따른 분류

- 기본속성

- 설계속성

- 파생속성

 

10. 도메인

- 각 속성은 가질 수 있는 값의 범위가 있는데 이를 그 속성의 도메인(Domain)이라 하며, 엔터티 내에서 속성에 대한 데이터타입과 크기 그리고 제약사항을 지정하는 것이다.

 

11. 속성의 명칭 부여

- 해당업무에서 사용하는 이름을 부여한다.

- 서술식 속성명은 사용하지 않는다.

- 약어사용은 가급적 제한한다.

- 전체 데이터모델에서 유일성을 확보하는 것이 좋다.

 

12. 관계

- ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않지만 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현한다.

 

13. 관계의 표기법

- 관계명(Membership) : 관계의 이름

- 관계차수(Cardinality) : 1:1, 1:M, M:N

- 관계선택사양(Optionality) : 필수관계, 선택관계

 

14. 관계 읽기

- 기준(Source) 엔터티를 한 개(One) 또는 각(Each)으로 읽는다.

- 대상(Target) 엔터티의 관계참여도 즉 개수(하나, 하나 이상)를 읽는다.

- 관계선택사양과 관계명을 읽는다.

 

15. 식별자의 종류

- 엔터티 내에서 대표성을 가지는가에 따라 주 식별자(Primary Identifier)와 보조 식별자(Alternate Identifier)로 구분

- 엔터티 내에서 스스로 생성되었는지 여부에 따라 내부식별자와 외부식별자(Foreign Identifier)로 구분

- 단일 속성으로 식별이 되는가에 따라 단일식별자(Single Identifier)와 복합식별자(Composit Identifier)로 구분

- 원래 업무적으로 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만든 식별자를 구분하기 위해 본질식별자와 인조식별자로 구분

 

16. 주식별자의 특징

- 유일성 : 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분함

- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함

- 불변성 : 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함

- 존재성 : 주식별자가 지정되면 반드시 데이터 값이 존재 (Null 안됨)

 

17. 식별자와 비식별자관계 비교

항목 식별자관계 비식별자관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자 영향  자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
표기법 실선 표현  점선 표현
연결 고려사항 - 반드시 부모엔터티 종속
- 자식 주식별자구성에 부모 주식별자 포함 필요
- 상속받은 주식별자속성을 타 엔터티에 이전 필요
- 약한 종속관계
- 자식 주식별자구성을 독립적으로 구성
- 자식 주식별자구성에 부모 주식별자 부분 필요
-상속받은 주식별자속성을 타 엔터티에 차단 필요
- 부모쪽의 관계참여가 선택관계

 

18. 식별자의 분류 체계

분류 식별자 설명
대표성 여부 주식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자
보조식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함
스스로 생성여부 내부식별자 엔터티 내부에서 스스로 만들어지는 식별자
외부식별자 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
속성의 수 단일식별자 하나의 속성으로 구성된 식별자
복합식별자 둘 이상의 속성으로 구성된 식별자
대체 여부 본질식별자 업부에 의해 만들어지는 식별자
인조식별자 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

 

19. 성능 데이터모델이란?

- 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.

 

20. 1차 정규화

- 중복속성에 대한 분리가 1차 정규화의 대상이 되며, 로우단위의 중복도 1차 정규화의 대상이 되지만 칼럼 단위로 중복이 되는 경우도 1차 정규화의 대상이다.

 

21. 반정규화

- 반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다. 반정규화는 데이터를 중복하여 성능을 향상하기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다. 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.

 

22. 테이블의 반정규화

기법분류 반정규화 기법
테이블 병합 1 : 1 관계 테이블 병합
1 : M 관계 테이블 병합
슈퍼/서브타입 테이블 병합
테이블 분할 수직분할
수평분할
테이블 추가 중복테이블 추가
통계테이블 추가
이력테이블 추가
부분테이블 추가

 

23. 칼럼의 반정규화

반정규화 기법
중복칼럼 추가
파생칼럼 추가
이력테이블 칼럼추가
PK에 의한 칼럼 추가 
응용시스템 오작동을 위한 칼럼 추가

 

24. 반정규화 절차

- 반정규화 대상조사

     > 범위처리빈도수 조사

     > 대량의 범위 처리 조사

     > 통계성 프로세스 조사

     > 테이블 조인 개수

- 다른 방벙유도 검토

     > 뷰(View) 테이블

     > 클러스터링 적용

     > 인덱스의 조정

     > 응용애플리케이션

- 반정규화 적용

     > 테이블의 반정규화

     > 속성의 반정규화

     > 관계의 반정규화

 

25. 반정규화의 대상에 대해 다른 방법으로 처리

- 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(View)를 사용하면 이를 해결할 수도 있다.

- 대량의 데이터 처리나 부분처리에 의해 성능이 저하되는 경우에 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.

- 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉 파티셔닝 기법(Partitioning)이 적용되어 성능저하를 방지할 수 있다. 

- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.

 

26. 슈퍼/서브 타입 데이터 모델의 변환기술 

- 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성

- 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입 + 서브타입 테이블로 구성

- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성

 

27. PK순서 결정

- PK순서를 결정하는 기준은 인덱스 정렬구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 PK순서를 지정해야 한다. 즉 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 나타낼 수 있다. 앞쪽에 위치한 속성 값이 가급적 '=' 아니면 최소한 범위 'BETWEEN', '< >'가 들어와야 인덱스를 이용할 수 있는 것이다.

 

28. 분산 데이터베이스 장점

- 지역 자치성, 점증적 시스템 용량 확장

- 신뢰성과 가용성

- 효용성과 융통성

- 빠른 응답 속도와 통신비용 절감

- 데이터의 가용성과 신뢰성 증가

- 시스템 규모의 적절한 조절

- 각 지역 사용자의 요구 수용 증대

 

29. 분산 데이터베이스 단점

- 소프트웨어 개발 비용

- 오류의 잠재성 증대

- 처리 비용의 증대

- 설계, 관리의 복잡성과 비용

- 불규칙한 응답 속도

- 통제의 어려움

- 데이터 무결성에 대한 위협

728x90
반응형

+ Recent posts