NLP Learner in Switzerland

데이터베이스시스템 2020년도 중간고사 문제 및 답안[Q1~Q3] 본문

Database SQL/Exercise

데이터베이스시스템 2020년도 중간고사 문제 및 답안[Q1~Q3]

초코빵 2021. 4. 30. 10:00
728x90
반응형

 

 

 

@University of Zurich

 

 

 

< 아래의 Sports League Schema 데이터를 토대로 문제가 진행된다 >

 

 

 

Question 1

[답] 3번

주어진 RA statement를 그대로 해석하면, Last name은 같으나 Home country가 다른 두 선수를 뽑아내게 된다. 이 설명에 맞는 것은 3번이다. 4번이 틀린 이유는 exactly two players만 뽑아내기 때문이다. 위의 statement로는 last name이 같은 선수가 2명이상일 경우에도 output에 출력된다.

 

 

 

[답]  E, E, NE, NE, E, NE

MC(Multiple choice)문제이므로 각각에 대해 주어진 natural language와 동일한 쿼리를 고르면 된다. 예제 테이블을 짤막하게 만들어놓고 풀면 쉽게 풀린다. 3번째가 NE인 이유는 projection(π) 수행에 잘못된 조건이 들어가서이다. Age>=35는 튜플을 골라낼 수 있는 조건이라 selection(σ)을 써야한다. projection은 attribute 즉 컬럼을 뽑아내기 때문이다. 그리고 4번째는 교집합을 수행하려면 기본적으로 두 table의 컬럼명, 컬럼수, 컬럼데이터타입이 같아야 하는데 같지가 않아서 수행되지가 않는다. 마지막 6번째도 3번째와 비슷하게 잘못된 조건때문이다. cartesian product(Χ)는 조건이 없이 전체 튜플수를 곱한 값을 결과로 반환한다. 조건이 들어가면 조인이 된다.

 

 

 

Question 2

[답]  E,  NE, NE, E

경기에서 이겼던 모든 팀의 이름을 찾는다. 개어려워 이해가 안감.

 

 

 

[답]  2번

주어진 DRC query를 해석해보면, 모든 팀을 찾는다, 모든 매치가 있는, 그런데 이후의 매치의 골이 더 적은 것이 없는.

이에 해당하는것은 2번 뿐이다.

 

 

 

Question 3

[답]  (a) TFTTF, (b) FFTFF

(a)는 Q1 query와 Q2 query의 비교이다. 쿼리문을 보면 Q1과 Q2의 결과값이 동일하게 국가가 CH이거나 홈구장이 Hallenstadion인 팀을 나타낸다. 같은 결과값을 가지므로 서로의 strict한 subset이나 superset이 될 수 없다.

(b)는 Q2 query와 Q3 query의 비교이다. 중요한 포인트는 UNION과 UNION ALL의 차이이다. UNION은 중복값이 제거되고, UNION ALL은 중복값이 도출된다. 따라서 Q2와 Q3는 중복값이 없다면 동일하거나, 아니면 Q2가 작을 수밖에 없다. 이와 연결되어서 4번째 F가 헷갈렸다. Q2와 Q3는 같을수도 있긴 하지만, 서로 다른경우 무조건 Q2<Q3이므로 Q2는 Q3의 superset은 될 수 없다.

 

 

 

[답]  E, E, E, NE

주어진 natural language를 그대로 해석하면, 한번도 경기를 치뤄보지 않은 두 팀이다.

NOT EXISTS는 우리가 상식적으로 생각하는, '뒤에 붙는 nested query에 땡땡이 없으면 true' 인데 반면,

NOT IN은 nested query 전체를 두고 판단한다. 만약 NOT IN뒤에 nested query에서 하나라도 매치되는 값을 못찾으면 찾은 것에 대해서만 반환해주는게 아니라, 그냥 전체 unknown으로 반환해버린다. 따라서 NOT IN을 쓸 때에는 nested query에 매치시키는 부분을 주의해야한다. 4번째의 경우가 이 케이스이다. 3번째도 NOT IN을 썼지만, 매치와 상관없이 그냥 match table에 있는 값 자체를 읽어오도록했기 때문에 문제가 없다.

 

 

 

[답]  3번

주어진 natural language를 그대로 해석하면, 적어도 한명의 이탈리아인 선수가 있는 스위스팀이다.

나머지는 쿼리를 천천히 읽어보면 다 맞다는걸 알 수 있지만 3번째 쿼리는 not이 두번이라 많이 헷갈리긴 한다.

해석해보면 이탈리아인이 아닌 선수가 존재하지 않는 스위스팀이 된다. 예를 들어, 한국선수, 스위스선수, 프랑스선수, 이탈리아선수가 속한 스위스팀은 결과값에 반환되어야 하지만, 3번째 쿼리의 해석대로라면 반환이 되지 않는다.

 

Comments