Monaca(JavaScript)だけでSQL言語を学ぶ方法①

梅の木からジャンプして足を捻挫した、アシアル情報教育研究・所長の岡本です

高校教科「情報」の新学習指導要領では「データベース」も学習内容に入ってきますが、データベースサーバーを別途構築するのは手間がかかります。

そこで、JavaScriptだけで動作するデータベースシステムAlaSQLを利用したSQLの実行・学習方法をご紹介いたします。今回は入門として簡単な列指定(選択)とWHERE句(射影)とORDER BY句(ソート)の方法を解説します。

JavaScriptで動作するSQLエンジン

AlaSQLという、JavaScriptだけで書かれたデータベースエンジンがあります。導入が簡単で、また、データソースに配列やCSVファイルやJSONなども利用できます。

導入方法

alasql.jsファイルを設置するだけで利用できます。

Monacaプロジェクトを取り込む

alasql.jsと今回紹介しているソースコードを同梱したプロジェクトをzipファイルとして提供します。

Monaca(JavaScript)だけでSQL言語を学ぶプロジェクト①(zipファイル)

CDN経由で自分設置する

CDN経由で設置する場合は以下のscriptタグを張ればOKです。


<script src="https://cdn.jsdelivr.net/npm/alasql@0.6.2/dist/alasql.min.js"></script>

最新のバージョンを探したい場合は、公式サイトを参照してください。

使い方:2次元配列の商品一覧を参照する

りんごやすいかが金額情報付きで格納された二次元配列があったとします。


let table = [
    {name:"りんご", price:150},
    {name:"ばなな", price:250},
    {name:"梅"    , price:1000},
    {name:"いちご", price:300},
    {name:"すいか", price:1500}            
];

このデータから、以下のことを行ってみたいと思います。

  • 金額が1000円以上の商品を選択して取得する(選択)
  • 商品名だけ取得する(射影)
  • 金額が高い順に並び変えて取得する(並び替え(ソート))

商品名だけ取得する(射影)

SELCT文でデータを取得する際に列名を「*(アスタリスク)」にすると全ての列を取得できます。また、一部の列だけに限定して取得するときには列名を指定します。


let table = [
    {name:"りんご", price:150},
    {name:"ばなな", price:250},
    {name:"梅"    , price:1000},
    {name:"いちご", price:300},
    {name:"すいか", price:1500}            
];
let result = alasql("SELECT name FROM ? ",[table]); 
console.log(result);

nameだけ指定した場合には、取得結果が以下のようになります。


0: {name: "りんご"}
1: {name: "ばなな"}
2: {name: "梅"}
3: {name: "いちご"}
4: {name: "すいか"}

金額が1000円以上の商品を選択して取得する(選択)

例えば、1000円以上の品を選ぶときにはWHERE句を使って取得するデータの行を絞り込みます。


let table = [
    {name:"りんご", price:150},
    {name:"ばなな", price:250},
    {name:"梅"    , price:1000},
    {name:"いちご", price:300},
    {name:"すいか", price:1500}            
];

let result = alasql("SELECT * FROM ? WHERE price >= 1000",[table]); 
console.log(result);

対象は「梅」と「すいか」になります。


0: {name: "梅", price: 1000}
1: {name: "すいか", price: 1500}

なお、console.logを利用した場合、結果はコンソールにログとして表示されます。コンソールについては、Monaca(JavaScript)で変数や値の中身を確認したいを参照してください。

金額が高い順に並び変えて取得する(並び替え(ソート))

こんどは金額が高い順にデータを並び替えてみましょう。
ORDER BY で列名を指定して「DESC」が大きい順(降順)です。「ASC」と指定すれば小さい順(昇順)で取得できます。


let table = [
    {name:"りんご", price:150},
    {name:"ばなな", price:250},
    {name:"梅"    , price:1000},
    {name:"いちご", price:300},
    {name:"すいか", price:1500}            
];

let result = alasql("SELECT name,price FROM ? ORDER BY price DESC",[table]); 
console.log(result); 

実行結果

すいか > 梅 > いちご > ばなな > りんごの順に取得できました。


0: {name: "すいか", price: 1500}
1: {name: "梅", price: 1000}
2: {name: "いちご", price: 300}
3: {name: "ばなな", price: 250}
4: {name: "りんご", price: 150}

まとめ

今回はAlaSQLを使用して、JavaScriptだけでSQL言語の学習を行う方法の導入部分を紹介しました。
次回は複数の表を扱う方法やデータソースに二次元配列以外のものを扱う方法も紹介していきたいと考えています。