콘텐츠로 건너뛰기
Home » 스터디 » Page 8

스터디

(SQLite3) INSERT문 – 테이블에 값 삽입하기

INSERT 문은 테이블에 새로운 값을 추가할 때 사용하는 명령이다. 패턴에 따라서 몇 가지 형식으로 사용된다.

  1. INSERT INTO table DEFAULT VALUES; : 테이블의 각 칼럼에 적절한 디폴트 값이 있다면 디폴트 값을 적용해서 새 Row를 추가한다. 디폴트 값에는 명시적으로 DEFAULT를 써서 선언한 값이나 자동으로 증가하는 인덱스 번호값 혹은 NULL이 사용될 수 있다.
  2. INSERT INTO table VALUES (val1, val2, val3, ... ); : 테이블의 모든 칼럼에 대해서 값을 던져주고 해당 값으로 새 레코드를 등록한다. 이 때 VALUES 뒤에 나오는 괄호의 값들은 테이블의 전체 칼럼 수와 같은 개수여야 하며, 테이블 스키마에 정의된 칼럼의 순서와 각각 매치되어야 한다.
  3. INSERT INTO table (col1, col3, col7) VALEUS (val1, val2, val3); : 1, 2의 혼합으로 칼럼의 일부에 대해서만 값을 제공하여 레코드를 생성한다. 여기에 명시되지 않은 칼럼들은 디폴트값으로 생성되기 때문에 NOT NULL이거나 디폴트가 정의되지 않았다면 에러가 난다.
더 보기 »(SQLite3) INSERT문 – 테이블에 값 삽입하기

프로젝트 오일러 69

오일러의 피(phi)함수 φ(n)은 n보다 작거나 같으면서 n과 서로 소인 숫자의 개수를 나타냅니다. 예를 들어, 9보다 작거나 같으면서 9와 서로 소인 것은 1, 2, 4, 5, 7, 8이므로 φ(9)=6이 됩니다. n 서로 소인 수 φ(n) n/φ(n) 2 1 1 2 3 1, 2 2 1.5 4 1, 3 2 2 5 1, 2, 3, 4 4 1.25 6 1, 5 2 3 7 1, 2, 3, 4, 5, 6 6 1.1666… 8 1, 3, 5, 7 4 2 9 1, 2, 4, 5,… 더 보기 »프로젝트 오일러 69

SQLite3에서 트리거 설치하기

트리거는 데이터 베이스 내에 특정한 동작이 수행될 때, 연관된 다른 쿼리를 자동으로 실행하는 기능이다. 예를 들어 어떤 레코드를 변경하거나 삭제할 때, 그와 관련된 다른 정보를 조작해야 한다거나 할 때 사용할 수 있다. 두 정보 사이의 관련성이 매우 밀접하다면, 클라이언트 코드에서 매번 쿼리를 두 번 실행하는 것보다 트리거를 통해서 관리하는 편이 더 나을 수 있는 것이다.

트리거를 사용하는 가장 일반적인 패턴은 카운트를 대체하기 위한 것이다. BOARD라는 테이블에 레코드가 몇 개인지 알기 위해서는 다음과 같은 쿼리를 실행할 수 있다.

SELECT count(*) FROM BOARD;

문제는 count(*) 함수는 값을 계산하기 위해서 해당 쿼리의 모든 레코드 개수를 세어야 한다는 것이다. 테이블 크기가 작다면 별 문제가 되지 않겠지만, 수백만개의 레코드를 가지고 있는 테이블이라면 문제가 달라진다.

더 보기 »SQLite3에서 트리거 설치하기

SELECT – GROUP BY (SQLite3)

이번 글에서는 SELECT 구문 내에서 GROUP BY 절에 대해서 살펴보자. GROUP BY는 결과 행들을 특정한 하나 혹은 그 이상의 칼럼에 의한 그룹으로 묶어서 그룹을 요약하는 몇 가지 행들로 표현되도록 하는 것이다. 보통 MIN, MAX, SUM, AVG, COUNT 등과 같은 집합 함수와 같이 함께 사용된다. GROUP BY를 적용하는 주요 쿼리 구문의 형식은 다음과 같다. SELECT column1, aggregate_func(column1) FROM _table GROUP BY column1, column2, …. ; 다음의 예는 노래 정보 테이블에서 각 앨범당 수록곡의 개수를 산출하는 쿼리이다. SELECT albumid, COUNT(trackid) FROM tracks… 더 보기 »SELECT – GROUP BY (SQLite3)

테이블 생성하기 – SQLite3

