こんちには、でじ冒です。
データベースの操作やデータの抽出において欠かせないSELECT文
SELECT文は条件指定やソート、集計など、さまざまな機能があります。データベースから必要な情報を正確に取得するためには、使い方をマスターすることが重要です。この記事では、SELECT文の基礎を詳しく解説します。
今回の記事は次のような方にオススメ!
- SQLでデータ検索をしたい
- SELECT文のオプションを理解したい
基本構文
SELECT文とは
SELECT文は、データベースからデータを取得するためのSQLのコマンドです。
テーブル内の特定の列や全体のデータを選択し、結果を取得するために使用します。SQLの中でも基本的な要素であり、データベース操作の中核となるものです。
データベースってなんだっけ?という方はこちらの記事をぜひ。
SELECT文の使用方法
下記は、SELECT文を使用して usersテーブルからname列とage列のデータを取得しています。
SQL
SELECT name, age
FROM users;
SELECTの後に取得したい列名を指定します。取得したい列名が複数ある場合は、カンマ区切りで指定します。そして、FROM句の後に対象のテーブル名を指定します。
ワイルドカード(*
)を使用すると、すべての列のデータを取得することができます。また、WHERE句やORDER BY句、LIMIT句などを追加してデータのフィルタリングやソート、制限を行うことも可能です。
WHERE句やORDER BY句などは、このあと詳しく説明するよ!
データの取得(別名の使用)
上記で列名を指定してデータを取得する方法を学びましたが、実はAS句を使用すると、取得した列の結果に別の名前を割り当てることができます。取得結果の表示名をわかりやすくなるメリットがあります。
下記は、取得したname列の結果にfull_nameという別名を割り当てています。
SQL
SELECT name AS full_name
FROM users;
データのフィルタリング
WHERE句
SELECT文でデータをフィルタリングするには、WHERE句を使用します。
WHERE句はSELECT文のFROM句の後に記述され、条件式を指定します。条件式は真または偽を評価する式であり、条件を満たす行だけが取得されます。
下記は、usersテーブルからage列が18より大きい行だけが取得しています。
SQL
SELECT *
FROM users
WHERE age > 18;
比較演算子の種類と使い方
上記で「 >」が登場しましたが、これを比較演算子と言います。WHERE句で使用される条件式の一部として使用されます。
以下は、よく使用される比較演算子です。
演算子 | 用途 | 例 |
= | 等しいことを比較する | age = 25 |
<> または!= | 等しくないことを比較する | age <> 30 |
< | より小さいことを比較する | age < 40 |
> | より大きいことを比較する | age > 20 |
<= | 以下であることを比較する | age <= 50 |
>= | 以上であることを比較する | age >= 18 |
BETWEEN | 範囲内であることを比較する | age BETWEEN 20 AND 30 |
LIKE | パターンに一致することを比較する | name LIKE ‘J%’(Jで始まる名前) |
これらの比較演算子を使って、データを条件に基づいてフィルタリングすることができます。
データのソート
ORDER BY句
SELECT文でデータのソート順を指定するためには、ORDER BY句を使用します。
ORDER BY句はSELECT文の最後に記述されます。指定した列を基準にしてデータを昇順または降順で並び替えることができます。
昇順:小さい値から大きい値
降順:大きい値から小さい値
ORDER BY句でのソート順は、昇順がデフォルトです。昇順でソートする場合、列名の後に何も指定せずに使用します。
以下は、age列を昇順でデータをソートしています。
SQL
SELECT *
FROM users
ORDER BY age;
降順でソートする場合は、列名の後にDESCキーワードを指定します。
以下は、age列を降順でデータをソートしています。
SQL
SELECT *
FROM users
ORDER BY age DESC;
複数列によるソート
ORDER BY句では、複数の列を指定してソートすることも可能です。
列名をカンマで区切って指定します。最初に指定した列を基準にソートされ、同じ値の場合は次に指定した列でソートされます。
以下は、age列でまず昇順にソートし、同じageの場合はname列で昇順にソートしています。
SQL
SELECT *
FROM users
ORDER BY age, name;
データの絞り込み
DISTINCT句
SELECT文で重複する値を削除するためには、DISTINCT句を使用します。
SELECT文の列名の前にDISTINCT句を記述することで、取得結果から重複した値が排除されます。
以下は、customersテーブルのcity列から重複する値を削除して、一意の都市名のみを取得します。
SQL
SELECT DISTINCT city
FROM customers;
LIMIT句
SELECT文で取得する結果の制限を設定するためには、LIMIT句を使用します。
LIMIT句の後に取得するレコードの数を指定します。
以下は、productsテーブルから最初の10件のレコードのみを取得しています。
SQL
SELECT *
FROM products LIMIT 10;
OFFSET句
SELECT文で結果の開始位置を指定するためには、OFFSET句を使用します。
OFFSET句の後にスキップするレコードの数を指定します。
以下は、productsテーブルから結果の21番目から30番目のレコードを取得しています。
SQL
SELECT *
FROM products LIMIT 10 OFFSET 20;
データの集約
集計関数
SELECT文で複数の行を集約し、集計値を計算するためには集計関数を使用します。
以下は、よく使用される集計関数です。
関数 | 用途 |
COUNT | 行の数をカウント |
SUM | 数値列の合計を計算 |
AVG | 数値列の平均を計算 |
MAX | 列の最大値を取得 |
MIN | 列の最小値を取得 |
以下は、productsテーブルのpriceの最大値を取得しています。
SQL
SELECT MAX(price)
FROM products;
GROUP BY句
SELECT文でデータをグループ化するためにはGROUP BY句を使用します。
GROUP BY句はSELECT文の最後に記述されます。グループ化するための列名を指定することで、その列の値が同じ行がグループ化されます。使用することで、グループごとの集計や集合演算を行うことができます。
以下は、productsテーブルのcategory列でデータをグループ化し、それぞれのカテゴリごとの行数を取得しています。
SQL
SELECT category, COUNT(*)
FROM products GROUP BY category;
HAVING句
GROUP BY句と組み合わせて、グループ化された結果に対する条件を指定するためには、HAVING句を使用します。
HAVING句はSELECT文の最後に記述されます。WHERE句と同様に、条件式を記述し、グループ化された結果に対してフィルタリングを行います。
以下は、productsテーブルのカテゴリごとの平均価格が1000を超えるグループのみを取得しています。
SQL
SELECT category, AVG(price)
FROM products GROUP BY category HAVING AVG(price) > 1000;
おわりに
今回は、SQLのSELECT文について詳しく解説しました。
SELECT文はデータベース操作において非常に重要な役割を果たし、データの取得や条件の指定、ソートや制限の設定など、さまざまな操作が可能です。
引き続きSQLの学習を進め、データベース操作のスキルを向上させましょう。
コメント