728x90

SQLITE3 12

[sqlite3] csv 파일을 sqlite로 가져오는 방법

안녕하세요. 비스카이비전입니다. 오늘은 csv 파일에 있는 데이터를 sqlite 테이블로 가져오는 방법에 대해 공유해드리고자 합니다. 일단 실습을 위해 간단한 csv 파일을 만들겠습니다. test.csv라는 이름으로 위와 같은 csv 파일을 만들었습니다. 이 csv을 sqlite3로 가져와보겠습니다. csv 파일 내 데이터를 sqlite 테이블로 가져오는 방법 1. 사전 준비 우선 하나의 폴더 안에 sqlite3.exe와 test.csv 파일이 같이 있을 수 있게 세팅해주세요. 만약 sqlite3.exe를 설치하지 않으신 분은 https://bskyvision.com/1174 글을 참고하여 설치하여 주시기 바랍니다. 2. csv 데이터 담을 테이블 만들기 1) sqlite3.exe를 실행합니다. 2) s..

[sqlite3] 정수를 정수로 나눴을 때 소수점 이하도 출력되게 하려면

sqlite3에서 데이터 타입이 정수인 것을 정수로 나눠주면 결과도 정수로 나옵니다. 예를 들어 10/3이 소숫점 아래를 버리고 3으로 나옵니다. 그런데 소숫점 아래도 모두 제대로 나오게 하려면 어떻게 해야 할까요? 우선 다음과 같은 내용이 담겨 있는 test라는 이름의 테이블이 있다고 가정하겠습니다. 이 테이블의 구조를 살펴보면, money 열과 people 열 모두 INT 형의 데이터를 담을 수 있음을 알 수 있습니다. 참고로 sqlite에서 사용가능한 데이터타입에는 NULL, INT, REAL, TEXT, BLOB이 있는데, 이 중 INT와 REAL이 숫자 데이터를 위한 타입들입니다. INT는 정수, REAL은 실수. 이 상황에서 저는 첫번째 열의 값을 두번째 열의 값으로 나눠주고 싶습니다. 그러면..

[세이버메트릭스] 레먼 데이터베이스에서 류현진 선수 MLB 기록 살펴보기(sqlite3)

MLB의 데이터를 담고 있는 데이터베이스에는 여러 종류가 있는데, 그중에서 레먼 데이터베이스(Lahman database)와 레트로시트(Restrosheet)가 유명합니다. 저는 오늘 레먼 데이터베이스를 사용해보려고 합니다. 레먼 데이터베이스의 경우 매년 새롭게 갱신해서 데이터를 제공합니다. 그중에서 2019년까지의 기록을 담고 있는 데이터베이스의 경우 sqlite 형태로도 데이터를 제공하기에, 다운로드 받아서 실행해봤습니다. 먼저 sqlite3 프로그램을 실행한 다음에 레먼 데이터베이스를 열겠습니다. sqlite> .open lahmansbaseballdb.sqlite 데이터베이스 내에 어떤 테이블들이 있는지 보겠습니다. sqlite> .tables batting 타자, pitching 투수, sala..

[sqlite3] 컬럼에 디폴트 값 주기

