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つを使用します。
AND
OR
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 |