1. 3 X 4

2. 3

3. 4

4. 4 X 2

5. 4

6. 1 X 4

7. 4

8. 3

9. 2

10. 2

11. 1 X 2

12. 4

13. 4 X 1

14. 1 X 3 순방향

15. 3

16. 1

17. 3

18. 2

19. 4 X 3

20. 3 X 2

21. 1

22. 1

23. 1

24. 3

25. 3 X 4

26. 1

27. 1 X 2

28. 4

29. 2

30. 3

31. 1

32. 2

33. 2

34. 1 ???? 문제 이상

35. 1

36. 3 X 1

37. 1

38. 3 X 1

39. 1

40. 1 X 3

41. 3

42. 4 X 2

43. RIGHT OUTER JOIN X LEFT OUTER JOIN

44. A X C

45. ? X MAX
46. SQLDEVELOPER

47. 100 King  24000 X 54800

48. 1 X

49. TOP X NTILE

50. EMPLOYEE_ID X 2

 

반정규화 , 정규화

정규화란?

제1정규형 모든 속성은 반드시 하나의 값만 가져야 한다.

이름이라는 속성에 아이유, 설현 이렇게 못 들어간다.

이름1 , 이름2

아이유, 설현

이렇게 반복 그룹을 가지면 제1정규형 위배

제 1정규화를 시켜본다!

직원 테이블에 소속사(PK),직원번호(PK),이름 -<- SNS 테이블 직원번호(FK) SNS 

 

제 2정규화

 

모든 속성은 반드시 모든 기본키에 종속되어야 한다. (기본키 일부에만 종속되어서는 안됨)

신발코드 1002 신발이름 조던2

 

신발 이름은 신발코드에만 종속된다.

이렇게 하면 데이터 이상 현상 발생 

제 2정규화를 시켜본다!

주문                                        신발

주문번호 신발코드(FK)  ->ㅇ         신발코드

주문 수량                                 신발이름

 

주문과 관계없이 신발 데이터 입력, 수정, 삭제 가능

 

제 3정규화

 

기본키가 아닌 모든 속성간에 서로 종속될 수 없다.

 

정규화란 데이터가 꼬이는 것을 막기위한 것!!!

반정규화

테이블 반정규화

테이블 병합 : 비즈니스 로직 상 JOIN 되는 경우가 많아 통합하는 것이 성능 측면에서 유리할 경우 고려

1) 1:1 관계 테이블 병합

2) 1:M 관계 테이블 병합

3) 슈퍼 서브 타입 테이블 병합

 

 

'컴퓨터 지식' 카테고리의 다른 글

[SQLD] 날짜 관련 함수 , NULL 연산  (0) 2022.02.27
[SQLD] 기출 21회차 정리  (0) 2022.02.24
URI (Uniform Resource Identifier)  (0) 2022.02.22
[인터넷 네트워크]  (0) 2022.02.22
[SQLD] ROLLUP  (0) 2022.02.12

날짜 관련 함수 문제, 

 


-- 서비스_가입 테이블
CREATE TABLE SVC_JOIN (
    CUST_ID     VARCHAR2(10) NOT NULL, 	-- 고객ID
    SVC_ID      VARCHAR2(5) NOT NULL, 	-- 서비스ID
    JOIN_YMD    VARCHAR2(8) NOT NULL,	-- 가입일자
    JOIN_HH     VARCHAR2(4) NOT NULL,	-- 가입시간
    SVC_START_DATE DATE,				-- 서비스시작일시
    SVC_END_DATE DATE					-- 서비스종료일시
);

INSERT INTO SVC_JOIN VALUES ('aaaa','10000','20141130','14',TO_DATE('20150101001000'),TO_DATE('20150131001000'));
INSERT INTO SVC_JOIN VALUES ('bbbb','10001','20141201','00',TO_DATE('20150101001000'),TO_DATE('20150131235959'));
INSERT INTO SVC_JOIN VALUES ('cccc','10003','20141201','00',TO_DATE('20150105001000'),TO_DATE('20150131235000'));
INSERT INTO SVC_JOIN VALUES ('dddd','10000','20141201','02',TO_DATE('20150110001000'),TO_DATE('20150131001000'));
INSERT INTO SVC_JOIN VALUES ('eeee','10004','20141201','00',TO_DATE('20150120001000'),TO_DATE('20150131001000'));
INSERT INTO SVC_JOIN VALUES ('ffff','10005','20141201','00',TO_DATE('20150101001000'),TO_DATE('20150210001000'));
INSERT INTO SVC_JOIN VALUES ('gggg','10000','20141202','00',TO_DATE('20150201001000'),TO_DATE('20150220001000'));
INSERT INTO SVC_JOIN VALUES ('hhhh','10002','20141201','00',TO_DATE('20150201001000'),TO_DATE('20150101000000'));

