본문 바로가기

Database/ORACLE

SQLD 38회차 주요 기출문제 복원 및 해설

SQLD 38회차 주요 기출문제 복원 및 해설

 

SQLD 38회차 주요 기출문제 복원 및 해설

 

 

아래의 SQL 결과에 대한 것으로 적절한 것은?

<보기>

아래의 SQL 결과에 대한 것으로 적절한 것은?

SELECT COUNT(*)
FROM sqld_01
WHERE col3 <> 2
START WITH col3 = 4
CONNECT BY col1 = PRIOR col2

count(*) 를 * 로 변경하여 직접 실행을 했습니다.

아래와 같이 결과가 나옵니다.

아래의 SQL 결과에 대한 것으로 적절한 것은?

그럼 정답은 2건이 되겠죠.

 

테이블에 대한 권한을 부여하는 DCL 명령어는 무엇인가?

DCL 명령어에는 아래와 같은 명령어 들이 있습니다.

테이블에 대한 권한을 부여하는 DCL 명령어는 무엇인가?

이중에서 권한을 부여하는 DCL 명령어로는 GRANT가 있습니다.

 

※참고 포스팅

https://stricky.tistory.com/202

 

sql 독학 강의# 개념 파악 및 공부법 안내 1편 -sTricky

sql 독학 강의# 개념 파악 및 공부법 안내 컨텐츠 index 1. SQL 명령어 종류 1) DDL 명령어와 예문 2) DML 명령어와 예문 3) DCL 명령어와 예문 2. SQL 공부 요령 1) 문법을 공부하는 방법 2) 직접 SQL을 작성,..

stricky.tistory.com

 

유일한 회원수를 구하는 SQL로 가장 적절한것은 무엇인가?

우선 어떤 회원 명단이 들어있는 테이블이 아래와 같이 있다고 가정을 합니다.

유일한 회원수를 구하는 SQL로 가장 적절한것은 무엇인가?

col1이 회원ID 라고 한다면, 아래와 같이 SQL을 작성하면 유일한 회원수를 구할 수 있습니다.

select count(distinct col1)
from sqld_02;

 

인덱스 생성 구문으로 올바른 것은 무엇인가?

인덱스 생성 구문으로 올바른 예시는 아래와 같습니다.

CREATE INDEX index_name ON table_name (컬럼);

※참고 포스팅

https://stricky.tistory.com/310

 

index 의 중요성과 이해 SQL 독학 강의#24편

index의 중요성과 이해 SQL 독학 강의#24편 콘텐츠 index 0. 인덱스란 무엇인가 1. 인덱스의 종류 2. 인덱스 생성 기준 3. 인덱스의 역효과 4. B-Tree 인덱스 5. 인덱스를 사용할 수 없는 SQL 조건절 6. 인덱�

stricky.tistory.com

 

아래의 SQL 결과로 알맞은 결과는?

INSERT INTO TAB1 VALUES (1);
INSERT INTO TAB1 VALUES (2);
COMMIT; 
INSERT INTO TAB1 VALUES (3);
SAVEPOINT P;
INSERT INTO TAB1 VALUES (4);
ROLLBACK P;

SELECT COUNT(*) FROM TAB1; 

#해설

위 문제는 SAVEPOINT의 이해와 관련된 문제로써, SAVEPOINT P; 라는 구문을 찍어두고 INSERT가 한건 되었지만, 그 뒤에 따라오는 ROLLBACK P;의 명령으로 SAVEPOINT P; 명령 이후 실행 된 INSERT 문은 ROLLBACK 됩니다.

 

그러므로 마지막 SELECT COUNT(*) FROM TAB1;의 결과는 3이 됩니다.

 

아래의 연산자 가운데 우선순위가 가장 낮은것은?

<보기>

1. 괄호

2. 비교연산자, SQL 연산자

3. NOT 연산자

4. AND

5. OR

 

위에 있는 5개의 보기 가운데 우선순위가 가장 낮은 것은 OR 입니다.

 

 

 

연산자들의 우선순위는 다음과 같습니다.

아래의 연산자 가운데 우선순위가 가장 낮은것은?

 

