> ## 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/ko/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)
```

## 예제

### 열 하나 선택하기

`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/ko/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 *`는 모르는 테이블을 탐색하는 동안에는 제 몫을 합니다. 애플리케이션 코드 안에서는 열의 이름을 쓰세요. 별표는 코드가 읽든 말든 모든 열을 네트워크로 보내고, 누군가 열을 추가하는 날 코드 아래에서 형태가 바뀝니다.

### 값 계산하기

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)
```

세 번째 열의 제목은 입력한 식 그대로인데, 정확하지만 보기 흉합니다. [열 별칭](https://villagesql.com/docs/ko/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 목록을 부르는 이름이므로, 그 메시지는 무엇이 잘못되었는지뿐 아니라 그 위치도 알려줍니다. 잘못된 이름이 문장의 다른 곳에 있으면 같은 오류의 끝부분이 달라지므로, 찾아 나서기 전에 메시지의 끝을 읽으세요.

## 요약

* 행을 읽으려면 `SELECT`에 열 목록을, `FROM`에 테이블을 쓰세요.
* 돌려받고 싶은 순서대로 열을 나열하세요.
* 탐색할 때는 `SELECT *`를 쓰고, 애플리케이션 코드에서는 열의 이름을 쓰세요.
* 행마다 값을 계산하려면 SELECT 목록에 식을 넣으세요.
* 열 이름이 틀리면 `ERROR 1054`가 난다고 예상하세요.

## 함께 보기

* [열 별칭](https://villagesql.com/docs/ko/tutorial/column-aliases.md) — 계산된 열에 읽기 쉬운 이름 붙이기
* [MySQL 데이터 유형 선택하기](https://villagesql.com/docs/ko/guides/choosing-data-types.md) — 이 결과에 나오는 열 유형의 의미


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