4개의 지문 작성해보고 결과 예상해보기

 

근데 INSERT 구문에서 오류가 났다

TO_DATE부분에서 형식이 맞지 않다는 것..

오라클에서는

INSERT INTO 테이블 (날짜컬럼)
VALUES ( SYSDATE )
INSERT INTO 테이블 (날짜컬럼)
VALUES ( TO_DATE('2011-03-03','YYYY-MM-DD') )
INSERT INTO 테이블 (날짜컬럼)
VALUES ( TO_DATE('12-JAN-1982', 'DD-MON-YYYY') )
INSERT INTO 테이블 (날짜컬럼)
VALUES ( TO_DATE('10-04-2010 20:37:50','MM-DD-YYYY HH24:MI:SS') )

 

'컴퓨터 지식' 카테고리의 다른 글

[SQLD] 기출 34회차 정리  (0) 2022.03.03
[SQLD] 기출 21회차 정리  (0) 2022.02.24
URI (Uniform Resource Identifier)  (0) 2022.02.22
[인터넷 네트워크]  (0) 2022.02.22
[SQLD] ROLLUP  (0) 2022.02.12

기출 21회

1.

A가 A.MANAGER_ID 이므로 

어떤 부하 직원보다도 연봉이 높은 상사 

2. X

1번? 

ALL(30,50) 30~50사이 빼고 이거 보다 작은거?

 

비교연산자 ALL(서브쿼리)

A.DEPARTMENT_ID <= ALL(30,50) 했으면

30보다 작고, 50보다도 작아야 하므로 30보다 작은 값이 모두 해당

3. X

1번

2 공백값도 들어가야함

공백값 안들어감

SELECT * FROM SQLD_21_01

WHERE V1 IN (SELECT V1 FROM SQLD_21_02);이면은

2번 2번 테이블 V1에 NULL이 존재함

SELECT * FROM SQLD_21_01

WHERE V1 NOT IN (SELECT V1 FROM SQLD_21_02);

 

NULL로 인해서 모든 조건이 참이 됨. NOT IN 결과 0건이 RETURN 된다.

4. X

2번

데이터베이스를 구축할 때 참고되는 모델은 개념적 데이터 모델링이다

-> 개논물 순이므로 처음에 데이터베이스를 구축할때 개념적 모델링이 아닐까?

1번 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지는 않는다. (선택사항 임) 

실제 데이터 베이스 구축할 때 참고되는 모델은? 물리적 데이터 모델링

개념 모델링 -> 물리 모델링 (개논물)

데이터 모델링 3가지는 Thing, Attributes, RelationShip (TAR)이다. 데이터 모델은 상(3요소) TAR 해야된다.

(상의탈의)👎

5.

추상화 수준이 높은것 개념적 데이터 모델링 1)

6.

속성은 하나의 속성만 가진다! 3번

7.

2 학번으로 조회를 하니깐 학번을 선두컬럼으로 하는 INDEX를 생성한다.

8.

2 CEIL 올림이다.

9.

3개 정확히는 모르겠음 ★

10. X

3번

11.

4번 같은거를 하는거니깐 둘다 공통 INNER JOIN을 써야하고 WHERE 1=1은 항상 참을 의미하므로 정답은 4

12.

3 VIEW는 실제 데이터를 가지고 있지 않다

13.

2 IDENTITY는 안들어간다? NULL은 5보다 작으니 들어가므로 2--------->1번 

IDENTITY로 지정된 컬럼에 값 넣으면 에러!

14. X 두가지

해쉬니깐 INDEX 필요할 것 같은데 ... 1)

3)

Hash Join은 Non Equal Join은 불가능, Equal Join만 가능

Sorting 필요한 작업은 Sort Merge Join

15. X

실행계획 화면이다

emp table이 선행 테이블 3번

16.

1번

17.

2

LIKE의 경우 컬럼을 무조건 문자로 변형하기 때문에 인덱스를 사용하지 못함.

IS NOT NULL은 FULL SCAN할 수 있으나 효율이 떨어지고, 부정형 비교는 인덱스 사용 불가능

18.

3

비교연산자의 어느 한쪽이 VARCHAR 유형 타입인 경우 

길이가 다르다면 작은 쪽에 SPACE를 추가하는 것은 CHAR 타입인 경우

19.

2

20. X

4

SELECT TOP(3) ENAME, SAL

FROM SCOTT.EMP

ORDER BY SAL DESC

 

