SQL 연산자
개요
SQL에서 사용되는 각종 연산자에 대한 정리
비교 연산자
>, =, >=, <, <=
그냥 말 그대로 비교를 하는 연산자.
보통의 개발 언어와 다르게 =을 하나만 써야 한다.
여기에서 몇가지 흥미로운 실험을 해볼 수 있다.
데이터 유형에서 고정길이 문자열과 가변 길이 문자열의 비교 차이가 존재한다는 것.
양쪽이 모두 char라면
다음의 과정을 따른다.
- 길이가 서로 다를 때는 공백이 추가되어 길이를 맞춘다.
- 서로 다른 문자가 나올 때까지 비교한다.
- 달라진 첫번째 값으로 대소를 비교한다.
- 공백 수만 다르다면 같은 값으로 처리한다.
간단한 세팅부터.
char4는 크기에 맞게 데이터가 저장됐고, char5는 뒤에 공백이 하나 추가된 것이 보인다.
이때 두 문자열이 같은지 비교하면, 공백은 무시하기 때문에 같은 것으로 출력이 나오게 된다.
비교에 대해서도 마찬가지이다.
공백은 아무런 영향이 없다.
이런 식도 가능하다는 말씀.
비교 중 한 쪽이 varchar2라면
- 기본적으로는 다른 문자 나올 때까지 비교
- 길이가 달라서 한쪽이 끝에 다다르면 긴 쪽을 크다고 판단
- 공백을 문자로 판단
공백 들어간 문자와 아닌 문자를 넣었다.
공백이 들어간 문자는 같은 것으로 판명되지 않았다..
trim이라는 것을 쓰면 공백을 제거해서 뽑아볼 수는 있긴 하다.
비교 중 한 쪽이 상수라면
이때는 상수를 칼럼의 데이터 형에 맞추고 비교한다.
- char일 땐 char처럼, 공백을 문자로 판단하지 않는다.
- varchar라면 공백을 문자로 판단한다.
SQL 연산자
sql에서만 사용하는 특별한 연산자이다.
다른 데에서도 쓰이기는 하는데, 굳이 이렇게 부르는 듯?
- between a and b
- 연속 값일 때 사용한다.
- in (리스트)
- 들어있기만 하면 성립
- like '문자열'
- 문자열과 맞는 형태인지 본다.
- 이때 와일드카드를 쓸 수 있다.
- %는 그쪽으로 몇개의 문자가 와도 상관 없다는 것.
- _는 정확히 한 개의 문자가 와야 한다는 것.
- 18로 시작하면서 뒤에 문자가 2개 이상 오는 문자열을 추출하고 싶다면?
- '18___%'
- is null
- null 행 가져오기.
= null
은 씨도 안 먹히니까 무조건 이걸로 해야 한다..!- is not null하면 null이 아닌 놈만 부른다.
논리 연산자
and, not , or가 여기에 해당한다.
너무 익숙한 개념이라 설명하지 않겠다.
부정 연산자
위에서 not을 봤으니 뭐 더 있겠냐 싶은데..
!=, <>, ^=
와 같은 방식으로 표현이 가능하다.
이중에서 <>
가 표준이라고 한다..
근데 대부분의 dmbs에서 !=
도 지원해주니 크게 상관은 없다.
다른 연산자에 부정을 하고 싶다면 not을 넣어주면 된다.