(SQLite3) SELECT 문을 알아보자

테이블에 저장된 데이터를 조회하기 위해서는 SELECT문을 사용한다. SELECT 구문운 SQL에서 가장 흔히 쓰이는 쿼리문인 동시에 가장 복잡한 구문이기도 하다. 테이블 조회와 관련하여 SQLite3는 표준 SQL에 정의된 거의 모든 기능을 제공한다. SQLite3의 SELECT 구문의 사용법에 대해서 살펴보자.

기본 컨셉

기본적으로 SELECT 는 DB 엔진으로부터 질의에 대한 답을 요청하는 명령이다. 일반적으로 테이블 내의 레코드들을 조회하는 용도로 사용되지만, SELECT 명령의 본질은 DB가 수행할 수 있는 연산의 결과를 얻는 명령이다. 따라서 테이블 조회뿐만 아니라 다음과 같이 계산 결과를 얻도록 호출할 수도 있다.

SELECT 1 + 1;

위 쿼리는 단순히 2라는 결과를 얻게 된다. 테이블을 지정해서 데이터를 조회하지는 않지만 하나의 온전한 SELECT 구문이기도 하다.  물론 이것은 SELECT라는 명령이 DB엔진으로부터 어떠한 값을 요청한다는 개념을 보여주는 예이지, 실제로 이런 간단한 계산 때문에 데이터베이스를 사용하는 일은 드물다.

따라서 실제로는 다음의 개념으로 SELECT 명령을 이해해야 한다.

  1. SELECT 명령은 어떤 “결과”를 요구하는 명령이다.
  2. SELECT 명령은 폭과 높이가 각각 0 이상인 2차원 그리드로 구성된 데이터에 대해서 수행된다.
  3. SELECT 명령의 결과 역시 폭과 높이가 각각 0 이상인 2차원 그리드로 구성될 수 있다.

이 관점에 따르면 SELECT 1 + 1; 은 첫째로 연산의 결과를 요구하고 있으며, 가로가 0, 세로가 0인 (비어있는) 그리드를 대상으로 ‘조회’한다고 볼 수 있다. 그리고 그 결과는 1X1 그리드, 즉 단일값이 된다.  실제로 통상의 SELECT문이 대상으로 하는 테이블 역시 2차원 그리드이며, SELECT 문의 조회 결과 여러 열과 행으로 구성된 2차원 그리드가 된다.

(SQLite3) SELECT 문을 알아보자 더보기

[iOS/OSX] predicate를 사용한 배열의 필터

배열을 필터하기

특정한 값을 만족하는 원소만을 추출하여 부분 집합을 구하는 작업을 종종 해야 할 때가 있다. 배열에 대한 정렬 보다 간단하다면 간단하고 어렵다면 어려운데, predicate를 사용하면 쉽게 추출이 가능한데, 이 predicate를 사용하는 문법이 별도로 존재하기 때문에 조금 성가실 수 있다. (하지만 영문법과 크게 다르지 않다)

NSMutaleArray *array = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melisa", nil];
NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF beginsWith:'b'"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:bPredicate];
// ==> { @"Bill", @"Ben" }

predicate는 너무 깊이 파면 복잡하므로 일종의 쿼리문이며, 대략 다음과 같은 포맷과 문법이 있다고 알아두자.

  • %@ : 하나의 객체로 치환한다.
  • %K : 하나의 문자열로 치환한다. 이는 비교하고자 하는 키패스가 된다.
  • = / == : 두 항이 같다.
  • >= / => : 왼쪽이 크거나 같다.
  • <= / =< : 오른쪽이 크거나 같다.
  • > : 왼쪽이 크다
  • < : 오른쪽이 크다.
  • != / <> : 같지 않다.
  • BETWEEN : 사이에 있다 – 1 BETWEEN {0,3}
  • TRUEPREDICATE : 항상 TRUE
  • FALSEPREDICATE : 항상 FALSE
  • AND / && : 논리곱
  • OR / || : 논리합
  • NOT / ! : 논리 부정
  • 문자열 비교시 [cd] 토큰 : c는 대소문자구분하지 않음, d는 공백등을 무시
  • BEGINSWITH : 첫글자가 ~로 시작함
  • ENDSWITH : 마지막이 ~로 끝남
  • CONTAINS : ~를 포함함
  • LIKE : ~와 유사함
  • MATCHES : 정규식을 사용함
  • IN : 비교항이 특정 집합에 포함됨

언제나 그렇지만 자세한 내용은 개발자 문서를 참고하면 된다.