일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 클라우드 서비스 개발 #
- K-디지털트레이닝
- 리눅스
- 우리FISA
- 맥OS
- Java
- 우리FIS아카데미 #
- Gradle
- 클라우드 서비스 개발
- dbeaver
- route 53
- M2
- 글로벌소프트웨어캠퍼스
- 로드밸런스
- https
- 도메인
- HTTP
- 우리에프아이에스
- 우리에프아이에스 #
- sts
- 우리FIS아카데미
- 맥
- mysql
- spring
- 우리FISA #
- AWS
- springboot
- 맥북
- jdk
- Today
- Total
<<개발일지>>
sqld 노랭이 기출 풀이(출처: 홍쌤 데이터랩) 본문
출처: 홍쌤 데이터랩

제 3정규화 했을때 생기는 테이블 수는?
=> 이 문제 같은 경우 두 가지 방식으로 분리하면 된다.
일단 기본적으로 생성되어 있는 테이블은 그대로 둔다.
첫째, 학과 번호, 학과 명 이런 것처럼 하나로 인해 다른 것도 변하는 것들을 분리 해준다. (일반적으로 명 과 번호로 되어 있으면 분리해준다.)
둘째, 너무 많은 속성이 있다면 이 또한 분리를 해준다. (속성 중복 형태인데 이런 경우 제 1정규화와 같다.)

=> where을 쓰지 않는다면, 카티션이 발생해서 n x m 이 된다.
여기서는 첫번째 자리가 S인 경우 와 중간에 T인 것을 가져와야 한다.
고로 4개가 된다

=> '' 같은 경우 oracle이냐 sql server 이냐에 따라 다르게 저장이된다.
oracle -> null
sql server -> 빈문자
1. 빈문자열 또는 null로 출력이 된다.
2. ISNULL(a, b) -> a가 null이면 b가 출력이 된다는 개념으로 풀면 된다. 고로 정답니다.
3. col = null 같은 연산자는 사용이 불가능하다. 할 거면 is null , is not null 로 해줘야한다.
4. col1 번 값이 'b'이냐 또는 'c' 인 경우를 의미한다. 여기서 count나 sum 은 null 제외하고 계산하기 때문에 주의 해야하는데
sql server는 ''로 반환한다는 점을 감안했을 때 경우에 따라 다르다고 볼 수 있다.

=> 풀이 TO_DATE 로 특정한 형태로 날짜로 변환
1은 1일을 의미하고 24는 24시간을 의미한다. 고로 나누면 1시간을 의미하고 뒤에 6을 나누면 10분을 의미한다.
따라서, 10시 + 10분을 해주면 된다.

=>
1. varchar 같은 경우 문자를 의미한다. 이런 문자가 to number(오라클) 없이는 숫자랑 비교가 불가능하다.
즉 이 '001' 같은 경우는 제대로 단정 짓기는 어렵다고 볼 수 있다. (애초에 지금 잘못된 형태이다.)
2. oracle에서는 ''는 null이다.
3. 따라서 조회 자체가 안 된다.
4. sql server는 공백문자로 입력에 되기 때문에 조회가 된다. 따라서 isnull 했을때 조회가 되지 않는다.

=>
not > and > or 의 순서로 진행이 된다.
따라서 한 개이다.

=> 정답 3
위에서 말한 것 처럼 avg, sum 그리고 > 같은 연산자는 Null 제외하고 진행이 된다.
??


=>
1. 메인 커리에서 이미 조인을 걸고 있는 where 절이 존재한다.
2. 정답이다.
일단 3, 4 번 문제 같은 경우는 하나만 넣어서 될거 같아 보이지만, 사실상 서브쿼리 다음 쿼리를 본면 해답이 나온다 두가지 속성을 이용하고 있는데 3,4번은 하나의 속성만 있다.
3.
4.


=> 한 테이블에 있다면 where 로 다 가능하지만 먄약 분리되어 있는 테이블이라면 연관되어 있을 시 조인으로 만들어야 한다.
이때 join을 쓰지 않고 where a.c =b.c 이러한 방식을 사용한다.


