문자유형 비교방법 ( 비교연산자 ) 에 관한 완전기초질문... 0 7 2,323

by dlwptjdi [SQL Query] [2016.08.21 10:48:50]


안녕하세요

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 값을 입력하고 싶은데 잘 모르겠습니다

 

질문이 너무 허접한데 그래도 답변해주시면 정말 감사하겠습니다!! 

 

 

 

 

 

 

 

 

 

 

by jkson [2016.08.22 10:08:29]

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가 되는 것이고

이것을 설명하고 있는 부분 같네요.


by dlwptjdi [2016.08.22 23:14:36]

아하.. 제가 자료형에 대한 이해가 부족하여서 그런것 같네요!!설명해주셔서 감사합니다~!!
 


by Kyle [2016.08.22 10:23:52]

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 을 대입할 수 있으며, 모두 같은 결과 임

 

 


by Kyle [2016.08.22 10:32:51]

혹시 오해 하실수도 있어 항목을 하나 추가 했습니다.


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 필드 확인하세요

 


by dlwptjdi [2016.08.22 23:17:07]

지금 실행해보았는데요 한번에 이해가 되었습니다!! 감사합니다!@!


by 마농 [2016.08.22 10:45:50]

설명이 이해하기 어렵게 되어 있네요.

그냥 단순하게 Varchar2 는 들어 있는 값 그대로 비교하고

Char 의 경우는 뒤에 붙는 공백까지 감안해서 비교한다고 생각하시면 됩니다.


by dlwptjdi [2016.08.22 23:18:08]

넵~! 위에 얘기해주신거랑 합쳐서 정리해보았더니 이해가 너무 잘되었어요. 답변 감사합니다~!! 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입