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 初心者向けチートシート

0
Posted at

SQL チートシート

SQLは、データベースに保存されているデータを検索・追加・変更・削除するための言語です。

たとえば、こんな表があるとします。

サンプルテーブル

テーブル名: users

id name age email
1 田中 16 tanaka@example.com
2 佐藤 18 sato@example.com
3 鈴木 17 suzuki@example.com

SQLでは、この表に対して

  • データを見る
  • データを探す
  • データを追加する
  • データを書き換える
  • データを削除する

などができます。


1. データを見る SELECT

全部見る

SELECT * FROM users;

意味:

SELECT = データを見る
*      = 全部の列
FROM   = ~から
users  = usersテーブル

つまり、

usersテーブルのデータを全部見せて

という意味です。


特定の列だけ見る

SELECT name, age FROM users;

結果:

name   age
田中   16
佐藤   18
鈴木   17

2. 条件を付ける WHERE

年齢が18歳の人

SELECT *
FROM users
WHERE age = 18;

18歳以上

SELECT *
FROM users
WHERE age >= 18;

18歳未満

SELECT *
FROM users
WHERE age < 18;

よく使う比較記号:

書き方 意味
= 等しい
!= 等しくない
<> 等しくない
> より大きい
< より小さい
>= 以上
<= 以下

3. 文字を検索する

文字列は基本的に ' で囲みます。

SELECT *
FROM users
WHERE name = '田中';

数字は囲まなくてOKです。

WHERE age = 18

文字は囲みます。

WHERE name = '田中'

4. 複数の条件 AND / OR

両方満たす AND

SELECT *
FROM users
WHERE age >= 16
AND age <= 18;

意味:

16歳以上、かつ18歳以下


どちらか満たす OR

SELECT *
FROM users
WHERE name = '田中'
OR name = '佐藤';

意味:

田中 または 佐藤


5. ~を含む LIKE

「田」で始まる

SELECT *
FROM users
WHERE name LIKE '田%';

% は

何文字あってもOK

という意味です。


「田」を含む

SELECT *
FROM users
WHERE name LIKE '%田%';

「中」で終わる

SELECT *
FROM users
WHERE name LIKE '%中';

6. 複数の候補から探す IN

SELECT *
FROM users
WHERE name IN ('田中', '佐藤', '鈴木');

これは、

WHERE name = '田中'
OR name = '佐藤'
OR name = '鈴木'

とほぼ同じ意味です。


7. 範囲を指定する BETWEEN

SELECT *
FROM users
WHERE age BETWEEN 16 AND 18;

意味:

16以上18以下


8. 並び替える ORDER BY

小さい順

SELECT *
FROM users
ORDER BY age ASC;

ASC = 昇順

16
17
18

大きい順

SELECT *
FROM users
ORDER BY age DESC;

DESC = 降順

18
17
16

9. 表示件数を制限する LIMIT

最初の10件だけ表示:

SELECT *
FROM users
LIMIT 10;

10件飛ばして次の10件

MySQL / PostgreSQLなど:

SELECT *
FROM users
LIMIT 10 OFFSET 10;

10. データを追加する INSERT

INSERT INTO users (name, age, email)
VALUES ('山田', 17, 'yamada@example.com');

意味:

usersテーブルに山田さんを追加する


複数件まとめて追加

INSERT INTO users (name, age, email)
VALUES
    ('山田', 17, 'yamada@example.com'),
    ('高橋', 18, 'takahashi@example.com');

11. データを変更する UPDATE

UPDATE users
SET age = 18
WHERE id = 1;

意味:

IDが1の人の年齢を18に変更する


複数の項目を変更

UPDATE users
SET
    name = '田中太郎',
    age = 17
WHERE id = 1;

⚠ UPDATEの超重要注意

これを書くと、

UPDATE users
SET age = 18;

全員の年齢が18になります。

基本的に、

WHERE

を忘れないようにします。

安全のため、変更前に

SELECT *
FROM users
WHERE id = 1;

で対象を確認すると安心です。


12. データを削除する DELETE

DELETE FROM users
WHERE id = 1;

意味:

IDが1のデータを削除


⚠ DELETEも超重要

これを実行すると、

DELETE FROM users;

usersテーブルのデータが全部消えます。

