2022. 3. 3. 14:26ㆍ자격증/SQLD
과목 1 데이터 모델링의 이해
제1 장 데이터 모델링의 이해
제 1절 데이터 모델의 이해
제 2절 엔터티
제 3절 속성
제 4절 관계
제 5절 식별자
--------------------------------------------------------------------------------------------------------
1. 아래의 쿼리를 만족하는 결과를 가장 잘 설명한 것은?
SELECT A.*
FROM HR.EMPLOYEES A,
HR.EMPLOYEES B
WHERE 1=1
AND A.MANAGER_ID = B.EMPLOYEE_ID
AND B.SALARY >= ANY A.SALARY;
1) 어떤 부하 직원보다도 연봉이 높은 상사
2) 어떤 부하 직원보다도 연봉이 낮은 상사
3) 어떤 상사 보다도 연봉이 높은 부하 직원
4) 어떤 상사 보다도 연봉이 낮은 부하 직원
해답
* 비교연산자 ANY (서브쿼리)
- 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미.
비교연산자로 " > " 를 사용했다면 메인쿼리는 서브쿼리의 값들 중 어떤 값이라도
만족하면 되므로 서브쿼리의 결과의 최소값보다 큰 모든 건이 조건을 만족
- SOME 과 동일
1번 해답 : 1번
A.MANAGER_ID = B.EMPLOYEE_ID 이므로 A 테이블의 메니저 아이디가 B 테이블의 직원 아이디 이므로 A 가 직원,
B 가 상사라고 볼수 있음
SELECT A.EMPLOYEE_ID AS "부하직원", A.LAST_NAME, A.MANAGER_ID "상사",
A.SALARY AS "부하연봉",
B.SALARY AS "상사연봉"
FROM HR.EMPLOYEES A, -- EMPLOYEE SALARY
HR.EMPLOYEES B -- MANAGER SALARY
WHERE 1=1
AND A.MANAGER_ID = B.EMPLOYEE_ID
AND B.SALARY >= ANY A.SALARY;
이므로 상사의 연봉이 어떤 부하직원보다도 큰 결과를 뽑는 sql임
--------------------------------------------------------------------------------------------------------
2. 아래의 쿼리의 결과를 만족하는 결과로 가장 알맞은 것은?
DEPARTMENT_ID : NULL, 10,20,30,40,50,~90,100,110
SELECT DISTINCT DEPARTMENT_ID
FROM HR.EMPLOYEES A
WHERE A.DEPARTMENT_ID <= ALL (30,50);
1) 10,20
2) 10,20,30
3) 10,20,30,40
4) 10,20,30,40,50
2번 풀이
사전 지식
* 비교연산자 ALL (서브쿼리)
- 서브쿼리의 결과에 존재하는 모든값을 만족하는 조건을 의미.
- 비교연산자로 " > " 를 사용했다면 메인쿼리는 서브쿼리의 모든 값을
- 만족해야 하므로 서브쿼리의 결과의 최대값보다 큰 모든 건이 조건을 만족
2번 해답 : 2번
A.DEPARTMENT_ID <= ALL(30,50) 이므로 30 보다 작고, 50 보다 작아야 함
즉, 30보다 작거나 같은 값이 모두 해당됨
3. 아래와 같은 테이블에 데이터가 있다. 각 SQL 에 대한 결과값이 잘못된 것은?
TABLE SQLD_21_01 TABLE SQLD_21_02
N1 V1 N1 V1
--------- ---------- --------- ----------
1 A 1 A
2 2
3 B 3 B
4 C
1) SELECT * FROM SQLD_21_01
WHERE V1 IN (SELECT V1 FROM SQLD_21_02);
N1 V1
--------- ----------
1 A
3 B
2) SELECT * FROM SQLD_21_01
WHERE V1 NOT IN (SELECT V1 FROM SQLD_21_02);
N1 V1
--------- ----------
4 C
3) SELECT * FROM SQLD_21_01 A
WHERE EXISTS (SELECT 'X' FROM SQLD_21_02 B
WHERE A.V1 = B.V1);
N1 V1
--------- ----------
1 A
3 B
4) SELECT * FROM SQLD_21_01 A
WHERE NOT EXISTS (SELECT 'X' FROM SQLD_21_02 B
WHERE A.V1 = B.V1);
N1 V1
--------- ----------
2
4 C
3번 풀이
사전 지식
NOT IN 의 경우 조건절이 아래와 같이 변형되어 수행됨
LNNVL(V1 <> :B1 ) -----> NULL 인 경우 Unkown 으로 True Return. --> 조건절 만족, Not Exists 를 만족하지 않음
HASH AN 으로 풀릴 경우 A.V1 = B.V1 으로 ACCESS 됨
즉, NOT 조건이므로 NULL 연산이 Unknow 으로 처리되 True 로 반환되는 현상이 나타남
3번 해답 : 2번
SQLD_21_02 의 V1 에 NULL 이 존재하므로 NOT IN 경우 NULL 로 인해 모든 조건이 참이 되어
NOT INT 결과 0건이 RETURN 됨
--------------------------------------------------------------------------------------------------------
4. 데이터 모델링에 대한 아래 보기 설명 중 알맞은 것은? [21회 기출]
1) 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지는 않는다
2) 실제로 데이터베이스를 구축할 때 참고되는 모델은 개념적 데이터 모델링이다
3) 물리 모델링 -> 논리 모델링 -> 개념 모델링 단계로 갈수록 구체적이다
4) 데이터 모델링의 3가지 요소는 Process, Attributes, Relationship 이다
해답
논리 모델링의 외래키는 물리 모델에서 반드시 구현되지 않음. (선택 사항임)
실제 데이터베이스 구축 시 참고되는 모델은 물리적 데이터 모델링이다
개념 모델링에서 물리 모델링으로 가면서 더 구체적이며 개념 모델링이 가장 추상적이다
데이터 모델링의 3요소는 Thing, Attirbutes, Relationship 이다
--------------------------------------------------------------------------------------------------------
5. 데이터 모델링에 대한 단계 중 아래에서 설명하는 단계는 어떤 단계의 모델링인가? [21회 기출]
추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링 진행. 전사적 데이터 모델링,
EA 수립 시 많이 이용됨
1) 개념적 데이터 모델링
2) 논리적 데이터 모델링
3) 물리적 데이터 모델링
4) 추상적 데이터 모델링
해답
1번
--------------------------------------------------------------------------------------------------------
6. 엔터티 - 인스턴스 - 속성 - 속성값에 대한 관계 설명중 틀린 것을 고르시오
1) 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다
2) 한 개의 엔터티는 두 개 이상의 속성을 갖는다
3) 하나의 속성은 하나 이상의 속성값을 가진다
4) 하나의 엔터티의 인스터스는 다른 엔터티의 인스턴스간의 관계인 Paring 을 가진다
해답 3번
하나의 속성은 하나의 속성값을 가지며 하나 이상의 속성값을 가지는 경우 정규화가 필요함
--------------------------------------------------------------------------------------------------------
7. 학생관련 정보를 조회하는 SQL 을 작성할려고 한다. 조회하는 사람은 주로 학생 본인이
학번으로 조회를 주로 한다. 이런 SQL 일 때 성능을 개선하는 방법으로 가장 알맞은 것은?
1) 학교명을 선두컬럼으로 하는 INDEX 를 생성한다
2) 학번을 선두컬럼으로 하는 INDEX 를 생성한다
3) 학교명 + 학번순으로 구성된 INDEX 를 생성한다
4) 학교명 + 이름 + 학번으로 구성된 INDEX 를 생성한다
7번 풀이
7번 해답 : 2번
학생 본인이 학번으로 주로 조회를 하기 때문에 학번이 선두 컬럼으로 있는 인덱스가 가장 적절함
학교명이 앞으로 올 경우 반드시 학교명을 적어야 하는 부담이 있음
해당 문제는 SQLD 보다는 SQLP 에 가까운 튜닝 문제임
--------------------------------------------------------------------------------------------------------
8. 아래의 SQL 에서 FUNCTION 자리에 쓰인 함수에 의한 결과값이 다른 하나는?
SELECT function(3.46) FROM DUAL;
1) TRUNC
2) CEIL
3) FLOOR
4) ROUND
8번 풀이
사전 지식
* FLOOR : 숫자보다 작거나 같은 최대 정수를 리턴
* CEIL/CEILING : 숫자보다 크거나 같은 최소 정수를 리턴
* TRUNC : 숫자를 소수 m 자리에서 잘라서 리턴 (m default : 0)
* ROUND : 숫자를 소수 m 자리에서 반올림하여 리턴 (m default : 0)
--------------------------------------------------------------------------------------------------------
9. 아래의 ERD 에서 3차 정규형을 만족하게 할 때 엔터티의 개수는 몇개가 되는가?
ㄱ. 평가코드,평가내역은 학번에 종속적
ㄴ. 코스명,기간은 코스코드에 종속적
ㄷ. 평가코드 평가내역은 속성간 종속적 관계
-> 1차 정규형 : 모든 속성은 반드시 하나의 값. 속성값의 중복 제거
-> 2차 정규형 : 식별자에 종속되지 않는 속성의 중복 제거
-> 3차 정규형 : 2차 정규형 만족 + 식별자 외 일반 컬럼간의 종속 존재 제거
1) 1개
2) 2개
3) 3개
4) 4개
9번 풀이
사전 지식
* 1차 정규형
- 모든 속성은 반드시 하나의 값을 가져야 한다. 즉, 반복 형태가 있어서는 안된다.
- 각 속성의 모든 값은 동일한 형식이어야 한다.
- 각 속성들은 유일한 이름을 가져야 한다.
- 레코드들은 서로 간에 식별 가능해야 한다.
* 2차 정규형
- 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되어야 한다.
- 이것을 물리 데이터 모델의 테이블로 말하면 기본키가 아닌 모든 칼럼들이
기본키에 종속적이어야 2차 정규형을 만족할 수 있다는 것이다
* 3차 정규형
- 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재하면 안된다.
- 이것이 3차 정규형을 만족하는 것이다.
9번 해답 : 3번
왼쪽 2차 정규화, 3차정규화 참고
--------------------------------------------------------------------------------------------------------
10. 아래 쿼리중 결과값이 다른 하나는?
1) 2)
SELECT DNAME,JOB, SELECT DNAME,JOB,
COUNT(*) "Total Empl", COUNT(*) "Total Empl",
SUM(SAL) "Total Sal" SUM(SAL) "Total Sal"
FROM SCOTT.EMP A, FROM SCOTT.EMP A,
SCOTT.DEPT B SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO WHERE A.DEPTNO = B.DEPTNO
GROUP BY ROLLUP(DNAME,JOB) GROUP BY GROUPING SETS( (DNAME,JOB),DNAME,NULL)
ORDER BY DNAME,JOB; ORDER BY DNAME,JOB;
3) 4)
SELECT DNAME,JOB, SELECT DNAME,JOB,
COUNT(*) "Total Empl", COUNT(*) "Total Empl",
SUM(SAL) "Total Sal" SUM(SAL) "Total Sal"
FROM SCOTT.EMP A, FROM SCOTT.EMP A,
SCOTT.DEPT B SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO WHERE A.DEPTNO = B.DEPTNO
GROUP BY DNAME,JOB GROUP BY CUBE(DNAME,JOB)
UNION ALL ORDER BY DNAME,JOB;
SELECT DNAME,'' AS JOB,
COUNT(*) "Total Empl",
SUM(SAL) "Total Sal"
FROM SCOTT.EMP A,
SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY DNAME
UNION ALL
SELECT '' AS DNAME,'' AS JOB,
COUNT(*) "Total Empl",
SUM(SAL) "Total Sal"
FROM SCOTT.EMP A,
SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
ORDER BY 1,2;
10번 풀이
사전 지식
GROUP BY ROLLUP(DNAME,JOB) GROUP BY GROUPING SET(DNAME,JOB)
= GROUP BY DNAME,JOB = GROUP BY DNAME
UNION ALL UNION ALL
GROUP BY DNAME GROUP BY JOB
UNION ALL
모든 집합 그룹 결과
GROUP BY CUBE(DNAME,JOB)
= GROUP BY DNAME,JOB
UNION ALL
GROUP BY DNAME
UNION ALL
GROUP BY JOB
UNION ALL
모든 집합 그룹 결과
10번 해답 : 4번
GROUPING SETS(A,B,C) = GROUP BY A UNION ALL GROUP BY B UNION ALL GROUP BY C 이므로
4번만 다른 결과를 도출함
--------------------------------------------------------------------------------------------------------
11. 다음의 SQL 을 표준 ANSI SQL 로 알맞게 바꾼것은?
단, 조인 조건과 조회 조건은 분리한다.
SELECT *
FROM SCOTT.EMP A,
SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND B.DNAME = 'SALES'
1) 2)
SELECT * SELECT *
FROM SCOTT.EMP A LEFT OUTER JOIN SCOTT.DEPT B FROM SCOTT.EMP A RIGHT OUTER JOIN SCOTT.DEPT B
ON ( A.DEPTNO = B.DEPTNO ON ( A.DEPTNO = B.DEPTNO
AND B.DNAME ='SALES') AND B.DNAME ='SALES')
WHERE 1=1; WHERE 1=1;
3) 4)
SELECT * SELECT *
FROM SCOTT.EMP A INNER JOIN SCOTT.DEPT B FROM SCOTT.EMP A INNER JOIN SCOTT.DEPT B
ON ( A.DEPTNO = B.DEPTNO ON A.DEPTNO = B.DEPTNO
AND B.DNAME ='SALES') WHERE 1=1
WHERE 1=1; AND B.DNAME ='SALES';
11번 풀이
사전 지식
ANSI SQL 에서 조인 조건절 (ON 절) 에 사용된 조건절은 조인 전 조건으로 작용한다
ON 절 이후 WHERE 절에서 쓰인 조건절은 조인후 조건절로 사용된다
11번 해답 : 4번
조인 조건과 조회 조건이 분리되어야 하므로 조회 조건은 WHERE 절로 분리되어야 함
OUTER JOIN 이 아닌 INNER JOIN 이므로 INNER JOIN 에 조회 조건 분리가 된 4번이 맞음
--------------------------------------------------------------------------------------------------------
12. 아래 VIEW 에 대한 설명 중 가장 올바르지 않은 것은?
1) 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
2) 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다.
또한, 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.
3) 물리성 : 실제 데이터를 가지고 있어서 물리적인 관리가 가능하다
4) 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고
생성함으로써 사용자에게 정보를 감출 수 있다
12번 풀이
12번 해답 : 3번
View 는 논리적인 SELECT 를 포함하는 OBEJCT 로 실제
--------------------------------------------------------------------------------------------------------
13. 보기의 테이블 TAB_A, TAB_B 에 INSERT 를 한 결과로 알맞은 것은?
TAB_A A IDENTITY (1,1) TAB_B A CHECK (A < 5)
(Sql Server) B VARCHAR2(10) (Oracle) B VARCHAR2(10)
INSERT INTO TAB_A(A,B) VALUES(1,'A'); INSERT INTO TAB_B VALUES(1,'A');
INSERT INTO TAB_A(B) VALUES('B'); INSERT INTO TAB_B VALUES(2,'B');
INSERT INTO TAB_A(B) VALUES('D'); INSERT INTO TAB_B VALUES(6,'D');
INSERT INTO TAB_B VALUES(NULL,'X');
1) TAB_A TAB_B 2) TAB_A TAB_B
1,B 1,A 1,A 1,A
2,D 2,B 2,B 2,B
NULL,X 3,D 6,D
3) TAB_A TAB_B 4) TAB_A TAB_B
1,A 1,A 1,B 1,A
2,B 2,D 2,B
13번 풀이
* INSERT 구문은 IDENTITY 문제 또는 CHECK 문제가 주로 나옴
사전 지식
* SQL SERVER : IDENTITY [ ( seed , increment ) ]
- SEED : 첫번째 행이 입력될 때의 시작값
- 증가되는 값
- 해당 컬럼에 값을 넣을 경우 Error 발생 (Error 발생을 막기 위해서는
IDENTITY_INSERT 를 OFF 로 하면 되나 이런 경우 IDENTITY 를 쓴 의미가 없어짐)
13번 해답 : 1번
SQL SERVER 의 IDENTITY 로 지정된 컬럼에는 값을 넣으면 에러가 남
ORACLE 의 CHECK 조건을 만족하지 못할 경우 에러가 나나 NULL 은 무시됨
--------------------------------------------------------------------------------------------------------
14. 조인에 대한 설명 중 Hash Join 에 대한 특성으로 부적절한 것 2개를 고르시오
1) 각 테이블에 INDEX 가 반드시 필요한 것은 아니다
2) 일반적으로 작은 테이블을 MEMORY 에 올리는 선행 테이블로 사용한다
3) Non Equal Join 이 가능하다 (비동등)
4) 조인을 위해 사전 소트 작업이 필요하다
14번 풀이
14번 해답 : 3번, 4번
Hash Join 은 Non Equal Join 은 불가능함. Equal Join 만 가능함
사전 Sorting 작업이 필요한 Join 알고리즘은 Sort Merge Join 임
--------------------------------------------------------------------------------------------------------
15. 아래의 실행 계획을 올바르게 설명한 것은?
-----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=9 Bytes=1K)
1 0 HASH JOIN (Cost=7 Card=9 Bytes=1K)
2 1 TABLE ACCESS (FULL) OF 'SCOTT.DEPT' (TABLE) (Cost=3 Card=1 Bytes=30)
3 1 VIEW (Cost=3 Card=9 Bytes=783)
4 3 COUNT (STOPKEY)
5 4 TABLE ACCESS (FULL) OF 'SCOTT.EMP' (TABLE) (Cost=3 Card=14 Bytes=1K)
-----------------------------------------------------------
Predicate information (identified by operation id):
-----------------------------------------------------------
1 - access("A"."DEPTNO"="B"."DEPTNO")
2 - filter("B"."DNAME"='SALES')
4 - filter(ROWNUM<10)
-----------------------------------------------------------
1) EMP TABLE 에 대한 행제한 구문이 있다
2) EMP TABLE 과 DEPT TABLE 은 OUTER JOIN 으로 수행되고 있다
3) EMP TABLE 과 DEPT TABLE 에서 선행 테이블은 EMP TABLE 이다
4) DEPT TABLE 은 별도의 조건이 없어 FULL SCAN 을 하고 있다
15번 풀이
15번 해답 : 1번
Outer Join 이라고 표시된 SQL Operation 이 존재하지 않음
Hash Join 의 선행 테이블은 SCOTT.DEPT 테이블임
Predicate 정보를 보면 DEPT 테이블에 대한 Full Scan 후 DNAME ='SALES' 로 필터됨
--------------------------------------------------------------------------------------------------------
16. 아래의 SQL 에 대해서 실행 순서를 올바르게 나열한 것은?
SELECT DEPTNO, COUNT(EMPNO)
FROM SCOTT.EMP
WHERE SAL >= 500
GROUP BY DEPTNO
HAVING COUNT(EMPNO) > 2
ORDER BY DEPTNO;
1) FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
2) FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> SELECT
3) FROM -> WHERE -> HAVING -> GROUP BY -> SELECT -> ORDER BY
4) FROM -> WHERE -> GROUP BY -> SELECT -> HAVING -> ORDER BY
16번 풀이
16번 해답 : 1번
--------------------------------------------------------------------------------------------------------
17. 아래와 같은 컬럼으로 구성된 테이블에 COL1 을 구성컬럼으로 가지는 인덱스가 있다.
가장 효율적으로 해당 인덱스를 사용할 수 있는 조건절은?
TAB_A COL1 NUMBER INDEX COL1
COL2 VARCHAR2(10)
1) WHERE COL1 LIKE '2%'
2) WHERE COL1 = 10
3) WHERE COL1 IS NOT NULL
4) WHERE COL1 <> 10
17번 풀이
사전 지식
* 문자를 숫자형으로 형변환함
* 예외적으로 LIKE 의 경우 COL 을 무조건 형변환함. 숫자를 문자로 변환함
17번 해답 : 2번
LIKE 의 경우 컬럼을 무조건 문자로 형변환함. 즉, 해당 조건절은
WHERE TO_CHAR(COL1) LIKE '2%' 로 변형되어 인덱스를 사용하지 못함
IS NOT NULL 은 해당 인덱스를 FULL SCAN 할 수 있으나 효율이 떨어짐
부정형 비교는 인덱스 사용이 불가함
--------------------------------------------------------------------------------------------------------
18. 비교연산자의 어느 한쪽이 VARCHAR 유형 타입인 경우 문자 우형 비교에 대한 설명 중 가장 알맞지 않은 것은?
1) 서로 다른 문자가 나올 때까지 비교한다
2) 길이가 다르다면 짧은 것이 끝날 때까지만 비교한 후에 길이가 긴 것이 크다고 판단한다
3) 길이가 같고 다른 것이 없다면 같다고 판단한다
4) 길이가 다르다면 작은 쪽에 SPACE 를 추가하여 길이를 같게 한 후에 비교한다
18번 풀이
18번 해답 : 4번
SAPCE 를 추가하여 길이를 맞춰 비교하는 방법은 CHAR 타입인 경우임
--------------------------------------------------------------------------------------------------------
19. 아래의 SQL 에 대해서 결과값이 다른 것은?
1) SELECT CONCAT ('RDBMS', ' SQL') FROM DUAL;
2) SELECT 'RDMBS' || ' SQL' FROM DUAL;
3) SELECT 'RDBMS' + ' SQL' FROM DUAL;
4) SELECT 'RDBMS' & ' SQL' FROM DUAL;
19번 풀이
19번 해답 : 4번
Oracle 의 결합 함수 : CONCAT / ||
SQL Server : +
--------------------------------------------------------------------------------------------------------
20. 아래의 ORACLE SQL 을 SQL SERVER SQL 로 전환한 것중 가장 알맞은 것은?
SELECT ENAME, SAL
FROM (SELECT ENAME, SAL
FROM SCOTT.EMP
ORDER BY SAL DESC)
WHERE ROWNUM < 4 ;
1) 2)
SELECT TOP(4) ENAME,SAL SELECT TOP(3) ENAME,SAL
FROM SCOTT.EMP FROM SCOTT.EMP
ORDER BY SAL DESC ORDER BY SAL DESC
3) 4)
SELECT TOP(4) WITH TIES ENAME,SAL SELECT TOP(3) WITH TIES ENAME,SAL
FROM SCOTT.EMP FROM SCOTT.EMP
ORDER BY SAL DESC ORDER BY SAL DESC
20번 풀이
사전 지식
* TOP (Expression) [PERCENT] [WITH TIES]
- WITH TIES : ORDER BY 조건 기준으로 TOP N 의 마지막 행으로 표시되는 추가 행의 데이터가 같을 경우 N+
동일 정렬 순서 데이터를 추가 반환하도록 지정하는 옵션 (마지막 기준 공통일 경우 모두 출력)
20번 해답 : 2번
ROWNUM < 4 의 의미는 3건까지 출력이므로 TOP(3) 임
WITH TIES 를 사용할 경우 동일 데이터가 있을 때 추가 건수가 출력되는 현상이 가능함
--------------------------------------------------------------------------------------------------------
21. 아래의 ANSI JOIN SQL 에서 가장 올바르지 않은 것은?
1)
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
2)
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP NATURAL JOIN DEPT;
3)
SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (DEPTNO);
4)
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E INNER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO);
21번 풀이
21번 해답 : 2번
NATURAL JOIN 에서 사용된 열은 식별자를 가질수 없음. 즉 EMP.DEPTNO 와 같이 OWNER 명을 사용하면 에러가 남
--------------------------------------------------------------------------------------------------------
22. 다음주 엔터티의 종류가 아닌 것은?
1) 교수
2) 학생
3) 청약자
4) 수강
--------------------------
사전 지식
* 엔터티 기준
- 엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다.
- 엔터티는 업무상 관리가 필요한 관심사에 해당한다.
- 엔터티는 저장이 되기 위한 어떤 것(Thing)이다.
해답
교수,학생은 논란의 여지가 없으나, 수강과 청약자에서 논란이 일어남
청약자 라는 개념은 관심사라기 보다는 청약의 주체가 되는 속성에 가까운 곳으로 보임. 속성값을 가지기에 애매함
* 참고 : 대다수 수강이라고 했으나 청약자로 체킹한 분이 만점으로 답으로 인정
==================================================================
제 2장 데이터 모델과 성능
제 1절 성능과 데이터 모델링의 개요
제 2절 정규화와 성능
제 3절 반정규화와 성능
제 4절 대량 데이터에 따른 성능
제 5절 데이터베이스 구조와 성능
제 6절 분산 데이터베이스와 성능
9. 아래의 ERD 에서 3차 정규형을 만족하게 할 때 엔터티의 개수는 몇개가 되는가? [21회 기출 - 정규화]
그림
ㄱ. 평가코드,평가내역은 학번에 종속적
ㄴ. 코스명,기간은 코스코드에 종속적
ㄷ. 평가코드 평가내역은 속성간 종속적 관계
-> 1차 정규형 : 모든 속성은 반드시 하나의 값. 속성값의 중복 제거
-> 2차 정규형 : 식별자에 종속되지 않는 속성의 중복 제거
-> 3차 정규형 : 2차 정규형 만족 + 식별자 외 일반 컬럼간의 종속 존재 제거
1) 1개
2) 2개
3) 3개
4) 4개
--------------------------
사전 지식
* 1차 정규형
- 모든 속성은 반드시 하나의 값을 가져야 한다. 즉, 반복 형태가 있어서는 안된다.
- 각 속성의 모든 값은 동일한 형식이어야 한다.
- 각 속성들은 유일한 이름을 가져야 한다.
- 레코드들은 서로 간에 식별 가능해야 한다.
* 2차 정규형
- 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되어야 한다.
- 이것을 물리 데이터 모델의 테이블로 말하면 기본키가 아닌 모든 칼럼들이
기본키에 종속적이어야 2차 정규형을 만족할 수 있다는 것이다
* 3차 정규형
- 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재하면 안된다.
- 이것이 3차 정규형을 만족하는 것이다.
해답
그림 필요
----------------------------------------------------
9. 아래의 ERD 에서 3차 정규형을 만족하게 할 때 엔터티의 개수는 몇개가 되는가? [기출 21회 - 정규화]
그림
ㄱ. 평가코드,평가내역은 학번에 종속적
ㄴ. 코스명,기간은 코스코드에 종속적
ㄷ. 평가코드 평가내역은 속성간 종속적 관계
-> 1차 정규형 : 모든 속성은 반드시 하나의 값. 속성값의 중복 제거
-> 2차 정규형 : 식별자에 종속되지 않는 속성의 중복 제거
-> 3차 정규형 : 2차 정규형 만족 + 식별자 외 일반 컬럼간의 종속 존재 제거
1) 1개
2) 2개
3) 3개
4) 4개
--------------------------
사전 지식
* 1차 정규형
- 모든 속성은 반드시 하나의 값을 가져야 한다. 즉, 반복 형태가 있어서는 안된다.
- 각 속성의 모든 값은 동일한 형식이어야 한다.
- 각 속성들은 유일한 이름을 가져야 한다.
- 레코드들은 서로 간에 식별 가능해야 한다.
* 2차 정규형
- 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되어야 한다.
- 이것을 물리 데이터 모델의 테이블로 말하면 기본키가 아닌 모든 칼럼들이
기본키에 종속적이어야 2차 정규형을 만족할 수 있다는 것이다
* 3차 정규형
- 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재하면 안된다.
- 이것이 3차 정규형을 만족하는 것이다.
해답
그림 필요
--------------------------------------------------------------------------------------------------------
'자격증 > SQLD' 카테고리의 다른 글
오라클 구문: CASE WHEN, DECODE (0) | 2023.11.09 |
---|---|
SQLD 기출문제 과목 2 SQL 기본 및 활용 (0) | 2022.03.03 |
SQL 자격검정 실전문제 제2장 답 (0) | 2022.02.24 |
Row Chaining / Row Migration (0) | 2022.02.23 |
trigger와 프로시저 (0) | 2022.02.22 |