DuckDB

SQLiteライクな軽量DB

DuckDBのインストール

Windowsのパッケージマネージャーであるscoopを使って、インストールしました。

scoop install duckdb

CLIで使用する

DuckDBはCLIからも操作できます。起動すると、Dで始まるプロンプトが表示されます。

duckdb [OPTIONS] [FILENAME]

インメモリデータベースとして起動する

インタラクティブに使うにはduckdbコマンドを実行し、DuckDBを起動します。

duckdb

ファイル名を指定しなければインメモリデータベースとして起動します。

データベースを指定して起動する

引数にファイル名を指定すると、データを保持できます。

dubckdb test.db

ドットコマンド

DuckDB内で使用可能なコマンド。先頭にドット.が付きます。

カレントディレクトリを変更する

.cdコマンドを実行することで、カレントディレクトリを変更できます。

.cd DIRECTORY

出力フォーマットを変更する

.modeコマンドを実行することで、SQL実行結果のフォーマットを変更できます。

CSVで出力する
.mode csv
Markdownの表形式で出力する
.mode markdown

SQLの実行結果を1回のみファイルに保存する

.once [OPTIONS] <filename>

SQLファイルを読み込む

.readコマンドを実行することで、SQLファイルを実行できます。

.read sample.sql

SQL

ORDER BY句

ORDER BY expr

指定した条件で行をソートします。

ORDER BY expr DESC

指定した例を降順でソートします。

データ型

数値データ型

Name 説明
TINYINT 8 ビット符号付き整数
SMALLINT 16 ビット符号付き整数
INTEGER 32 ビット符号付き整数
BIGINT 64 ビット符号付き整数
HUGEINT 128 ビット符号付き整数

浮動小数点型

Name 説明
REAL 4 バイト倍精度浮動小数点数
DOUBLE 8 バイト倍精度浮動小数点数

文字型

DuckDBではVARCHAR型しかありません。互換性のために、VARCHAR(n)という形が使えますが、文字列の長さを指定するためには機能しないので、使い分ける必要はありません。

Name 説明
VARCHAR 可変長文字列
VARCHAR(n) 可変長文字列。nに数字をいれても意味はない。

キャスティング

CAST (expr AS type-name)

キャストとは、指定したexprtの値を別のtype-nameデータ型の対応する値に変換する操作です。

浮動小数点型に変換する例

CAST(Intensity AS DOUBLE)

関数

数値操作

round(v NUMERIC, s INT)

round()関数は、vの小数点以下s桁に丸めた値を返します。

  1. 小数点以下第1位で四捨五入する場合
D SELECT ROUND(123.456, 1) AS Result;
┌──────────────┐
    Result    
 decimal(6,1) 
├──────────────┤
        123.5 
└──────────────┘

結果は123.5となります。

  1. 整数部で丸める場合
D SELECT ROUND(123.456, -1) AS Result;
┌──────────────┐
    Result    
 decimal(6,0) 
├──────────────┤
          120 
└──────────────┘

結果は120となります。

文字列操作

rtrim(string, charactes)

rtrim()関数は、stringの右側からcharactersで指定した文字をすべて削除します。

rtrim(Intensity, '%')

集計関数

SELECT句およびHAVING句のみで使える関数です。

一般集計関数

平均

avg(arg)

平均値を返します。

合計

sum(arg)

合計値を返します。

統計集計関数

stdev_pop(x)

母集団の標準偏差を返します。

stdev_samp(x)

標本の標準偏差を返します。

See Also

DuckDB - Statements

データベースを操作するSQL文

Nushell

Rust製シェル

2024/04/15

今日見つけたツール

VSCode - cSpell

スペルチェックを行う機能拡張

レコードを取得するSELECT文

テーブルからデータを取り出す