예전에 ifnull 함수를 배운 적이 있었습니다. null이면 A로 처리하더라. 이런 플로우였습니다. 반대로, nullif 함수가 있습니다. 이것은 반대로 B이면, null로 처리하게끔 할 때 씁니다. 어떤 플로우인지 잠깐 언급을 드리고, 예제를 간단하게 보겠습니다. 먼저, expr1 = expr2가 참이라면, true이니 이 때에는 null을 돌려줍니다. 그렇지 않으면, expr1을 돌려줍니다. 생각보다 복잡하지 않아요. 그러면, 학점 score가 'F'라면 null 처리를 하겠다. 고 하면 어떻게 하면 좋을까요? nullif의 플로우는 위와 같아요. 우리가 리턴해야 하는 값은 score입니다. 그러니, expr1에는 score가 들어가야 합니다. 다음에, expr2에는 'F'가 들어가야 겠네요. 즉,..
코딩/Sql 검색 결과
레코드에 double, float과 같은 실수 타입이 있습니다. 예를 들자면, 0.1달러, 0.2달러와 같은 것들입니다. 이것을 double로 저장했을 때와 decimal로 저장했을 때 어떤 차이가 있을까요? 간단하게 알아보겠습니다. NewTable은 deci, dou, deci2, dou2 필드가 있습니다. deci가 prefix인 것은 decimal(10,5)로, dou가 prefix인 것은 double로 저장하였습니다. 데이터들을 넣어 보겠습니다. 이 테이블에 있는 데이터들을 보겠습니다. 그러면 1.3, 1.3, 1.3, 1.3과 1.1, 1.1, 1.1, 1.1이 나옵니다. 여기서 deci+deci2와 dou+dou2를 출력해 보도록 하겠습니다. 위와 같이 나오는데요. 각각 2.6, 2.6과 2...
nameAB 테이블에 저장되는 레코드들은 아래와 같은 컬럼들을 가집니다. key는 하나도 없습니다. 이 문제를 생각해 봅시다. name 별로 A가 최대일 때의 B값, A가 최소일 때의 B값을 가져와서 그것의 차이를 구하는 게 목표입니다. 단, A와 B는 0이상 32768 미만의 정수입니다. 그리고, 임의의 str, a에 대해서, 이름이 name이고, A값이 a인 레코드는 많아봐야 1개만 있다고 가정하겠습니다. 예를 들어서, name이 'tEq'라고 해 보겠습니다. 그러면 nameAB에서 다음과 같은 레코드들이 나옵니다. A값이 최소인 레코드의 B값은 1710이 나옵니다. A값이 최대인 레코드의 B값은 1233이 나옵니다. 이 두 값의 차이는 1233 - 1710 = -477입니다. 이 값을 name별로 ..
mysql에서 information_schema는 메타 데이터에 접근하기 위해서 씁니다. 예를 들자면, 어떤 테이블이 있는지. 어떤 collaction을 쓰는지, 컬럼이 뭐가 있는지 등이 속합니다. 이 중에, 오늘은 3번째 것을 잠깐 다뤄보도록 하겠습니다. 이것과 같이 공식 문서를 보시면 좋습니다. 문제는 다음과 같습니다. mydb에 있는 모든 테이블들에 대해서, 그것과 대응되는 Model 클래스들을 생성해 주세요. 물론, jdbc 프로그래밍에 익숙하시다면야. 조금만 고생하시면 되지만, 익숙치 않다고 하더라도, 할 수 있는 방법이 있습니다. 전 급할 때는 그냥 쿼리문만 날려서 파일로 저장한 뒤에 간단하게 파일 입출력을 하는 식으로 구현하기도 합니다. mydbinformation_schema 안에 있는 v..
오늘은, 아래와 같은 상황에서, 키가 중복해서 들어가 있다면, update를, 그렇지 않으면 insert를 하는 예제를 보도록 하겠습니다. 당연하게도, 이 문서를 같이 읽어보시는 것을 권해드립니다. 기존 테이블은 오래된 데이터입니다. 몇 데이터가 들어오는데, 이 중에는 '업데이트'가 된 데이터도 있습니다. 예를 들자면, id에 대해서. 그러한 경우에 어떻게 해야 할까요? postgresql에는 upsert가 있다고 하는데.. 문제부터 보겠습니다. sampleT는 아래와 같습니다. id와 name으로 정의가 되어 있고, id는 primary key입니다. sampleT에 추가되어 있는 데이터를 보도록 하겠습니다. select from을 이용하면 매우 간단하게 조회할 수 있습니다. 1, 'cho'하고, 2,..
최근댓글