1. 연산자
1-1. 동등비교 <=>(양쪽모두 null-> true반환, 한쪽만 null -> false반환), =
1-2. 부정비교(<>, !=, !(false->0, true->1)
1-3. and(&&)와 or(||) 연산자
set sql_mode='pipes_as_concat'; --||을 oracle연산자와 동일하게 변경
select 'abc'||'def' as concated_string; -- 결과값 abcdef
1-4. 나누기(/, div)와 나머지(mod, %) 연산자
1-5. regexp연산자
ex> 'x','y','z'문자로 시작하는 검증 표현식
select 'abc' regexp '^[x-z]';
- 시작 문자패턴 검증식: ^
- 끝 문자패턴 검증식: $
- 문자그룹표시 [] - 이중 하나만있어도 결과값 뱉어냄 ex> [x-z] -> x or y or z중 한글자만 있어도
-문자열 그룹표시 () - 이중 모두있어야 결과값 뱉어냄 ex> (xyz) -> xyz모두 있어야
- 또는 | - abc|xyz abc또는 xyz
- 문자개수 . ->'...' -> 3개의 문자로 구성된 문자열 찾음
- * : 이 기호앞에 표시된 정규 표현식이 0 또는 1번 이상 반복될 수 있다는 표시
- +: 이 기호앞에 표시된 정규 표현식이 1번이상 반복될 수 있다는 표시
-?: 이 기호앞에 표시된 정규표현식이 0 또는 1번만 올 수 있다는 표시
- 특징: regexp연산자조건 비교는 인덱스 레인지스캔을 사용할 수 없다. 따라서 where조건절에 regexp연산자를 사용한 조건을 단독으로 사용하는것은 성능상 좋지 않다. 가급적 범위를 줄일 수 있는 조건과 regexp연산자를 사용하길 권한다.
2. like연산자
- 특징: regexp연산자는 인덱스를 전혀 사용하지 못한다는 단점이있지만 like연산자는 인덱스를 이용해 처리할 수 있다는 장점이있다. '%'(0또는 1개이상의 모든 문자에 일치), '_'(정확히 1개의 문자에 일치) 가 전부이며 regexp는 대상 문자열의 일부만 일치해도 true를 반환하는 반면, like는 항상 문자열의 처음부터 끝까지 일치하는 경우에만 true를 반환한다.
- escape문의 사용: select 'abc' like 'a/%' escape '/';
- 와일드카드가 검색어 뒤쪽에있다면 인덱스 레인지 스캔으로 사용할 수 있지만, 검색어 앞쪽에 있다면 인덱스 레인지스캔을 사용할 수 없다.
3. between 연산자
- 범위를 읽어야하는 연산자 between은 모든 인덱스의 범위를 검색해야만 한다. (선형으로 인덱스 검색)
4. in 연산자
- in 연산자가 서브쿼리인경우 상수가아닌경우는 상당히 느려질 수 있다.
- in 연산자는 null레코드를 검색할순 없다. (<=>, is null 사용)
- not in의 실행계획은 인덱스 풀스캔으로 표시된다. (부정형비교라 인덱스로 이용해 범위줄이는 조건으로 사용불가)
'SQL > Mysql' 카테고리의 다른 글
Mysql- insert절 용법 총정리(Real Mysql) (0) | 2021.02.16 |
---|---|
MYSQL all about Select절 (REAL MY SQL 정리) (0) | 2021.02.15 |
MYSQL 내장함수 / 문자열처리/타입변환/처리대기/벤치마크/암호화/aggregation function/주석 (REAL MY SQL 정리) (0) | 2021.02.13 |
MYSQL 리터럴 모음 (REAL MY SQL 정리) (0) | 2021.02.12 |
MYSQL 매뉴얼(Document)읽는 방법 (REAL MY SQL 정리) (0) | 2021.02.11 |