반응형

Mysql select 조회시 특정값 제외, 포함 검색 및 LIKE NOT 활용


데이터를 조회하는 select 쿼리 조건절 부분을 간단히 정리합니다.

데이터베이스에 존재하는 데이터 중에서 원하는 부분을 조회 하기 위해서는 

조건절을 잘 사용해야 하는데 이때 사용되는 여러 키워드를 정리해 봅니다.


Mysql 에서는 조건절 처음은 where 구문으로 시작되고 그 이후에는 and, or 등으로 조건을 추가 합니다. 

그 외에 기호등도 사용이 되는데 "||, %, =" 등이 있습니다. 

아래의 예문중 대문자는 구문을 표시하여 예시 하였습니다. 

대문자가 아닌 부분은 변경되는 부분입니다.

NOT 구분은 제외 검색시 사용됩니다.


-) 조건과 일치하는 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name = "value";

// table_name 테이블에 컬럼명 column_name 데이터 중에 값이 value와 동일한 데이터 조회

-) 조건과 일부가 포함한 값을 조회 하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value%";

// table_name 테이블에 컬럼명 column_name 데이터 중에 값이 value를 포함한 데이터 조회

-) 데이터 값중 조건값 앞문자에 상관없이 조건을 포함한 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value";

// column_name 데이터 중에 앞문자 상관없이 value를 포함한 데이터 조회

-) 데이터 값중 조회값 뒷문자에 상관없이 조건을 포함한 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name LIKE "value%";

// 데이터 중에 뒷문자 상관없이 value를 포함한 데이터 조회

-) 여러 검색어를 하나의 컬럼에서 비슷한 값을 조회 하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value%check%";

// 데이터 값중에 value와 check 값이 포함되어 있는 데이터만 조회

-) 여러 검색어를 하나의 컬럼에서 일치하는 값들을 조회 하는 방법

SELECT * FROM table_name WHERE column_name IN ("value","check");

// 데이터 중에 value 값과 일치 거나 check 값이 일치한 데이터만 조회

-) 나머지 여러 조건을 추가 할 경우에는 AND, OR 구문을 사용해서 조회 합니다. 

   설명 까지 할 부분이 아닌 것 같아 예시는 생략합니다. 

-) 검색중 제회할 데이터가 있을 경우 NOT 구문을 이용하여 조회 합니다. 

SELECT * FROM table_name WHERE column_name NOT IN ("value","check");

// 데이터 중에 value 값과 일치 거나 check 값이 일치한 데이터를 제외한 나머지를 조회

-) NOT 구문은 반대 값을 구하라는 뜻이기 때문에 단일 조건 구문 앞에서도 사용됩니다. 

SELECT * FROM table_name WHERE column_name NOT LIKE "%value%";

// value 값이 포함된 값을 제외한 나머지 값을 조회 

-) 데이터 값들이 숫자이거나 날짜일 경우에는 부등호를 사용하여 조회합니다.

SELECT * FROM table_name WHERE value < 100 AND value > 10;

// 숫자, 날짜 데이터의 경우 부등호의 사용이 가능



반응형
반응형

open <tag> in XML mapper - mybatipse plugin 사용하기


1. mybatipse plugin 의 사용 이유

스프링으로 controller service serviceImpl dao vo 파일에서 작업 시 컨트롤러에서 서비스로 이동할때 

F2, F3를 이용하거나 ctrl을 눌러 open declaration을 통해  컨트롤러에서 이동할 서비스 위치를 찾아 갑니다.

service에서 serviceImpl도 그렇고 DAO에서 VO도 사용을 합니다. 

serviceImpl 이나 dao에서 선택자(id)에 해당하는 mapper 쿼리를 빠르게 이동할 때 사용할 수 있습니다.

일반적으로는 plugin이 설치 되지 않아 바로 이동이 불가능 합니다. 

이럴 경우 mybatipse plugin (Eclipse plugin adding support for MyBatis SQL Mapper Framework.) 을 사용하면 많은 도움이 된다.


2. 설치 방법

Help -> Eclipse MarketPlace -> mybatipse 검색합니다.

[마켓 검색]


현재 최신 버전은 MyBatipse 1.2.2 버전입니다. 버전은 변경 될 수 있습니다.

프로그램을 Installed 하고 난후 sts나 eclipse를 재기동을 하면 설치가 됩니다. 

설치 방법은 아주 간단합니다. 


3. 사용 방법

