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?

SQL① (SELECT, WHERE, ORDER BY)

Posted at

SQLの備忘録とマークダウンの書き方練習です:writing_hand:

目次

  1. 使用するテーブル
  2. 列の指定(SELECT)
  3. 条件指定(WHERE)
  4. 並びかえ(ORDER BY)

1.使用するテーブル

今回は以下の「users」テーブルを例にします

id name age is_active
1 佐藤太郎 16 1
2 山田花子 26 0
3 鈴木次郎 18 0
4 田中A美 28 1

何かの会員データベースだと思ってください。それぞれの列の意味は以下の通りとなります

  • id:ID
  • name:名前
  • age:年齢
  • is_active:アクティブなユーザ(1ならアクティブ、0なら非アクティブ)

2.列の指定(SELECT)

基本的な書き方

SELECT 列名 FROM テーブル名;

例「usersテーブルから全ての列を抽出したい」

書き方

  • テーブル名→users
  • 列名→*
    ※「*(アスタリスク)」は全ての列という意味
SELECT * FROM users;

実行結果(usersテーブルがそのまま抽出されます)

id name age is_active
1 佐藤太郎 16 1
2 山田花子 26 0
3 鈴木次郎 18 0
4 田中A美 28 1

例「usersテーブルから名前の列を抽出したい」

書き方

  • テーブル名→users
  • 列名→name
SELECT name FROM users;

実行結果

name
佐藤太郎
山田花子
鈴木次郎
田中A美

例「usersテーブルからidと年齢の列を抽出したい」

書き方

  • テーブル名→users
  • 列名→id, age
    ※複数ある場合は「,(カンマ)」で区切ります。
SELECT id, age FROM users;

実行結果

id age
1 16
2 26
3 18
4 28

3.条件指定(WHERE)

条件に一致するデータを抽出したいときは「WHERE」句を使います

基本的な書き方

SELECT 列名 FROM テーブル名 WHERE 条件;

条件の部分では比較演算子や論理演算子を使用して記述します

比較演算子

演算子 意味
= 等しい age = 18 (年齢が18のもの)
!= または <> 等しくない age != 18 または age <> 18 (年齢が18でないもの)
> より大きい age > 18 (年齢が18より大きい)
< より小さい age < 18 (年齢が18より小さい)
>= 以上 age >= 18 (年齢が18以上)
<= 以下 age <= 18 (年齢が18以下)
BETWEEN A AND B A 以上 B 以下 age BETWEEN 10 AND 20 (年齢が10以上20以下)
IN (A, B, C) A または B または C に一致 name IN ('田中A美', '田中B美', '田中C美') (名前が"田中A美"、"田中B美"、"田中C美"のいずれか)
LIKE パターン一致(部分一致検索) name LIKE '田%'("田"で始まる名前)
IS NULL NULLかどうか age IS NULL(年齢がNULLのもの)
IS NOT NULL NULLでないか age IS NOT NULL(年齢がNULLでないもの)

論理演算子

演算子 意味
AND 両方の条件が真のとき age >= 10 AND is_active = 1 (年齢が10以上かつアクティブ)
OR どちらかの条件が真のとき age < 20 OR is_active = 1 (年齢が20未満またはアクティブ)
NOT 条件を反転させる NOT age < 10(年齢が10未満でない = 年齢が10以上)

例「usersテーブルから年齢が18歳以上の名前を抽出したい」

書き方

  • テーブル名→users
  • 列名→name
  • 条件→age >= 18
SELECT name FROM users WHERE age >= 18;

実行結果

name
山田花子
鈴木次郎
田中A美

例「usersテーブルから年齢が18歳以上かつのアクティブなユーザーの名前を抽出したい」

書き方

  • テーブル名→users
  • 列名→name
  • 条件→age >= 18 AND is_active = 1
SELECT name FROM users WHERE age >= 18 AND is_active = 1;

実行結果

name
田中A美

例「usersテーブルから年齢が25歳以上または10歳未満のアクティブなユーザーの名前を抽出したい」

書き方

  • テーブル名→users
  • 列名→name
  • 条件→(age >= 25 OR age < 10) AND is_active = 1
SELECT name FROM users WHERE (age >= 25 OR age < 10) AND is_active = 1;

実行結果

name
田中A美

4.並びかえ(ORDER BY)

抽出した結果を並び替えたい場合は「ORDER BY」句を使います

--【超シンプルな例】
SELECT 列名 FROM テーブル名 ORDER BY 対象列名 順番;

--【条件があるとき】
SELECT 列名 FROM テーブル名 WHERE 条件 ORDER BY 対象列名 順番;

順番は昇順か降順を指定できます

  • 昇順(ASC):上から「0,1,2,3,…」や「A,B,C,…」のように昇るように並び替える:arrow_upper_right:
  • 降順(DESC):上から「10,9,8,…」や「Z,Y,X,…」のように降りるように並び替える(逆):arrow_lower_right:

例「usersテーブルから年齢が高い順で、同じ年齢なら名前順に抽出したい」

書き方

  • テーブル名→users
  • 列名→*
  • 対象列名1→age
  • 順番1→DESC
  • 対象列名2→name
  • 順番2→ASC
    ※複数条件で並び替える場合、「対象列名1 順番1, 対象列名2 順番2, …」のようにカンマ区切りで並べ替えます
SELECT * FROM users ORDER BY age DESC, name ASC;

実行結果(省略)

例「usersテーブルからアクティブ会員で年齢が高い順に抽出したい」

書き方

  • テーブル名→users
  • 列名→*
  • 条件→is_active = 1
  • 対象列名→age
  • 順番→DESC
SELECT * FROM users WHERE is_active = 1 ORDER BY age DESC;

実行結果

id name age is_active
4 田中A美 28 1
1 佐藤太郎 16 1
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?