이 글은 테이블내 특정 컬럼에 디폴트 값을 주고 싶은 분들을 위한 글입니다. 만약 회원가입시에 닉네임을 입력하지 않았을 때 무명이라는 이름을 주도록 테이블을 만들어보겠습니다. sqlite> CREATE TABLE user (id TEXT NOT NULL, pw TEXT NOT NULL, nickname TEXT DEFAULT "무명"); user라는 이름의 테이블을 만들었습니다. 그 안에는 id, pw, nickname 컬럼이 있는데, nickname 컬럼의 경우에는 무명이라는 디폴트 값을 줬습니다. 그럼, 한번 새로운 행들을 추가해보겠습니다. 한번은 nickname 컬럼에 값을 주지 않을 것이고, 한번은 nickname 컬럼에 값을 줄 것입니다. sqlite> INSERT INTO user (id, p..

[sqlite3] sqlite의 경우 컬럼 수정 불가

MySQL, MariaDB의 경우 테이블의 컬럼을 수정하는 것이 가능한데, sqlite의 경우에는 불가능합니다. 여기서 컬럼 수정이 가능하다는 것은 데이터 타입, 디폴트 값, 제약조건 등의 수정이 가능하다는 뜻입니다. sqlite의 경우 컬럼 수정이 불가하기 때문에 처음에 테이블을 만들때, 또는 컬럼을 추가할 때 잘 설정해줘야 합니다. 예를 들어보겠습니다. student라는 이름의 테이블에 cnt라는 이름의 컬럼이 존재하는 상황입니다. 현재 cnt 컬럼의 디폴트 값은 0입니다. 이 디폴트 값을 1로 바꾸는 것이 가능한지 한번 테스트해보겠습니다. sqlite> ALTER TABLE student MODIFY cnt INT default 1; 보시다시피 안 되고, 에러 메시지를 출력합니다. 하지만, MySQ..

[sqlite3] 행 갯수 카운트하기

오늘은 테이블 내 행이 몇 개가 존재하는지 그 갯수를 읽는 것에 대해 다루도록 하겠습니다. 예시를 위해 저는 먼저 다음과 같은 테이블을 준비했습니다. 지금 보시면, student라는 테이블 안에 행이 총 7개가 존재합니다. 몇 개의 행이 존재하는지 읽어내는 쿼리문은 다음과 같습니다. sqlite> SELECT COUNT(*) FROM student; 7개의 행이 존재한다는 것을 잘 알려주죠? 경우에 따라서는 전체 행의 갯수가 아니라 열별 행 갯수를 알고 싶을 때가 있습니다. 지금 테이블에서 score 열에서 값이 있는 행은 5개 입니다. 이 숫자를 카운트하기 위해서는 다음과 같이 쿼리문을 작성하면 됩니다. sqlite> SELECT COUNT(score) FROM student; score 열에서 값이 ..

[sqlite3] 데이터 오름차순 및 내림차순으로 정렬하기

다음과 같은 행들을 담고 있는 테이블이 있다고 가정하고 시작하겠습니다. 테이블명은 student입니다. 저는 name 열의 값을 가나다 순으로 정렬하고 싶습니다. 이때 필요한 쿼리는 다음과 같습니다. sqlite> SELECT * FROM student ORDER BY name; 가나다순으로 잘 정렬된 것을 확인하실 수 있습니다. 그러면 이번에는 역순으로 정렬해보겠습니다. DESC만 추가해주면 됩니다. sqlite> SELECT * FROM student ORDER BY name DESC; 가나다 역순으로 잘 정렬되었습니다. 이번에는 score 열의 값을 기준으로 정렬을 해보겠습니다. 낮은 점수부터 시작해서 높은 점수로 정렬이 됩니다. sqlite> SELECT * FROM student ORDER BY..

[sqlite3] 기존 테이블에 컬럼(열) 추가하기

테이블을 이미 만들었는데, 나중에 새롭게 열(column)을 추가해야할 일이 생겼다면 어떻게 해야할까요? 우선 아래와 같은 데이터를 담고 있는 테이블이 있다고 가정하고 시작하겠습니다. name을 나타내는 열과, score를 나타내는 열이 있는 student라는 이름의 테이블입니다. 저는 이 테이블에 id라는 열을 추가하고 싶습니다. 그러기 전에 우선 .schema student로 이 테이블이 어떤 구조를 갖고 있는지 확인해볼까요? 확인해보니 name 열은 TEXT 타입으로 자료를 입력 받고 꼭 입력 받아야하는 상황이고, score 열은 INT, 즉 정수 자료를 입력 받는 상황입니다. 저는 이 테이블에 id 열을 추가하면서 데이터 타입은 TEXT로 하겠습니다. 이때 필요한 SQL 쿼리는 다음과 같습니다. ..

[sqlite3] 테이블에서 마지막 행 또는 첫 행 읽기

다음과 같은 데이터를 담고 있는 테이블이 있습니다. 이 테이블의 이름은 student인 상황입니다. 여기서 마지막 행만을 읽으려면 다음과 같이 명령해주면 됩니다. sqlite> SELECT * FROM student ORDER BY ROWID DESC LIMIT 1; 그러면 마지막 행을 읽어들입니다. 마지막 행을 잘 읽어들였죠? 만약 가장 위에 있는 첫 행을 읽으려면 DESC를 지워주면 됩니다. sqlite> SELECT * FROM student ORDER BY ROWID LIMIT 1; 첫 행을 잘 읽어냈습니다. b스카이비전의 추천글 ☞ [sqlite3] 테이블에서 한 행을 랜덤으로 읽기 ☞ [sqlite3] 기본 명령어 및 create, read, update, delete 하는 법 정리

[sqlite3] 테이블에서 한 행을 랜덤으로 읽기

다음과 같은 데이터를 담고 있는 테이블이 있습니다. 테이블의 이름은 student입니다. 여기서 하나의 행을 무작위로 읽으려면 다음과 같이 명령해줘야합니다. sqlite> SELECT * FROM student ORDER BY RANDOM() LIMIT 1; 그러면 하나의 행을 무작위로 선정해서 읽어줍니다. 보시는 것과 같이 명령을 내릴 때마다 계속해서 읽어내는 행이 달라졌습니다. 무작위로 하나를 선정했기 때문입니다. 만약에 2개의 행을 선택해야 한다면, 간단히 마지막을 LIMIT 2로 바꾸면 됩니다. 어떤 회사에서 회사 데이터베이스에 있는 고객 중에 몇 명을 선정해서 경품을 줄 때 이러한 방법을 사용해도 좋을 것 같습니다. b스카이비전의 추천글 ☞ [sqlite3] 기본 명령어 및 create, rea..