설치를 하고 sts나 eclipse가 재기동이 되면 이동할 메소드(dao)에서 ctrl키를 눌러 보면

open <tag> in XML mapper 옵션이 추가 된것을 확인 할 수 있습니다. 



반응형
반응형

[오라클] 달력 기준으로 매월 세째주 토요일 일자 쿼리로 구하는 방법

실무에서 달력의 날짜나 요일을 구해야 하는일들이 간혹 발생 합니다. 

보통 달력테이블을 만들어 조회하는데 쿼리로 원하는 요일을 구할 수 있습니다.


방법은

  매달 월의 1일에서 14일을 더하면 달력 상에서 항상 3주차가 나오게 됩니다. 

  14일을 더한 날짜의 요일이 월요일이라면 5일을 더해주어야 하고 화요일이라면 4일을 더해주어야 토요일 일자가 나옵니다.

  요일을 구하는 함수는 TO_CHAR(날짜, 'D')이며 일요일 ~ 토요일까지 1~7 값을 반환합니다. 


WITH TEMP_DATE AS (

SELECT TO_DATE(YYYY||MM, 'YYYYMM') YYYYMM     

  FROM (SELECT LPAD(LEVEL, 2, '0') MM FROM DUAL 

        CONNECT BY LEVEL <= 12)

     , (SELECT TO_CHAR(LEVEL+2018) YYYY FROM DUAL 

        CONNECT BY LEVEL <= 1)

ORDER BY 1)


SELECT YYYYMM, YYYYMM + 14 + (7-TO_CHAR(YYYYMM, 'D')) "세째주 토요일"

  FROM TEMP_DATE


위에 있는 쿼리를 사용하면 됩니다. 

TEMP_DATE 를 정의하고 호출하면 됩니다. 이방법을 응용해서 2주차나 4주차에 적용해 볼수 있습니다. 

반응형
반응형
[오라클] 동일 데이터 반복 조회 access에 대한 쿼리 튜닝 방법
감사합니다. 고맙습니다. 행운을 드립니다.

간혹 최소, 최대값등에 의해 값을 구해야 할경우가 있습니다.

서브쿼리를 이용하여 데이터를 조회한후에 또다시 결과를 조회할경우 테이블 풀스캔이 반복적으로 발생합니다.

이럴경우 RANK를 사용하면 성능에 좋습니다.

예제)

SELECT * FROM EMP
WHERE (JOB, ENAME) IN
(SELECT JOB, MIN(ENAME) AS ENAME FROM EMP GROUP BY JOB)
ORDER BY ENAME;

=>

SELECT * FROM
(SELECT A.*, RANK() OVER(PARTITION BY JOB ORDER BY ENAME) RNK
 FROM EMP A)
WHERE RNK=1
ORDER BY ENAME;
반응형
반응형

MySQL JOIN 걸어서 UPDATE 하는 방법


테이블 2개에 JOIN을 걸어서 UPDATE를 해야 할 경우가 생깁니다. 

JOIN문을 아래 형식처럼 select 구문과 비교 작성해 보았습니다. 


[select]

select [X.컬럼A]

from [테이블1] X

inner join [테이블2] Y on X.[조인된컬럼] = Y.[조인된컬럼]

where 절 


[update]

update [테이블명1] X 

inner join [테이블명2] Y on X.[조인된컬럼] = Y.[조인된컬럼]

set X.[컬럼A] = 변경할값

( WHERE 절 )


조건이 필요한 경우는 WHERE 절을 작성하면 됩니다. 



EX) 예시 입니다. 

1. [국가별 코드]와 사용되는 [인사말]를 가지고 있는 [테이블X] 가 있습니다.

2. [국가별 코드]와 사용되는 [언어 코드]를 가지고 있는 [테이블Y] 가 있습니다. 

3, 국가는 다르지만 사용되는 언어는 같을수 있습니다. 

4. 같은 언어로 된 메세지를 조인 조회해서 수정해야 할 경우를 예로 들어 보겠습니다.

5. 언어코드는 영어코드 'EN'을 사용 하는 메제지를 수정합니다.  



[select]

select [X.인사말]

from [테이블X] X

inner join [테이블Y] Y on X.[국가코드] = Y.[국가코드]

where Y.[언어코드] = 'EN'



[update]

update [테이블X] X

inner join [테이블Y] Y on X.[국가코드] = Y.[국가코드]

set [X.인사말] = '변경할 인사말'

where Y.[언어코드] = 'EN'


반응형

+ Recent posts