0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SQL ZOO 解答集】(3 SELECT from Nobel)

Last updated at Posted at 2020-01-13

本投稿の目的

  • sql学習サイトsqlzooを用いたsqlの学習と理解
  • 学習のアウトプット
  • 学習メモとして、かつ公式の解答ページがなかったので作成した。

0 SELECT basics
1 SELECT name
2 SELECT from World
3 SELECT from Nobel(このページ)
4 SELECT within SELECT
5 SUM and COUNT
6 JOIN
7 More JOIN operations
8 Using Null
8+ Numeric Examples
9 Self join

3 SELECT from Nobel

yr subject winner
1960 Chemistry Willard F. Libby
1960 Literature Saint-John Perse
1960 Medicine Sir Frank Macfarlane Burnet
1960 Medicine Peter Madawar

問題1

1950年度のノーベル賞受賞者を表示するようにクエリーを修正する。
SELECT yr, subject, winner
FROM nobel
WHERE yr = 1950

問題2

ノーベル文学賞(Literature)を1962年に受賞した人を表示
SELECT winner
FROM nobel
WHERE yr = 1962
AND subject = 'Literature'

問題3

アルバート・アインシュタイン(Albert Einstein)がノーベル賞を受賞した年と分野を表示
SELECT yr, subject
FROM nobel
WHERE winner = 'Albert Einstein' 

問題4

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

問題5

1980年から1989年までの文学賞受賞者の詳細(年、主題、受賞者)をすべて表示。
SELECT *
FROM nobel
WHERE yr between 1980 AND 1989 AND subject = 'Literature'

問題6

大統領の勝者の詳細をすべて表示します。
  • セオドア・ルーズベルト
  • ウッドロー・ウィルソン
  • ジミー・カーター
  • バラック・オバマ
SELECT * 
FROM nobel
WHERE winner IN ('Theodore Roosevelt',
                 'Woodrow Wilson',
                 'Jimmy Carter',
                 'Barack Obama')

問題7

名がジョンの受賞者を表示する
SELECT winner
FROM nobel
WHERE winner like 'John%'

問題8

1980年の物理学の受賞者の年、主題、および名前を、1984年の化学の受賞者とともに表示します。
SELECT *
FROM nobel
WHERE (subject = 'Physics' AND yr = 1980) 
   OR (subject = 'Chemistry' AND yr = 1984)

問題9

化学と医学を除く1980年の受賞者の年、主題、名前を表示する

NOT INを使って対象のデータを除外。

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

問題10

はじめに(1910年以前、1910年を除く)「医学」賞を受賞した人々の年、主題、および名前を表示、
後に(2004年、2004年を含む)に「文学」賞の受賞者とともに表示する。

<,>,>=の使い分け、and,orの使い方を学びましょう!

SELECT *
FROM nobel
WHERE (yr < 1910 and subject = 'Medicine')
   OR (yr >= 2004 and subject =  'Literature')

問題11

非ASCII文字のÜ(ウムラウト)を使いましょう。SQL自体は簡単です。
https://en.wikipedia.org/wiki/%C3%9C#Keyboarding

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

問題12

ユージーンオニールが受賞した賞の詳細をすべて見る

検索対象に「'」(シングルクオート)が入っていた場合どうするか?という問題。
A.「''」シングルクオートの後に加えて付ければいい。

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

問題13

受賞者、年、および受賞者がSirで始まるようにリスト化する。
最新(年)のものを最初に、次に名前の順に表示します。
SELECT winner, yr, subject
FROM nobel 
WHERE winner LIKE 'Sir%'

サイトではこれでも正解になってしまう。厳密に書くと

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

ORDER BYは明示的に行の順序を指定する。
例:ORDER BY <並べ替えの基準となる列1>, <並べ替えの基準となる列2>,...

問題14

SUBJECT IN( 'Chemistry'、 'Physics')は値として使用できる。(0または1)

1984年の受賞者と件名を、件名と受賞者名で並べて表示。
最後に化学と物理を並べる。

突然ハイレベルになりました。汗
つまり**「INに含まれるものに”1”を、それ以外には”0”を付与される」**ことを利用し、
その順番に並べなさいという意味です。

--デフォルトで書いてあるSQl
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN subject, winner

解説

※ subject IN ('Chemistry','Physics')
の IN は比較演算子で、
この一文は subjectの値が‘Chemistry’ もしくは ‘Physics’ に一致するかどうかを比較・判定する式になってます。
一致する場合はtrue、そうでない場合はfalseを返ってきます。
そして、多くのプログラム言語でtrueは1、falseは0としても扱われます。

まだ説明足りない気もしますが、
↓のSQL実行してみるとイメージしやすいかもしれません

解答

-- (答えのSQLのSELECT句に subject IN (‘Chemistry’,‘Physics’)  を足す。)

SELECT winner, subject
FROM nobel 
WHERE yr=1984 
ORDER BY subject IN ('Chemistry','Physics'), subject, winner

前回
2 SELECT from World
次回
[4 SELECT within SELECT]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?