SELECT TOP(3) WITH TIES ENAME, SAL

FROM SCOTT.EMP

ORDER BY SAL DESC

 

ROWNUM < 4 의미는 3건까지 출력 TOP(3) 맞음.

WITH TIES를 사용할 경우 동일 데이터가 있을 때 추가 건수가 출력되는 현상ㄱ ㅏ능

 

21. X

3

NATURAL JOIN에서 사용된 열은 식별자를 가질 수 없음.

NATURAL JOIN 에서 사용된 열은 식별자를 가질수 없음. 즉 EMP.DEPTNO 와 같이 OWNER 명을 사용하면 에러가 남

22.

3

23. X

4

24. X

4

25. X

3

SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO RANGE BETWEEN UNBOUNDED PRECEDING  AND UNBOUNDED PRECEDING) SAL3

 

UNBOUNDED PRECEDING은 end point에 사용될 수 없음

26. X

3 select절이 서브쿼리아닌가?

1... FROM절이 아니라 SELECT절인데 헷갈림 순간 😅

27. 

크로스 조인임

모든 경우의 수 다 들어감.

 

28.

3

29. X

4

DBA 권한을 가진 유저만이 권한을 부여 할 수 있다?

DBA 권한은 SYSTEM, SYS 등의 상위 유저와 그에 해당하는 권한을 가진 경우 부여가 가능하다

단답형

1. UPPER

IN

2. MAX(LEVEL)

TOP(1)

매니저부터 사원까지 결제 단계가 가장 많은 레벨을 구할 때

SELECT MAX(LEVEL)

FROM SCOTT.EMP

START WITH MGR IS NULL

CONNECT BY PRIOR EMPNO = MGR;

3. P.사원번호 IS NULL

S.사원번호 <> P.사원번호

P.사원번호 IS NULL

NOT EXISTS의 OUTER JOIN으로의 변형을 묻는 문제임

NOT EXISTS는 OUTER JOIN으로 변경 시, NOT NULL인 컬럼에 대한 IS NULL 체크로 구현이 가능함.

4. 18건

CUBE?

10 3

20 3

30 3

9

 

9개가 아니라

DNAME의 그룹은 3 , JOB의 그룹은 5, DNAME,JOB의 그룹은 9개

총 17개에 총계까지 나오므로 +1 해서 18건

 

5.

WHERE

6. 7건

1

7. 0

없음

없음이 아니라 0임

'컴퓨터 지식' 카테고리의 다른 글

[SQLD] 기출 34회차 정리  (0) 2022.03.03
[SQLD] 날짜 관련 함수 , NULL 연산  (0) 2022.02.27
URI (Uniform Resource Identifier)  (0) 2022.02.22
[인터넷 네트워크]  (0) 2022.02.22
[SQLD] ROLLUP  (0) 2022.02.12

URI URN URN의 차이를 확실하게 알 수 있다.

 

리소스를 식별하는 방법

 

URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.

 

URI 안에 URL , URN이 있음

 

자원 자체를 식별하는 방법 URI

그 안에 URL : 리소스가 이 위치에 있어요 알려주는 것

          URN : 리소스의 이름

 

http://exampel.com:8080/sdsd/~~~ URL임

 

URI 뜻

Uniform : 리소스 식별하는 통일된 방식

Resource : 자원, URI로 식별할 수 있는 모든 것

Identifier : 다른 항목과 구분하는데 필요한 정보

 

URL : Uniform Resource Locator

URN : Uniform Resource Name

 

위치는 변할 수 있지만, 이름은 변하지 않는다.

URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음

 

'컴퓨터 지식' 카테고리의 다른 글

[SQLD] 날짜 관련 함수 , NULL 연산  (0) 2022.02.27
[SQLD] 기출 21회차 정리  (0) 2022.02.24
[인터넷 네트워크]  (0) 2022.02.22
[SQLD] ROLLUP  (0) 2022.02.12
[SQLD] 데이터 모델링의 이해  (0) 2022.01.16
인터넷 통신
IP(Internet Protocol)
TCP , UDP
PORT
DNS

 

인터넷에서 컴퓨터 둘은 어떻게 통신?

클라이언트 -> 인터넷 -> 서버

서버 -> 인터넷 -> 클라이언트

 

어떻게 복잡한 인터넷 망을 통해서 보낼까

 

IP 주소로 가능하게 한다.

 

클라 IP : 100.100.100.1

서버 IP : 200.200.200.2

 

IP 인터넷 프로토콜 역할은

- 지정한 IP 주소(IP Address)에 데이터 전달

- 패킷(Packet)이라는 통신 단위로 데이터 전달

 

