レシピ

データベース SQLite

SQLite3でデータを取得:SELECT

  • このエントリーをはてなブックマークに追加

SQLite3でテーブルに登録されているデータを取得する方法について解説。

この記事のポイント

  • データを取得するSQLを知る
  • SQLIteデータベースに登録された全データを取得する
  • ある条件を満たすデータのみ取得する
  • 取得するデータの並び順を指定する

目次

データを取得する

今回は、テーブルへ登録されたデータを取得する方法について解説します。
次の順に、それぞれの方法をコード例を交えながら進めていきます。

  • データを取得するSQLの基本について知る
  • 全データを取得
  • 条件を絞ってデータを取得
  • データの並び順を指定
  • 取得するデータの件数を指定

これから進めて行くにあたり、次のようなテーブルがあることを前提とします。

テーブル名:test
カラム名 その他
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER NOT NULL
created_datetime TIMESTAMP DEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

こちらのテーブルには次のようなデータが登録されています。

testテーブルに登録されているデータ

1|新井|28|2017-07-6 10:00:00
2|吉田|24|2017-07-15 11:00:00
3|田辺|27|2017-07-16 11:00:00
4|渡辺|23|2017-07-16 14:00:00
5|佐々木|30|2017-07-18 14:00:00
6|森田|22|2017-07-08 10:30:00
7|宇野|37|2017-07-19 10:00:00
8|大野|33|2017-07-19 16:20:00
9|石田|23|2017-07-08 22:00:00
10|西川|31|2017-07-07 11:00:00

データを取得するSQLの基本について知る

まずはデータを取得するSQLであるSELECT文について、基本的な形を紹介します。
SQL自体は他のデータベースと共通なので、他のデータベースを使ったことがある場合はお馴染みかもしれません。

基本的なSELECT文のコード例

SELECT データを取得するカラム名 FROM テーブル;

実際に上記の「testテーブル」からデータを取得する場合は、次のようなSQLになります。

testテーブルからデータを取得するコード例

SELECT * FROM test;

SELECTの後ろの「*」は全カラムのデータを取得するという指定です。
よって、このSQLは「testテーブルから全てのデータを取得する」という内容になります。

もしデータを取得するにあたっての条件、データの並び順(ソート)、取得する件数を指定したい場合は次のような形になります。

データの様々な取得条件を指定するコード例

SELECT データを取得するカラム名 FROM テーブル WHERE 条件式 ORDER BY カラム名 並び順 LIMIT 取得したい件数;

実際のケースに当てはめてみると、次のようなSQLになります。

testテーブルからデータを取得するコード例

SELECT * FROM test WHERE id < 5 ORDER BY id DESC LIMIT 3;

このSQLは「testテーブルからidが5未満のデータに限り(WHERE句)、idを降順に並び替えて(ORDER BY句)、先頭から3件のみ取得(LIMIT句)。」という内容になります。

SQLの基本形を確認したところで、実際にSQLを使ってデータを取得してみましょう。

全データを取得

まずは、testテーブルから全てのデータを取得するシンプルなSQLを実行してみましょう。

コード例

<?php

// Initialize
$db = null;
$sql = null;
$res = null;

// データベースへ接続
$db = new SQLite3("./sqlite/test.sqlite3");

// データの取得
$sql = 'SELECT * FROM test';
$res = $db->query($sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SQLite テスト</title>		
</head>
<body>
<?php
while( $row = $res->fetchArray() ) {
	echo '<p>' . var_dump($row) . '</p>';
}
?>
</body>
</html>

上記のコードを実行すると、テーブルに登録されている全データが出力されます。

出力例

array (size=8)
  0 => int 1
  'id' => int 1
  1 => string '新井' (length=6)
  'name' => string '新井' (length=6)
  2 => int 28
  'age' => int 28
  3 => string '2017-07-6 10:00:00' (length=18)
  'created_datetime' => string '2017-07-6 10:00:00' (length=18)

array (size=8)
  0 => int 2
  'id' => int 2
  1 => string '吉田' (length=6)
  'name' => string '吉田' (length=6)
  2 => int 24
  'age' => int 24
  3 => string '2017-07-15 11:00:00' (length=19)
  'created_datetime' => string '2017-07-15 11:00:00' (length=19)

... 同様に残りのデータも出力される ...

idを昇順にして全データが出力されます。
SQLでデータの取得条件を指定していないのでシンプルです。

データの出力はwhile文の中で行っています。
$resへデータが入っているので、fetchArray関数を使って$resから1件ずつデータを取得し、全てのデータを出力したらループを出るという指定です。

fetchArray関数は配列形式でデータを引き出します。
配列のキーは「数値」と「カラム名」の2パターンで取得することができるので、どちらを使ってもデータにアクセス可能です。

条件を絞ってデータを取得

続いて、取得するデータの条件を指定してみましょう。
先ほどのSQLにWHERE句を追加してください。

コード例

// データの取得
$sql = 'SELECT * FROM test WHERE id < 5';

このSQLを実行すると、idが「5未満」のデータのみ取得することができます。

取得できるデータ

1|新井|28|2017-07-6 10:00:00
2|吉田|24|2017-07-15 11:00:00
3|田辺|27|2017-07-16 11:00:00
4|渡辺|23|2017-07-16 14:00:00

同様に、「30歳以上の人のみ取得(WHERE 30 <= age)」としたり、
「2017年7月16日以降に登録したデータのみ取得(WHERE ‘2017-07-16 00:00:00’ <= created_datetime)」といった条件指定が可能です。

データの並び順を指定

続いて、ORDER BY句を使ってデータの並び順を指定します。
SQLでデータの並び替えを行うと、PHPでソートする必要がなくなるため非常に便利です。

先ほどのSQLに、次のようにORDER BY句を追加してください。

コード例

// データの取得
$sql = 'SELECT * FROM test WHERE id < 5 ORDER BY id DESC';

取得できるデータ

4|渡辺|23|2017-07-16 14:00:00
3|田辺|27|2017-07-16 11:00:00
2|吉田|24|2017-07-15 11:00:00
1|新井|28|2017-07-6 10:00:00

今回はデータを並び替えるにあたり、カラム「id」を基準となるように指定しています。
さらに、その後ろで「DESC」を指定しているので、データは「降順」となります。
ASC」を指定するか、何も指定しない場合は「昇順」となります。

もちろん「id」以外のカラムを指定することも可能です。
また、並び替えの基準とするカラム名は複数指定することもできます。

取得するデータの件数を指定

最後に、LIMIT句を使ってデータの取得数を指定します。
先ほどのSQLに、次のようにLIMIT句を追加してください。

コード例

// データの取得
$sql = 'SELECT * FROM test WHERE id < 5 ORDER BY id DESC LIMIT 2';

取得できるデータ

4|渡辺|23|2017-07-16 14:00:00
3|田辺|27|2017-07-16 11:00:00

今回はLIMIT句の後ろに「2」を指定しているので、「最大2件まで取得する」という指定になります。

以上、SQLite3を使ったデータの取得方法でした。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。

  • このエントリーをはてなブックマークに追加
前のページへ 一覧ページへ一覧 次のページへ