Newer
Older
hello-programmer-world / src / pages / sql / 010-foundation.mdx
@h.sakamoto h.sakamoto on 9 Feb 4 KB sql
---
layout: "@/layouts/MarkdownLayout.astro"
---

export const title = "SQLの基本";

# {title}

## TOC

## 考え方

データベースとは、データいくつかのデータを1つのまとまり(テーブル)として保存し、そのテーブルに対して様々な操作を行う仕組みです。

例えば個人情報を扱う場合、実際に登場する情報には以下のようなものが考えられます。

- 氏名
- 性別
- 住所
- 電話番号
- 誕生日

etc...

様々なものがありますが、これらのうち必要なものを選び、1つのまとまり(テーブル)として保存します。  
以下の例では、氏名と住所を1つのまとまりとして保存するテーブルです。

同時に、管理番号として`ID`を付与しています。

**例**: `users`テーブル

テーブル構造

| 列名 | 型 |
| :----- | :-- |
| `id` | INT |
| name | VARCHAR(100) |
| address | VARCHAR(255) |

データ例

| id | name | address |
| --: | :---- | :------ |
| 1 | 山田太郎 | 東京都千代田区 |
| 2 | 佐藤花子 | 東京都新宿区 |
| 3 | 鈴木一郎 | 愛知県名古屋市 |

## 型

代表的な型を紹介します。

| 型名 | 説明 | データ例 |
| :----- | :-- | :------ |
| `INT` | 整数 | 1, 100, -50 |
| `BIGINT` | 21億より大きい数に対応した整数 | 10000000000 |
| `VARCHAR(n)` | 文字列(最大n文字まで) | '山田太郎', 'Hello' |
| `TEXT` | 文字列(長文向け) | 'これは長い文章です。' |
| `DATETIME` | 日付と時間 | '2024-01-01 12:00:00' |

## なぜIDが必要なの?

## テーブルそのものを操作する

### テーブルを作成 (CREATE TABLE)

```sql
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    address VARCHAR(255)
);
```

### テーブルを削除 (DROP TABLE)

```sql
DROP TABLE users;
```

## テーブルからデータを操作する

### データを追加 (INSERT)

どんな操作をするにしても、まずはデータが必要です。  
データを追加するテーブルの構造に合わせて、`INSERT`文を使ってデータを追加します。

```sql
-- 1件のデータを追加する場合
INSERT INTO users (id, name, address) VALUES (1, '山田太郎', '東京都千代田区');

-- 複数件のデータを追加する場合
INSERT INTO users (id, name, address)
VALUES
(2, '佐藤花子', '東京都新宿区'),
(3, '鈴木一郎', '愛知県名古屋市');
```

### データを取得 (SELECT)

#### 登場したすべてのテーブルから、すべての列を取得する場合

```sql
SELECT * FROM users;
```

#### 登場した特定のテーブルから、すべての列を取得する場合

```sql
SELECT users.* FROM users;
```

#### 特定の列だけを取得する場合

```sql
SELECT users.id, users.name FROM users;
```

### 条件を指定する (WHERE)

`SELECT`でデータを全件取得したとしても、実際にはそこから何かを探すことが多いです。  
この、テーブルから特定の条件に合うデータだけを取得したい場合、`WHERE`句を使います。

後述する`UPDATE`や`DELETE`でも、同様に使うことができます。

#### 完全に一致するものを取得する場合

```sql
-- IDが1のユーザーを取得する
SELECT * FROM users WHERE id = 1;

-- 名前が「山田太郎」のユーザーを取得する
SELECT * FROM users WHERE name = '山田太郎';
```

#### 部分的に一致するものを取得する場合

```sql
-- 名前のどこかに「花」を含むユーザーを取得する
SELECT * FROM users WHERE name LIKE '%花%';

-- 住所が「東京都」で始まるユーザーを取得する
SELECT * FROM users WHERE address LIKE '東京都%';

-- 名前が「太郎」で終わるユーザーを取得する
SELECT * FROM users WHERE name LIKE '%太郎';
```

#### 範囲を指定する場合

```sql
-- IDが2以上のユーザーを取得する
SELECT * FROM users WHERE id >= 2;
```

### データを更新 (UPDATE)

データを更新するには、`UPDATE`文を使います。  
バックアップなどを取らずに更新をする場合、元に戻せないことがあるため、注意が必要です。

あらかじめ、`SELECT`文で更新対象のデータを確認してから実行すると良いでしょう。

```sql
-- IDが1のユーザーの住所を更新する
UPDATE users SET address = '東京都港区' WHERE id = 1;
```

### データを削除 (DELETE)

`UPDATE`と同様に、`DELETE`文もバックアップなどを取らずに実行すると元に戻せないことがあるため、注意が必要です。  
あらかじめ、`SELECT`文で削除対象のデータを確認してから実行すると良いでしょう。

```sql
-- IDが3のユーザーを削除する
DELETE FROM users WHERE id = 3;
```