프로그래밍/MySQL

[MySQL] SQL ZOO SELECT from Nobel 답 해설

모영이 2021. 2. 19. 18:00

 

SELECT from Nobel Tutorial - SQLZOO

nobel yr subject winner 1960 Chemistry Willard F. Libby 1960 Literature Saint-John Perse 1960 Medicine Sir Frank Macfarlane Burnet 1960 Medicine Peter Madawar ... nobel Nobel Laureates We continue practicing simple SQL queries on a single table. This tutor

sqlzoo.net

 

#1 Winner from 1950

SELECT yr, subject, winner
FROM nobel
WHERE yr = 1950

 

#2 Literature

SELECT winner
FROM nobel
WHERE yr = 1962 AND subject = 'Literature'

 

#3 Albert Einstein

SELECT yr, subject 
FROM nobel
WHERE winner = 'Albert Einstein'

 

#4 Recent Peace Prizes

SELECT winner
FROM nobel
WHERE subject = 'Peace' AND yr >= 2000

 

#5 Literature in the 1980's

SELECT yr, subject, winner
FROM nobel
WHERE subject = 'Literature ' AND yr >= 1980 AND yr <= 1989

 

#6 Only Presidents

IN을 사용해서 여러개 값 비교 가능 

IN은 WHERE절에서 OR대신 사용 가능하다.

콤마로 구분해서 괄호 내에 묶는다.

이 중 하나라도 같으면 조건에 맞는 것이다.

SELECT * FROM nobel
WHERE winner IN ('Theodore Roosevelt',
                  'Woodrow Wilson',
                  'Jimmy Carter', 'Barack Obama')

 

#7 John

LIKE를 사용해서 문자가 포함되어 있는지 검색

SELECT winner
FROM nobel
WHERE winner LIKE 'John%'

 

#8 Chemistry and Physics from different years

SELECT yr, subject, winner
FROM nobel
WHERE (yr = 1980 AND subject = 'Physics') OR (yr = 1984 AND subject = 'Chemistry')

 

#9 Exclude Chemists and Medics

NOT IN을 사용해서 여러개 값을 제외한 검색을 할 수 있다.

SELECT yr, subject, winner
FROM nobel
WHERE yr = 1980 AND subject NOT IN ('Chemistry', 'Medicine')

 

#10 Early Medicine, Late Literature

SELECT yr, subject, winner
FROM nobel
WHERE (yr < 1910 AND subject = 'Medicine') OR (yr >= 2004 AND subject = 'Literature')

 

#11 Umlaut

SELECT *
FROM nobel
WHERE winner = 'PETER GRÜNBERG'

 

#12 Apostrophe

작은 따옴표 출력시 ''이렇게 두개를 붙여 주어야 한다.

SELECT *
FROM nobel
WHERE winner = 'EUGENE O''NEILL'

 

#13 Knights of the realm

ORDER BY를 사용하면 정렬이 가능하고 DESC는 내림차순, ASC는 오름차순이다.

DESC 10 -> 9 -> 8 -> 7 -> 6

ASC   6 -> 7 -> 8 -> 9 -> 10

ORDER BY 칼럼명 차순설정 이렇게 쓰면 된다.

SELECT winner, yr, subject
FROM nobel
WHERE winner LIKE 'Sir%' 
ORDER BY yr DESC, winner ASC

 

#14 Chemistry and Physics last

CASE문은 WHEN절 뒤에 조건을 걸고 THEN에 참일시 반환 값을 작성한다.

WHEN절과 THEN절을 여러개 사용할 수 있다.

ELSE절을 사용해서 WHEN이 거짓일 시 반환 값을 작성한다.

END로 WHEN절을 끝마치면 된다.

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY 
CASE WHEN subject IN ('Physics','Chemistry')
     THEN 1
     ELSE 0
END ,subject,winner