目次
- はじめに
- 便利な武器その2(句)
-
クセ者の「NULL」について
ここでまた、説明用に社員テーブル(
tbl_employees)の内容を入れ替えたいと思います。前述と同様に、下記のDELETEコマンドで社員テーブルの全データを削除し、INSERTコマンドで新たにデータを挿入してみましょう。 DELETE FROM tbl_employees; INSERT INTO tbl_employees (code,name,kana,gender,birthday) VALUES ('1','HORII SEITARO','ホリイセイタロウ','','1970-12-27') ,('2','ISHIMURA HANA','イシムラハナ',NULL,'1981-08-24') ,('3','KITAJIMA RUNA','キタジマルナ',' ','1981-11-09') ,('4','MUROI YURI','ムロイユリ',' ','1982-02-12');社員テーブルの内容を確認してみましょう。 SELECT * FROM tbl_employees;「gender」の値を見ると、下図の[サンプルデータ]の値と同じになっていますが、SELECTした結果の見た目では区別がつきません。図の左側の[genderが空文字のデータを抽出]のように、空文字やブランクのデータを比較する場合は「=」(イコール)で判定可能ですが、右側の[genderがNULLのデータを抽出]のようにNULLの項目を「=」で比較した場合は、該当データなしとなってしまいます。NULLのデータを抽出する場合は「is」を使用して比較しなければならないことに注意してください。 実際に、空文字を判定する場合と、NULLを「=」「is」で判定する場合とを入力して、確認してみましょう。NULLを「=」で比較してもデータが抽出されないことが確認できます。また、ブランクのデータを抽出したのに抽出されないデータがあった場合等は、NULLを疑ってみてください。 - おわりに
はじめに
2回目となる今回は、よく利用される便利な「句」の説明と、ちょっと紛らわしいNULL値について説明します。
なお、訓練に使用するデータベースは、前回に引き続きインストールが簡単な「SQLite」を使用します。テーブルやデータ作成のクエリも載せていますので、インストールがまだの方は、ぜひSQLiteをインストールし、実際に試してみてください。
それでは、今回も元気に訓練へ行ってみましょう!
便利な武器その2(句)
今回は、下表に示す3つの句、WHEREの中で利用される「BETWEEN」と「LIKE」、そして、SELECTの中で利用される「CASE」を紹介します。
前回に引き続き、社員テーブル(tbl_employees)に登録されているデータを使用して説明します。前回で社員テーブルを作成済みの場合は、ログイン後に下記のDELETEコマンドで社員テーブルを空にした後、INSERTコマンドで新たなデータを作成してください。社員テーブルを未作成の場合は、CREATEコマンドで社員テーブルを作成後にINSERTコマンドでデータを作成してください(DB作成やログインの詳細は前回の解説を参照)。
DELETE FROM tbl_employees;
【CREATEコマンド】
CREATE TABLE tbl_employees (code INTEGER,name TEXT,kana TEXT,gender TEXT,birthday TEXT,PRIMARY KEY(code));
【INSERTコマンド】
INSERT INTO tbl_employees (code,name,kana,gender,birthday)
VALUES
('1','HORII SEITARO','ホリイセイタロウ','M', '1970-12-27')
,('2','ISHIMURA HANA','イシムラハナ', 'F','1981-08-24')
,('3','KITAJIMA RUNA','キタジマルナ','F', '1981-11-09')
,('4','MUROI YURI','ムロイユリ','F', '1982-02-12')
,('5','KITAZAWA AIKA','キタザワアイカ','F', '1980-08-05')
,('6','MITANI KOUKITI','ミタニコウキチ','M', '1979-03-16');
・社員テーブルを作成済みの場合(DELETE、INSERT)
・社員テーブル未作成の場合(CREATE、INSERT)
テーブルの内容を確認してみましょう。
.headers on -- ヘッダを表示します
.mode column -- 項目の幅をそろえて表示します
SELECT * FROM tbl_employees;
*「.headers」「.mode」は表示内容の設定コマンドなので、ログイン後に1回実行すればOKです。
(1)BETWEEN句
使用例では、誕生日(birthday)が1981年9月1日から1981年11月9日の間にあるデータを抽出しています。また、2つ目のクエリではBETWEEN句を使用せずに、同じ条件のデータを抽出しています。
それでは、実際に入力して確認してみましょう。
SELECT name,birthday FROM tbl_employees
WHERE birthday BETWEEN '1981-09-01' AND '1981-11-09';
SELECT name,birthday FROM tbl_employees
WHERE birthday >= '1981-09-01' AND birthday <= '1981-11-09';
このように、BETWEEN句は範囲指定の条件を簡略化して記載できるので便利です。ただし、図でも記載してあるように、比較対象の条件の一方でも「=」がない「>」や「<」の場合は利用できないので注意してください。
(2)LIKE句
使用例の1番目のクエリでは、「kana」の先頭が「イ」で始まるデータを取得する前方一致検索になります。ワイルドカードの「%」を使用して、先頭文字が「イ」でそれ以降の文字は任意の文字列のデータを取得しています。
2番目のクエリでは「kana」の2文字目が「ロ」で始まるデータを取得しています。ワイルドカードの「_」を使用して、先頭は任意の1文字で2文字目が「ロ」、そしてそれ以降はワイルドカードの「%」を使用して任意の文字列のデータを取得しています。
3番目のクエリでは「kana」に「ウ」が含まれるデータを取得する部分一致検索をしています。ワイルドカードの「%」で文字「ウ」を挟み込んで、「ウ」の前方、後方が任意の文字列のデータを取得しています。
それでは、実際に入力して確認してみましょう。
SELECT name,kana FROM tbl_employees WHERE kana LIKE 'イ%';
SELECT name,kana FROM tbl_employees WHERE kana LIKE '_ロ%';
SELECT name,kana FROM tbl_employees WHERE kana LIKE '%ウ%';
このように、LIKE句は、あいまい検索に便利な句なので、ワイルドカードと合わせて覚えておきましょう。
- この記事のキーワード