共有する

はじめに

SQLiteのテーブル内の情報をクエリして返すには、SELECT SQLコマンドが最も適しています。このコマンドは、指定された条件に基づいて一致するレコードを選択することで、その名前が示すとおりの機能を実現します。このコマンドはデータの読み取りに役立つだけでなく、データベース内の更新やその他のアクションのターゲット指定にも役立ちます。

この記事では、SELECTコマンドの基本と、それを使ってデータを返す方法を解説します。SELECTはより多くの高度なユースケースに対応できますが、ここでは基本的なコマンド構造を強調するために、より単純な形式に絞って説明します。

SELECTコマンドの一般的な構文

SELECTコマンドの基本的な形式は次のようになります

SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;

このステートメントはいくつかのコンポーネントで構成されています

  • SELECT: SELECTコマンドそのもの。このSQLコマンドは、テーブルまたはビューが含むデータをクエリしたいことを示します。その周囲の引数と句によって、返される出力の内容と形式の両方が決定されます。

  • <column_names>: SELECTステートメントは、行全体(*ワイルドカード文字で指定された場合)または利用可能な列のサブセットを返すことができます。特定の列のみを出力したい場合は、表示したい列名をカンマで区切って指定します。

  • FROM <table_name>: FROMキーワードは、クエリ対象のテーブルまたはビューを示すために使用されます。ほとんどのシンプルなクエリでは、これは関心のあるデータを含む単一のテーブルで構成されます。

  • <additional_conditions_and_formatting>: SELECTコマンドには、多数のフィルター、出力修飾子、および条件を追加として指定できます。これらを使用して、特定のプロパティを持つデータを特定したり、出力形式を変更したり、結果をさらに処理したりすることができます。

SELECTで表示する列を指定する

SELECTコマンドの列指定コンポーネントでは、クエリされたデータに対して表示したい列に名前を付ける必要があります。

列の表示要件がない場合、アドホッククエリやデータ探索に最も役立つオプションの1つは、アスタリスクを使用して、利用可能なすべての列の値を表示したいことを示すことです

SELECT * FROM my_table;

これにより、ステートメントに指定された列名がないため、my_tableのすべてのレコードが表示されます。各レコードのすべての列は、my_table内で定義されている順序で表示されます。

:アスタリスクのワイルドカードオプションは、テスト、アドホッククエリ、およびデータ探索に最適です。より制御された明示的なステートメント構文がより強力で信頼性の高い実際のアプリケーション開発には、有用な方法ではありません。

列名を指定することで、利用可能な列のサブセットを表示することもできます。列名はカンマで区切られ、指定した順序で表示されます

SELECT column2, column1 FROM my_table;

これにより、my_tableのすべてのレコードが表示されますが、column2column1のみが、その厳密な順序で表示されます。

ASで列エイリアスを使用して結果テーブルを変更する

MySQLPostgreSQLなどの他のSQLデータベースと比較して、SQLiteはデフォルトではクエリ出力に列名を表示しません。SQLiteで列名の表示を強制するには、一連のコマンドを実行できます。

まず、出力のヘッダー表示を切り替える.headerコマンドを使用します

.header on

次に、.modeコマンドを使用して出力モードを`column`に設定します。これにより、ヘッダーが対応する列の値と位置合わせされるようになります

.mode column
結果を表示

これで、クエリを実行すると、出力表示に結果の上に列名が含まれるようになります。これにより、出力内の列に使用される名前を変更するために、オプションで列エイリアスを設定できるようになります

SELECT column1 AS 'first column' FROM my_table;

これにより、my_table内のcolumn1の各値が表示されます。出力内の列は、column1の代わりにfirst columnとして表示されます。

エイリアスの設定は、出力が名前を共有する可能性のある複数のテーブルの列名を結合する場合や、すでに名前を持たない計算された列が含まれる場合に特に役立ちます。

ORDER BYでソート順を定義する

SQLiteはデータをテーブル内に不定の順序で保存します。順序を定義する条件を指定せずにSELECTステートメントを使用してデータをクエリすると、結果の順序は不定になります。

ORDER BY句は、特定の基準に従って結果の行をソートするために使用できます。その一般的な構文は次のようになります

SELECT * FROM my_table ORDER BY <sort expression>;

これにより、my_table内のすべてのレコードのすべての列の値が表示されます。レコードは、式プレースホルダー<sort expression>に従って順序付けられます。

例として、first_namelast_namestudent_emailの列を含むstudentテーブルがあるとします。last_nameでアルファベット順に結果を表示したい場合は、次のコマンドを使用できます