IP 패킷 정보

서로 100.100.100이 어디에요 하면서 전달이 됨!

 

IP 프로토콜의 한계

- 비연결성

  - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

- 비신뢰성

  - 중간에 패킷이 사라지면?

  - 패킷이 순서대로 안오면?

- 프로그램 구분

  - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

 

만약에 패킷 전달할 때 1번 보내고 2번 보냈는데 2번 받고 1번을 받으면 안 된다..

 

IP 프로토콜 만으로는 이 문제를 해결할 수 없다..

 

이것을 해결해주는 것이 바로 TCP, UDP이다!

 


인터넷 프로토콜 스택의 4계층

애플리케이션 계층 - HTTP, FTP

전송 계층 - TCP, UDP

인터넷 계층 - IP

네트워크 인터페이스 계층

 

프로그램에 Hello, world를 씀

그러면 SOCKET 라이브러리를 통해 전달

TCP 정보 생성, 메시지 데이터 포함

IP패킷 생성, TCP 데이터 포함

 

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)

- 연결지향 - TCP 3 way handshake (가상 연결)

- 데이터 전달 보증

- 순서 보장

 

- 신뢰할 수 있는 프로토콜

- 현재는 대부분 TCP 사용

 

3way handshake란?

SYN : 접속 요청

ACK : 요청 수락

참고: 3. ACK와 함께 데이터 전송 가능

 

UDP 특징

사용자 데이터그램 프로토콜

- 하얀 도화지에 비유(기능 거의 없음)

- 연결지향 - TCP 3 way handshake X

- 데이터 전달 보증 X

- 순서 보장 X

- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

- 정리

  - IP와 거의 같다. +PORT +체크섬 정도만 추가

  - 애플리케이션에서 추가 작업 필요

 


PORT

한번에 둘 이상 연결해야 하면?

클라이언트로 게임도 하고 화상통화, 웹 브라우저 요청까지 하면?

 

여러개의 서버를 통신해야 함

 

PORT

0 ~ 65535 할당 가능

0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음

FTP - 20,21

TELNET - 23

HTTP - 80

HTTPS - 443


DNS

IP는 기억하기 어렵댜

100.100.100.1 이렇게 기억하면 어려움 IP는 또 변경될 수 있음

도메인 네임 서비스를 이용해서

도메인을 사서 naver.com같은 도메인을 접근해서 찾을 수 있다.

 

'컴퓨터 지식' 카테고리의 다른 글

[SQLD] 기출 21회차 정리  (0) 2022.02.24
URI (Uniform Resource Identifier)  (0) 2022.02.22
[SQLD] ROLLUP  (0) 2022.02.12
[SQLD] 데이터 모델링의 이해  (0) 2022.01.16
[스프링] 디버깅 사용법 ! 사용해야 되는 이유 !  (0) 2021.12.28

스타벅스 테이블을 예로 들면,

 

-- 스타벅스 테이블 조회
SELECT * FROM TAB_STARBUCKS;

-- 스타벅스 음료수 그룹 조회
SELECT ORDER_ITEMS, COUNT(*)
FROM TAB_STARBUCKS
GROUP BY ORDER_ITEMS;

-- 결과 음료수 이름으로 그룹이된 값이 나온다.

-- 스타벅스 날짜 그룹 조회
SELECT ORDER_DT, COUNT(*)
FROM TAB_STARBUCKS
GROUP BY ORDER_DT;

-- 결과 날짜 별로 그룹이 된 값이 나온다.

-- 스타벅스 음료수 그룹, 날짜 그룹 같이 조회
SELECT ORDER_ITEMS, ORDER_DT, COUNT(*)
FROM TAB_STARBUCKS
GROUP BY ORDER_DT, ORDER_ITEMS
ORDER BY ORDER_DT ASC;

-- 결과 02 12일 아메리카노 , 02 12일 카페라떼 의 개수가 나온다
-- 여기서 이제 ROLLUP 함수를 쓰게 되면

SELECT ORDER_ITEMS, ORDER_DT, COUNT(*)
FROM TAB_STARBUCKS
GROUP BY ROLLUP(ORDER_DT, ORDER_ITEMS)
ORDER BY ORDER_DT ASC;

-- 결과값으로 02 12일의 총 COUNT도 나오고 13일 총 COUNT 나오면서 마지막에는 총 COUNT값이 나온다

108p에 있는 테이블과 데이터를 oracle로 만들어서 직접 실행해본다

 

서비스 테이블 

CREATE TABLE 서비스 (
	서비스ID		VARCHAR2(3) PRIMARY KEY,
	서비스명		VARCHAR2(10)
);

