본문 바로가기
Data Analysis/SQL

7. SQL 에서 Where 1=1은 왜 쓰는걸까, mysql 키워드에서 문자 개수 찾기

by Hagrid 2022. 11. 15.
반응형

SQL 에서 Where 1=1은 왜 쓰는걸까

  • 요약 : 가독성을 위해서 / 주석처리 하려고

0. 무슨뜻 ?

  1. 1=1 말그대로 참
  2. 딱히 의미를 가지는건 아님

1. 어디서 사용?

  1. 쿼리를 다시 한번 훑을때 (디버깅) 주석처리하기 편하다
WHERE  push_type_cd = '1'
       AND reg_dttm >= '2022-03-29'

대신

WHERE  1 = 1 
       AND push_type_cd = '1'
       AND reg_dttm >= '2022-03-29'

을 쓰면

WHERE  1 = 1 
       -- AND push_type_cd = '1'  => 여기만 주석처리 쉽게 가능 ! 
       AND reg_dttm >= '2022-03-29'

이렇게 쉽게 주석처리 가능하다 .

하나씩 주석처리하면서 쿼리 확인가능 !
LIMIT 걸어서 보는것도 잊지말자

2. 그럼 무조건 써야하나 ?

https://dejavuhyo.github.io/posts/why-avoid-using-the-dynamic-query-where-1=1/

위 링크를 보면
지양 해야 한다고 써져있다.

  1. select 할때는 큰문제가 없지만
  2. update하거나 delete 할때는 조금 문제가 된다.
  3. Null 값 때문에

3. What is the purpose of using WHERE 1=1 in SQL statements?

https://stackoverflow.com/questions/1264681/what-is-the-purpose-of-using-where-1-1-in-sql-statements

  • 더 자세하게

https://jdm.kr/blog/7


https://www.navicat.com/en/company/aboutus/blog/1812-the-purpose-of-where-1-1-in-sql-statements

  • 쿼리 실행 시간비교 -> 별 효과없음 큰차이 안남

[MySQL] mysql 키워드에서 문자 개수 찾기

CHAR_LENGTH(cm.card_nm) -CHAR_LENGTH(REPLACE('키워드나 컬럼명', ' ', ''))
  • CHAR_LENGTH = 문자열의 길이를 return 한다.
  • 공백을 찾고싶어서 ' ' 를 사용다른 문자를 찾고싶으면 두번째 ''안에 다른 문자를 넣으면 됨
  • ''으로 대체 하는 replace 사용
SELECT
       CASE
              WHEN Char_length(cm.card_nm) -Char_length(Replace(cm.card_nm, ' ', '')) = 1 THEN '1'
              ELSE
       end
from   테이블

이런식으로 나누어 라벨링 가능


비슷하게 INSTR 이라는 함수도 있다.

  • INSTR() 함수는 다른 문자열에서 문자열이 처음 나타나는 위치를 반환한다
  • "W3Schools.com"에서 3을 찾고 싶으면 아래와 같이 사용한다 .
SELECT Instr("w3schools.com", "3") AS MatchPosition;
  • 아래를 참고 했다.

https://www.w3schools.com/sql/func_mysql_instr.asp

SELECT Instr(
'w3schools.com'
, '3')      as  INSTR1,
Instr(
'w3schools.com'
, '3', 4)    as INSTR2,
Instr(
'w3schools.com'
, '3', 4, 2) as INSTR3
FROM   table_name;

🤝

  • INSTR1은 위에 있는 설명과 같다.
  • INSTR2는 4번째 위치부터 3을 찾고
  • INSTR3은 시작위치를 4 발생횟수를 2로 정해서 3번째 3을 찾는다.
  • -1을 넣으면 뒤에서 부터 찾는다.

[Oracle]기반의 설명인데, 오라클과 Mysql은 비슷하니 뭐 ,,, 비슷하지 않을까 생각한다 !


🙀 만약 어떠한 문자를 찾은 위치부터 다시 찾는다면 ? Instr() 함수 안에 또 instr()함수를 한번 더 사용할 수있을까?

  • 글들을 뒤져보니 2014년에는 가능했다.
  • 근데 지금은 해보니까 안된다. 아마 어느 패치가 된듯 하다
  • 그럴때는 substring으로 잘라내고 instr()함수를 사용하자 !
반응형

댓글