티스토리 툴바



개발 환경 
- MYSQL5.1 / CENTOS / JAVA1.6 / TOMCAT 6.0

시나리오 
 - 개발한 웹 화면에서 특정데이터를 SELECT 를 하는 경우에 해당 에러를 로그로 내뱉으며 제대로 동작이 되지 않는다. 로그에는 
com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '????????' in column '?' is outside valid range for the datatype INTEGER
식으로 남겨진다. 

원인 + 해결책 

쿼리 결과에서 나오는 숫자의 값은 자바 INT 형이 담을수 없는 수의 숫자가 들어오게 되었고 결국 변수에 담다가 에러가 나게 되었다.
해당 자바 변수를 INT 형에서 LONG 형으로 바꿔서 배포를 하였다. 결국적으로 숫자가 너무 커서 난 에러 

 
저작자 표시 비영리 변경 금지
Posted by 류재섭
TAG error, Java, mysql

SQL :: BETWEEN 연산자

용도 : 두값의 범위에 해당 하는 데이터를 조회 하기 위해 사용 BETWEEN 연산자에 명시된 값도 조회 대상에 포함 되며 항상 작은 값을 앞에 기술하고 큰값은 뒤에 기술 한다.

사용법               :  SELECT ename, job, sal, deptno FROM EMP WHERE sal BETWEEN 1300 AND 1500
같은 의미의 쿼리 :  SELECT ename, job, sal, deptno FROM EMP WHERE sal >= 1300 AND sal <= 1500 

SQL :: IN 연산자

용도 : 목록에 있는 하나 이상의 특정 값에 대한 조회를 할 경우 사용함  

사용법               :  SELECT ename, job, sal, deptno FROM EMP WHERE empno IN (7902,7788,2321)
같은 의미의 쿼리 :  SELECT ename, job, sal, deptno FROM EMP WHERE empno = 7902 OR empno = 7788 OR empno = 2321

 - 두개의 쿼리의 경우는 실제 돌아가는 것도 똑같다고 한다. 그리고 OR 연산자보단 IN 연산자의 사용을 추천한다. 복잡하게 사용할 경우 PLAN 이 원하지 않게 돌아간다. 또한 IN 연산자는 사실상 
 SELECT ename, job, sal, deptno FROM EMP WHERE empno IN (7902,7788) 쿼리를 실행했을 때 가정하에 
 
SELECT ename, job, sal, deptno FROM EMP WHERE empno = 7902  UNION ALL 
 SELECT ename, job, sal, deptno FROM EMP  WHERE empno = 7902 의 쿼리를 실행 했을 때와 같다고 한다. 

SQL :: LIKE 연산자 
 
용도 : 검색 STRING 값에 대한 와일드 카드 검색을 위해서 사용 , 검색 조건은 Literal 문자나 숫자를 포함할수 있다,
   % : 문자가 없거나 하나 이상의 문제를 대체함 
   _  : 하나의 문자를 대치함 
 

사용법               :  SELECT ename, job, sal, deptno FROM EMP WHERE hiredate LIKE '%82'
                           SELECT ename, job, sal, deptno FROM EMP WHERE hiredate LIKE '_82'
 

단 검색 대상 컬럼이 숫자인 경우 내부 형 변환이 발생하므로 주의  

-  내부적으로 숫자인 경우 CHAR 형으로 변환 되서 검색

LIKE 검색 조건 안에 '%' 나 '_'에 대한 검색을 위해서는 Escape문자를 이용함 

사용법               :  SELECT ename, job, sal, deptno FROM EMP WHERE name LIKE '%X\_Y%' ESCAPE '\'

SQL :: IS NULL 연산자 

용도 : NULL값을 가지고 있는 행을 조회할 때 사용함 

사용법               :  SELECT ename, job, sal, deptno FROM EMP WHERE name IS NULL
 
SQL :: 연산자의 우선 순위 규칙 

순서 : 괄호 > 모든 비교 연산자 > NOT > AND > OR
저작자 표시 비영리 변경 금지
Posted by 류재섭
TAG Between, SQL

NULL 값 이란 
 
 - 정의 : 아직 지정 되지 않았거나, 값을 알수 없거나 , 적용 할 수 없는 값 
 
 - 우리가 잘못 알고 있는 사례
  1>  NULL != NULL : null과 null은 같을수 없다.
  2>  NULL != ''       : null은 '' 과 같지 않다.
  3>  NULL != 0        : null은 0 이 아니다. 
 
 - NULL 이 연산에 참여 하게 되면 RETURN 되는 값은 NULL이다 .
 
널처리 함수 DBMS 별  
 
 - ORACLE : NVL(nullTarget, IsNulllResult)
 - MYSQL  : IFNULL(nullTarget, IsNulllResult)
 - MSSQL  : ISNULL(nullTarget, IsNulllResult)
 
 ex> SELECT EMPNO, SAL, SAL*12 + IFNULL(BONUS,0) AS YEARSAL FROM EMP  
저작자 표시 비영리 변경 금지
Posted by 류재섭
TAG DATABASES, DB, SQL