そのため基本的には、

DELETE FROM users
WHERE id = 1;

のように WHERE を付けます。


13. 重複を消す DISTINCT

例えば:

Tokyo
Tokyo
Chiba
Tokyo
Chiba

というデータがある場合、

SELECT DISTINCT prefecture
FROM users;

結果:

Tokyo
Chiba

14. 件数を数える COUNT

SELECT COUNT(*)
FROM users;

結果:

3

条件付き

SELECT COUNT(*)
FROM users
WHERE age >= 18;

15. 最大・最小・平均・合計

最大値

SELECT MAX(age)
FROM users;

最小値

SELECT MIN(age)
FROM users;

平均

SELECT AVG(age)
FROM users;

合計

SELECT SUM(age)
FROM users;

よく使うもの:

関数 意味
COUNT() 件数
MAX() 最大
MIN() 最小
AVG() 平均
SUM() 合計

16. グループごとに集計する GROUP BY

例えば:

name prefecture
田中 Tokyo
佐藤 Tokyo
鈴木 Chiba

都道府県ごとの人数を数える:

SELECT prefecture, COUNT(*)
FROM users
GROUP BY prefecture;

結果:

Tokyo  2
Chiba  1

17. NULL

NULL は、

データが入っていない

という意味です。

例えばメールアドレスが登録されていない人を探す場合:

SELECT *
FROM users
WHERE email IS NULL;

NULLではない

SELECT *
FROM users
WHERE email IS NOT NULL;

これはダメです。

WHERE email = NULL

NULL は = では比較しません。


18. 列に別名を付ける AS

SELECT name AS user_name
FROM users;

例えば:

SELECT COUNT(*) AS user_count
FROM users;

結果:

user_count
3

19. テーブルを作る CREATE TABLE

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    email VARCHAR(255)
);

各部分の意味

id INT

id という数字の列。

name VARCHAR(100)

最大100文字程度の文字列。

PRIMARY KEY

データを一意に識別するID。


20. よく使うデータ型

型 用途
INT 整数
BIGINT 大きな整数
VARCHAR(255) 文字列
TEXT 長い文章
BOOLEAN true / false
DATE 日付
TIME 時刻
DATETIME 日時
TIMESTAMP 日時
DECIMAL 小数

21. 自動でIDを増やす

MySQLの場合:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
);

これなら、

INSERT INTO users (name)
VALUES ('田中');

とすると、自動的に

id = 1

などが設定されます。

PostgreSQLの場合は、

GENERATED ALWAYS AS IDENTITY

などを使います。


22. テーブルを削除する DROP TABLE

DROP TABLE users;

⚠ テーブル自体が消えます。

データだけではなく、

usersというテーブルそのもの

が削除されます。


23. テーブルの中身だけ全部消す TRUNCATE

TRUNCATE TABLE users;

テーブル自体は残ります。

users
├─ 構造 → 残る
└─ データ → 全部消える

24. 列を追加する ALTER TABLE

ALTER TABLE users
ADD COLUMN birthday DATE;

25. 列を削除する

ALTER TABLE users
DROP COLUMN birthday;

26. JOIN

JOIN は、

複数のテーブルをくっつける

ために使います。

例えば:

users

id name
1 田中
2 佐藤

posts

id user_id title
1 1 こんにちは
2 1 SQL勉強中
3 2 テスト

この2つをつなげます。

SELECT users.name, posts.title
FROM posts
JOIN users
ON posts.user_id = users.id;

結果:

田中  こんにちは
田中  SQL勉強中
佐藤  テスト

27. JOINを図で考える

users

id ─────┐
1 田中   │
2 佐藤   │
         │
         ▼

posts

user_id
1 → 田中の投稿
1 → 田中の投稿
2 → 佐藤の投稿

この

posts.user_id

と

users.id

を使ってつなげています。

ON posts.user_id = users.id

28. INNER JOIN

SELECT *
FROM users
INNER JOIN posts
ON users.id = posts.user_id;

両方に対応するデータがあるものだけ表示します。

JOIN とだけ書いた場合、多くのDBでは INNER JOIN と同じです。


29. LEFT JOIN

SELECT *
FROM users
LEFT JOIN posts
ON users.id = posts.user_id;

