SQL文チートシート①の続き
目次
- AS
- DISTINCT
- WHERE
- LIKE
- BETWEEN
- ORDER BY
- LIMIT
- CASE
使用テーブル
moviesテーブルスキーマ
| name | type |
|---|---|
| id | INTEGER |
| name | TEXT |
| genre | TEXT |
| year | INTEGER |
| rating | INTEGER |
moviesテーブルデータ
| id | name | genre | year | rating |
|---|---|---|---|---|
| 1 | Into The Wild | adventure | 2007 | 9 |
| 2 | Point Break | action | 1991 | 5 |
| 3 | Inception | SF | 2010 | 3 |
| 4 | Pulp Fiction | comedy | 1994 | 7 |
| 5 | Se7en | action | 1992 | 10 |
| 6 | Seven | action | 1999 | 8 |
AS
AS文はカラムやテーブル名をエイリアスとして変更することができます。さっそくカラム名を変更してみます。
SELECT name AS 'Titles'
FROM movies;
SQL結果
| Titles |
|---|
| Into The Wild |
| Point Break |
| Inception |
| Pulp Fiction |
| Se7en |
| Seven |
シングルクォートではなくても大丈夫ですが、ASを使用する際は慣習的にシングルクォートを使います。また、ASはテーブルのカラムの名前を実際には変更しておらず、結果として仮に別の名前で表示しているだけです。
DISTINCT
DISTINCT文は指定したカラムでダブっている値をフィルタリングします。
SELECT DISTINCT genre
FROM movies;
SQL結果
| genre |
|---|
| adventure |
| action |
| SF |
| comedy |
ダブっていたcomedyがフィルタリングされました。
WHERE
WHERE句は指定した範囲の情報を取得することができ、以下の様なさまざまな比較演算子が使われます。
- A = B(A と B が等しい)
- A <> B or A != B(A と B が等しくない。)
- A > B(A より B が小さい)
- A < B(A より B が大きい)
- A >= B(A が B 以上)
- A <= B(A が B 以下)
SELECT *
FROM movies
WHERE rating <= 7;
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 2 | Point Break | action | 1991 | 5 |
| 3 | Inception | SF | 2010 | 3 |
| 4 | Pulp Fiction | comedy | 1994 | 7 |
Like
LIKEはWHERE句とセットで使用し、カラム内のある特定のパターンにマッチした値を取得します。その際に使用できるワイルドカードが以下の2つです。
_%
「 _ 」の使い方
_は一つの文字を表します。
SELECT *
FROM movies
WHERE name LIKE 'Se_en';
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 5 | Se7en | action | 1992 | 10 |
| 6 | Seven | action | 1999 | 8 |
_が一文字分のワイルドカードとして機能し、Seから始まりenで終わる値にマッチし取得することができます。
「 % 」の使い方
%は0個かそれ以上の数の文字を表します。
SELECT *
FROM movies
WHERE name LIKE 'I%';
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 1 | Into The Wild | adventure | 2007 | 9 |
| 3 | Inception | SF | 2010 | 3 |
I%は映画の名前がIから始まる全ての映画にマッチします。
BETWEEN
BETWEENはWHERE句の中で使われ、「数字」「文字」「日付」の値の範囲を指定しフィルタリングすることができます。
SELECT *
FROM movies
WHERE year BETWEEN 1990 AND 1999;
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 2 | Point Break | action | 1991 | 5 |
| 4 | Pulp Fiction | comedy | 1994 | 7 |
| 5 | Se7en | action | 1992 | 10 |
| 6 | Seven | action | 1999 | 8 |
WHERE句内での条件の組み合わせ
WHERE句内で複数の条件で絞り込む場合以下の2つを使用します。
ANDOR
AND
ANDはすべての条件がtrueの行を表示します。
SELECT *
FROM movies
WHERE year BETWEEN 1990 AND 1999
AND genre = 'action';
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 2 | Point Break | action | 1991 | 5 |
OR
ORは条件が一つでもtrueであれば、その行を表示します。
SELECT *
FROM movies
WHERE year BETWEEN 1990 AND 1999
OR genre = 'SF';
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 2 | Point Break | action | 1991 | 5 |
| 3 | Inception | SF | 2010 | 3 |
| 4 | Pulp Fiction | comedy | 1994 | 7 |
| 5 | Se7en | action | 1992 | 10 |
| 6 | Seven | action | 1999 | 8 |
ORDER BY
ORDER BYはSQLの結果を数字もしくは文字で任意の順番にソートすることができます。
ASC = 昇順
DESC = 降順
で指定することが可能です。
SELECT *
FROM movies
WHERE rating >= 8
ORDER BY year DESC;
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 1 | Into The Wild | adventure | 2007 | 9 |
| 6 | Seven | action | 1999 | 8 |
| 5 | Se7en | action | 1992 | 10 |
ratingが8以上の行を公開年が新しいもの順に並べ替えました。
LIMIT
LIMITは取得するデータの行数の上限を設定することができます
SELECT *
FROM movies
LIMIT 3;
SQL結果
| id | name | genre | year | rating |
|---|---|---|---|---|
| 1 | Into The Wild | adventure | 2007 | 9 |
| 2 | Point Break | action | 1991 | 5 |
| 3 | Inception | SF | 2010 | 3 |
補足:
LIMITは必ずクエリ最後に書きます。また、LIMITをサポートしてないSQLデータベースがあります。
CASE
CASEはWHENで指定した条件を上から順番にチェックしていき、最初にtrueとなる条件の結果を返します。
もしいずれにも合致せず、ELSEが指定されている場合はELSEの結果を返します。
また、どれも合致せず、ELSEが指定されていない場合はNULLを返します。
SELECT name,
CASE
WHEN rating >= 9 THEN 'Awesome'
WHEN rating >= 5 THEN 'Good'
ELSE 'Bad'
END AS 'Review'
FROM movies;
SQL結果
| name | Review |
|---|---|
| Into The Wild | Awesome |
| Point Break | Good |
| Inception | Bad |
| Pulp Fiction | Good |
| Se7en | Awesome |
| Seven | Good |