LoginSignup
14
30

More than 1 year has passed since last update.

SQL文チートシート②

Last updated at Posted at 2021-04-29

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文はカラムやテーブル名をエイリアスとして変更することができます。さっそくカラム名を変更してみます。

movies.sql
SELECT name AS 'Titles'
FROM movies;

SQL結果

Titles
Into The Wild
Point Break
Inception
Pulp Fiction
Se7en
Seven

シングルクォートではなくても大丈夫ですが、ASを使用する際は慣習的にシングルクォートを使います。また、ASはテーブルのカラムの名前を実際には変更しておらず、結果として仮に別の名前で表示しているだけです。

DISTINCT

DISTINCT文は指定したカラムでダブっている値をフィルタリングします。

moives.sql
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 以下)
moives.sql
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つです。

  • _
  • %

「 _ 」の使い方

_は一つの文字を表します。

moives.sql
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個かそれ以上の数の文字を表します。

moives.sql
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句の中で使われ、「数字」「文字」「日付」の値の範囲を指定しフィルタリングすることができます。

moives.sql
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の行を表示します。

moives.sql
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であれば、その行を表示します。

moives.sql
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 = 降順
で指定することが可能です。

moives.sql
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は取得するデータの行数の上限を設定することができます

moives.sql
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を返します。

moives.sql
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
14
30
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
14
30