SQLD/SQL 자격검정 실전문제

2과목 SQL 기본 및 활용

성공할준 2024. 11. 12. 17:18

(1) : 4

DDL : C A D -> CREATE ALTER DROP

DML : S I U D -> SELECT INSERT UPDATE DELETE

DCL : G R -> GRANT REVOKE

 

(2) : 1

 

(3) : 3

DML과 TCL은 비슷하다

 

(4) : 3

FROM 절은 필수이다

 

(5) : 1

 

(6) : 2

 

(7) : 1

 

(8) : 3

WHERE 절에 집계함수 사용할 수 없다

 

(9) : 3

WHERE 절을 먼저 해석하기

SELECT는 나중에 해석하공

하나의 속성에서 계산할때는 NULL은 0으로 생각해도됨!

*SELECT SUM(COL2) + SUM(COL3) FROM TAB_A WHERE COL1 > 0; 에서

  • COL1 > 0을 만족하는 행 찾기! → 첫번째 행만 가능하다
  • SUM(COL2) + SUM(COL3) 하기 → NULL + 20은 NULL이다!

*SELECT SUM(COL2) + SUM(COL3) FROM TAB_A WHERE COL1 IS NOT NULL; 에서

  • COL1 IS NOT NULL을 만족하는 행 찾기! → 첫번째 행, 세번째 행이 가능하다
  • SUM(COL2) + SUM(COL3) 하기 → (NULL+10) + (20+NULL)이라 NULL+NULL이라곳 ㅐㅇ각할 수 있지만 하나의 속성(COL2)에서 계산할 땐(NULL+10) NULL은 0처리 가능하다
  • 그러므로 10 + 20이라 30이 도출됨.

그러나 두개 이상의 속성에서 계산할때는 NULL은 NULL 취급해야 함

 

(10) : 1

ANSI 표준은 

IS NULL 

IS NOT NULL

이다

 

*(11) : 4

(1) : 001과 1은 다른 것

(2) : 오라클에서는 공백문자가 아니라 NULL로 입력된다 → 공백문자와 NULL은 서로 다른 뜻!

(3) : 조회를 하려면 ‘ ‘가 아닌 IS NULL로 해야한다 → 애초에 (2)에서 NULL로 입력된거기 때문

(4) : SQL Server에서는 공백문자로 입력된게 맞기때문에 IS NULL이 아닌 ‘ ‘로 조회를 해야한다

결론 : 오라클에서는 ‘ ‘ 가 NULL로, SQL Server에서는 ‘ ‘가 ‘ ‘로 입력된다

 

(12) : 4

LOWER ('ABc') : 'abc'

-> 소문자로 변경

