MySQL テーブルから最初の行を選択する

Mehvish Ashiq 2024年2月15日
  1. MySQL テーブルから最初の行を選択する
  2. LIMIT 句を使用して、列に複数のインスタンスがある MySQL テーブルから最初の行を取得する
  3. IN()MIN()、および GROUP BY を使用して、MySQL テーブルから各グループの最初の行を取得する
  4. LIMITORDER BY を使用して、MySQL テーブル全体から最初の行を選択する
MySQL テーブルから最初の行を選択する

今日は、MySQL テーブルから最初の行を選択する 3つのシナリオとその解決策について説明します。

最初のシナリオでは、特定の列に複数のインスタンスがある MySQL テーブルから最初の行を取得する方法を学習します。 たとえば、manager テーブルから first_nameMehvish である最初の行を選択します。

2 番目のシナリオでは、テーブルの各グループの最初の行を選択します。 ここでは、グループに関してデータを取得する方法についても説明します。 3 番目のシナリオでは、MySQL テーブル全体から最初の行を取得する方法を確認します。

MySQL テーブルから最初の行を選択する

コード例に入る前に、manager_idfirst_name、および last_name をフィールドとして manager_id が主キーである manager_id テーブルを作成しましょう。

このテーブルを作成および設定するためのクエリを以下に示します。 これらを使用することもできます。

コード例:

CREATE TABLE manager (
    manager_id INT NOT NULL AUTO_INCREMENT,
    first_name VARCHAR(150) NOT NULL,
    last_name VARCHAR(150) NOT NULL,
    PRIMARY KEY(manager_id)
);

INSERT INTO manager (first_name, last_name)
VALUES
('Mehvish', 'Ashiq'),
('Saira', 'Mushtaq'),
('Thomas', 'Christopher'),
('Thomas', 'Gabrial'),
('Tahir', 'Raza'),
('Saira', 'Johny'),
('Saira', 'Daniel');

SELECT * FROM manager;

出力:

+------------+------------+-------------+
| manager_id | first_name | last_name   |
+------------+------------+-------------+
|          1 | Mehvish    | Ashiq       |
|          2 | Saira      | Mushtaq     |
|          3 | Thomas     | Christopher |
|          4 | Thomas     | Gabrial     |
|          5 | Tahir      | Raza        |
|          6 | Saira      | Johny       |
|          7 | Saira      | Daniel      |
+------------+------------+-------------+
7 rows in set (0.00 sec)

LIMIT 句を使用して、列に複数のインスタンスがある MySQL テーブルから最初の行を取得する

manager テーブルの first_name 列には、Mehvish のインスタンスが 1つ、Tahir のインスタンスが 1つ、Thomas のインスタンスが 2つ、Saira のインスタンスが 3つあります。 SELECT ステートメントを使用して、現在のテーブル データを確認できます。

次のステートメントを実行して、manager テーブルから first_nameSaira である最初の行を取得します。

クエリ:

SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 1;

出力:

+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
|          2 | Saira      | Mushtaq   |
+------------+------------+-----------+
1 row in set (0.00 sec)

first_nameSaira である 3 番目のレコードを取得したいとします。 2つの引数を指定して LIMIT 句を使用します (このチュートリアルの後半で説明します)。

クエリ:

SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 2,1;

出力:

+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
|          7 | Saira      | Daniel    |
+------------+------------+-----------+
1 row in set (0.00 sec)

first_nameSaira である最初の 2つのレコードを取得したいとします。 これは次のように行うことができます。

クエリ:

SELECT * FROM manager WHERE first_name = 'Saira' LIMIT 2;

出力:

+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
|          2 | Saira      | Mushtaq   |
|          6 | Saira      | Johny     |
+------------+------------+-----------+
2 rows in set (0.00 sec)

first_name の名前が Saira である最後の 2つのレコードも取得できます。 LIMIT 句とともに ORDER BY 句を使用します。

クエリ:

SELECT * FROM manager WHERE first_name = 'Saira' ORDER BY manager_id DESC LIMIT 2;

出力:

+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
|          7 | Saira      | Daniel    |
|          6 | Saira      | Johny     |
+------------+------------+-----------+
2 rows in set (0.00 sec)

ここで、LIMIT 句と ORDER BY 句の役割を理解することが重要です。 LIMIT 句は SELECT ステートメントで使用され、テーブルから特定の数のレコードを取得します。

LIMIT 句は、正の整数またはゼロでなければならない 1つまたは 2つの引数を取ります。 以下は、1つと 2つの引数を持つ LIMIT 句の構文です。

構文:

# Syntax with one argument
SELECT
    your_select_list
FROM
    you_table_name
WHERE
    your_condition
LIMIT row_count;

# Syntax with two arguments
SELECT
    your_select_list
FROM
    your_table_name
WHERE
    your_condition
LIMIT [offset,] row_count;

row_count は、返されるレコードの最大数を示します。一方、offset は、特定の範囲のレコードを取得する場合に使用されます。たとえば、offset 2 から row_count 4 までです。 最初の行の offset は 1 ではなく 0 です。

次の図を参照してください。

MySQL Select First Row - Limit Arguments Illustration

LIMIT row_countLIMIT 0, row_count は互いに同等であることを思い出してください。 プロジェクトの要件に応じて、ORDER BY 句はテーブル データを降順または昇順で並べ替えます。

IN()MIN()、および GROUP BY を使用して、MySQL テーブルから各グループの最初の行を取得する

この 2 番目のシナリオでは、IN() および MIN() 関数と GROUP BY 句を使用して、テーブルから各グループの最初の行を選択して取得します。

コード例:

SELECT * FROM manager
WHERE
manager_id IN (
    SELECT min(manager_id)
    FROM manager
    GROUP BY first_name
);

出力:

+------------+------------+-------------+
| manager_id | first_name | last_name   |
+------------+------------+-------------+
|          1 | Mehvish    | Ashiq       |
|          2 | Saira      | Mushtaq     |
|          3 | Thomas     | Christopher |
|          5 | Tahir      | Raza        |
+------------+------------+-------------+
4 rows in set (0.08 sec)

この例では、さまざまな関数と句を使用して目的の結果を取得します。

  1. IN() - この関数を使用すると、WHERE 句で複数の値を指定できます。 式が IN() リスト値のいずれかと等しい場合、1 を返します。
  2. GROUP BY - 同じ値を含むレコードをグループ化します。主に集計関数で使用されます。たとえば、MIN()MAX()COUNT() などです。
  3. MIN() - クエリ内の属性 (列) の最小値を返します。
  4. Subquery - 別のクエリ内にネストされています。たとえば、SELECTUPDATEDELETE などです。サブクエリを別のサブクエリにネストすることもできます (さまざまなクエリの実行順序を理解する必要があります)。 条項)。

LIMITORDER BY を使用して、MySQL テーブル全体から最初の行を選択する

LIMIT 句を使用して、順序や条件に関係なく、テーブル全体から最初の行を選択します。

クエリ:

SELECT * from manager LIMIT 1;

出力:

+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
|          1 | Mehvish    | Ashiq     |
+------------+------------+-----------+
1 row in set (0.00 sec)

LIMITORDER BY を使用して、並べ替えられたデータから最初の行を (降順で) 取得します。

クエリ:

SELECT * from manager ORDER BY first_name DESC LIMIT 1;

出力:

+------------+------------+-------------+
| manager_id | first_name | last_name   |
+------------+------------+-------------+
|          3 | Thomas     | Christopher |
+------------+------------+-------------+
1 row in set (0.00 sec)
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MySQL Table