해결된 질문
작성
·
539
·
수정됨
2
안녕하세요. 강의해주셔서 감사합니다.
가끔씩 연습을 하다보면 % 만 입력했을 시 전체데이터가 뱉어지는 경우가 있는데,
배운대로,
SELECT * FROM board WHERE title like '%검색어%' 라면
SELECT * FROM board WHERE title like '%%%'가 될 것 같습니다.
이게 어떤 원리로 전체 데이터가 출력이 되는 건지 궁금합니다. 입력한 %가 메타문자(와일드카드)로 인식되어 전체출력이 되는 걸까요?
그리고 싱글쿼터만 넣어도 전체 데이터가 출력되는 경우도 있던데 이것도 어떤 원리인지 너무 궁금합니다...! 알려주시면 감사하겠습니다.
답변 1
1
안녕하세요.
답변이 늦어서 죄송합니다.
%라는 와일카드 문자가 모든 문자에 매칭이 되기 때문에 컬럼 like '%' 이렇게 조건식이 있으면 무조건 참이 되게 됩니다.
그러면 검색창에 아무런 단어 입력 없이 그냥 검색만 클릭하여도, title like '%%' 이렇게 조건식이 만들어지니 당연히 전체가 출력되는 것이 맞죠. 그런데 환경에 따라서 검색어가 입력되지 않을 경우 검색어를 입력해라고 경고창이 출력되는 경우도 있기 때문에 검색어에 % 문자를 입력하여 입력 검증 로직을 통과하는 것 입니다.
그리고 싱글 쿼터만 입력해도 전체가 출력되는 경우는 이론대로라면 에러가 출력되는 것이 정상입니다.
DBMS 관점에서 title like '%'%' 이러한 문법은 문법상의 에러기 때문에 당연 에러가 출력되는 것 입니다. 그러나 간혹 전체 출력이 되는 경우가 있는데 이 경우는 두가지로 볼 수 있습니다.
1) 에러가 발생될 경우 전체 출력을 해버림. => 에러 무시
2) 싱글쿼터 문자 제거
이렇게 2가지로 볼 수 있으며, 그 외 싱글쿼터를 이스케이프 처리 시킬 경우 싱글쿼터도 검색어에 포함되어 싱글쿼터 문자가 포함된 검색 내용을 찾아서 출력이 됩니다.