
🐠 가장 큰 물고기 10마리 구하기

가장 큰 물고기 10마리를 선택하라고 했으니까, ROWNUM을써야 한다. 하지만 ROWNUM은 Oracle에만 있는 문법이고, MySQL에서는 LIMIT 키워드로 같은 기능을 수행한다. 주의할 점, ROWNUM / LIMIT 은 서브쿼리(subquery)와 함께 사용해야 한다. 서브쿼리를 안 쓰면 WHERE절이 SELECT절보다 먼저 수행되어 원하는 값이 나오지 않는다. 길이가 큰 순으로 10개를 가져와야 하는데, 길이와 상관 없이 랜덤한 값 10개가 선택되는 것이다. 이것은 SQL문의 실행순서 때문이다.
SQL의 실행 순서
FROM - WHERE(ROWNUM 실행) - GROUP BY - HAVING - SELECT - ORDER BY
LENGTH를 큰 값부터 정렬하는 ORDER BY 절은 ROWNUM 할당 후에 적용되기 때문이다. 즉, 데이터가 정렬되기 전에 ROWNUM이 할당되므로, ORDER BY를 사용해 정렬된 후 특정 ROWNUM 조건을 기대하면 올바른 결과가 나오지 않는다. 엄밀히 말하면,
ROWNUM은 WHERE 절에 같이 써 주는 것이므로,`ROWNUM`은 SELECT 절이 데이터베이스에서 행을 가져오기 시작할 때 할당된다. ROWNUM 자체는 WHERE 절에서 조건으로 사용되지만, 사실은 WHERE 절에서 ROWNUM이 조건을 만족하도록 평가될 때는 이미 할당된 상태여야 한다.
🐦 Oracle 정답코드
SELECT *
FROM (
SELECT LENGTH, ID
FROM FISH_INFO
ORDER BY LENGTH DESC, ID
)
WHERE ROWNUM <= 10;
🐦 MySQL 정답코드
여기서, (SELECT ID, LENGTH FROM FISH_INFO ORDER BY LENGTH DESC, ID) 부분은 FROM 절 내에 사용되고 있기 때문에 인라인 뷰라고 부르기도 한다.
MySQL에서는 Oracle과 달리 서브쿼리에 as subquery 를 생략할 수 없고, 꼭 써줘야 한다. 서브쿼리 별칭이 필수인 이유는 별칭을 지정하지 않으면 쿼리가 실행되지 않고 오류가 난다. 서브쿼리가 임시 테이블처럼 작동할 때 이를 참조할 방법이 필요하기 때문이다.
SELECT *
FROM (
SELECT ID, LENGTH
FROM FISH_INFO
ORDER BY LENGTH DESC, ID
) AS SUBQEURY
LIMIT 10;
같이 풀어보면 좋은 문제
🐠 잔챙이 잡은 수 구하기 문제
[프로그래머스] 👩🏻💻 (MySQL) 🐠 잔챙이 잡은 수 구하기 문제풀이
쉬운 문제는 한 번에 두 세개씩 포스팅 하려고 했는데 이 문제는 생각 해 볼 여지가 많기 때문에 하나만 포스팅 해 보았다. 논란의 여지가 있고 많은 의문이 제기되는 문제이기 정리해본다. 내가
awesomepossum.tistory.com
🐠 특정 물고기를 잡은 총 수 구하기

MySQL 정답코드
SELECT COUNT(B.FISH_NAME) AS FISH_COUNT
FROM FISH_INFO A JOIN FISH_NAME_INFO B
ON A.FISH_TYPE = B.FISH_TYPE
WHERE B.FISH_NAME IN ('BASS', 'SNAPPER');

처음에 틀린 이유는 컬럼명에 ALIAS 안 붙여서
문제에서 FISH_COUNT로 출력하라고 했으니까 AS FISH_COUNT 붙여주어야 한다.

잉? 근데 이 문제는 답안 제출 형식으로 Oracle을 지원하지 않고, MySQL만 지원한다.
어떤 문제는 Oracle도 되고 어떤 문제는 MySQL만 되나 보다;;
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (47) | 2024.11.19 |
---|---|
[프로그래머스] 👩🏻💻 (MySQL) 조건에 맞는 개발자 찾기 문제풀이 (67) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 🐠 잔챙이 잡은 수 구하기 문제풀이 (56) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 모든 레코드 조회하기 / 조건에 맞는 회원수 구하기 / Python 개발자 찾기 문제풀이 (40) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 📚조건에 맞는 도서 리스트 출력하기 (43) | 2024.11.18 |