아래 두 SQL의 결과로 알맞은 것은?

select *
from sqld_03
union
select *
from sqld_04;

select *
from sqld_03
union all
select *
from sqld_04;

이 문제의 경우 union all 과 union의 차이점에 대한 문제 입니다.

예를 들어 아래와 같은 두 테이블이 있다고 가정 하겠습니다.

sqld_03
sqld_04

위 두 테이블의 문제의 SQL과 같이 union all 과 union 으로 각각 실행을 한다면 결과는 아래와 같습니다.

 

<union>

union

<union all>

union all

#해설

위 결과와 같이 union은 두 테이블의 중복을 제거하고 출력을 하는 반면, union all 은 중복을 제거 하지 않고 모든 행을 출력 하는 것을 호가인 할 수 있습니다.

 

아래 테이블을 보고 select를 수행한 결과값이 다른 하나는?

<보기>

아래 테이블을 보고 select를 수행한 결과값이 다른 하나는?

1. select count(3) from sqld_05;

2. select count(회원번호) from sqld_05;

3. select count(nullif(회원번호, 주문번호)) from sqld_05;

4. select count(*) from sqld_05 where 회원번호 is not null;

 

정답은 6건이 나오는 1번이 정답 입니다.

그외 2,3,4번의 보기의 결과는 4건 입니다.

 

 

 

#해설

count() 함수 안에 특정 컬럼을 넣는다면 null 데이터는 count 되지 않습니다. 3번 보기의 경우 회원번호와 주문번호가 같으면 Null, 같지 않으면 회원번호 데이터가 되기 때문에 결국 count 되지 않는것 이죠. 4번 보기는 회원번호가 null이 아닌 데이터만 count되기에 4가 나오는것 이구요.

 

아래 SQL 결과를 참고하여 SQL의 빈칸을 채우시오.

<보기>

Rank

--------

1

2

3

... --> 동일한 rank가 없으며 연속된 숫자로 이어짐

SELECT (     ) OVER (PARTITION BY ... ) 

정답은 ROW_NUMBER 입니다.

 

※해설

rank 함수는 order by를 포함한 SQL문에서 특정 항목에 대한 순위를 구합니다. 이때 특정 범위를 partition by를 통해서 지정 할 수 있으며, 이러한 옵션 없이 전체 데이터에 대한 순위를 구 할 수 있습니다.

rank 함수

 

dense_rank의 경우 동일한 순위를 하나의 건수로 취급하여 rank를 표시 하게 됩니다.

dense_rank

row_number의 경우 동일한 값이라도 고유한 번호를 지정하여 출력 합니다. 동일한 값일때는 오라클에서는 rowid가 작은 행이 먼저 번호를 부여받게 됩니다.

 

동일한 값을 기준으로 고유한 번호를 부여하고 싶다면 rank가 아닌 now_number를 사용 하여야 합니다.

 

 

아래 Oracle SQL의 결과와 동일한 결과를 얻을수 있는 SQL Server의 SQL문의 빈칸을 채워 넣으시오.

<Oracle>

CREATE TABLE TEAM_TEMP AS SELECT * FROM TEAM ;

<SQL Server>

SELECT * (        ) FROM TEAM;

정답은 INTO TEAM_TEMP 입니다.

 

 

 

※해설

SQL Server의 경우 Oracle과 create... as.. select... 문법이 상이 합니다.

 

아래 SQL 결과를 쓰시오.

<보기>

CREATE TABLE TAB1 .... 

INSERT INTO TAB1 VALUES (...) ;
INSERT INTO TAB1 VALUES (...) ;

CREATE TABLE TAB2 ....  

ROLLBACK;

SELECT COUNT(*) FROM TAB1; 

위 결과는 2 입니다.

 

※해설

Oracle에서 DDL이 실행 되면 암묵적인 commit이 발생 합니다. 

그리하여 TAB2의 CREATE 문이 실행될때 앞서 실행 되었던 2건의 insert문이 commit 되어 결과가 2가 나오게 됩니다.

 

오늘은 여기까지 정리를 하고, 추후 더 추가하도록 하겠습니다.

감사합니다.

 

 

 

 

by.sTricky