[SQL] GROUP BY, ORDER BY절에서 테이블 별칭 생략 가능한 경우
[SQL] 프로그래머스 - 물고기 종류 별 잡은 수 구하기
SELECT COUNT(*) AS FISH_COUNT, n. FISH_NAME
FROM fish_info i JOIN fish_name_info n ON i.fish_type = n.fish_type
GROUP BY fish_name
ORDER BY fish_count DESC;
MySQL에서는 GROUP BY
나 ORDER BY
에서 컬럼명이 모호하지 않으면 테이블 이름이나 별칭 생략이 가능하다. 위 쿼리에서 fish_name
컬럼이 fish_info
와 fish_name_info
두 테이블 중 하나에만 존재하면 MySQL은 자동으로 그 테이블의 컬럼으로 인식한다. 만약 두 테이블에 같은 이름의 컬럼이 있으면 모호하다(ambiguous)고 에러가 나기 때문에, 그때는 n.fish_name
처럼 테이블 명이나 별칭을 꼭 붙여야 한다.
GROUP BY와 ORDER BY에서 테이블명 별칭이 생략이 가능한 경우
상황 | 컬럼 출처 | 별칭 생략가능 여부 | 이유 |
---|---|---|---|
1 | 해당 컬럼이 하나의 테이블에만 존재 | ✅ 가능 | 모호하지 않아서 MySQL이 자동 인식 |
2 | 컬럼이 여러 테이블에 같은 이름으로 존재 | ❌ 불가능 | 어떤 테이블의 컬럼인지 모호해서 에러 발생 |
3 |
| ✅ 가능 | SQL 표준에서 |
4 |
|
|
|
5 |
| ❌ 불가능 | 컬럼 지정이 안 되어 있으므로 참조 불가 |
6 | 서브쿼리의 결과 컬럼 | ✅ 가능 | 서브쿼리의 결과셋에서 컬럼명이 유일하면 그대로 참조 가능 |