> ## 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 테이블 별칭

> AS로 MySQL 테이블에 짧은 이름을 붙이는 방법, 조인에는 한정된 열 이름이 필요한 이유, 그리고 별칭이 없거나 잘못되었다고 알려주는 2개의 오류입니다.

> [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 →

테이블 별칭은 1개의 쿼리 동안 테이블에 붙이는 짧은 이름입니다. 조인에서 타이핑을 줄여 주고, 별칭 없이는 쿼리가 동작하지 않는 2가지 상황이 있습니다.

시작하기 전에 `mysql -u root -p sakila`로 클라이언트를 여세요.

## 테이블 별칭의 동작 방식

```sql theme={null}
SELECT ALIAS_NAME.COLUMN_NAME
FROM TABLE_NAME AS ALIAS_NAME;
```

`TABLE_NAME`을 테이블로, `ALIAS_NAME`을 원하는 짧은 이름으로, `COLUMN_NAME`을 그 테이블의 열로 바꾸세요. 그 시점부터 이 쿼리에서는 별칭이 테이블의 이름이고, 그 안의 열을 가리키려면 `ALIAS_NAME.COLUMN_NAME`이라고 씁니다.

열 별칭과 마찬가지로 여기서도 `AS`는 선택 사항이므로, `FROM film f`는 `FROM film AS f`와 같은 뜻입니다. `AS`를 쓰면 의도가 분명해집니다.

## 같은 조인을 두 가지 방식으로 쓰기

별칭이 없으면 한정된 모든 열에 테이블 이름 전체가 붙습니다.

```sql theme={null}
SELECT film.title, language.name
FROM film
JOIN language ON film.language_id = language.language_id
ORDER BY film.title
LIMIT 3;
```

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

별칭을 쓰면 같은 쿼리가 더 짧아지고 형태가 더 잘 보입니다.

```sql theme={null}
SELECT f.title, l.name
FROM film AS f
JOIN language AS l ON f.language_id = l.language_id
ORDER BY f.title
LIMIT 3;
```

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

동일한 행입니다. 별칭은 답에 대해 아무것도 바꾸지 않습니다.

## 두 테이블에 모두 있는 열은 한정해야 합니다

`film`과 `language`에는 둘 다 `language_id`가 있습니다. 이름만 쓰면 서버가 고를 방법이 없습니다.

```sql theme={null}
SELECT language_id
FROM film
JOIN language ON film.language_id = language.language_id
LIMIT 1;
```

```text theme={null}
ERROR 1052 (23000): Column 'language_id' in field list is ambiguous
```

`ERROR 1052`는 서버가 그 이름이 가리킬 수 있는 것을 1개보다 많이 찾았다는 뜻입니다. 조인에서는 거의 언제나 2개의 테이블이 공유하는 열이고, 의도한 테이블이나 별칭으로 한정하면 해결됩니다. 1개의 테이블에만 있는 열 이름은 한정할 필요가 없고, 그래서 위의 쿼리에서 `title`과 `name`은 이름만으로 동작합니다.

## 별칭은 테이블 이름을 대체합니다

테이블에 별칭이 붙으면, 쿼리의 나머지 부분에서 원래 이름은 사라집니다.

```sql theme={null}
SELECT film.title
FROM film AS f
JOIN language AS l ON f.language_id = l.language_id
LIMIT 1;
```

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

데이터베이스에서 테이블은 여전히 `film`입니다. 이 쿼리 안에서는 `f`에만 응답하고 다른 이름에는 응답하지 않습니다. 스키마에서 볼 수 있는 이름에 `ERROR 1054`가 나면 보통 이것입니다.

## 별칭 없이는 쓸 수 없는 경우

같은 테이블의 이름을 두 번 쓰는 쿼리에는 `actor`라고 불리는 것이 2개 있고 둘을 구별할 방법이 없습니다. 별칭이 그 쿼리를 가능하게 하는 것이고, [셀프 조인](https://villagesql.com/docs/ko/tutorial/self-join.md) 레슨이 그 위에 세워져 있습니다.

## 테이블 별칭은 열 별칭이 아닙니다

둘은 같은 키워드를 쓰고 다른 일을 합니다. 열 별칭은 결과의 열 이름을 바꾸고 제목에 나타납니다. 테이블 별칭은 쿼리 안에서 테이블 이름을 바꾸고 출력에는 전혀 나타나지 않습니다. 다른 하나는 [열 별칭](https://villagesql.com/docs/ko/tutorial/column-aliases.md)을 보세요.

## 요약

* 1개의 쿼리 동안 테이블에 짧은 이름을 붙이려면 `TABLE_NAME AS ALIAS_NAME`을 쓰세요.
* 쿼리의 1개보다 많은 테이블에 있는 열 이름은 모두 한정하세요.
* 조인에서 `ERROR 1052`는 한정해야 하는 열 이름으로 읽으세요.
* 존재한다고 알고 있는 열의 이름을 `ERROR 1054`가 대면 잊어버린 별칭을 의심하세요.
* 별칭은 결과에 대해 아무것도 바꾸지 않는다고 예상하세요.

## 함께 보기

* [조인의 동작 방식](https://villagesql.com/docs/ko/tutorial/joins.md) — 별칭이 빛을 발하기 시작하는 곳
* [열 별칭](https://villagesql.com/docs/ko/tutorial/column-aliases.md) — `AS`가 하는 다른 일
* [셀프 조인](https://villagesql.com/docs/ko/tutorial/self-join.md) — 별칭 없이는 쓸 수 없는 쿼리
* [MySQL JOIN 성능과 흔한 실수](https://villagesql.com/docs/ko/guides/joins.md) — 이 별칭들이 결국 들어가는 조인


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