MySQL テーブルから最初の行を選択する
- MySQL テーブルから最初の行を選択する
-
LIMIT句を使用して、列に複数のインスタンスがある MySQL テーブルから最初の行を取得する -
IN()、MIN()、およびGROUP BYを使用して、MySQL テーブルから各グループの最初の行を取得する -
LIMITとORDER BYを使用して、MySQL テーブル全体から最初の行を選択する
今日は、MySQL テーブルから最初の行を選択する 3つのシナリオとその解決策について説明します。
最初のシナリオでは、特定の列に複数のインスタンスがある MySQL テーブルから最初の行を取得する方法を学習します。 たとえば、manager テーブルから first_name が Mehvish である最初の行を選択します。
2 番目のシナリオでは、テーブルの各グループの最初の行を選択します。 ここでは、グループに関してデータを取得する方法についても説明します。 3 番目のシナリオでは、MySQL テーブル全体から最初の行を取得する方法を確認します。
MySQL テーブルから最初の行を選択する
コード例に入る前に、manager_id、first_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_name が Saira である最初の行を取得します。
クエリ:
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_name が Saira である 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_name が Saira である最初の 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 です。
次の図を参照してください。

LIMIT row_count と LIMIT 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)
この例では、さまざまな関数と句を使用して目的の結果を取得します。
IN()- この関数を使用すると、WHERE句で複数の値を指定できます。 式がIN()リスト値のいずれかと等しい場合、1を返します。GROUP BY- 同じ値を含むレコードをグループ化します。主に集計関数で使用されます。たとえば、MIN()、MAX()、COUNT()などです。MIN()- クエリ内の属性 (列) の最小値を返します。Subquery- 別のクエリ内にネストされています。たとえば、SELECT、UPDATE、DELETEなどです。サブクエリを別のサブクエリにネストすることもできます (さまざまなクエリの実行順序を理解する必要があります)。 条項)。
LIMIT と ORDER BY を使用して、MySQL テーブル全体から最初の行を選択する
LIMIT 句を使用して、順序や条件に関係なく、テーブル全体から最初の行を選択します。
クエリ:
SELECT * from manager LIMIT 1;
出力:
+------------+------------+-----------+
| manager_id | first_name | last_name |
+------------+------------+-----------+
| 1 | Mehvish | Ashiq |
+------------+------------+-----------+
1 row in set (0.00 sec)
LIMIT で ORDER 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)