SQLite에서 테이블을 생성하는 방법에 대해서 알아보자. 테이블을 생성할 때는 CREATE TABLE 구문을 사용한다. 이 구문에서는 테이블이 갖추어야 할 몇 가지 정보와 속성들을 정의할 수 있다. 새로운 테이블의 이름 테이블이 위치할 데이터베이스 테이블 내의 각 칼럼의 이름 각 칼럼의 데이터 타입 디폴트 값이 필요한 칼럼에는 디폴트 값 정의 collating sequece를 정의[^1] 필요에 따라 원시 키(PRIMARY KEY)를 정의할 수 있다. 테이블에 대한 제한을 걸 수 있다, UNIQUE, NOT NULL, CHECK, FOREIGN KEY 등이 있다. 이러한 내용들을 바탕으로 CREATE TABLE 문의 구조는 다음과 같다. [ ..… 더 보기 »테이블 생성하기 – SQLite3

NSPersistentContainer를 통한 코어데이터 스택생성하기

macOS Sierra로 업데이트되면서 코어데이터에 NSPersistentContainer 클래스가 추가되었다. 이 클래스를 사용하면 코어데이터 스택을 셋업하는 여러 귀찮은 과정을 생략하고 간단하게 처리할 수 있다. 사실 코어데이터 스택을 수동으로 셋업하는 과정에서 필요한 정보는 코어데이터 모델 파일의 이름과, 저장소 파일을 생성할 위치 정도이며, 그외의 대부분의 코드는 보일러 플레이트라 할 수 있다.  저장소 파일 위치는 적당한이름(?)으로 사용자 라이브러리 내에 만들어지므로 결국 최소한으로 필요한 정보는 데이터 모델 파일 이름이 된다. 즉 관리 객체 모델의 이름만 있다면 코어데이터 스택의 초기화에 필요한 코드는 사실상 동일하다 하겠다.

더 보기 »NSPersistentContainer를 통한 코어데이터 스택생성하기
Pages: 1 2

(SQLite3) JOIN을 통한 테이블 연결

지난 글에서 SQLite3에서 SELECT 명령의 사용방법에 대해서 살펴보았는데, FROM을 통해서 단일 테이블 혹은 단일 테이블 내의 범위를 부분적으로 얻어내는 서브 쿼리를 통해서 보다 정교한 범위의 데이터를 얻고, 또 WHERE절을 사용해서 결과를 필터링 하는 방법에 대해서도 살펴보았다. 그외에 GROUP BY나 그외 aggregation 연산을 통한 쿼리 방법에 대해서는 자세하게 다루지 않았는데, 그 전에 JOIN에 대해서 간단하게 짚고 넘어가고자 한다.

더 보기 »(SQLite3) JOIN을 통한 테이블 연결

(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 문을 알아보자

코어데이터에서 커스텀 타입 속성을 사용하기

코어데이터 내의 엔티티의 속성은 문자열, 숫자값, 날짜, 바이너리 데이터등의 기본적인 타입을 지정할 수 있다. 하지만 어떤 경우에는 이런 타입 이외의 커스텀 타입을 사용해야 하는 경우가 있을 수 있다. 예를 들어 NSColor라든지, 혹은 CGRect, CGPoint, CGSize와 같은 C 구조체로 된 정보 또, 아예 직접 작성한 커스텀 타입인 경우도 있을 수 있다. 이러한 커스텀 타입을 엔티티의 속성으로 사용하는 방법에 대해서 알아보자. 코어데이터 모델 편집기에서 엔티티 내 속성(attribute)의 타입을 선택하기 위한 팝업 메뉴 중에는 Transformable 이라는 타입이 존재한다. 이 타입은 저장소에 저장될 때는… 더 보기 »코어데이터에서 커스텀 타입 속성을 사용하기

파이썬의 파일입출력 정리

프로그램에서 처리한 결과는 화면에 출력되기도 하지만, 나중에 따로 사용하기 위해서 별도의 저장 공간에 기록해 둘 필요도 있을 수 있다. 별도의 공간에 기록해두고 다시 쓴다는 것은 곧 파일의 형태로 디스크에 기록하고, 다시 파일의 내용을 읽어들일 수 있어야 한다는 것이다. 이처럼 파일에 어떤 데이터를 기록하고 다시 파일을 읽어들이는 것은 초보자가 생각하기에는 어려운 과정일 수도 있지만, 사실 “입출력”이라는 프로그램의 기본적인 기능에 관련된 부분이기 때문에 대부분의 프로그래밍 언어가 이에 대한 기본적인 API를 제공해주고 있다. 파일을 보는 시각에 대해 파일 입출력에서 API 사용법보다 중요한 것은… 더 보기 »파이썬의 파일입출력 정리