第4章 SELECTステートメント
まず、サンプルとして利用するテーブルを定義します。ここでは、従業員情報を保持する「Employees」テーブルとします。このテーブルは以下のような構造を持つとしましょう。
CREATE TABLE Employees (
id INT PRIMARY KEY,
first_name VARCHAR(30),
last_name VARCHAR(30),
birth_date DATE,
join_date DATE,
department VARCHAR(20)
);
次に、データをこのテーブルに挿入します。挿入は以下のようにINSERT INTOクエリを使用して行います。
INSERT INTO Employees (id, first_name, last_name, birth_date, join_date, department)
VALUES (1, 'John', 'Doe', '1980-01-15', '2020-01-01', 'Sales'),
(2, 'Jane', 'Doe', '1982-02-20', '2021-03-01', 'HR'),
(3, 'Alice', 'Johnson', '1985-05-10', '2022-04-01', 'Marketing'),
(4, 'Bob', 'Smith', '1978-11-12', '2019-11-01', 'Engineering');
ここで、すべての従業員のデータを取得するには、SELECTクエリを使用します。以下のクエリはテーブルからすべてのデータを取得します。
SELECT * FROM Employees;
id | first_name | last_name | birth_date | join_date | department |
---|---|---|---|---|---|
1 | John | Doe | 1980-01-15 | 2020-01-01 | Sales |
2 | Jane | Doe | 1982-02-20 | 2021-03-01 | HR |
3 | Alice | Johnson | 1985-05-10 | 2022-04-01 | Marketing |
4 | Bob | Smith | 1978-11-12 | 2019-11-01 | Engineering |
取得するカラムを指定する
従業員の名前と所属部署だけを取得するには以下のようにします。
SELECT first_name, last_name, department FROM Employees;
+------------+-----------+-------------+ | first_name | last_name | department | +------------+-----------+-------------+ | John | Doe | Sales | | Jane | Doe | HR | | Alice | Johnson | Marketing | | Bob | Smith | Engineering | +------------+-----------+-------------+
取得する条件を指定する
エンジニアリング部門に所属する従業員だけを取得するには、以下のようにWHERE句を用いて条件を指定します。
SELECT * FROM Employees WHERE department = 'Engineering';
+----+------------+-----------+------------+------------+-------------+ | id | first_name | last_name | birth_date | join_date | department | +----+------------+-----------+------------+------------+-------------+ | 4 | Bob | Smith | 1978-11-12 | 2019-11-01 | Engineering | +----+------------+-----------+------------+------------+-------------+
取得する条件を複数指定する
姓がDoe、名がJohnの両方の条件を満たす従業員を取得するには、以下のようにANDで条件を指定します。
SELECT * FROM Employees WHERE first_name = 'John' AND last_name = 'Doe';
+----+------------+-----------+------------+------------+------------+ | id | first_name | last_name | birth_date | join_date | department | +----+------------+-----------+------------+------------+------------+ | 1 | John | Doe | 1980-01-15 | 2020-01-01 | Sales | +----+------------+-----------+------------+------------+------------+
並び替えて取得する(昇順)
指定したカラムで並び替えて取得するには、以下のようにORDER句を用います。
SELECT * FROM Employees ORDER BY join_date;
+----+------------+-----------+------------+------------+-------------+ | id | first_name | last_name | birth_date | join_date | department | +----+------------+-----------+------------+------------+-------------+ | 4 | Bob | Smith | 1978-11-12 | 2019-11-01 | Engineering | | 1 | John | Doe | 1980-01-15 | 2020-01-01 | Sales | | 2 | Jane | Doe | 1982-02-20 | 2021-03-01 | HR | | 3 | Alice | Johnson | 1985-05-10 | 2022-04-01 | Marketing | +----+------------+-----------+------------+------------+-------------+
並び替えて取得する(降順)
指定したカラムで並び替えて取得するには、以下のようにORDER句にDESCを指定します。
SELECT * FROM Employees ORDER BY join_date DESC;
+----+------------+-----------+------------+------------+-------------+ | id | first_name | last_name | birth_date | join_date | department | +----+------------+-----------+------------+------------+-------------+ | 3 | Alice | Johnson | 1985-05-10 | 2022-04-01 | Marketing | | 2 | Jane | Doe | 1982-02-20 | 2021-03-01 | HR | | 1 | John | Doe | 1980-01-15 | 2020-01-01 | Sales | | 4 | Bob | Smith | 1978-11-12 | 2019-11-01 | Engineering | +----+------------+-----------+------------+------------+-------------+
件数を数える
従業員の数を数えるには、COUNT関数を用います。
SELECT COUNT(*) FROM Employees;
+----------+ | COUNT(*) | +----------+ | 4 | +----------+
グループ毎に件数を数える
部署ごとに従業員の数を取得するには、以下のようにGROUP句でグルーピングしたいカラムを指定します。
SELECT department, COUNT(*) FROM Employees GROUP BY department;
+-------------+----------+ | department | COUNT(*) | +-------------+----------+ | Sales | 1 | | HR | 1 | | Marketing | 1 | | Engineering | 1 | +-------------+----------+
取得する件数を指定する
最も早く入社した従業員を取得するには、ORDER句で並び替えて、LIMIT句で取得する件数を指定します。
SELECT * FROM Employees ORDER BY join_date LIMIT 1;
+----+------------+-----------+------------+------------+-------------+ | id | first_name | last_name | birth_date | join_date | department | +----+------------+-----------+------------+------------+-------------+ | 4 | Bob | Smith | 1978-11-12 | 2019-11-01 | Engineering | +----+------------+-----------+------------+------------+-------------+