シェア

はじめに

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

この記事では、SELECTコマンドの基本について説明し、それを使用してデータを返す方法をデモンストレーションします。SELECTは、さらに高度なユースケースを多数処理できますが、基本的なコマンド構造を強調するために、デモンストレーションではより単純な形式に限定します。

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

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

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

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

  • SELECTSELECTコマンド自体。この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_tablecolumn1の各値が表示されます。出力の列は、column1ではなくfirst columnとして表示されるようになります。

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

ORDER BYを使用したソート順序の定義

SQLiteは、テーブルにデータを不特定の順序で格納します。SELECTステートメントを使用して順序を定義する基準なしにデータをクエリすると、結果の順序は不特定になります。

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

SELECT * FROM my_table ORDER BY <sort expression>;

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

例として、first_namelast_name、およびstudent_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バリアントを使用することでこれを実現できます。これにより、列の一意の値ごとに単一行が表示されます。

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

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

アレックス・エメリッヒ

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