UPPER (ABc') : 'ABC'

-> 대문자로 변경

ASCII('A') : 65

-> 아스키코드로 변경

LTRIM('xxYYZZxYZxx','x') : YYZZxYZxx

-> (a,b)일때 a에 있는 b를 지워줌, L이면 왼쪽 R이면 오른쪽에서 시작

 

**(13) : 4

 

14 : 4

(1) : 집계 함수 쓸 때 NULL은 집계에 적용이 안된다

(2) : SELECT에서는 가능하지만 GROUP BY절에서는 AS 못씀!!

(3) : WHERE에 집계함수 못씀!

(4) : GROUP BY랑 HAVING는 그냥 세트라고 생각하면 된다

 

**(15) : 3

 

*(16) : 3

1/24/60 = 1분이다

1/24 는 1일을 24시간으로 나눈 것을 의미한다. -> 1일 / 24시간은 1시간이다

1시간/60은 1시간을 60분으로 나눈 것을 의미한다 -> 1시간 / 60분은 1분이다.

 

1/24/(60/10)을 계산해보자

1/24는 1시간임을 알 수 있다.

1시간/6은 1시간을 6분으로 나눈 것을 의미한다 -> 1시간 / 6분은 10분이다.

 

day/ hour / minute로 외우자

 

 

*(17) : 2

CASE WHEN 열 =

이랑

CASE 열 WHEN

은 비슷한거라고 보기

 

**(18) : 4

 

(19) : 2

 

*(20) : 1

ISNULL(A,B) → A가 NULL이면 B출력 , 둘다 데이터 타입 같아야함 !

NVL과 ISNULL은 같은거

NULLIF(A,B) → A랑 B랑 같으면 NULL, 다르면 A

 

**(21) : 3

select a,b,c

from tab_a

order by a,b,3이면 3은 세번째 열인 c를 의미한다.

 

(22) : 1

%s_ _ _ 는 s가 두번째가 아니라 세번째,네번째일 수도 있다 

 

(23) : 1

 

(24) : 4

ROUND(4.875, 2) = 4.88

-> (a,b)에서 b번째 소숫점까지 보이게 함, 반올림 혹은 반내림

LENGTH('KOREAN') = 6

-> 몇글자인지 세줌

DATA_FORMAT('2022-11-02', '%Y-%m-%d') = 2022-11-02

-> 형식에 맞는 날짜 출력

SUBSTR('Gangneung Wonju', 8, 4) = 'ng W'

-> (a,b,c)일때 a에 있는 b번째 글자에서 c글자만큼 출력

 

**(25) : 2

 

(26) : 4

뭘 썼어도 롤백하면 사라진다는 것이 포인트

 

*(27) : 1

(1) : GROUP BY COLB라는 뜻은 COLB의 값을 기준으로 새로 행을 그룹화 하는 것이다.

(2) : COLB에는 (가,가,나,나,NULL,다,다)가 있으므로 (가,나,다,NULL)로 그룹을 지을 수 있다.
(3) : (가)행을 기준으로 보면 (1,NULL,가,NULL)과 (2,1,가,5가 있다)

(4) : 여기에 MAX(COLA)는 두번째 열인 COLA에서 최댓값을 의미하고, (3)에서 두번째 열은 (NULL)과 (1) 이다.

(5) : 결론적으로, 1이 최댓값이다. 

(6) : COLB (가)로 그룹화 되었을 때, COLA1은 1, COLA2는 1이다. SUMAC는 6인데, SUM(COLA+COLC)에서 똑같이 (가)가 있는 행만 보면 된다. 1+5이므로 6이 나온다. 첫번째 행은 (NULL + NULL = NULL) 두번째 행은 (1+5 = 6)

(7) : 나머지도 동일하게 진행하면 된다.

 

 

**(28) :

(1) : GROUP BY ID라는 뜻은 ID를 기준으로 새로 행을 그룹화 하는 것이다.

(2) : ID에는 (100,100,200,200,200,999,999)가 있으므로 (100,200,999)로 그룹을 지을 수 있다

(3) : HAVING COUNT(*) = 2는 그룹화 된 결과 (100,200,999)에서 카운트가 2인 그룹만 선택하라는 의미이다.

(4) : 100이 2개, 999가 2개이므로 (100,999)로 선택이 된다.

 

**(29) : 3

 

*(30) : 3

(1) : 1/12/(60/30)을 보자마자 1일/12시간/2분을 떠올리기 (일/시간/분)

(2) : 1일/12시간은 2시간이다
(3) : 2시간 / 2분은 1시간 / 1분이다

(4) : 1시간 / 1분은 60분이다.

(5) : 60분은 1시간이므로 자정에서 1시간 추가된거 선택 

 

*(31) : 2

NULLIF(A,B)는 A랑 B랑 같으면 NULL 출력

외우기 쉬운 방법 -> IF(A,B) 먼저 본다 -> 만약 A와 B가 같으면 NULL

 

*(32)  : 4

실행순서와 작성순서는 서로 다르다.

 

실행순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

(1) FROM 절은 테이블을 가리키기에 맨 처음이다

(2) ORDER BY 절은 모든 트랙잭션을 수행하고 나서 최종적으로 출력하기 전에 정렬하기에 맨 마지막이다.

 

(33) : 3

 

(34) : 4

 

**(35) : 4

(나) : '임의로 3개정도씩 묶어서' -> 이렇게 애매한 문장은 답 체크 x

 

(36) : 3

 

*(37)  : 2

순수 관계 연산자 = SELECT, PROJECT, JOIN, DIVIDE

 

**(38) : 4

 

(39) : 2

조인을 하려면 서로 맞는게 있어야함!

 

(40) : 2

조인 개념 몰라도됨, 구매횟수가 3회 이상인거니까 COUNT이다. 

SUM은 말이 안되는게, 구매번호가 1,2면 (= 구매를 두번했으면) 3이 나옴

 

**(41) : 3

 

*(42) : 1

JOIN 문에 AS 사용 못함

 

*(43) : 4

테이블 간 조인 조건이 없는 경우 생길 수 있는 모든 데이터의 조합 

 

*(44) : 1

JOIN 하고 ON 절에 IN(11000,12000)이 있으면 모든 고객에 대해서 출력을 하지만, JOIN 대상 데이터가 11000,12000으로 제한된다

 

**(45) : 4

UNION은 중복된 행 제거

UNION ALL은 중복된 행 제거 X

 

*(46): 1

LEFT OUTER JOIN

(1) 일단 왼쪽 테이블 똑같이 적기

(2) 왼쪽 테이블과 오른쪽 테이블의 같은 속성 찾기

(3) 해당 속성 값 붙이기

 

 

*(47): 1

문제가 불친절한듯..

DEPT가 부서고

부서가 왼쪽에 있으니 LEFT

 

*(48) : 2

 

 

**(49): 1

 

*(50) : 3

SUM(COL1+COL2) 와 같은 칼럼끼리 계산은 NULL이 하나라도 있으면 NULL

SUM(COL1)와 같이 하나의 칼럼에서 레코드끼리 하는건 NULL 0처리 (무시)

 

*(51) : 2

여러 칼럼 반환 = 다중 칼럼 서브쿼리

 

**(52) : 2

 

(53) : 2

합집합 : UNION

교집합 : INTERSECT

차집합 : MINUS/EXCEPT

 

(54) : 4

ORDER BY는 가장 마지막 줄에 한번

 

**(55) : 2

 

*(56) : 1

UNION은 중복이 제거된다

만약 문제의 UNION ALL과 UNION의 위치가 바뀌면 답은 2번이 된다

 

**(57) : 2

 

**(58) : 4

 

(59) : 3

 

*(60) : 2

START WITH랑

PRIOR C1 = C2 이걸 잘 보기

 

(61) : 4

레벨 1

 

*(62) : 1START WITH 절에서 시작한 데이터는 무조건 나온다. 필터에 의해 걸러지지 않음

 

*(63) : 4PRIOR 키워드는 SELECT, WHERE에서도 사용가능추가로, PRIOR 자식 = 부모는 부모에서 자식으로의 전개를 의미한다

 

**(64) : ㅇㅇ

 

(65) : 3

 

**(66) : ㅇㅇ

 

*(67) : 3난해한 문제..

 

*(68) : 2복수행일 때는 ALL, IN 등 복수 행 비교 연산자(마) : 오라클만 가능하다 

 

**(69) : ㅇㅇ

 

**(70) : ㅇㅇ

 

**(71) : 3GROUP BY or 집계 함수 안쓰고 HAVING 절 썼다고 에러나는 건 아니다

 

*(72) : 2비 연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위한 목적이다

 

**(73) : ㅇㅇ

 

**(74) : ㅇㅇ

 

*(75) : 2

 

(76) : 2

VIEW 있으면 그냥 그런가보다 하고 평소처럼 하기

 

**(77) : ㅇㅇ

 

**(78) : ㅇㅇ

 

*(79) : 1 

 

**(80) : 1

 

**(81) : ㅇㅇ

 

**(82) : 2

 

***(83) : ㅇㅇ

 

(84) : 3

 

(85) : 1

RANK()는 탁구대회 처럼 공동1등 다음엔 3등이다

 

(86) : 4

DENSE_RANK() 탁구대회인데 공동 1등 다음에 2등이라고 해준다.

 

(87) : 3

한 건만 출력한다는게 포인트

 

*(88) : 3

RANGE BETWEEN 10000 PRECEDING AND 10000 FOLLOWING

-> 현재에서 -10000~ +10000이다

 

(89) : 1

전반적으로 이런 문제는 PARTITION BY 부서ID 앞에 조건만 잘 보면 얼추 정답인듯

 

*(90) : 4

LAG는 밀린거라고 생각하면 된다. 위에서 누가 눌러서 밀렸다고 생각하기

 

*(91) : 3

 

(92) : 4

 

(93) : 3

연관된거까지 삭제하는게 CASCADE이다.

 

(94) : 3

KIM에게 받은 PARK의 권한은 CASCADE를 PARK에게 써야 삭제가 된다

 

**(95) : ㅇㅇ

 

(96) : 3

INTERSECT는 교집합

 

(97) : 3

<NULL>이 위에서 두번 눌렀다고 생각하면 쉽다

 

(98) : 2

RANK()난 탁구마냥 공동1등 다음이 3등,,, 반복되네 계속

 

**(99) : ㅇㅇ

 

**(100) : ㅇㅇ

 

*(101) : 3

순차적으로 진행하지 않아 발생한 '고립성' 문제라 볼 수 있다

 

**(102) : ㅇㅇ

 

(103) : 3

 

(104) : 4

 

(105) : 3

 

**(106) : ㅇㅇ

 

*(107) : 3

재밋는문제

 

*(108) : 2

FK는 NULL 값이 있을 수 있다

 

*(109) : 3

문제 안에서 같은 열 잘 찾기

 

(110) : 1

DDL은 CAD.. 이런거 평소에 외워두기

 

*(111) : 2

따로따로 보지 말고 같이 보기

1 AAAA

1 BBBB

 

*(112) : 1

오라클의 Text는 Char, VarChar이다

 

*(113) : 4

부모에 PK있을때만 입력 허용 : DEPENDENT

 

(114) : 4

VARCHAR2(1)에 NULL을 INTO해도 '에러'는 안난다

 

*(115) : 2

제약조건이 NOT NULL은이면 INSERT 할 때 해당 컬럼에 넣어야 한다

 

*(116) : 4

DATE에 숫자 넣으면 에러난다

 

(117) : 3

 

(118) : 3

A가 삭제될떄 B가 삭제되게 하려면 A에 CASCADE 달아주면 된다

 

(119) : 1

 

*(120) : 1

지속성에 대한 설명이다

 

**(121) : 3

 

(122) : 2

 

(123) : 3

ROLLBACK는 COMMIT되지 않은거 싹다 지움

 

(124) : 2

 

(125) : 4

값이 동일할 때 함께 나오게 해주는건 WITH TIES

 

**(126) : 3

'SQLD > SQL 자격검정 실전문제' 카테고리의 다른 글

1과목 데이터 모델링의 이해  (2) 2024.11.15