連載 [第2回] :
  初心者のための SQL-BOOTCAMP

よく利用される便利な「句」の紹介とクセ者「NULL」について

2022年11月15日(火)
久保 司

はじめに

2回目となる今回は、よく利用される便利な「句」の説明と、ちょっと紛らわしいNULL値について説明します。

なお、訓練に使用するデータベースは、前回に引き続きインストールが簡単な「SQLite」を使用します。テーブルやデータ作成のクエリも載せていますので、インストールがまだの方は、ぜひSQLiteをインストールし、実際に試してみてください。

それでは、今回も元気に訓練へ行ってみましょう!

便利な武器その2(句)

今回は、下表に示す3つの句、WHEREの中で利用される「BETWEEN」と「LIKE」、そして、SELECTの中で利用される「CASE」を紹介します。

前回に引き続き、社員テーブル(tbl_employees)に登録されているデータを使用して説明します。前回で社員テーブルを作成済みの場合は、ログイン後に下記のDELETEコマンドで社員テーブルを空にした後、INSERTコマンドで新たなデータを作成してください。社員テーブルを未作成の場合は、CREATEコマンドで社員テーブルを作成後にINSERTコマンドでデータを作成してください(DB作成やログインの詳細は前回の解説を参照)。

【DELETEコマンド】
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句は、あいまい検索に便利な句なので、ワイルドカードと合わせて覚えておきましょう。

株式会社システムインテグレータ
長年にわたり、基幹システム構築プロジェクトにおいて全工程を経験。その際、OracleやSQLServer等のDBMSでSQLを使用したプログラム開発を実施。現在は、製品企画室でスキル判定サービス「TOPSIC-SQL」のコンテンツ作成を主に担当。

連載バックナンバー

データベース技術解説
第10回

実践! 「TOPSIC SQL CONTEST」の練習問題にチャレンジしよう

2023/7/25
最終回となる今回は、これまでの訓練の成果を計るために、SQLの腕試しができるオンラインコンテスト「TOPSIC SQL CONTEST(TSC)」の練習問題にチャレンジしてみましょう。
データベース技術解説
第9回

神出鬼没!サブクエリについて(Part.2)

2023/6/29
第9回となる今回は、前回に引き続き、SQL文の中でも神出鬼没でさまざまな出現パターンを持つサブクエリについて解説していきます。
データベース技術解説
第8回

神出鬼没! サブクエリについて(Part.1)

2023/5/30
第8回となる今回からは、SQL文の中でも神出鬼没でさまざまな出現パターンを持つサブクエリについて解説していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています