프로그래밍/MySQL

[MySQL] SQL ZOO Nobel Quiz 답 해설

모영이 2021. 3. 12. 13:32

1. LIKE 두번 사용

LIKE 'C%' -> C로 시작하는 문자열

LIKE '%n' -> n으로 끝나는 문자열

이거 두개를 AND로 이어주면 된다. 

 

2. COUNT 사용

COUNT(칼럼명) -> 칼럼의 데이터의 개수

집계함수를 WHERE절에서 사용해야 할때는 주의가 필요하다.

데이터가 여러개 들어와야 사용할 수 있다고 생각하면 편하다.

내가 생각한 팁(아닐 수 있음)

SELECT절에서의 subject는 여러개의 subject데이터를 선택을 하니깐 사용가능

WHERE절에서의 subject는 subject칼럼의 데이터 1개 값을 의미하기때문에 사용이 불가능하다.

하지만 서브쿼리를 사용하면 사용이 가능하고 또, HAVING절에서 사용가능하다.

 

3. DISTINCT 사용, NOT IN 사용

DISTINCT 칼럼명 -> 칼럼의 중복을 제외한 값

내가 생각한 팁(아닐 수 있음)

NOT IN은 IN의 반대다. any의 반대 every

IN은 어떤(any)값이 있으면 참

NOT IN은 모든(every)값이 없으면 참

 

4. LIKE 두번 사용

LIKE 사용하는건 많이 했으니깐 외우는 방법

내가 생각한 팁(아닐 수 있음)

%가 XXXXX라고 생각하면 쉬움

LIKE 'Sir%' -> SirXXXXXXXX

LIKE '%ed' -> XXXXXXXed

LIKE '%hi%' -> XXXXhiXXXX

X는 모르는 문자

이거 대박 꿀팁, 사실 외울 필요는 없지만 코테 공부하는 사람들을 위해..

내일 코테 꼭 붙자. @@@부적@@@

 

5. 서브쿼리 사용

화학과 물리학 둘 중 하나라도 만족한 주제의 노벨상 데이터의 연도 -> A 라 하면

yr NOT IN A -> 화학과 물리학를 모두 타지 않은 노벨상 데이터의 연도

즉 정답인 화학, 물리학을 둘 다 동시에 못 받은 연도를 출력 

갑자기 서브쿼리가 나와서 당황했을 수도 있지만, 앞으로도 많이 나오기 때문에 연습이 충분히 가능하다..!

 

6. 서브쿼리 사용

이전문제랑 헷갈리면 안된다. 여기는 둘 중 하나라도 받으면 안된다.

이전문제는 둘 중 하나만 받는게 가능하지만,

이번엔 둘 중 하나도 받으면 안되니깐 각각 연도를 제외시켜주어야 한다.

그리고 DISTINCT사용은 덤

 

7. GROUP BY 사용, COUNT 사용

GROUP BY 칼럼명 -> 칼럼을 기준으로 그룹화 한다.

여기서 정말 유의할 점은 그룹화 하지 않은 데이터들에 접근하는게 불가능하다. 

GROUP BY subject로 하고 SELECT yr을 할 수 없다는 것이다.

subject가 유니크 한 값으로 정렬되는데, 다른 데이터들은 신경쓰지 않고 그룹화해버린다.

또한 WHERE절에서 집계함수를 바로 못사용하지만,

GROUP BY 한 후에 HAVING절로 그룹화된 데이터의 집계함수 사용이 가능하다.

복잡하게 들리겠지만, 앞으로 문제를 풀면서 마주칠게 분명하니깐!

천천히 하면 배울 수 있을 것이다.