안녕하세요
sql을 독학하고 있는 학생입니다. 그래서 기본개념파악을 하고 있는 왕왕왕초보인데요
자격증을 목표로 공부를 해보고싶어서 where절에 관한 내용까지 왔는데
비교 연산자 ( =, <,<=,>,>=) 에 대해서 공부하고 있는 중인데요!
책에서 잘 모르겠는 질문이 있어서 올리게 되었습니당!
char,varchar2 유형의 문자열을 비교할 때
1. 비교연산자의 양쪽이 모두 char 타입을 때 'Blank의 수만 다르다면 서로 같은 값으로 결정한다.' 라고쓰여있는데요 ㅠㅠ
이부분이 도저히 무슨 의미인지 이해가 안가 blank = space 인가? 라고 접근해서 일부러 space로 공간을 주고
select * from player where team_id=' K 0 2'
이런식으로 K02(특정값)를 바꿔서 실행시켜 보았는데 안되더라구요 ㅠㅠ 제가 아무래도 blank의 의미를 잘 모르는 것 같은데 space말고 blank를 입력하려면 어떤것을 입력해야하는 건가요 ?
2. varchar 타입의 유형을 비교할 때 양쪽에 있는 데이터의 길이를 판단하고 비교연산자를 수행하여 결과 행을 리턴하는 것으로 알고 있는데요 ... 또 여기서 'varchar은 not null까지 길이를 말한다.' 라고 쓰여 있는데 , 이부분은 그냥 이해가 안가네요 ㅠㅠㅠㅠㅠ 쿼리에서 null값을 주려면 어떻게 해야하는 건가요? space , blank, null 값을 입력하고 싶은데 잘 모르겠습니다
질문이 너무 허접한데 그래도 답변해주시면 정말 감사하겠습니다!!
1.char형은 고정 길이기고 크기를 10으로 지정했다면 사용자가 1이라는 값을 입력하더라도
1+BLANK 9칸으로 저장되구요. 20으로 지정했다면 1이라는 값을 입력했을 때 1+BLANK 19칸
으로 저장이 되겠죠.
저기서 이야기 하는 것은 크기가 10으로 저장된 컬럼 A와 크기가 20으로 저장된 컬럼 B에
똑같은 1이라는 값이 있을 때
A컬럼의 값과 B컬럼의 값을 비교하면 같은 값으로 나온다는 걸 이야기하는 것 같습니다.
2.VARCHAR2는 가변형 컬럼으로 1 + 스페이스 4칸을 저장하면 말그대로 1+스페이스4칸이 되고
스페이스도 값으로 저장이 되므로 BLANK값이 나오기까지의 길이 1+4 = 5가 되는 것이고
이것을 설명하고 있는 부분 같네요.
create table table01 ( field01 char(5), field02 char(5), field03 char(5), field04 varchar2(20), field05 varchar2(20) ) ; insert into table01 (field01, field02, field03, field04, field05) values (' aa', 'aa ', 'aa', 'bbbbbbb', null) ; select case when field01 = field03 then 'true' else 'false' end a, case when field02 = field03 then 'true' else 'false' end b, nvl(field04, 'null') c, nvl(field05, 'null') d from table01
;
질문1.
상기 쿼리 a 는 서로 다름, b 는 같음 값이후의 공백은 비교시 제외됨
질문2.
문자열에서 null, '' 은 모두 null 을 나타냄, null 은 비교연산자(<, >, =) 로 비교 할 수 없으며
is null, is not null 을 사용해야 함
field = null, field='' 방식으로 필드에 null 을 대입할 수 있으며, 모두 같은 결과 임
혹시 오해 하실수도 있어 항목을 하나 추가 했습니다.
create table table01 ( field01 char(5), field02 char(5), field03 char(5), field04 varchar2(20), field05 varchar2(20) ) ; insert into table01 (field01, field02, field03, field04, field05) values (' aa', 'aa ', 'aa', 'aa', null) ; select case when field01 = field03 then 'true' else 'false' end a, case when field02 = field03 then 'true' else 'false' end b, case when field02 = field04 then 'true' else 'false' end c, nvl(field04, 'null') d, nvl(field05, 'null') e from table01 ;
char = char 와 char = varchar2 비교는 다릅니다 c 필드 확인하세요