[SQL] MySQL 8.0.21 에러 오답노트

이때까지 배운 JSP, Servlet, Java, SQL, HTML, JavaScript, CSS 모든걸 활용해서 만드는 웹 프로젝트를 오늘 진행했다.
MVC패턴으로 웹 사이트를 구현하는 프로젝트 였는데, 복잡한 Subquery를 쓰다보니, DAO에서 SQL문을 작성하는데 처음 보는 오류를 발견했다.

물론 웹사이트에 검색하면 쉽게 나오는 것들이지만, 직접 개발하면서 발견한 것들인만큼 따로 정리해보려고 한다.

Prepared Statement사용시 ? 문자열 주위에 ” 홑따옴표나 쌍따옴표가 오면 안된다.

해당 ? 문자열을 문자 그대로 인식하기 때문

|| 쌍파이프로 문자열을 합치면 제대로 쿼리가 되지않는다.

뭐가 문제일까?
String q=”SELECT * FROM houseinfo WHERE AptName LIKE’%’||?||’%’ LIMIT 100″;
일단 concat을 이요해서 쿼리를 하자 정상적으로 작동했다.
String q=”SELECT * FROM houseinfo WHERE AptName LIKE CONCAT(‘%’,?,’%’) LIMIT 100″;

MySQL에서 출력 갯수를 제한하려면 TOP 이 아니라 LIMIT을 써야한다.
SQL Server은 TOP이 맞다.

Oracle에서는 다음과 같이 ROW_NUMBER를 이용하여 제한한다.
WHERE ROWNUM <= 100;

MySQL
WHERE LIMIT 100;