MySQL のデータフィルタリングとソート

MySQLBeginner
オンラインで実践に進む

はじめに

この実験では、MySQL でデータをフィルタリングおよびソートするための基本的な技術を学びます。特定の条件に基づいてデータをフィルタリングするための WHERE 句の使い方、ORDER BY を使って結果をソートする方法、および LIMIT 句を使って出力を制限する方法を学びます。これらのスキルは、すべてのデータベースユーザーにとって基本的であり、必要なデータを望む順序で取得することができます。実践的な演習を通じて、これらの重要なデータベース操作に関する実際の経験を得て、MySQL で効果的にデータを照会して整理する方法を理解します。

WHERE による基本的なデータフィルタリング

このステップでは、特定の条件に基づいてデータをフィルタリングするための WHERE 句の使い方を学びます。WHERE 句は SQL の最も重要な機能の 1 つであり、基準を満たすデータのみを取得することができます。

まず、MySQL に接続してデータベースを選択しましょう。

sudo mysql -u root

接続後は、以下のコマンドを実行します。

USE bookstore;

単純な比較演算子

まずは基本的な比較演算子から始めましょう。

-- 40 ドル以上の価格の本
SELECT title, price
FROM books
WHERE price > 40;

以下のような出力が表示されるはずです。

+-------------------------+-------+
| title                   | price |
+-------------------------+-------+
| The MySQL Guide         | 45.99 |
| Advanced Database Concepts | 54.99 |
| Database Administration | 49.99 |
| The Perfect Index       | 42.99 |
+-------------------------+-------+

一般的な比較演算子には以下のものがあります。

  • = (等しい)
  • <> または != (等しくない)
  • > (より大きい)
  • < (より小さい)
  • >= (以上)
  • <= (以下)

特定の年に出版された本を検索する別の例を試してみましょう。

SELECT title, author, publication_year
FROM books
WHERE publication_year = 2023;

AND と OR の使用

複数の条件を AND と OR を使って結合することができます。

-- 2023 年に出版された技術書
SELECT title, genre, publication_year, price
FROM books
WHERE genre = 'Technical'
AND publication_year = 2023;

非常に新しい本または非常に高価な本を検索するために OR を試してみましょう。

SELECT title, publication_year, price
FROM books
WHERE publication_year = 2023
OR price >= 50;

NULL とブール値の扱い

在庫切れの本を検索するには、以下のようにします。

SELECT title, price, in_stock
FROM books
WHERE in_stock = FALSE;

LIKE によるパターンマッチング

このステップでは、LIKE 演算子を使ったパターンマッチングを学びます。これにより、テキストデータ内のパターンを検索することができます。探している正確なテキストがわからない場合に特に役立ちます。

LIKE 演算子は 2 つの特殊文字を使用します。

  • % は 0 文字以上の任意の文字を表します
  • _ はちょうど 1 文字を表します

いくつかの例を試してみましょう。

-- タイトルのどこかに "SQL" が含まれる本を検索する
SELECT title, author
FROM books
WHERE title LIKE '%SQL%';

このクエリは、タイトルのどこかに "SQL" が表示されるすべての本を検索します。以下のような出力が表示されるはずです。

+------------------+----------------+
| title            | author         |
+------------------+----------------+
| SQL for Beginners| Sarah Johnson  |
| SQL Mystery Tales| Jennifer White |
+------------------+----------------+

さらにいくつかのパターンマッチングを試してみましょう。

-- "The" で始まる本を検索する
SELECT title, author
FROM books
WHERE title LIKE 'The%';
-- タイトルに "Database" が含まれる本を検索する
SELECT title, author, price
FROM books
WHERE title LIKE '%Database%';

MySQL では、LIKE はデフォルトで大文字小文字を区別しません。大文字小文字を区別したい場合は、BINARY を使用できます。

-- 大文字小文字を区別した検索
SELECT title, author
FROM books
WHERE title LIKE BINARY 'The%';

ORDER BY による結果のソート

このステップでは、ORDER BY 句を使ってクエリ結果をソートする方法を学びます。これにより、データを昇順 (ASC) または降順 (DESC) に意味のある順序で並べることができます。

単一カラムのソート

まずは価格での基本的なソートから始めましょう。

-- 価格で本をソートする(デフォルトで昇順)
SELECT title, price
FROM books
ORDER BY price;

最安値から最高値の順に本が表示されます。順序を逆にするには、以下のようにします。

-- 価格で本を降順にソートする
SELECT title, price
FROM books
ORDER BY price DESC;

出力は最初に最も高価な本が表示されます。

+---------------------------+-------+
| title                     | price |
+---------------------------+-------+
| Advanced Database Concepts| 54.99 |
| Database Administration   | 49.99 |
| The MySQL Guide           | 45.99 |
| The Perfect Index         | 42.99 |
...
+---------------------------+-------+

複数カラムのソート

最初のソートカラムに重複する値がある場合に便利な複数カラムでのソートもできます。

-- ジャンルでソートし、その後各ジャンル内で価格でソートする
SELECT title, genre, price
FROM books
ORDER BY genre, price DESC;

昇順と降順のソートを混ぜることもできます。

-- ジャンルで昇順、価格で降順にソートする
SELECT title, genre, price
FROM books
ORDER BY genre ASC, price DESC;

LIMIT による結果の制限

このステップでは、クエリによって返される行数を制限するための LIMIT 句の使い方を学びます。これは、大規模なデータセットを扱う場合や、いくつかの例だけを見たい場合に特に役立ちます。

LIMIT の基本的な使い方

最も高価な 3 冊の本だけを表示するには、以下のようにします。

SELECT title, price
FROM books
ORDER BY price DESC
LIMIT 3;

3 行だけ表示されるはずです。

+---------------------------+-------+
| title                     | price |
+---------------------------+-------+
| Advanced Database Concepts| 54.99 |
| Database Administration   | 49.99 |
| The MySQL Guide           | 45.99 |
+---------------------------+-------+

オフセット付きで LIMIT を使用する

LIMIT には 2 つの数値を指定できます。オフセット(スキップする行数)とカウント(返す行数)です。

-- 最初の 3 冊の本をスキップし、次の 3 冊を表示する
SELECT title, price
FROM books
ORDER BY price DESC
LIMIT 3, 3;

これにより、4 番目、5 番目、6 番目に高価な本が表示されます。

一般的な使い方の 1 つはページネーションです。たとえば、1 ページに 5 件のアイテムを表示する「ページ 2」を表示するには、以下のようにします。

SELECT title, author, price
FROM books
ORDER BY title
LIMIT 5, 5;

これは最初の 5 件の結果(ページ 1)をスキップし、次の 5 件(ページ 2)を表示します。

すべてを組み合わせる

これまで学んだことをすべて組み合わせて、より複雑なクエリを作成してみましょう。

SELECT title, author, price
FROM books
WHERE genre = 'Technical'
AND price > 30
ORDER BY price DESC
LIMIT 3;

このクエリは、以下のことを行います。

  1. 30 ドル以上の技術書をフィルタリングする
  2. 価格で降順にソートする
  3. 上位 3 件の結果のみを表示する

まとめ

この実験では、MySQL でデータをフィルタリングしてソートするための基本的な技術を学びました。

  1. 比較演算子と論理演算子を使った WHERE 句によるデータのフィルタリング
  2. テキスト検索における LIKE 演算子によるパターンマッチング
  3. 単一カラムと複数カラムでの ORDER BY による結果のソート
  4. LIMIT と OFFSET を使った結果セットの制限

これらのスキルは、MySQL で効果的なデータの検索と整理の基礎を形成します。