database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9895 게시물 읽기
No. 9895
nul 관련 질문
작성자
postgres
작성일
2017-09-29 11:53:34ⓒ
2017-09-29 11:57:26ⓜ
조회수
284

 아래와 같이 member라는 Table을 생성하고 다음의 데이터 2개를 삽입합니다.

create table member (member_name varchar(30) not null)
 
insert into member values ('테스트');
insert into member values (' ');    // 이 데이터는 NULL이 아닌 스페이스바 1칸 입니다. membrt_name컬럼이 not null이라 가능하죠.
 
이제 위 member라는 Table을 조회하는데 아래와 같이 조회합니다.
 
select 
CASE
  WHEN member_name = ' '
  THEN NULL
  ELSE member_name
END AS result
from member
 
member Table을 조회하는데 case문을 사용하여 member_name컬럼에 있는 data 중 스페이스바 1칸이 들어간 row가 있으면 NULL로 치환하고,
그 이외의 모든 data는 그대로 하여 result라는 컬럼이름으로 조회해달라 입니다.
 
--------------------------------------------------------여기서 질문
AS 는 Alias로 별칭인데 원래 테이블에 있는 컬럼인 member_name을 result라는 별칭을 주어 case문의 결과를 그 컬럼에 보여달라는거죠.
근데 case문에서 스페이스바 1칸 공백을 NULL로 바꿨는데 왜 조회가 되는거죠?
원래 컬럼인 member_name컬럼은 not null 이거든요
 
 
조회가 되는 이유가 result라는 컬럼이 member_name이라는 컬럼의 별칭으로 member_name컬럼의 공간을 사용하지만 member_name의 특성인 not null특성은 따라가지 않는건가요?
 

 

이 글에 대한 댓글이 총 5건 있습니다.

not null 제약조건은

테이블에 저장 시에 null로 저장 못하는건데...

 

예시에는 ' '를 null로 보여지게끔 쿼리를 날리신겁니다.

 

not null 조건에 대해 잘못이해하신듯 합니다.

김주왕(kimjuking)님이 2017-09-29 12:34:23에 작성한 댓글입니다.

맞네요

위 case 구문이 포함된 select문은

순전히 보여주기위한 조회문일뿐이지 실제 member라는 테이블의 

' '를 null로 update한게 아니네요.. 말씀하신것처럼 

' '를 null로 보여지게끔  쿼리를 날린거죠.

이 부분은 이해했습니다 감사합니다.

 

그럼 AS 이후에 나오는 result컬럼에 대해서도 설명좀 부탁드립니다..

result 컬럼은 전혀 새로운 컬럼이 아닌 원래 member테이블의 member_name컬럼의 '별칭'

으로 Alias를 준것 뿐인데요. 기존 member_name 컬럼이 varchar(30)에 not null이면

별칭인 result컬럼도 varchar(30)에 not null이어야 하지 않나요??

 

postgres님이 2017-09-29 13:40:20에 작성한 댓글입니다.
이 댓글은 2017-09-29 13:40:45에 마지막으로 수정되었습니다. Edit

예를 들어 varchar(1)에

Y라는 flag값을 넣는다고 하면..

이 값을 가공해서 보여주는것에 대해서 제약사항이 없습니다.

 

저장하는 type에 대해 선언해주는 거지 select 절에서 어떻게 보여줄것인가는

다른겁니다.

 

김주왕(kimjuking)님이 2017-09-29 13:49:34에 작성한 댓글입니다.

아하 그 말씀은 위 쿼리로 봤을때 

member_name(varchar(30), not null)컬럼을 Alias로 result라는 별칭을 줘서 사용하게 되면

result컬럼의 저장 타입은 varchar로 동일하게 가되 그 길이라던지 null,not null인지의 제약사항은 없이

사용한다 라는 말씀이시죠?

postgres님이 2017-09-29 14:01:57에 작성한 댓글입니다. Edit

alias가 저장 컬럼이 되지 않고

실제 저장은 member_name이죠..select과는 무관한 질문인듯합니다.

 

result로 alias 준것은 형변환을 하든 몰 하든 ...상관이 없습니다.

김주왕(kimjuking)님이 2017-09-29 14:07:22에 작성한 댓글입니다.
이 댓글은 2017-09-29 14:07:58에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
9900오라클 meger ==> postgresql 변환 [1]
김미현
2017-10-12
111
9898pgagent 설치방법 아시는분 계신가요? [5]
postgres
2017-10-12
108
9896postgresql disk i/o 원리,과정을 알고 싶습니다. [1]
도와주세요
2017-09-30
253
9895nul 관련 질문 [5]
postgres
2017-09-29
284
9894쿼리문 중에 질문이 있습니다.. [5]
뉴비뉴비
2017-09-26
399
9893postgreSQL에는 duplicate key update 같은 기능을 하는게 있나여? [6]
김희주
2017-09-26
355
9892타입 변환 질문이있습니다. [1]
초보보
2017-09-22
360
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.070초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다