CREATE TABLE 서비스가입 (
	회원번호		VARCHAR2(1),
	서비스ID		VARCHAR2(3),
	가입일자		VARCHAR2(10),
	CONSTRAINTS 서비스가입PK PRIMARY KEY (회원번호, 서비스ID)
);


INSERT INTO 서비스 VALUES('001','서비스1');
INSERT INTO 서비스 VALUES('002','서비스2');
INSERT INTO 서비스 VALUES('003','서비스3');
INSERT INTO 서비스 VALUES('004','서비스4');

INSERT INTO 서비스가입 VALUES('1','001','2013-01-01');
INSERT INTO 서비스가입 VALUES('1','002','2013-01-02');
INSERT INTO 서비스가입 VALUES('2','001','2013-01-01');
INSERT INTO 서비스가입 VALUES('2','002','2013-01-02');
INSERT INTO 서비스가입 VALUES('2','003','2013-01-03');
INSERT INTO 서비스가입 VALUES('3','001','2013-01-01');
INSERT INTO 서비스가입 VALUES('3','002','2013-01-02');
INSERT INTO 서비스가입 VALUES('3','003','2013-01-03');
SELECT 
   CASE WHEN GROUPING(A.서비스ID) = 0 THEN A.서비스ID ELSE '합계' END AS 서비스ID
 , CASE WHEN GROUPING(B.가입일자) = 0 THEN NVL(B.가입일자, '-') ELSE '소계' END AS 가입일자
 , COUNT(B.회원번호) AS 가입건수
FROM 서비스 A LEFT OUTER JOIN 서비스가입 B 
ON (A.서비스ID = B.서비스ID AND B.가입일자 BETWEEN '2013-01-01' AND '2013-01-31')
GROUP BY ROLLUP( A.서비스ID, B.가입일자);

미리 결과 해석

서비스 A에 조인해서

아이디 같은거 그리고 가입일자가 13년1월1일 부터 13년1월31일 까지

ROLLUP을 하게 되면 서비스 ID도 그룹이 되고, 가입일자로도 그룹이 되어서 같이 출력

그러면 001,002,003이 하나만 나오는게 아니고 일자별, 그리고 소계까지 나와줘야함

 

SELECT 절로 가서

서비스ID 그루핑한 부분이 0이면? NULL? 004번은 없으니 

THEN 서비스ID는 '합계'로 바꾸고,

두번째 CASE문에서 만약 가입일자에 NULL이면 '-'로 표시한다

 


SELECT *
FROM 서비스 A LEFT OUTER JOIN 서비스가입 B
    ON(A.서비스ID = B.서비스ID);

먼저 조인한 결과 값이 어떻게 나오는지 확인한다.

LEFT OUTER JOIN을 했으므로 서비스에 있는 값은 다나옴.

SELECT A.서비스ID , B.가입일자 , COUNT(B.회원번호) AS 가입건수
FROM 서비스 A LEFT OUTER JOIN 서비스가입 B
    ON(A.서비스ID = B.서비스ID)
GROUP BY A.서비스ID, B.가입일자
ORDER BY A.서비스ID;
SELECT A.서비스ID , B.가입일자 , COUNT(B.회원번호) AS 가입건수
FROM 서비스 A LEFT OUTER JOIN 서비스가입 B
    ON(A.서비스ID = B.서비스ID)
GROUP BY ROLLUP(A.서비스ID, B.가입일자)
ORDER BY A.서비스ID;

ROLLUP을 하게 되면 집계함수처럼 그룹별로 집계 통계가 상세하게 나온다.

 

SELECT 
   CASE WHEN GROUPING(A.서비스ID) = 0 THEN A.서비스ID ELSE '합계' END AS 서비스ID
 , CASE WHEN GROUPING(B.가입일자) = 0 THEN NVL(B.가입일자, '-') ELSE '소계' END AS 가입일자
 , COUNT(B.회원번호) AS 가입건수
FROM 서비스 A LEFT OUTER JOIN 서비스가입 B 
ON (A.서비스ID = B.서비스ID AND B.가입일자 BETWEEN '2013-01-01' AND '2013-01-31')
GROUP BY ROLLUP( A.서비스ID, B.가입일자);

그래서 이렇게 하게되면

일단 GROUPING 함수로 A.서비스ID 값이 0이면 서비스ID값을 보여주게 하고 NULL이면 합계를 보여주는 것

밑에도 동일하고 NVL함수를 쓰게 되면 이제 가입일자가 NULL이면 '-'를 보여주고 아니면 소계를 보여준다

 

 

+ Recent posts