예전에 게시판을 구현했을 때 페이징 처리를 해야 할 일이 있었습니다. 어떻게 처리할 지 고민하다가, limit와 offset 조합으로 처리하였던 기억이 납니다. 컬럼 수가 그리 많지 않다면, 시도해 보아도 괜찮은 방법 중 하나입니다. 실제로, 해커랭크나, 다른 사이트 sql 문제들을 풀고 나서, 다른 분들의 코드를 보면 limit는 정말 많이 볼 수 있음을 알 수 있습니다. 특히 rank 관련해서요. 예를 들어서, 모든 사람들의 score 값이 다 다를 때, k위를 한 사람을 구하는 쿼리를 쓸 때, 정렬하고 offset, limit 조합을 쓰면 너무 쉽게 처리할 수 있습니다. 예제 상황을 가지고 오겠습니다. dbeaver의 예제 데이터 베이스에는, Album 테이블이 있습니다. 그리고, Track이 있습..
코딩/Sql 검색 결과
예전에 ifnull 함수를 배운 적이 있었습니다. null이면 A로 처리하더라. 이런 플로우였습니다. 반대로, nullif 함수가 있습니다. 이것은 반대로 B이면, null로 처리하게끔 할 때 씁니다. 어떤 플로우인지 잠깐 언급을 드리고, 예제를 간단하게 보겠습니다. 먼저, expr1 = expr2가 참이라면, true이니 이 때에는 null을 돌려줍니다. 그렇지 않으면, expr1을 돌려줍니다. 생각보다 복잡하지 않아요. 그러면, 학점 score가 'F'라면 null 처리를 하겠다. 고 하면 어떻게 하면 좋을까요? nullif의 플로우는 위와 같아요. 우리가 리턴해야 하는 값은 score입니다. 그러니, expr1에는 score가 들어가야 합니다. 다음에, expr2에는 'F'가 들어가야 겠네요. 즉,..
레코드에 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..
최근댓글