🐠 가장 큰 물고기 10마리 구하기

가장 큰 물고기 10마리를 선택하라고 했으니까, ROWNUM을써야 한다. 하지만 ROWNUM은 Oracle에만 있는 문법이고, MySQL에서는 LIMIT 키워드로 같은 기능을 수행한다. 주의할 점, ROWNUM / LIMIT 은 서브쿼리(subquery)와 함께 사용해야 한다. 서브쿼리를 안 쓰면 WHERE절이 SELECT절보다 먼저 수행되어 원하는 값이 나오지 않는다. 길이가 큰 순으로 10개를 가져와야 하는데, 길이와 상관 없이 랜덤한 값 10개가 선택되는 것이다. 이것은 SQL문의 실행순서 때문이다.
SQL의 실행 순서
FROM - WHERE(ROWNUM 실행) - GROUP BY - HAVING - SELECT - ORDER BY
LENGTH를 큰 값부터 정렬하는 ORDER BY 절은 ROWNUM 할당 후에 적용되기 때문이다. 즉, 데이터가 정렬되기 전에 ROWNUM이 할당되므로, ORDER BY를 사용해 정렬된 후 특정 ROWNUM 조건을 기대하면 올바른 결과가 나오지 않는다. 엄밀히 말하면,
ROWNUM은 WHERE 절에 같이 써 주는 것이므로,ROWNUM
은 SELECT 절이 데이터베이스에서 행을 가져오기 시작할 때 할당된다. ROWNUM 자체는 WHERE 절에서 조건으로 사용되지만, 사실은 WHERE 절에서 ROWNUM이 조건을 만족하도록 평가될 때는 이미 할당된 상태여야 한다.
🐦 Oracle 정답코드
SELECT * FROM ( SELECT LENGTH, ID FROM FISH_INFO ORDER BY LENGTH DESC, ID ) WHERE ROWNUM <= 10;
🐦 MySQL 정답코드
여기서, (SELECT ID, LENGTH FROM FISH_INFO ORDER BY LENGTH DESC, ID) 부분은 FROM 절 내에 사용되고 있기 때문에 인라인 뷰라고 부르기도 한다.
MySQL에서는 Oracle과 달리 서브쿼리에 as subquery 를 생략할 수 없고, 꼭 써줘야 한다. 서브쿼리 별칭이 필수인 이유는 별칭을 지정하지 않으면 쿼리가 실행되지 않고 오류가 난다. 서브쿼리가 임시 테이블처럼 작동할 때 이를 참조할 방법이 필요하기 때문이다.
SELECT * FROM ( SELECT ID, LENGTH FROM FISH_INFO ORDER BY LENGTH DESC, ID ) AS SUBQEURY LIMIT 10;
같이 풀어보면 좋은 문제
🐠 잔챙이 잡은 수 구하기 문제
[프로그래머스] 👩🏻💻 (MySQL) 🐠 잔챙이 잡은 수 구하기 문제풀이
쉬운 문제는 한 번에 두 세개씩 포스팅 하려고 했는데 이 문제는 생각 해 볼 여지가 많기 때문에 하나만 포스팅 해 보았다. 논란의 여지가 있고 많은 의문이 제기되는 문제이기 정리해본다. 내가
awesomepossum.tistory.com
🐠 특정 물고기를 잡은 총 수 구하기

MySQL 정답코드
SELECT COUNT(B.FISH_NAME) AS FISH_COUNT FROM FISH_INFO A JOIN FISH_NAME_INFO B ON A.FISH_TYPE = B.FISH_TYPE WHERE B.FISH_NAME IN ('BASS', 'SNAPPER');

처음에 틀린 이유는 컬럼명에 ALIAS 안 붙여서
문제에서 FISH_COUNT로 출력하라고 했으니까 AS FISH_COUNT 붙여주어야 한다.

잉? 근데 이 문제는 답안 제출 형식으로 Oracle을 지원하지 않고, MySQL만 지원한다.
어떤 문제는 Oracle도 되고 어떤 문제는 MySQL만 되나 보다;;
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (47) | 2024.11.19 |
---|---|
[프로그래머스] 👩🏻💻 (MySQL) 조건에 맞는 개발자 찾기 문제풀이 (67) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 🐠 잔챙이 잡은 수 구하기 문제풀이 (56) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 모든 레코드 조회하기 / 조건에 맞는 회원수 구하기 / Python 개발자 찾기 문제풀이 (40) | 2024.11.18 |
[프로그래머스] 👩🏻💻 (MySQL) 📚조건에 맞는 도서 리스트 출력하기 (43) | 2024.11.18 |