계속 값이 들어가네-_-;;; 안들어가야 정상인데!
한참을 고민하다가 과장님께 물어보니
값이 insert 될 때 default 값으로 들어가더만-_-;; 아놔!
왜 그걸 생각 못했을까;
오늘의 교훈 > DB Table에 값이 입력 될 때에는 소스상에서 Insert나 Update 뿐만이 아니라 DB Table 자체에서 Default 값이 주어지는 경우도 있으니 그것도 생각하자!
출처 : 데브피아 (http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=38&MAEULNo=16&no=62792&ref=62791)
-> 최문산 (zenstyle11) 님의 질문에 대한 이영민 (andy5) 님의 답변입니다.
[ 1=1 은 항상 참인 조건입니다. ]
저는 이 조건을 Delphi, Java Swing, C# WinForm 등의 App를 개발할때 Query 문장을 특정 조건에 맞게 조합하고자 할때 사용했습니다.
예를 들어서, 고객등급 조건을 사용자가 선택한 경우에는 고객 등급 조건을 where절에 추가하고,
가입일자 조건을 선택하면 가입일자 조건을 추가하려고 할때,
이미 조건이 추가 되어 있는지를 검사해서 'and' 를 앞에 붙일지 말지를 결정해야 합니다.
이런 조건들이 상당수 있을 경우 if 문이 상당히 지저분하고 가독성이 떨어집니다.
그래서 아예 where 1=1 처럼 항상 참인 조건으로 초기화합니다.
그러면, 그 다음에 오는 조건들은 그냥 and를 앞에 붙여주기만 하면 되니까요~
T-SQL에서 동적쿼리를 사용하는 경우도 마찬가지입니다.
where 절 구성하기에 좀 더 편리한 방법이라고 생각합니다.
별로 필요 없어 보이지만, 나름대로 이유가 있습니다
ps.
where 1=1 은 where 2=2 와 동일합니다. ^^
일종의 관습처럼 굳어진 버릇인것 같아요~
-----------------------------------------------
즉, 여러 조건에 대한 AND문을 WHERE절에 사용할 때 이미 AND문이 사용되었는지 아닌지를 판별하여 AND를 먼저 쓰고 조건을 쓸지 아닐지 결정해야 하는 경우에,
where 1=1 을 먼저 쓰고 시작한다면 그런걸 결정하지 않고 그냥 'and 조건' 을 사용하면 되겠죠. 1=1 은 무조건 참이니까요.
만일 그게 없다면
if (조건이 이미 존재 할 경우) 'and 붙임'
else 'and 안붙임'
뭐 위와같은 조건문이 붙어 내용이 길어지고 위에 설명하셨듯이 가독성이 떨어지겠죠.
전 오늘 where 1=1 의 기능 하나 알았습니다~ 오예~
#####################테스트를 위한 테이블 생성################################
SQL> create table test (
2 name varchar(10)
3 );
테이블이 생성되었습니다.
SQL> desc test;
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
###########################################################################
############### test table에 osy란 number(10)타입의 컬럼 추가 ######################
SQL> alter table test add(osy number(10));
테이블이 변경되었습니다.
SQL> desc test;
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
OSY NUMBER(10)
###########################################################################
##############test table에 osy컬럼명을 osy79로 컬럼명 변경 #########################
SQL> alter table test rename column osy to osy79;
테이블이 변경되었습니다.
SQL> desc test;
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
OSY79 NUMBER(10)
#############################################################################
#################test table에 osy79로 컬럼 데이터 타입 변경 ##########################
SQL> alter table test modify(osy79 varchar(10));
테이블이 변경되었습니다.
SQL> desc test
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
OSY79 VARCHAR2(10)
#############################################################################
######################test table에 osy79로 컬럼 삭제 ###############################
SQL> alter table test drop(osy79);
테이블이 변경되었습니다.
SQL> desc test;
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
##############################################################################
작성자 : 오 수 영 (http://blog.naver.com/neptuneosy)