> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL の SELECT

> MySQL の SELECT 文がテーブルからデータを読む仕組み: 列の指定、すべての列の選択、および値の計算を、実行できる Sakila の例とともに説明します。

> [card] [VillageSQL is a drop-in replacement for MySQL with extensions.](https://villagesql.com/docs/en/8.4/stable/install-server.md)
>
> All examples on this page work on VillageSQL. Install Now →

`SELECT` はテーブルから行を読み出します。このレッスンでは、その最小限の
役に立つ形を扱います。テーブルを指定し、いくつかの列を指定し、行を受け取る、
というものです。

すべての例は Sakila データベースに問い合わせます。まだロードしていなければ、
[まず Sakila をロード](https://villagesql.com/docs/ja/tutorial/load-sakila.md)し、次に
`mysql -u root -p sakila` でクライアントを開いて、`sakila` を現在の
データベースにしてください。

## SELECT の仕組み

```sql theme={null}
SELECT COLUMN_LIST
FROM TABLE_NAME;
```

`COLUMN_LIST` は各行に欲しいもので、通常はカンマで区切った列名です。
`TABLE_NAME` は行の取得元のテーブルです。

文はセミコロンで終わります。クライアントはセミコロンを見つけるまで読み
続けるため、セミコロンのない行では継続プロンプトに留まります。

```text theme={null}
mysql> SELECT name FROM language
    -> ;
+----------+
| name     |
+----------+
| English  |
| Italian  |
| Japanese |
| Mandarin |
| French   |
| German   |
+----------+
6 rows in set (0.00 sec)
```

## 例

### 1 つの列を選択する

`film` テーブルに、各映画のタイトルだけを求めます。

```sql theme={null}
SELECT title FROM film;
```

```text theme={null}
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
| AFFAIR PREJUDICE            |
| AFRICAN EGG                 |
...
+-----------------------------+
1000 rows in set (0.01 sec)
```

テーブル内の各行に対して 1 行が返ります。ここでは 1,000 行です。`SELECT`
自体は何も絞り込みません。どの行を得るかを選ぶのは [WHERE](https://villagesql.com/docs/ja/tutorial/where.md)
の仕事です。

### 複数の列を選択する

列名をカンマで区切ります。列は求めた順序で返ります。これはテーブル内で並ぶ
順序と同じである必要はありません。

```sql theme={null}
SELECT title, release_year, rental_rate FROM film;
```

```text theme={null}
+-----------------------------+--------------+-------------+
| title                       | release_year | rental_rate |
+-----------------------------+--------------+-------------+
| ACADEMY DINOSAUR            |         2006 |        0.99 |
| ACE GOLDFINGER              |         2006 |        4.99 |
| ADAPTATION HOLES            |         2006 |        2.99 |
| AFFAIR PREJUDICE            |         2006 |        2.99 |
| AFRICAN EGG                 |         2006 |        2.99 |
...
+-----------------------------+--------------+-------------+
1000 rows in set (0.00 sec)
```

### すべての列を選択する

アスタリスクはテーブル内のすべての列を表します。`language` テーブルは 6 行
なので、これは完全な結果を表示します。

```sql theme={null}
SELECT * FROM language;
```

```text theme={null}
+-------------+----------+---------------------+
| language_id | name     | last_update         |
+-------------+----------+---------------------+
|           1 | English  | 2006-02-15 05:02:19 |
|           2 | Italian  | 2006-02-15 05:02:19 |
|           3 | Japanese | 2006-02-15 05:02:19 |
|           4 | Mandarin | 2006-02-15 05:02:19 |
|           5 | French   | 2006-02-15 05:02:19 |
|           6 | German   | 2006-02-15 05:02:19 |
+-------------+----------+---------------------+
6 rows in set (0.00 sec)
```

`SELECT *` は、知らないテーブルを探索している間は役に立ちます。アプリケー
ションコードの中では、列名を明示してください。アスタリスクは、コードが
読むかどうかにかかわらずすべての列をネットワーク経由で送り、誰かが列を追加した
日にコードの足元で形が変わります。

### 値を計算する

選択リストは列名でなくてもかまいません。そこに式を置くと、その結果が独立した
列になります。

```sql theme={null}
SELECT title, rental_rate, rental_rate * 1.1 FROM film;
```

```text theme={null}
+-----------------------------+-------------+-------------------+
| title                       | rental_rate | rental_rate * 1.1 |
+-----------------------------+-------------+-------------------+
| ACADEMY DINOSAUR            |        0.99 |             1.089 |
| ACE GOLDFINGER              |        4.99 |             5.489 |
| ADAPTATION HOLES            |        2.99 |             3.289 |
| AFFAIR PREJUDICE            |        2.99 |             3.289 |
| AFRICAN EGG                 |        2.99 |             3.289 |
...
+-----------------------------+-------------+-------------------+
1000 rows in set (0.00 sec)
```

その 3 番目の列の見出しは入力した式そのもので、正確ですが見栄えが悪いもの
です。[列エイリアス](https://villagesql.com/docs/ja/tutorial/column-aliases.md)で自分の好きな名前を付けられます。

## 人がつまずく 2 つのこと

**キーワードは大文字と小文字を区別しません。** `SELECT`、`select`、および
`SeLeCt` はすべて実行されます。

```sql theme={null}
select title from film;
```

```text theme={null}
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
...
+-----------------------------+
1000 rows in set (0.00 sec)
```

このチュートリアルでは、慣例として、キーワードを大文字で、それ以外をすべて
小文字で書きます。この慣例があるのは、長いクエリの形が一目で読めるように
するためです。

**列名の綴りを誤るとエラーになります。** MySQL は意図を推測せず、空の結果を
返すこともしません。

```sql theme={null}
SELECT titel FROM film;
```

```text theme={null}
ERROR 1054 (42S22): Unknown column 'titel' in 'field list'
```

`field list` はサーバーが選択リストを呼ぶ名前なので、このメッセージは誤った
名前だけでなく場所も示しています。誤った名前が文の別の場所にあると、同じ
エラーの末尾が変わります。探しに行く前に、末尾を読んでください。

## まとめ

* 行を読むには、列のリストを付けた `SELECT` と、テーブルを付けた `FROM` を使います。
* 列は、返してほしい順序で列挙します。
* 探索中は `SELECT *` を使い、アプリケーションコードでは列名を明示します。
* 行ごとに値を計算するには、選択リストに式を置きます。
* 列名が誤っているときは `ERROR 1054` になると考えてください。

## 関連項目

* [列エイリアス](https://villagesql.com/docs/ja/tutorial/column-aliases.md) — 計算した列に読みやすい名前を付ける
* [MySQL のデータ型の選択](https://villagesql.com/docs/ja/guides/choosing-data-types.md) — これらの結果に出てくる列型の意味


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.