公開日:2018/5/31 0:00:00

SQL 教育用資料

関数と演算子の一部

標準SQLにないモノなどもあるので紹介程度に。 主に、INSERT時のVALUE句内で使ったり、SELECT の結果を与えて変換するなどして使うことがあります。

SQLを計算機として使う

テーブルを指定しなければ動かないというものではない。ということの説明と、計算機として使う方法を見ていきましょう。

sqlite> Select 1 + 1;
2
sqlite>

と言うように、From句を指定しなくても何とかなります。 今回はこの方法を使いつつ、関数や演算子の使い方を説明してきます。

以降はSQLのみで結果は見てのお楽しみに。

Select 1 + 1;

文字列関数

比較的良く使う。プログラム側で行うより効率が良い場合もあるので、使い方を憶えておくとよい。

文字列結合

SELECT 'hoge' || 'fuga';

部分文字列の取り出し

SELECT substr('1234567890123456789', 1, 11);

文字の置換

SELECT replace('1234567890123456789', '1', '+');

文字数

SELECT length('1234567890123456789');

大文字小文字変換

SELECT upper('apple');
SELECT lower('GOOGLE');

日付/時刻関数と演算子

日付、時間が絡む事は多いので、知っていると便利。良く使う。 日付計算は言語によってはサポートしていない場合があるので、使い方を憶えておくか、こういう手法があることを知っているとよい。

時間の計算方法から見ていきます。

SELECT date('now');
SELECT date('now', '+1 month');
SELECT date('now', '+7 days');

足したり引いたり、間隔指定の部分には、year、month、days、hour、timeとそれぞれあるので、必要に応じて使い分ける事。

集約関数

簡単な使い方だけ説明します。 とりあえず、count(件数)、max(最大)、min(最小)、avg(平均)を例を見ながら。 sum(合計)もあるのですが、ちょうど良いテーブルが無いのでお預けと。

レコード件数取得

SELECT count(materielcode) FROM materielmaster;

レコードの特定カラム内で最大値を取得する

SELECT max(employeecode) FROM employeemaster;

レコードの特定カラム内で最小値を取得する

SELECT min(employeecode) FROM employeemaster;

平均値を求める

SELECT avg(materieldivcode) FROM materieldivmaster;

一番最後の例はあまりにも意味が無いのですが、検算しやすいという理由だけです。

演習

問題1

employeemaster を下記のように表示してください。

sqlite> 'SQL QUERY'
 employeecode |    name
--------------+-------------
            1 | 演習 一号
            2 | 演習 二号
            3 | 演習 三号
            4 | 演習 四号
           11 | 宮地 勤
           12 | 鈴木 ヒカル
           13 | 佐藤 真一
           14 | 岡部 幸平
(中略)
          119 | 佐藤 里奈
          120 | 鈴木 惇

問題2

materielmaster を下記のように表示してください。registdateの日付は、登録されているデータを表示してください。

sqlite> 'SQL QUERY'
 materielcode | materielmaker | modelno  | productno | registdate
--------------+---------------+----------+-----------+------------
            1 | DoLL          | INSPIRON | D0001     | 2008-06-11
            2 | DoLL          | INSPIRON | D0002     | 2008-06-11
            3 | DoLL          | INSPIRON | D0003     | 2008-06-11
            4 | DoLL          | INSPIRON | D0004     | 2008-06-11
            5 | DoLL          | INSPIRON | D0005     | 2008-06-11
            6 | DoLL          | VOSTRO   | DD001     | 2008-06-11
            7 | DoLL          | VOSTRO   | DD002     | 2008-06-11
            8 | DoLL          | VOSTRO   | DD003     | 2008-06-11
            9 | DoLL          | VOSTRO   | DD004     | 2008-06-11
           10 | DoLL          | VOSTRO   | DD005     | 2008-06-11
           11 | oIZO          | S2100    | E0001     | 2008-06-11
           12 | oIZO          | S2100    | E0002     | 2008-06-11
           13 | oIZO          | S2100    | E0003     | 2008-06-11
           14 | oIZO          | S2100    | E0004     | 2008-06-11
           15 | oIZO          | S2100    | E0005     | 2008-06-11
sqlite>