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)