VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
mysql -u root -p sakila로 클라이언트를 여세요.
테이블 별칭의 동작 방식
TABLE_NAME을 테이블로, ALIAS_NAME을 원하는 짧은 이름으로, COLUMN_NAME을 그 테이블의 열로 바꾸세요. 그 시점부터 이 쿼리에서는 별칭이 테이블의 이름이고, 그 안의 열을 가리키려면 ALIAS_NAME.COLUMN_NAME이라고 씁니다.
열 별칭과 마찬가지로 여기서도 AS는 선택 사항이므로, FROM film f는 FROM film AS f와 같은 뜻입니다. AS를 쓰면 의도가 분명해집니다.
같은 조인을 두 가지 방식으로 쓰기
별칭이 없으면 한정된 모든 열에 테이블 이름 전체가 붙습니다.두 테이블에 모두 있는 열은 한정해야 합니다
film과 language에는 둘 다 language_id가 있습니다. 이름만 쓰면 서버가 고를 방법이 없습니다.
ERROR 1052는 서버가 그 이름이 가리킬 수 있는 것을 1개보다 많이 찾았다는 뜻입니다. 조인에서는 거의 언제나 2개의 테이블이 공유하는 열이고, 의도한 테이블이나 별칭으로 한정하면 해결됩니다. 1개의 테이블에만 있는 열 이름은 한정할 필요가 없고, 그래서 위의 쿼리에서 title과 name은 이름만으로 동작합니다.
별칭은 테이블 이름을 대체합니다
테이블에 별칭이 붙으면, 쿼리의 나머지 부분에서 원래 이름은 사라집니다.film입니다. 이 쿼리 안에서는 f에만 응답하고 다른 이름에는 응답하지 않습니다. 스키마에서 볼 수 있는 이름에 ERROR 1054가 나면 보통 이것입니다.
별칭 없이는 쓸 수 없는 경우
같은 테이블의 이름을 두 번 쓰는 쿼리에는actor라고 불리는 것이 2개 있고 둘을 구별할 방법이 없습니다. 별칭이 그 쿼리를 가능하게 하는 것이고, 셀프 조인 레슨이 그 위에 세워져 있습니다.
테이블 별칭은 열 별칭이 아닙니다
둘은 같은 키워드를 쓰고 다른 일을 합니다. 열 별칭은 결과의 열 이름을 바꾸고 제목에 나타납니다. 테이블 별칭은 쿼리 안에서 테이블 이름을 바꾸고 출력에는 전혀 나타나지 않습니다. 다른 하나는 열 별칭을 보세요.요약
- 1개의 쿼리 동안 테이블에 짧은 이름을 붙이려면
TABLE_NAME AS ALIAS_NAME을 쓰세요. - 쿼리의 1개보다 많은 테이블에 있는 열 이름은 모두 한정하세요.
- 조인에서
ERROR 1052는 한정해야 하는 열 이름으로 읽으세요. - 존재한다고 알고 있는 열의 이름을
ERROR 1054가 대면 잊어버린 별칭을 의심하세요. - 별칭은 결과에 대해 아무것도 바꾸지 않는다고 예상하세요.
함께 보기
- 조인의 동작 방식 — 별칭이 빛을 발하기 시작하는 곳
- 열 별칭 —
AS가 하는 다른 일 - 셀프 조인 — 별칭 없이는 쓸 수 없는 쿼리
- MySQL JOIN 성능과 흔한 실수 — 이 별칭들이 결국 들어가는 조인