演習: 絞り込み
bookstore データベースで練習します。最初に USE bookstore; で切り替えてください。
2-a. ISBN で書籍を特定する
Section titled “2-a. ISBN で書籍を特定する”ISBN が 9784101010137 の書籍について、タイトル、価格、在庫を表示してください。
期待される結果:
| title | price | stock |
|---|---|---|
| こころ | 473 | 45 |
ヒント
= で値の一致を判定します。文字列はシングルクォートで囲みます。
2-b. 高額書籍の確認
Section titled “2-b. 高額書籍の確認”価格が 4000 円以上の書籍を、タイトルと価格で、価格の高い順、同じ価格の中では書籍 ID の昇順に表示してください。
期待される結果:
| title | price |
|---|---|
| SRE サイトリライアビリティエンジニアリング | 5280 |
| データ指向アプリケーションデザイン | 5060 |
| リファクタリング(第2版) | 4840 |
| Googleのソフトウェアエンジニアリング | 4840 |
| プログラミング言語Go | 4180 |
| Clean Code | 4104 |
ヒント
比較演算子 >= で「以上」を判定します。ORDER BY ... DESC で降順に並べます。
2-c. 価格帯の書籍を調べる
Section titled “2-c. 価格帯の書籍を調べる”価格が 2400 円以上 2700 円以下の書籍を、タイトルと価格で、価格の安い順、同じ価格の中では書籍 ID の昇順に表示してください。
期待される結果:
| title | price |
|---|---|
| ビジョナリー・カンパニー2 | 2420 |
| ハリー・ポッターと賢者の石 | 2420 |
| 思考は現実化する | 2420 |
| アルゴリズム図鑑 | 2618 |
| リーダブルコード | 2640 |
| 21 Lessons | 2640 |
ヒント
BETWEEN A AND B で「A 以上 B 以下」を表せます。両端を含みます。
2-d. シリーズものを探す
Section titled “2-d. シリーズものを探す”タイトルが「ハリー・ポッター」で始まる書籍を、タイトル、発売日、価格で、発売日の古い順に表示してください。
期待される結果:
| title | published_at | price |
|---|---|---|
| ハリー・ポッターと賢者の石 | 1999-12-01 | 2420 |
| ハリー・ポッターと秘密の部屋 | 2000-09-19 | 2090 |
| ハリー・ポッターとアズカバンの囚人 | 2001-07-16 | 2310 |
ヒント
LIKE 'パターン%' で前方一致を表せます。% は0文字以上の任意の文字列にマッチします。
2-e. テーマ検索
Section titled “2-e. テーマ検索”タイトルに「データ」が含まれる書籍を、タイトルと価格で、価格の安い順に表示してください。
期待される結果:
| title | price |
|---|---|
| SQL 第2版 ゼロからはじめるデータベース操作 | 2068 |
| データ指向アプリケーションデザイン | 5060 |
ヒント
前後に % を付けると部分一致になります。
2-f. 海外著者の一覧
Section titled “2-f. 海外著者の一覧”authors テーブルから、国(country)が「アメリカ」または「イギリス」の著者を、名前と国で、国の昇順、同じ国の中では著者 ID の昇順に表示してください。
期待される結果:
| name | country |
|---|---|
| ヘミングウェイ | アメリカ |
| ピーター・ドラッカー | アメリカ |
| ジム・コリンズ | アメリカ |
| ダスティン・ボスウェル | アメリカ |
| アンドリュー・ハント | アメリカ |
| ロバート・C・マーティン | アメリカ |
| フレデリック・P・ブルックス Jr. | アメリカ |
| アラン・ドノバン | アメリカ |
| スティーブン・R・コヴィー | アメリカ |
| ジャレド・ダイアモンド | アメリカ |
| D・カーネギー | アメリカ |
| ナポレオン・ヒル | アメリカ |
| タイタス・ウィンタース | アメリカ |
| リチャード・P・ファインマン | アメリカ |
| ベッツィ・ベイヤー | アメリカ |
| アガサ・クリスティー | イギリス |
| リンダ・グラットン | イギリス |
| マーチン・ファウラー | イギリス |
| J.K.ローリング | イギリス |
| マーティン・クレップマン | イギリス |
ヒント
IN (A, B, ...) で複数の値のいずれかに一致する行を取り出せます。ORDER BY はカンマ区切りで複数列を指定できます。
2-g. 情報が欠けている著者
Section titled “2-g. 情報が欠けている著者”authors テーブルから、生年(birth_year)が登録されていない著者を、名前と国で、著者 ID の昇順に表示してください。
期待される結果:
| name | country |
|---|---|
| ダスティン・ボスウェル | アメリカ |
| ミック | 日本 |
| アラン・ドノバン | アメリカ |
| マーティン・クレップマン | イギリス |
| タイタス・ウィンタース | アメリカ |
| ベッツィ・ベイヤー | アメリカ |
ヒント
NULL の判定には IS NULL を使います。= NULL では判定できません。
2-h. 漫画以外のベストセラーを確認する
Section titled “2-h. 漫画以外のベストセラーを確認する”漫画(category_id = 7)はシリーズ単位で在庫数が膨らむため、単発のベストセラーを把握したいときは除外したい。漫画以外で、在庫が 50 冊を超える書籍を、タイトル、カテゴリ ID、在庫で、在庫の多い順、同じ在庫の中では書籍 ID の昇順に表示してください。
期待される結果:
| title | category_id | stock |
|---|---|---|
| 容疑者Xの献身 | 1 | 65 |
| 完訳 7つの習慣 | 5 | 62 |
| ノルウェイの森 上 | 1 | 58 |
| 嫌われる勇気 | 5 | 58 |
| ノルウェイの森 下 | 1 | 55 |
| 生き方 | 2 | 55 |
| ガリレオの苦悩 | 1 | 52 |
ヒント
<>(または !=)は「等しくない」を表す演算子です。= の否定として使います。複数の条件は AND で組み合わせます。
2-i. 極端な価格帯の書籍
Section titled “2-i. 極端な価格帯の書籍”価格が 500 円以下、または 4000 円以上の書籍を、タイトルと価格で、価格の安い順、同じ価格の中では書籍 ID の昇順に表示してください。
期待される結果:
| title | price |
|---|---|
| DRAGON BALL 1 | 420 |
| ONE PIECE 1 | 440 |
| ONE PIECE 2 | 440 |
| こころ | 473 |
| Clean Code | 4104 |
| プログラミング言語Go | 4180 |
| リファクタリング(第2版) | 4840 |
| Googleのソフトウェアエンジニアリング | 4840 |
| データ指向アプリケーションデザイン | 5060 |
| SRE サイトリライアビリティエンジニアリング | 5280 |
ヒント
OR は「左右どちらかの条件が真なら真」です。安い側と高い側を 1 つの結果にまとめられます。
2-j. 現代の著者を絞り込む
Section titled “2-j. 現代の著者を絞り込む”authors テーブルから、生年(birth_year)が登録されていて、かつ 1950 年以降に生まれた著者を、名前と生年で、生年の古い順、同じ生年の中では著者 ID の昇順に表示してください。
期待される結果:
| name | birth_year |
|---|---|
| ロバート・C・マーティン | 1952 |
| リンダ・グラットン | 1955 |
| 鳥山明 | 1955 |
| 岸見一郎 | 1956 |
| 東野圭吾 | 1958 |
| ジム・コリンズ | 1958 |
| マーチン・ファウラー | 1963 |
| アンドリュー・ハント | 1964 |
| J.K.ローリング | 1965 |
| 安宅和人 | 1968 |
| 伊坂幸太郎 | 1971 |
| 尾田栄一郎 | 1975 |
| ユヴァル・ノア・ハラリ | 1976 |
| 又吉直樹 | 1980 |
| 諫山創 | 1986 |
| 石田保輝 | 1988 |
ヒント
IS NOT NULL で NULL 以外の行を絞り込めます。AND で複数条件を組み合わせ、ORDER BY は複数キーを指定できます。