=>
case 문제 같은 경우 else가 주어지지 않는다면 null로 반환한다.
ISNULL, NVL 일 때 null 이면 다음 것을 리턴
4. else 1 에 의해서 없더라도 1을 반환하는 문제가 발생해서 오답


=> 상위 n에 중복된 등수는 함께 출력하는 명령어는 TOP(n) WITH TIES 를 사용한다.
따라서 정답은 4 번이다.
1,2,3은 무조건 3개만 출력이 된다.



=> ON 에서 특정 부분만을 명시한다면 그 조인 된 것들을 데이터를 연관지어서 작성해 주되, 조인 안 한 부분들은 null로 출력이 된다.
where에 저런 조건이 있었다면 행이 2개일 것이다.



=> 정답 : 1번
1. (+) 가 있는 부분은 left outer join ~ 등으로 바꿀 수 있다. 이때 (+) 오른 쪽에 있다면 left outer join이다. 그리고 조건 절에도 (+)가 있는데, 이역시 (*) 를 작서해줘야 하지만 없다 (+)
2. 사용여부 같은 경우는 where에 있어야 한다.
3. on절에도 없다.
4. right outer join이라서 틀렸다.

추천대상이 없어도 된다 ~? => left outer 그런데 굳이 알릴 필요가 없다면 inner join



=>
정답 : 4
NOT EXISTS (a = b) 이면 a = b 인것을 지우겠다는 의미이다.
#custId# -> 입력해서 들어오는 값

=>

ROW_NUMBER() -> 순위를 구하는 문법이다. 동일한 등수는 없다.
PARTION BY ** -> ** 별
SUM ORDER BY **->**별 누적합
BETWEEN UNROUNDED PRECEDING AND CURRENT ROW -> 행마다 계산해라 -> 일반적인 누적합 범위(누적합)



=>
원래 null 인데 값이 있는 이유는 grouping을 한 것이다.
null일때 1이 반환이된다.
Rollup(a, b) -> a, (a,b) , 전체



=>
LEN -> 이전 값을 들고 온다.
LEAD -> 이후 값을 들고 온다.


=>
정답 3
1. update할 때 set 담당자 이면 = (담당자)가 나와야 한다. 하지만 부서코드가 나옴으로써 틀린 답이 된다.
또한 부서임시에 변경된 내용이 없다면, null이 반환된다.
2. 이 역시 마찬가지인다.
3. 일단 위에서 언급한 담당자이면 (담당자) 여야 한다는 것이 맞다. 그리고 변경일자가 최대인 것은 가장 최근일자이기 때문에 새롭게 업데이트 된 것만 가져오게 된다.

4 번 같은 경우는 특정 날짜만 되어버리면 최신 날짜를 안 들고 오게 되고 업데이트도 안 된다.

급여 비중을 반환하는 방법은 두 가지이다.
1. RATIO_TO_REPORT
2. 하드 코딩


4. sum over order by 는 누적합이다. 그렇기 때문에 총합을 구해서 나누면 오답이 나오게 된다.

=>
정답 1번
USING() -> 이는 안에서 조건 사용이 불가능하다 ex. a = b 단지 양쪽에 같은 속성이 있다면 알아서 조인을 해주기 때문에, 속성 이름 하나만 넣어주면 된다.
나머지는 잘 표현함

=> 계층형 질의
이 문제의 핵심은 시작점을 찾아야 한다. lvl 1
반대 방향으로 같은 레벨로 표현할 수 없다. -> 두 개가 결합 되었음을 알 수 있다.
또한, 오른쪽 null로 채워지는 것을 보면 left outer join을 예상할 수 있다.

정답 1번

=>
NOT NULL 이다. 근데 2 번에 의해 null 이 들어가게 된다. 그래서 오류가 발생한다.

=>
정답 3번
oracle 같은 경우는 auto commit false 자체가 불가능하다. 그리고 create를 작성하면 바로 commit이 된다.
이로인해 rollback이 불가능해진다.
3. 최종적으로 B 테이블은 생성되지 않았다 x

=>
정답 3번

=>
정답 2번
ON DELETE CASCADE : 부모가 삭제가 되면 자식도 같이 삭제가 된다.
ON DELETE SET NULL : 부모가 삭제가 되면 자식은 null이 된다.