users 側は、投稿がなくても表示されます。


30. 外部キー FOREIGN KEY

CREATE TABLE posts (
    id INT PRIMARY KEY,
    user_id INT,
    title VARCHAR(255),

    FOREIGN KEY (user_id)
        REFERENCES users(id)
);

これは、

posts.user_id
     ↓
users.id

という関係を作ります。


31. UNIQUE

同じ値を登録できないようにします。

CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE
);

これなら、

test@example.com
test@example.com

のように同じメールアドレスを2個登録できません。


32. NOT NULL

絶対に値を入れる必要がある列です。

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

33. DEFAULT

何も指定しなかった場合の初期値です。

CREATE TABLE users (
    id INT PRIMARY KEY,
    active BOOLEAN DEFAULT TRUE
);

34. コメント

SQLでは、

-- コメント
SELECT * FROM users;

のように書けます。

複数行:

/*
これは
複数行コメント
です
*/

35. SQLを書く基本順番

SQLはだいたいこの順番で書きます。

SELECT
FROM
JOIN
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT

例えば:

SELECT name, age
FROM users
WHERE age >= 16
ORDER BY age DESC
LIMIT 10;

36. よく使うSQLまとめ

全件取得

SELECT *
FROM users;

1人検索

SELECT *
FROM users
WHERE id = 1;

名前検索

SELECT *
FROM users
WHERE name = '田中';

部分一致

SELECT *
FROM users
WHERE name LIKE '%田%';

追加

INSERT INTO users (name, age)
VALUES ('田中', 16);

更新

UPDATE users
SET age = 17
WHERE id = 1;

削除

DELETE FROM users
WHERE id = 1;

並び替え

SELECT *
FROM users
ORDER BY age DESC;

10件取得

SELECT *
FROM users
LIMIT 10;

件数

SELECT COUNT(*)
FROM users;

37. 特に覚えればいいもの

最初はこれだけ覚えればかなり使えます。

SELECT

データを見る。

FROM

どのテーブルから見るか。

WHERE

条件を付ける。

INSERT

追加する。

UPDATE

変更する。

DELETE

削除する。

ORDER BY

並び替える。

LIMIT

件数を制限する。

JOIN

別のテーブルとつなげる。


38. SQLを日本語っぽく読む

例えば:

SELECT name, age
FROM users
WHERE age >= 18
ORDER BY age DESC
LIMIT 10;

これをそのまま日本語にすると、

SELECT name, age
→ 名前と年齢を取得

FROM users
→ usersから

WHERE age >= 18
→ 18歳以上だけ

ORDER BY age DESC
→ 年齢が高い順に並べて

LIMIT 10
→ 最大10人まで

つまり、

usersテーブルから18歳以上の人を、年齢が高い順に10人取得する

というSQLです。


39. UPDATE / DELETEする前の安全確認

かなり重要です。

例えば削除したい場合、いきなり

DELETE FROM users
WHERE age < 18;

を実行するのではなく、最初に

SELECT *
FROM users
WHERE age < 18;

を実行します。

対象が正しいことを確認したら、

DELETE FROM users
WHERE age < 18;

を実行します。

同じように UPDATE でも、

SELECT *
FROM users
WHERE id = 10;

で確認してから、

UPDATE users
SET age = 18
WHERE id = 10;

を実行すると事故を減らせます。


40. 超簡易まとめ

-- 見る
SELECT * FROM users;

-- 探す
SELECT * FROM users WHERE id = 1;

-- 追加
INSERT INTO users (name) VALUES ('田中');

-- 変更
UPDATE users SET name = '佐藤' WHERE id = 1;

-- 削除
DELETE FROM users WHERE id = 1;

-- 並び替え
SELECT * FROM users ORDER BY id DESC;

-- 最大10件
SELECT * FROM users LIMIT 10;

-- 件数
SELECT COUNT(*) FROM users;

-- 2つのテーブルをつなぐ
SELECT *
FROM users
JOIN posts ON users.id = posts.user_id;

一番大事な注意

UPDATE users SET ...

と

DELETE FROM users

は、WHERE がないと全データが対象になります。

迷ったら先に、

SELECT *
FROM ...
WHERE ...;

を実行して、対象を確認してから変更・削除します。

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?