SELECT * FROM student ORDER BY last_name;

結果は、last_nameの値に基づいて生徒の姓をAからZの順に表示します。

+-------------+------------+-----------+--------------------------+
id | first_name | last_name | student_email |
+-------------+------------+-----------+--------------------------+
1 | Felipe | Espinosa | felesp@university.com |
+-------------+------------+-----------+--------------------------+
2 | Bob | Smith | bobsmith@university.com |
+-------------+------------+-----------+--------------------------+
3 | Abigail | Smith | abismith@university.com |
+-------------+------------+-----------+--------------------------+
4 | Tamal | Wayne | tamalwayne@university.com|
+-------------+------------+-----------+--------------------------+

結果の順序を逆にするには、ORDER BY句の最後にDESC修飾子を追加します

SELECT * FROM student ORDER BY last_name DESC;

結果は、last_nameの値に基づいてZからAの順に表示される、前のクエリの逆になります。

+-------------+------------+-----------+--------------------------+
id | first_name | last_name | student_email |
+-------------+------------+-----------+--------------------------+
4 | Tamal | Wayne | tamalwayne@university.com|
+-------------+------------+-----------+--------------------------+
3 | Abigail | Smith | abismith@university.com |
+-------------+------------+-----------+--------------------------+
2 | Bob | Smith | bobsmith@university.com |
+-------------+------------+-----------+--------------------------+
1 | Felipe | Espinosa | felesp@university.com |
+-------------+------------+-----------+--------------------------+

複数の列でソートすることも可能です。これは、例えば姓が同じ人がいる場合に特に役立ちます。クエリは次のようになります

SELECT * FROM student ORDER BY last_name, first_name;

結果は、両方のソートを昇順で表示します。結果はまずlast_nameでAからZの順にソートされます。次に、結果はfirst_nameでアルファベット順にソートされます。last_nameが複数のレコードで同じ場合、first_nameのソートでは、アルファベット順で先頭に来る名を持つ生徒が最初に表示されます。

+-------------+------------+-----------+--------------------------+
id | first_name | last_name | student_email |
+-------------+------------+-----------+--------------------------+
1 | Felipe | Espinosa | felesp@university.com |
+-------------+------------+-----------+--------------------------+
3 | Abigail | Smith | abismith@university.com |
+-------------+------------+-----------+--------------------------+
2 | Bob | Smith | bobsmith@university.com |
+-------------+------------+-----------+--------------------------+
4 | Tamal | Wayne | tamalwayne@university.com|
+-------------+------------+-----------+--------------------------+

個別の結果を取得する

SQLiteで列の値の範囲をテーブルにクエリしたい場合は、SELECT DISTINCTバリアントを使用することでこれを実現できます。これにより、列の一意の値ごとに1つの行が表示されます。

その基本的な構文は次のとおりです

SELECT DISTINCT column1 FROM my_table;

結果は、column1の一意の値ごとに1行となります。

例えば、shoeテーブルに含まれるcolorの異なるすべての値を表示するには、次のように入力できます

SELECT DISTINCT color FROM shoe;
--------+
color |
--------+
blue |
green |
orange |
red |
yellow |
--------+

複数の列にわたる一意性を表示するには、カンマで区切ってクエリに追加の列を追加できます。

例えば、次のクエリはshoeテーブルのcolorshoe_sizeの異なるすべての組み合わせを表示します

SELECT DISTINCT color, shoe_size FROM shoe;

これにより、靴のコレクション内のcolorshoe_sizeの一意のすべての組み合わせが表示されます。

--------+------------+
color | shoe_size |
--------+------------+
blue | 11 |
blue | 7 |
green | 8.5 |
green | 4 |
green | 13.5 |
orange | 9.5 |
orange | 6 |
red | 15 |
yellow | 8 |
--------+------------+

まとめ

この記事では、SQLiteテーブルからデータを返すためのSELECTコマンドの基本について紹介しました。コマンドの動作を変更するオプションの句は他にも多数あり、それらを使用すると結果を希望する仕様に制御できます。今後の記事では、これらの修飾子について詳しく掘り下げ、SELECTの有用性をさらに高めていきます。

著者について
Alex Emerich

Alex Emerich

アレックスは、典型的なバードウォッチング好き、ヒップホップ好き、読書家であり、データベースについて書くことも楽しんでいます。彼は現在ベルリンに住んでおり、レオポルド・ブルームのように街を目的もなく歩いている姿を見かけることができます。
© 2025 prisma.dokyumento.jp. All rights reserved.